Пульсоксиметр на ESP32 и датчике MAX30100


Пульсоксиметр – это медицинский прибор, который позволяет не инвазивно и безболезненно измерять уровень сатурации кислорода в крови, то есть степень ее насыщенности кислородом. Во время текущей пандемии коронавируса Covid-19 спрос на пульсоксиметры резко возрос во всем мире. На нашем сайте вы можете посмотреть все проекты, связанные с борьбой с коронавирусом.

Внешний вид пульсоксиметра на ESP32 и датчике MAX30100

В данной статье мы рассмотрим создание пульсоксиметра на основе микроконтроллера ESP32 и датчика MAX30100, который будет измерять уровень кислорода в крови и передавать эти данные в сеть интернет, используя подключение к сети Wi-Fi, поэтому вы можете получить к ним доступ из любой точки земного шара. Таким образом, врач наблюдающий за пациентом, может удаленно следить за его состоянием здоровья, не вступая в ним непосредственный контакт и не подвергаясь опасности заражения коронавирусом. Ранее на нашем сайте мы уже рассматривали проект аналогичного пульсоксиметра на основе платы Arduino. Также у нас на сайте вы можете посмотреть все проекты, связанные с медициной.

Кроме анализа состояния больного коронавирусом данный пульсоксиметр можно также использовать при таких болезнях как астма, пневмония, анемия и проблемах с сердцем.

Но при создании данного проекта имейте ввиду, что датчик MAX30100 не имеет медицинского сертификата на измерение уровня кислорода в крови, поэтому применять описанный здесь проект пульсоксиметра следует с осторожностью, проверяя периодически его показания сертифицированным для этих целей медицинским прибором.

Датчик MAX30100

В датчик MAX30100 интегрированы модули для измерения уровня кислорода в крови и измерения частоты сердечного ритма (пульса). К микроконтроллерам его можно подключить по интерфейсу I2C.

Датчик содержит фотодетекторы и оптические элементы, в которых производится модуляция излучения красного или зеленого светодиодов импульсами. Ток светодиодов можно настроить в диапазоне от 0 до 50mA. На следующем рисунке представлен внешний вид датчика MAX30100.

Внешний вид датчика MAX30100

Датчик работает с уровнями напряжений от 1.8V до 5.5V. Подтягивающие резисторы для интерфейса I2C включены в состав модуля.

Необходимые компоненты

  1. Модуль ESP32 (купить на AliExpress).
  2. Датчик MAX30100 (купить на AliExpress).
  3. Аккаунт на Adafruit IO.
  4. Источник питания 5V с поддерживаемым током не менее 1A.
  5. Кабель с Micro USB на USBA.
  6. Arduino IDE.

Схема проекта

Схема пульсоксиметра на модуле ESP32 и датчике MAX30100 представлена на следующем рисунке.

Схема пульсоксиметра на модуле ESP32 и датчике MAX30100Как видите, схема очень проста. Контакты 21 и 22 модуля ESP32 подключены к контактам SDA и SCL датчика MAX30100. Запитывается вся схема от напряжения 5V.

Внешний вид собранной на макетной плате конструкции пульсоксиметра представлен на следующем рисунке.

Внешний вид собранной на макетной плате конструкции пульсоксиметра

Настройка сервиса Adafruit IO

Платформа Adafruit IO весьма удобна для реализации различных проектов тематики интернета вещей (IoT). Она предоставляет панель инструментом с колоссальным функционалом.

Для создания панели инструментов в Adafruit IO для работы с проектом нашего пульсоксиметра выполните следующую последовательность шагов:

Шаг 1. Создайте себе аккаунт на сервисе Adafruit IO, указав там свое имя, фамилию, адрес email, имя пользователя и пароль.

Регистрация на сервисе Adafruit IO

Шаг 2. После того как вы завершите свой процесс регистрации на сервисе Adafruit IO, у вас откроется шаблон панели инструментов. Нам на основе этого шаблона необходимо создать свою панель инструментов, введя ее имя и описание к ней.

Выбор вкладки IO на сервисе Adafruit IO

Создание новой панели инструментов на сервисе Adafruit IO

Шаг 3. После заполнения первоначальных данных необходимо в панели создать инструмент для построения графиков и секцию управления датчиком.

Выбор блока переключателя в сервисе Adafruit IO

Выберите блок переключателя. С его помощью мы будем включать и выключать наш пульсоксиметр.

Настройка блока переключателя в сервисе Adafruit IO

Шаг 4. Введите имя для созданного блока переключателя. Аналогичным образом выберите блок для построения графиков.

Выбор блока построения графиков в сервисе Adafruit IO

Этот блок нам необходимо выбрать два раза потому что в нашем проекте мы будем строить два графика: один для отображения частоты сердечного ритма, а второй – для отображения сатурации кислорода в крови (SpO2).

Все выбранные нами блоки в сервисе Adafruit IO

Шаг 5. На заключительном шаге нам необходимо получить ключ adafruit – в дальнейшем он нам понадобится в программе.

Получение ключа в сервисе Adafruit IO

Объяснение программы для модуля ESP32

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

В данном проекте мы будем использовать достаточно много библиотек и все они будут нам необходимы. Первым делом подключим все эти библиотеки в программе.

Далее укажем параметры подключения к сети WiFi – ее имя и пароль.

Затем укажем параметры, необходимые для работы с сервисом Adafruit io.

Данные, считываемые пульсоксиметром, будут обновляться каждые 5 секунд и передаваться на сервер io.adafruit.com на порт 1883. Имя пользователя (username) и пароль (password) должны быть сгенерированы в панели инструментов (dashboard) сервиса adafruit IO.

Затем укажем контакты модуля ESP32, по которым будет осуществляться взаимодействие по интерфейсу I2C.

Следующие три переменные будут использоваться для хранения последнего сообщения и значений bpm (частота сердечного ритма) и spo2 (уровень кислорода в крови).

Протокол MQTT работает по принципу издатель-подписчик. В нашем проекте устройство, которое передает данные на сервер Adafruit, выступает в качестве издателя, а сам сервер Adafruit IO выступает в роли подписчика. Таким образом, всегда когда устройство публикует новые данные, сервер, поскольку он подписан на их получение, принимает эти данные и выполняет необходимые действия. Более подробно о работе протокола MQTT вы можете прочитать в этой статье.

Аналогичные процессы происходят если сервер публикует данные, а устройство подписано на их получение. В нашем проекте устройство передает данные SPO2 и BPM на сервер, он публикует их, также устройство считывает состояние переключателя ON-OFF с сервера, таким образом, оно подписано на получение этих данных о состоянии переключателя.

Вся эта модель издатель-подписчик запрограммирована в следующих строках кода:

В функции void setup() мы инициализируем последовательную связь со скоростью 115200, интерфейс I2C, соединимся с сетью WiFi в соответствии с ранее указанными параметрами доступа к ней (имя и пароль), начнем процесс подписки протокола MQTT на данные о состоянии переключателя (ранее созданный нами переключатель на панели инструментов Adafruit IO).

После этого датчик max30100 начнет работать с установленным током светодиодов. Данный ток можно настраивать в заголовочных файлах (header files) датчика MAX30100. Также начинает работу функция измерения частоты сердечного ритма. После всех этих сделанных настроек работа датчика MAX30100 останавливается.э

В функции void loop() открывается соединение MQTT и модель издатель-подписчик проверяется каждые 5000 миллисекунд. В данном случае, если переключатель включен, то наш пульсоксиметр начинает измерять данные частоты сердечного ритма и уровня кислорода в крови и публиковать их на сервере. Если переключатель выключен, то все задачи, выполняемые нашим пульсоксиметром, временно приостанавливаются.

Тестирование работы пульсоксиметра

После того как схема собрана и программа загружена в модуль ESP32, можно приступать к тестированию работы проекта. Убедитесь в том, что в программе вы изменили настройки для входа в сеть Wi-Fi и для доступа к сервису Adafruit на свои.

Тестирование работы пульсоксиметра

После загрузки кода программы в модуль пульсоксиметр должен начать свою работу. Как видим на рисунке ниже, уровень кислорода в крови составляет 96%, а частота сердечного ритма колеблется в диапазоне от 78 до 81 удара в минуту. Также отображается время когда были считаны эти данные.

Результаты работы пульсоксиметра на сервисе Adafruit IO

Более подробно работу проекта вы можете посмотреть на видео, приведенном в конце статьи.

Исходный код программы (скетча)

Видео, демонстрирующее работу проекта

Источник статьи

(Проголосуй первым!)
Загрузка...
1 281 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *