Как сделать датчик сердцебиения
Digitrode
цифровая электроника вычислительная техника встраиваемые системы
Пульсоксиметр своими руками на основе датчика пульсоксиметрии MAX30100 и Arduino
В этом проекте мы будем использовать интерфейсный датчик пульсоксиметра MAX30100 с Arduino, который может измерять содержание кислорода в крови и частоту сердечных сокращений и отображать это на ЖК-дисплее 16×2. Концентрация кислорода в крови, обозначаемая как SpO2, измеряется в процентах, а частота сердечных сокращений / пульса измеряется в BPM (ударах в минуту). MAX30100 – это прекрасное решение для пульсоксиметрии и создания пульсометра.
Как работает пульсоксиметр? Кислород поступает в легкие, а затем попадает в кровь. Кровь переносит кислород к различным органам нашего тела. Основным способом переноса кислорода в нашей крови является гемоглобин. Во время считывания пульсовой оксиметрии небольшое зажимное устройство помещается на палец, ушную раковину или носок.
Маленькие лучи света проходят через кровь в пальце, измеряя количество кислорода. Это достигается путем измерения изменений в поглощении света в кислородсодержащей или дезоксигенированной крови.
Здесь-то нам и пригодится датчика пульсоксиметра, такой как MAX30100. Это датчик представляет собой интегрированный датчик для пульсоксиметрии и создания пульсометра. Он объединяет два светодиода, фотодетектор, оптимизированную оптику и обработку аналогового сигнала с низким уровнем шума для обнаружения сигналов пульса и сердечного ритма. Он работает от источников питания 1,8 В и 3,3 В и может быть отключен с помощью программного обеспечения с незначительным током в режиме ожидания, что позволяет источнику питания всегда оставаться подключенным.
Устройство имеет два светодиода: один излучает красный свет, другой излучает инфракрасный свет. Для частоты пульса нужен только инфракрасный свет. И красный свет, и инфракрасный свет используются для измерения уровня кислорода в крови.
Когда сердце накачивает кровь, происходит увеличение насыщенной кислородом крови в результате увеличения количества крови. Когда сердце расслабляется, объем насыщенной кислородом крови также уменьшается. Зная время между увеличением и уменьшением насыщенной кислородом крови, определяют частоту пульса.
Оказывается, насыщенная кислородом кровь поглощает больше инфракрасного света и пропускает больше красного света, в то время как деоксигенированная кровь поглощает красный свет и пропускает больше инфракрасного света. Это основная функция MAX30100: он считывает уровни поглощения для обоих источников света и сохраняет их в буфере, который может быть считан через I2C.
Теперь давайте подключим датчик пульсоксиметра MAX30100 к Arduino и отобразим значение в последовательном мониторе. Итак, принципиальная схема и подключение приведена далее.
Подключите Vin-контакт MAX30100 к Arduino 5V или 3.3V, GND к GND. Подключите I2C Pin, SCL и SDA MAX30100 к A5 и A4 платы Arduino.
Исходный код программы для сопряжения пульсоксиметра MAX30100 с Arduino приведен далее. Этот код будет отображать значение в последовательном мониторе. Скопируйте этот код и загрузите его на Arduino. Файлы библиотеки можно скачать по адресу https://drive.google.com/open?id=15w7Hp_Lg7FVVQoou1A56JgNDZADBuN15.
После загрузки кода вы можете положить палец на датчик MAX30100 и открыть монитор последовательного порта, чтобы увидеть значения, как показано на следующем изображении.
Теперь давайте используем ЖК-дисплей 16X2 вместо последовательного монитора, чтобы увидеть значения BPM и SpO2. Соберите схему, как показано далее.
Подключите Vin-контакт MAX30100 к Arduino 5V или 3.3V, GND к GND. Подключите контакт I2C, SCL и SDA MAX30100 к A5 и A4 Arduino. Аналогичным образом подключите вывод LCD 1, 5, 16 к GND Arduino и от 2, 15 до 5 В VCC. Аналогичным образом подключите вывод 4, 6, 11, 12, 13, 14 ЖКД к выводу 13, 12, 11, 10, 9, 8 Arduino. Используйте потенциометр 10K на выводе 3 ЖК-дисплея, чтобы отрегулировать контрастность ЖК-дисплея.
Исходный код программы:
После загрузки кода вы можете положить палец на датчик MAX30100, и на ЖК-дисплее начнут отображаться процентное содержание кислорода и количество ударов в минуту (BPM).
Датчик пульса
Товары
Пульс — это ритмичные колебания стенок кровеносных сосудов, происходящие во время сокращений сердца. Измерения пульса очень важны для диагностики сердечно-сосудистых заболеваний. Важно следить за изменениями сердечного ритма, чтобы не допустить перегрузки организма, особенно во время занятий спортом.
Содержание
Обзор датчика пульса Arduino
Пульс — это ритмичные колебания стенок кровеносных сосудов, происходящие во время сокращений сердца. Измерения пульса очень важны для диагностики сердечно-сосудистых заболеваний. Важно следить за изменениями сердечного ритма, чтобы не допустить перегрузки организма, особенно во время занятий спортом. Один из понятных параметров пульса – частота пульса. Измеряется в количестве ударов в минуту.
Рассмотрим доступный датчик для измерения сердечного ритма – Pulse Sensor (рисунок 1).
Рисунок 1. Датчик пульса
Это аналоговый датчик, основанный на методе фотоплетизмографии — изменении оптической плотности объема крови в области, на которой проводится измерение (например, палец руки или мочка уха), вследствие изменения кровотока по сосудам в зависимости от фазы сердечного цикла. Датчик содержит источник светового излучения (светодиод зеленого цвета) и фотоприемник (рис. 2), напряжение на котором изменяется в зависимости от объема крови во время сердечных пульсаций. Это график (фотоплетизмограмма или ППГ-диаграмма) имеет форму, представленную на рис. 3.
Рисунок 3. Фотоплетизмограмма
Датчик пульса усиливает аналоговый сигнал и нормализует относительно точки среднего значения напряжения питания датчика ( V/2 ). Датчик пульса реагирует на относительные изменения интенсивности света. Если количество света, падающего на датчик остается постоянным, величина сигнала будет оставаться вблизи середины диапазона АЦП. Если регистрируется большая интенсивность изучения, то кривая сигнала идет вверх, если меньше интенсивность, то, наоборот, кривая идет вниз.
Рисунок 4. Регистрация удара пульса
Наш датчик пульса мы будем использовать для измерения частоты пульса, фиксируя промежуток между точками графика, когда сигнал имеет значение 50% от амплитуды волны во время начала импульса.
Технические характеристики датчика
Подключение к Arduino
Рисунок 5. Подключение датчика пульса к плате Arduino
Пример использования
Рисунок 6. Вывод данных аналогового значения и частоты пульса в монитор последовательного порта.
Для получения графика фотоплетизмограммы на экране компьютера будем использовать хорошо знакомую Ардуинщикам среду программирования Processing, похожую на Arduino IDE. Загрузим на плату Arduino скетч (PulseSensorAmped_Arduino_1dot1.zip), а на компьютере из Processing загрузим скетч (PulseSensorAmpd_Processing_1dot1.zip). Передаваемые с платы Arduino в последовательный порт данные, мы будем получать в Processing и строить график (рис. 7).
Рисунок 7. Визуализация данных в Processing.
Еще один вариант визуализации (для компьютеров Mac) – программа Pulse Sensor. Она также получает данные, приходящие в последовательный порт от Arduino (скачать скетч PulseSensorAmped_Arduino_1dot1.zip) и выводит график, уровень сигнала и значение пульса (рис. 8).
Рисунок 8. Визуализация данных с датчика пульса в программе Pulse Sensor.
Часто задаваемые вопросы FAQ
Пульсоксиметр своими руками
Во время самоизоляции я попытался сделать пульсоксиметр из того, что уже есть у меня в закромах
Я бы хотел измерить уровень насыщения крови кислородом в процентах в моей крови при помощи самостоятельно изготовленного пульсоксиметра. Я не эксперт в медицине, поэтому данный проект не имеет диагностической ценности. Это просто образовательный проект, подходящий для изучения принципов работы прибора.
Подробности
1. Насыщение крови кислородом и COVID-19
В данном невероятном периоде нашей жизни мы многое узнали о вирусах, лёгких, хирургических масках и о том, как правильно мыть руки. Все читали о таких симптомах, как кашель, повышение температуры и затруднение дыхания. Мы также знаем, что один из способов измерить затруднения дыхания – это узнать количество кислорода в крови.
Это можно сделать косвенным методом при помощи такого медицинского устройства, как пульсоксиметр. Вы, наверное, уже видели его – это неинвазивное устройство, цепляющееся на палец, за работу которого отвечают мигающие огоньки.
Если у вас всё в порядке со здоровьем, насыщение кислородом вашей крови составляет 95% или выше. Когда оно опускается ниже 90%, вы кашляете и у вас повышается температура – это проблема.
Так давайте же попробуем собрать пульсоксиметр!
2. Как работает измеритель пульса
Перед измерением насыщения крови кислородом нам нужно понять, как работает датчик пульса. У меня есть датчик KY-0039 с инфракрасным светодиодом и фотодиодом (вероятно, OP550A или LTR-301).
Я нашёл его в наборе из нескольких датчиков:
Как видно по схеме, это просто инфракрасный светодиод, светящий на фотодиод. У него есть ещё два резистора, для защиты светодиода и получения слабого сигнала с датчика. Палец помещается между фотодиодом и светодиодом, как на фото:
Излучаемый инфракрасным светодиодом свет частично поглощается ногтем, кожей и остальными частями пальца. Но поглощение не остаётся неизменным, поскольку оно меняется вместе с потоком крови, идущей по венам. Когда сокращается сердце, оно проталкивает кровь по венам, в результате чего меняется поглощение света. С контакта S датчика KY-039 можно снимать данные о токе, генерируемом светом, поглощённым фотодиодом.
3. Измерение пульса через обнаружение пиков сигнала с датчика
Качественно считать значение изменяющегося сигнала – задача непростая. В данном случае сигнал слабый, а шума много, поэтому для того, чтобы найти какие-то осмысленные значения, нам придётся провести определённые вычисления.
Выражаю благодарность Йохану Ха за его пост с объяснениями того, как строить среднее значение для небольшой выборки данных, а также удалять шум настольной лампы (содержащийся в её свете). Однако я обнаружил, что мой датчик хорошо считывает сигнал, в условиях хорошей освещённости, а если накрыть его тёмной тряпочкой, то шума становится больше.
В своём коде Ха создаёт массив, где хранит значения, а потом уменьшает их, вычисляя среднее на основе X последних значений, прочитанных с датчика. Он также описывает способ найти тот момент, когда сигнал начинает расти (когда N подряд значений сигнала превышают опорное), чтобы искать пики.
При помощи программы SerialPlot мне удалось лучше подобрать необходимое количество измерений, которое позволит нам корректно определить N (константа rise_threshold в коде). На примере графика ниже – если задать это число больше 7, то некоторые удары пульса программа пропустит и не заметит:
Когда мы научились находить пики, мы можем их подсчитать – или подсчитать время между пиками, и так определить количество сердечных сокращений в минуту.
4. Взламываем датчик пульса KY-039 для измерения насыщения крови кислородом
Наша кровь поглощает свет по-разному в зависимости от длины его волны. Красный свет лучше поглощает кровь, содержащая больше кислорода, поэтому мы можем сравнить измерения и найти процентное содержание кислорода в крови. Это значение называется Sp02%.
Sp02% полностью называется «насыщение кислородом периферийных капилляров», и обозначает примерное содержание кислорода в крови. Точнее, это процентное соотношение насыщенного кислородом гемоглобина по сравнению с общим количеством гемоглобина в крови.
У нашего датчика KY-039 есть только один инфракрасный (950 нм) светодиод. Нам нужно добавить к схеме красный светодиод (600 нм), подсоединить его к контакту Arduino, а кроме того, нам надо отсоединить инфракрасный светодиод от Vcc и подключить его к ещё одному контакту Arduino. Я также использовал два резистора на 330 Ом для защиты светодиода.
Схема изменённого датчика:
Теперь мы можем включать инфракрасный светодиод, считывать показания с контакта S датчика KY-039, а потом выключать инфракрасный светодиод и включать красный светодиод, и снова считывать показания с контакта S.
Если мы построим два графика, мы увидим, что значения, полученные с ИД всегда меньше, чем значения красного светодиода.
5. Как измеряется насыщение
Насыщение измеряется как функция параметра R, который определяется через максимум и минимум двух сигналов:
R = Rnum / Rden;
Уровень насыщения кислородом (SpO2%) – это функция от R (подробности я нашёл в данной работе одного студента из Миланского политехнического).
У каждого инструмента функция от R получается своей, и чтобы найти правильную функцию, соотносящую R и SpO2%, новый пульсоксиметр нужно откалибровать по показаниям другого пульсоксиметра.
Как указано в 3-м разделе, подсчитать количество пиков довольно легко. Но нам кроме этого нужно ещё найти максимумы и минимумы двух кривых (для красного светодиода и для инфракрасного светодиода).
Для этого нам нужно оценить «период» сердцебиений (длительность каждого из них) и поделить его на скорость считывания показаний (в моём коде это 40 мс – 20 для красного светодиода и 20 для инфракрасного светодиода). Период сердцебиения – это время между двумя пиками кривых сигнала.
Теперь мы можем проанализировать N последних запросов (N = период / 40) и найти REDmax, REDmin, IRmax и IRmin. Затем через max и min мы можем вычислить R. R, N и период вычисляются после каждого сокращения сердца.
Как откалибровать самодельный пульсоксиметр, чтобы перейти от R к SpO2%?
Функцию, связывающую R с SpO2%, можно аппроксимировать прямой (SpO2 = K * R + M). Нам понадобятся две точки, чтобы определить параметры K и M, определяющие уравнение прямой – то есть, две пары значений SpO2% и R. Единственный способ найти их – использовать другой пульсоксиметр и прочесть значения с него.
Во время калибровки необходимо быть внимательным – на наш самодельный пульсоксиметр влияет освещение, поэтому его уровень нужно поддерживать одинаковым во всех случаях. Я пробовал закрывать его тёмной тканью, однако при отсутствии света сигнал получается слишком слабым и его сложно отличить от шума.
Рекомендую делать много измерений. Для получения двух разных точек на графике рекомендую понижать значения SpO2%, задерживая дыхание или выдыхая и вдыхая их пластикового пакета.
Найдя две хороших точки, вам останется решить уравнение 2-го порядка. Так можно будет найти параметры K и M.
Я в итоге решил добавить ещё и дисплей, чтобы сразу видеть все показания, а также добавил в код массив измерений. Я вывожу на дисплей измерения, только когда нахожу не менее 5 значений подряд, не сильно отличающихся друг от друга. Таким образом я избавляюсь от шума, вызванного недостаточно качественными компонентами или освещением. Однако всё равно измерения R получаются не очень стабильными, и коэффициент насыщения сильно скачет. Думаю, результаты были бы лучше, если бы я смог усилить сигнал.
Чтобы не зависеть от окружающего освещения, я добавил в схему ещё один, белый светодиод, и стал считывать показания, закрывая всё тёмной тканью. Так получается гораздо лучше, чем просто прикрывать всё тканью – идёт сильный сигнал, не зависящий от освещения в помещении.
Датчик пульса (плетизмограф) своими руками
Содержание
Первые трудности
Пару слов о том, почему фотоплетизмограф намного сложнее, чем кардиограф, с точки зрения схемотехники.
Вспомним, что электрокардиограф регистрирует электрические потенциалы, наводимые электрической активностью сердечной мышцы на теле. Эти самые бипотенциалы не имеют сильных отличий у разных людей, и в норме амплитуда сигнала (от конечностей) составляет 1 ± 0,2 мВ.
Характеристики прибора
Ограничения данного компьютерного пульсографа:
Все для самостоятельного изготовления
Хитрости при построении схемных решений
Проблему №2 (разное кровенаполнение, толщина кожных покровов и прочее) решали реализацией автоматической регулировки коэффициента усиления высокочастотного и низкочастотного усилительных каскадов.
Поясняем схемотехнику
Генератор на базе микросхемы ОУ TL072 (каскад DA1:A) формирует синусоидальный сигнал, драйвер питания светодиода (DA1:B) обеспечивает электрический ток через светодиод, сила которого пропорциональна выходному напряжению генератора. Вместе генератор и драйвер обеспечивают пульсирующее излучение светодиода X1 с частотой 5 кГц и минимальными высшими гармониками. Питание светодиода прямоугольными импульсами приводит к значительному искажению полезного сигнала высшими гармониками после детектирования, поэтому и питаем светодиод синусом.
Уровень ослабления сигнала резистивным делителем в ВЧ тракте подбирается исходя из величины постоянной составляющей, измеряемой АЦП контроллера на выходе детектора ADC_AMP.
После амплитудного детектирования полезный сигнал поступает на повторитель на ОУ, который служит для согласования сопротивлений, и усилитель низкой частоты на составном транзисторе VT1-VT2. Схема Дарлингтона позволяет получить минимальный уровень инфранизкочастотных шумов при высоком усилении НЧ сигнала. После усилительного НЧ каскада сигнал подается на цифровой потенциометр MCP41010 и последний каскад усиления DA2:A. Уровень ослабления сигнала потенциометром подбирается исходя из размаха сигнала, измеряемого на входе АЦП контроллера ADC_IN.
Цифровая часть фотоплетизмографа построена на базе микроконтроллера семейства AVR ATMega48. Контроллер осуществляет автоматическую регулировку усиления высокочастотных и низкочастотных каскадов, измеряет сигналы на каналах АЦП (постоянная составляющая ФПГ после демодуляции ADC_AMP и усиленный сигнал пульсограммы ADC_IN).
Программирование микроконтроллера
Программируется контроллер через разъем для внутрисхемного программирования X3 по интерфейсу SPI c помощью программатора STK-500, ucGoZillla, USBtiny или др. Для прошивки контроллера вам также потребуется среда Atmel AVR Studio, которую можно скачать на официальном сайте Microchip.
При программировании микроконтроллера настройки установите согласно скриншотам ниже (внимательно отнеситесь к данному пункту, дабы не превратить контроллер в «кирпич»).
Что можно
Что нельзя
Спасибо за внимание к нашим разработкам и всем успехов в сборке вашего домашнего пульсографа!
пульсометр схема фотоплетизмограф схема пульсоксиметр своими руками пульсометр своими руками схема фотоплетизмографа купить фотоплетизмограф купить ведапульс схема элдар датчик пульса самому датчик пульса схема