ЭФО предлагает со своего склада новую серию преобразователей интерфейсов USB UART компании FTDI FT232RNL-REEL

Делаем пульсоксиметр и фотоплетизмограф на микроконтроллере ATtiny85

ATtiny85 SSD1306 MAX30102

Jeff Magee

create.arduino.cc

Примечание: прибор не предназначен для использования в медицинских целях.

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Устройство позволяет измерять частоту пульса, уровень кислорода в крови и динамический график сердечного ритма – фотоплетизмограмму.

Arduino-проект, получивший название tinyPulsePPG (Рисунок 1), реализован на микроконтроллере (МК) Microchip ATtiny85 и в режиме реального времени отображает динамическую фотоплетизмограмму (график сердечного ритма), частоту пульса и значения SpO2, которые позволяет оценить процентное содержание кислорода в крови. В приборе используется OLED дисплей с разрешением 128×32 точки на контроллере SSD1306 и модуль цифрового датчика MAX30102 компании Maxim. Следует заметить, что расчет значения SpO2 очень приблизительный, никаких калибровок не производилось.

Пульсоксиметр и фотоплетизмограф на микроконтроллере ATtiny85
Рисунок 1. Пульсоксиметр и фотоплетизмограф на микроконтроллере ATtiny85.

Основной целью проекта является демонстрация возможности реализовать функциональное устройство на МК с объемом оперативной памяти 512 Байт. Это означает, что данные, поступающие  от датчика MAX30102, должны обрабатываться на лету. Большинство подобных проектов на Arduino работают иначе: сначала считываются примерно 100 сэмплов, а затем обрабатывают их.

Аппаратная часть и работа прибора

Принципиальная схема прибора изображена на Рисунке 2. МК ATtiny85 настроен на работу с тактовой частотой 16 МГц с использованием ядра ATtinyCore для среды Arduino. Дополнительную информацию по настройке и загрузке Arduino программ в МК ATtiny85 смотрите в [1]. Следовательно, согласно спецификации на МК, напряжение питания должно быть больше 4.5 В. Тем не менее, в ходе проверки МК показал стабильную работу от Li-Ion (Li-Po) аккумулятора в диапазоне напряжений 3.7 В – 4.2 В.

Принципиальная схема пульсоксиметра на МК ATtiny85.
Рисунок 2. Принципиальная схема пульсоксиметра на МК ATtiny85.

Устройство собрано на макетной плате, но можно применить и монтажную плату для быстрого прототипирования. Модуль пульсоксиметра на датчике MAX30102 и OLED дисплей подключаются к микроконтроллеру по интерфейсу I2C.

Собрав схему и запрограммировав МК, после подачи питания на дисплее прибора на дисплее вы увидите надпись «PLACE FINGER», а также дополнительную информацию о напряжении питания и режиме работы (Рисунок 3).

Пульсоксиметр и фотоплетизмограф на микроконтроллере ATtiny85
Рисунок 3. Включение пульсоксиметра в режиме работы
без фильтрации данных (RAW) по инфракрасному
светодиоду датчика (IR).

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

 

 

Красный светодиод мигает с частотой сердцебиения, дисплей обновляется каждые 50 мс. Единственная кнопка в приборе предназначена для пробуждения системы, когда она переходит в спящий режим (через 10 секунд, если на датчик не активен), а также для переключения между четырьмя режимами работы. Четыре режима работы позволяют пользователю наблюдать форму сигнала отдельно на красном и инфракрасном светодиоде датчика. В режиме работы «RAW» на дисплее отображается график сердечного ритма без фильтрации (усреднения) данных. В режиме «Avg» график сердечного ритма строится по усредненным данным (Рисунок 4). Форма сигнала сердечного ритма в этом режиме видна на видео ниже.

Пульсоксиметр и фотоплетизмограф на микроконтроллере ATtiny85
Рисунок 4. Включение пульсоксиметра в режиме работы
с усреднением данных (Avg) по инфракрасному
светодиоду датчика (IR).

Программная часть

Проблема с драйвером датчика MAX30102 заключается в том, что используемый в приборе датчик выпускается на плате MH-ET LIVE. В спецификации на датчик подразумевается, но не указывается явно, что LED1 – красный светодиод, LED2 – инфракрасный (ИК). Однако, если сигнал управления на LED1 равен 0, красный светодиод остается включенным (как на Рисунке 3), если же сигнал управления на LED2 равен 0, то красный светодиод гаснет. Очевидный вывод состоит в том, что LED1 – это ИК светодиод, а LED2 – красный, который также участвует в измерениях уровня насыщения крови кислородом (см. описание ниже). Мы упоминаем этот момент по причине того, что самый распространенный драйвер датчика MAX30102 для проектов на Arduino – это драйвер SparkFun 3010x, в котором однозначно определено, что LED1 – красный, LED2 – ИК. Это может быть справедливо для модулей с датчиком серии MAX30105, установленных на платах SparkFun, но, похоже, не относится к датчику MAX30102 на плате MH-ET LIVE.

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

Насыщенный и ненасыщенный гемоглобин имеют разные характеристики поглощения света для красных и ИК длин волн. На этом принципе основана работа датчиков, таких как MAX30102. В вычислениях используется следующее соотношение:

R = (AC_red/DC_red)/(AC_IR/DC_IR)

где AC_xxx является переменной составляющей сигнала xxx, а DC_xxx является постоянной составляющей сигнала xxx. В приборе вычисляются два значения R. Верхнее значение на дисплее (следующее после частоты пульса) вычисляется по классической формуле:

R = 104 - 1.7 × R

Нижнее значение вычисляется с помощью таблицы из Arduino библиотеки драйвера, которая является приближением  формулы:

-45.060 × R × R + 30.354 × R + 94.845

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

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

Например, дикротические выемки, которые можно увидеть на полученном с помощью прибора графике сердечного ритма (Рисунок 1) – «второе движение вверх на нисходящей части траектории, соответствующее увеличению давления в аорте при закрытии аортального клапана. – словарь Merriam Webster». Автор заметил, что если эти дикротические выемки более ярко выраженные – у более молодых людей – они могут преодолеть фильтрацию второго уровня и привести к ошибочному выходному сигналу детектора пульса, который, по сути, ищет пики и впадины в сигнале. Работа над проектом продолжается!

Исходный код (скетч Arduino), необходимые библиотеки, проект корпуса (Рисунок 5) для печати на 3D принтере доступны для скачивания в разделе загрузок.

Пульсоксиметр и фотоплетизмограф на микроконтроллере ATtiny85
Рисунок 5. Простой корпус для прибора, напечатанный на 3D принтере.

Дополнительно автор добавил версию прибора (nanoPulsePPG) для стандартных плат Arduino и протестировал работу на плате Arduino Nano, но также должно работать на плате Arduino Uno. Таким образом, вы можете экспериментировать с исходным кодом и датчиком.

Загрузки

  1. Исходные коды и библиотеки для двух версий прибора, проектные файлы корпуса

Материалы по теме

  1. Настройка и загрузка Arduino программ в МК серии ATtiny (англ.)

Перевод: Vadim по заказу РадиоЛоцман

На английском языке: ATtiny85 Pulse Oximeter and Photoplethysmograph

59 предложений от 33 поставщиков
Модуль ATTINY85 Micro USB Development Board (Плата разработчика) Модуль МК ATtiny85 представляет собой универсальный микроконтроллер, который благодаря конструктивным особенностям может использоваться...
ATtiny85-20PU
Atmel
48 ₽
AliExpress
Весь мир
Плата программирования форм ATtiny13A / ATtiny25 / ATtiny45 / ATtiny85
49 ₽
Программатор ATtiny85 ATmel (13A, 25, 45, 85) MicroUSB
129 ₽
PL-1
Россия
ATtiny85-20PU (-20U)
от 220 ₽
Электронные компоненты. Бесплатная доставка по России
Для комментирования материалов с сайта и получения полного доступа к нашему форуму Вам необходимо зарегистрироваться.
Имя
Фрагменты обсуждения:Полный вариант обсуждения »
  • Повторил. Очень хороший и нужный прибор.....