Рубрики
Схемы на Arduino

Пульсоксиметр на основе платы Arduino и датчике MAX30100 своими руками

В связи с текущей пандемией коронавируса Covid-19 резко возрос спрос на такие электронные устройства как бесконтактные термометры и пульсоксиметры (Pulse-Oximeters). В настоящее время существует достаточно много различающихся по принципу действия пульсоксиметров и на нашем сайте мы уже рассматривали измеритель пульса на Ардуино, но в этой статье мы рассмотрим создание на основе платы Arduino и датчике MAX30100 пульсоксиметра, который по принципу действия и отображения получаемых результатов будет максимально приближен к пульсоксиметрам промышленного изготовления, которые продаются в магазинах. Для этого мы и применили в данном проекте датчик MAX30100 и OLED дисплей. Также мы постарались сделать наш пульсоксиметр максимально компактным, в связи с чем мы спроектировали его на основе платы Arduino Nano.

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

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

Датчик MAX30100

Датчик MAX30100 позволяет производить измерение уровня насыщения крови кислородом (сатурация кислорода в крови, SpO2) и пульса (сердечного ритма) и передавать эту информацию микроконтроллеру по интерфейсу I2C. Таким образом, датчик содержит две интегрированные в него функции – мониторинг пульса и измерение уровня насыщения кислородом крови в неинвазивной форме.

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

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

OLED дисплей

OLED дисплеи с каждым годом находят все больше применения в современной электронике. В нашем проекте пульсоксиметра мы также решили использовать OLED дисплей поскольку все пульсоксиметры промышленного изготовления в качестве устройства отображения информации используют OLED дисплей. Мы использовали OLED дисплей с диагональю 1.3 дюйма, работающий по интерфейсу I2C. Дисплей поддерживает разрешение 128×32 пикселов и содержит управляющий чип (драйвер) SSD1306. Внешний вид такого дисплея показан на следующем рисунке.

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

Технические характеристики OLED дисплея SSD1306:

  • драйвер микросхемы OLED: SSD1306;
  • разрешение: 128 x 64;
  • угол зрения: >160°;
  • входное напряжение: 3.3V ~ 6V;
  • цвет пикселов: синий;
  • диапазон рабочих температур: -30°C ~ 70°C.

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

  1. Плата Arduino Nano (купить на AliExpress).
  2. Два подтягивающих резистора для интерфейса I2C сопротивлением 4,7 кОм (купить на AliExpress).
  3. Датчик MAX30100 (купить на AliExpress).
  4. OLED дисплей SSD1306 с разрешением 128×32 (128×64) (купить на AliExpress).
  5. Источник питания с напряжением 5V, обеспечивающим ток не менее 300mA.

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

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

Как видите, схема очень проста – контакты A5 и A4 платы Arduino Nano соединены с контактами интерфейса I2C (SDA и SCL) датчика MAX30100 и OLED дисплея с использованием двух подтягивающих резисторов.

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

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

Вначале кода программы нам необходимо подключить заголовочные файлы всех используемых библиотек, а их у нас достаточно много: MAX30100 Pulse oximeter – для работы с датчиком MAX30100, Wire.h – для работы с интерфейсом I2C, Adafruit_GFX.h – для отображения анимации на дисплее, Adafruit_SSD1306.h – для работы с драйвером дисплея, Fonts/FreeSerif9pt7b.h – для работы со шрифтами.

Также используем переменную (дефиницию) ENABLE_MAX30100, которая будет использоваться для установки бита доступности (enable bit) модуля MAX30100 в 1. Также устанавливается ширина (SCREEN_WIDTH) и высота (SCREEN_HEIGHT) OLED дисплея.

Также запрограммируем функцию onBeatDetected(), которая будет вызываться при обнаружении пульса.

В функции setup() в нашем проекте осуществляются следующие действия:

  1. Активация драйвера дисплея для работы по шине I2C.
  2. Очистка экрана дисплея, установка размера и цвета текста, установка позиции курсора.
  3. Вывод на экран дисплея приветственного сообщения «Pulse Oximeter».
  4. Установка позиции для анимации пульса.
  5. Инициализация датчика MAX30100.
  6. Установка позиции курсора для вывода значения пульса и уровня насыщения крови кислородом (spo2).

Рассмотрим код каждой из этих операций по отдельности.

Активация драйвера дисплея для работы по шине I2C.

Очистка экрана дисплея, установка размера и цвета текста, установка позиции курсора.

Вывод на экран дисплея приветственного сообщения «Pulse Oximeter».

Установка позиции для анимации пульса.

Инициализация датчика MAX30100.

Установка тока светодиодов в датчике MAX30100 и задание функции вызова при обнаружении пульса.

Получение значения пульса (BPM) и уровня насыщения крови кислородом (SPO2).

Переходим к самому интересному — тестированию работы проекта.

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

Схему проекта мы собрали на компактной предварительно сформированной печатной плате (Vero board). После сборки аппаратной части проекта и загрузки программу в плату Arduino можно приступать к тестированию работы проекта. Без отсутствия данных (палец не прислонен к датчику) на экране OLED дисплея показываются нулевые показания.

Когда мы прислонили палец, на экране отобразился уровень насыщенности кислорода в крови (SPO2) 97% и частота пульса, равная 82 ударам в минуту.

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

Комментарии к коду программу кратко поясняют суть отдельных команд.

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

6 ответов к “Пульсоксиметр на основе платы Arduino и датчике MAX30100 своими руками”

Добрый день, есть ли у вас структурная схема и электрическая-принципиальная для данного пульсоксиметра с пояснениями?

Добрый вечер. К сожалению нет, все что есть изложено в статье.

Ну вроде на схеме показано куда их нужно подключить. В чем конкретно вопрос?

Захотел собрать Вашу схему пульсокиметра,но! Компиляция останавливается на 240 строке и все.пишет:
«hulsoksimetr^240:3:error:expected «;»before «display»
exit stanus 1 и все.а жаль хотел бы собрать.

В 236 строке была пропущена «;» в конце строки, исправил опечатку, теперь подобной ошибки возникать не должно

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

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