В наши дни вирус COVID19 заставляет людей уделять больше внимания своему здоровью. Одним из наиболее важных параметров, на которые влияет вирус, является уровень кислорода в крови. Пульсоксиметр измеряющий этот показатель можно приобрести, благо он стоит не дорого, а можно сделать самостоятельно.
Инструменты и материалы:
-ESP32 или любой другой MCU, который работает с Arduino IDE, такой как платы ESP8266 или Ардуино;
-Модуль пульсоксиметра MAX30100;
-OLED-дисплей SSD1306;
-Макетная плата;
-Перемычки;
Шаг первый: подготовка модуля MAX30100
Принцип работы модуля следующий: он посылает красный и инфракрасный свет через кончик пальца пользователя, затем измеряет отраженный свет и выполняет некоторую обработку сигналов. Чем больше кислорода содержится в крови, тем больше инфракрасного излучения она поглощает, а также большее количество кислорода в крови пропустит через нее больше красного света.
Этот модуль отправляет данные на микроконтроллер через соединение I2C.
В продаже есть две версии MAX30100: зеленый и фиолетовый.
Фиолетовый уже готов к использованию, зеленый необходимо доработать.
Вкратце, I2C этого модуля имеет ВЫСОКИЙ уровень 1,8 В, в то время как Arduino рассматривает как минимум 2 В как ВЫСОКИЙ. Следовательно, они не могут правильно обмениваться данными.
На схеме MAX30100 можно увидеть, что SDA и SCL подтянуты до 1,8 В резистором. Поэтому, если отключить резисторы от 1,8 В и подключить их к бортовому стабилизатору 3,3 В, проблема будет решена.
Для этого разрываем дорожку отмеченную красной линией. Далее перемыкаем два контакта отмеченные синим цветом.
Если эти два шага выполнены правильно, то модуль готов к использованию.
Шаг второй: схема и сборка
Схема устройства несложная.
ESP32 D22 ----> MAX30100 SCL
ESP32 D21 ----> MAX30100 SDA
ESP32 GND ----> MAX30100 GND
ESP32 3,3 В -----> MAX30100 VIN
OLED VDD -----> ESP32 3,3 В
OLED GND -----> ESP32 GND
OLED SCL -----> ESP32 D22
OLED SDA ----> ESP D21
Собирает устройство мастер на макетной плате. В принципе этого достаточно для его полноценной работы, но при желании можно поместить пульсоксиметра в подходящий корпус.
Шаг третий: подготовка Arduino IDE и добавление необходимых библиотек
Чтобы запрограммировать ESP32 с помощью Arduino IDE, сначала нужно добавить в приложение платы esp32. Для этого нужно выполнить следующие действия:
1) Откройте Arduino IDE, перейдите в меню Файл> Настройки> Дополнительные URL-адреса диспетчера плат и вставьте эту ссылку: https://dl.espressif.com/dl/package_esp32_index.json
Подтвердите действие "ОК".
2) В IDE перейдите в Инструменты> Доска> Менеджер доски.
Введите ESP32 в поле поиска и выберите установку для ESP32 от Espressif Systems.
3) Теперь ESP32 добавлен в среду IDE, и можно выбрать плату в качестве целевого устройства для загрузки программы.
Для этого:
Перейдите в Инструменты> Плата> ESP32 Arduino> Модуль ESP32 Dev
Если все сделано правильно, в правом нижнем углу будет написан тип платы (ESP32 Dev Module) как на картинке.
Теперь нужно добавить необходимые библиотеки в Arduino IDE.
Чтобы использовать модуль MAX30100, добавляем MAX30100_PulseOximeter.h, а для OLED-дисплея добавляем Adafruit_SSD1306.h и Adafruit_GFX.h
Для этого нужно перейти в Инструменты> Управление библиотеками, найти там эти библиотеки и установить.
С помощью библиотеки Adafruit_SSD1306.h и библиотеки Adafruit_GFX.h вместе можно управлять экраном.
Чтобы создать момент ssd1306, который определен в библиотеке (имя «OLED» может быть любым, но оно будет использоваться в остальной части кода), он должен быть вне раздела настройки или раздела цикла:
Adafruit_SSD1306 OLED = Adafruit_SSD1306(128, 64, &Wire);
128 и 64 - это ширина и длина дисплея
Чтобы инициализировать экран он должен быть в разделе настройки:
OLED.begin (SSD1306_SWITCHCAPVCC, 0x3C);
0x3c - это I2C-адрес дисплея по умолчанию.
Чтобы поместить курсор в нужное место:
OLED.setCursor(row pixel,column pixel);
Например, чтобы поставить курсор в среднее положение:
OLED.setCursor (32,64);
Чтобы распечатать что-нибудь на экране:
OLED.print ();
Чтобы изменить размер шрифта:
OLED.setTextSize(2); it can be 1 or 2
Чтобы очистить буфер:
OLED.clearDisplay ();
(Все, что вы хотите напечатать на экране, сначала помещается в буфер)
Чтобы обновить экран:
OLED.display ();
Теперь рассмотрим библиотеку MAX30100.
Создать объект пульсоксиметра для использования в коде с желаемым именем (например, max_sensor):
PulseOximeter max_sensor;
Чтобы дать команду модулю на измерение:
max_sensor.update ();
Чтобы получить данные пульса:
max_sensor.getHeartRate ();
Чтобы узнать уровень кислорода в крови:
max_sensor.getSpO2 ();
Шаг четвертый: код
В этом шаге мастер разъясняет код и какие в него необходимо внести изменения при необходимости.
Прежде всего, нужно включить библиотеки:
#include <Wire.h> // Arduino I2C library
#include <Adafruit_GFX.h> // needed for OLED display
#include <Adafruit_SSD1306.h> // needed for OLED display
#include "MAX30100_PulseOximeter.h" // MAX30100 library
Отчетный период max30100 может быть определен в коде. Например, 100 означает, что каждые 100 мс частота пульса и уровень кислорода будут обновляться.
#define REPORTING_PERIOD_MS 100
Создаем переменную для записи времени между чтениями MAX30100:
uint32_t lastReportTime = 0;
[Определяем функцию onBeatDetected:
void onBeatDetected()
{
Serial.println("Beat!");
}
Согласно предыдущему шагу настройки следующие:
OLED.begin(SSD1306_SWITCHCAPVCC, 0x3C);
Serial.begin(115200);
OLED.display();
OLED.clearDisplay();
OLED.setTextSize(2);
OLED.setTextColor(SSD1306_WHITE);
OLED.setCursor(0,0);
OLED.display();
delay(1000);
Весь код можно скачать ниже.
После программирования можно пользоваться прибором.
Источник (Source)
Становитесь автором сайта, публикуйте собственные статьи, описания самоделок с оплатой за текст. Подробнее здесь.

Симпатичный бот сигнализирующий о необходимости полить растение
