Мониторинг частоты сердечных сокращений с помощью пульсометра и Arduino

Мониторинг частоты сердечных сокращений с помощью пульсометра и Arduino

Хотите оживить свой проект — в буквальном смысле? Будь то фитнес-трекер, интерактивная художественная инсталляция или игра с обратной связью — измерение пульса в реальном времени — отличный способ сделать вашу работу более персональной и динамичной. Именно для этого и нужен датчик пульса (Pulse Sensor).

Pulse Sensor — это небольшой, лёгкий и энергоэффективный датчик пульса, разработанный специально для пользователей Arduino. Он работает по принципу «подключи и используй», а значит, вы можете начать быстро и без сложной настройки. Благодаря компактному дизайну в форме кнопки с отверстиями для пришивания его можно даже встраивать в носимую электронику и умный текстиль.

В этом практическом руководстве вы узнаете, как работает датчик пульса, как подключить его к Arduino, и рассмотрите несколько практических примеров, включая построение графика пульса в реальном времени и вычисление ударов в минуту (BPM).

Давайте начнём!

Знаете ли вы?

Pulse Sensor — это устройство с открытым исходным кодом, разработанное командой PulseSensor.com. Проект начался на Kickstarter в 2011 году, а к 2013 году привлёк 491 спонсора, которые пожертвовали 18 418 долларов, чтобы помочь воплотить идею в жизнь.

Обзор оборудования

На лицевой стороне датчика пульса вы увидите логотип сердца. Именно сюда нужно приложить палец для измерения пульса. Здесь находится небольшое круглое окошко, через которое светит зелёный светодиод (производства Kingbright).

Мониторинг частоты сердечных сокращений с помощью пульсометра и Arduino

Прямо под этим окошком расположен специальный датчик освещённости `APDS-9008 `_ (производства Avago). Это датчик внешней освещённости, аналогичный тем, что используются в смартфонах, планшетах и ноутбуках для автоматической регулировки яркости экрана в зависимости от освещения в помещении.

На обратной стороне датчика пульса расположены основные электронные компоненты:

  • Операционный усилитель MCP6001 от Microchip. Он усиливает слабые электрические сигналы от датчика освещённости, чтобы их можно было легко считывать микроконтроллером.

  • Несколько резисторов и конденсаторов, работающих вместе как R/C-фильтр. Этот фильтр помогает очистить сигнал, устраняя нежелательные помехи и шумы.

  • Диод обратной защиты, который защищает датчик в случае неправильного подключения проводов питания.

Мониторинг частоты сердечных сокращений с помощью пульсометра и Arduino

Датчик пульса работает от источника постоянного тока 3,3–5 вольт и потребляет менее 4 мА тока.

Технические характеристики

Вот основные характеристики:

Как работает датчик пульса?

Вы когда-нибудь подсвечивали фонариком свои пальцы и замечали, как `можно увидеть сердцебиение `_? На этом же принципе основана работа датчиков пульса!

Мониторинг частоты сердечных сокращений с помощью пульсометра и Arduino

Датчик пульса работает, направляя зелёный свет на тонкий участок тела, например на кончик пальца или мочку уха. Эти области идеально подходят, потому что кожа достаточно тонкая, чтобы свет легко проходил сквозь неё. Когда свет проходит через кожу, часть его поглощается кровью, а остальная часть отражается обратно. Датчик пульса оснащён специальным фотодетектором, который измеряет количество отражённого света. Этот процесс имеет научное название — `фотоплетизмография (ФПГ) `_ — что означает измерение изменений объёма крови с помощью света.

Мониторинг частоты сердечных сокращений с помощью пульсометра и Arduino

Вот что происходит:

Ваша кровь содержит белок — гемоглобин, — который переносит кислород по всему телу. Когда гемоглобин несёт кислород (так называемый оксигемоглобин, или HbO2), он поглощает больше зелёного света.

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

Между ударами сердца в пальце чуть меньше насыщенной кислородом крови. Поэтому меньше света поглощается, и больше света достигает детектора.

Это значит, что фотодетектор способен улавливать крошечные изменения количества отражённого света при каждом ударе сердца, создавая волнообразную картину, совпадающую с вашим сердцебиением.

Сигнал от фотодетектора обычно слабый и зашумлённый. Для его улучшения сигнал проходит через R/C-фильтр, который его очищает. Затем он проходит через операционный усилитель (Op-Amp), который значительно усиливает сигнал, делая его более лёгким для обнаружения.

Почему зелёный свет?

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

Распиновка датчика пульса

Датчик пульса поставляется с плоским ленточным кабелем длиной 20 см с тремя штыревыми контактами для подключения к Arduino или другому микроконтроллеру:

Мониторинг частоты сердечных сокращений с помощью пульсометра и Arduino

S (Signal) — аналоговый выходной сигнал датчика. Подключается к аналоговому входу Arduino, например A0.

  • (VCC) — вход питания. Подключается к выходу 3,3В или 5В Arduino.

– (GND) — контакт земли.

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

Подключение датчика пульса к Arduino

Подключение датчика пульса к Arduino не вызывает сложностей. Нужно подсоединить всего три провода: два для питания и один для сигнала.

Датчик можно питать от 3,3В или 5В. Подключите контакт + датчика к выводу 3,3V или 5V на Arduino. Подключите контакт – к GND Arduino. И наконец, подключите контакт S к A0 (или любому другому аналоговому входу) на Arduino.

Вот краткая таблица подключения:

Pulse SensorArduino
+ (VCC)5V
– (GND)GND
S (Signal)A0

Вот схема подключения датчика пульса:

Мониторинг частоты сердечных сокращений с помощью пульсометра и Arduino

Установка библиотеки

Для запуска следующих скетчей необходимо сначала установить библиотеку `PulseSensor Playground `_.

Для установки библиотеки:

  1. Сначала откройте программу Arduino IDE. Затем нажмите на значок Менеджер библиотек на левой боковой панели.

  2. Введите «pulsesensor» в строку поиска для фильтрации результатов.

  3. Найдите библиотеку PulseSensor Playground.

  4. Нажмите кнопку Install, чтобы добавить её в Arduino IDE.

Мониторинг частоты сердечных сокращений с помощью пульсометра и Arduino

Примеры скетчей PulseSensor

Библиотека PulseSensor поставляется с несколькими готовыми примерами скетчей. Эти примеры помогут вам понять, как работает датчик, и подадут идеи для собственных проектов.

Чтобы найти эти примеры, откройте Arduino IDE и перейдите в File > Examples > PulseSensor Playground.

Вы увидите список примеров скетчей. Не стесняйтесь их изучить, но начнём с GettingStartedProject.

Мониторинг частоты сердечных сокращений с помощью пульсометра и Arduino

Пример Arduino 1 — Мигание светодиода в ритме сердцебиения

Этот первый пример показывает, как считывать данные с датчика пульса и заставить встроенный светодиод на плате Arduino мигать в ритме вашего сердцебиения!

int const PULSE_SENSOR_PIN = 0;  // 'S' Signal pin connected to A0

int Signal;           // Store incoming ADC data. Value can range from 0-1024
int Threshold = 550;  // Determine which Signal to "count as a beat" and which to ignore.

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);  // Built-in LED will blink to your heartbeat
  Serial.begin(9600);            // Set comm speed for serial plotter window
}

void loop() {
  Signal = analogRead(PULSE_SENSOR_PIN);  // Read the sensor value

  Serial.println(Signal);  // Send the signal value to serial plotter

  if (Signal > Threshold) {  // If the signal is above threshold, turn on the LED
    digitalWrite(LED_BUILTIN, HIGH);
  } else {
    digitalWrite(LED_BUILTIN, LOW);  // Else turn off the LED
  }
  delay(10);
}

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

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

Мониторинг частоты сердечных сокращений с помощью пульсометра и Arduino

Пояснение к коду

Сначала мы указываем Arduino, какой аналоговый вход подключён к датчику пульса — в данном случае аналоговый вход 0.

int const PULSE_SENSOR_PIN = 0;

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

int Signal;
int Threshold = 550;

В секции setup мы настраиваем встроенный светодиод (пин 13) как выход и инициализируем последовательную связь.

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
  Serial.begin(9600);
}

В секции loop мы считываем аналоговые данные с датчика пульса. Затем сравниваем это значение с заданным порогом. Если сигнал выше порога — значит, обнаружен удар сердца — и мы включаем светодиод. Если ниже порога — выключаем светодиод. Мы добавляем небольшую задержку, чтобы Arduino не считывал сигнал слишком быстро.

void loop() {
  Signal = analogRead(PULSE_SENSOR_PIN);  // Read the sensor value

  Serial.println(Signal);  // Send the signal value to serial plotter

  if (Signal > Threshold) {  // If the signal is above threshold, turn on the LED
    digitalWrite(LED_BUILTIN, HIGH);
  } else {
    digitalWrite(LED_BUILTIN, LOW);  // Else turn off the LED
  }
  delay(10);
}

Пример Arduino 2 — Построение графика сердцебиения

В первом примере вы видели необработанные числа от датчика пульса в мониторе последовательного порта. Хотя эти числа представляют сигнал вашего сердцебиения, их сложно понять, просто глядя на них. Гораздо лучший способ визуализировать сердцебиение — построить график данных с помощью встроенного в Arduino IDE плоттера последовательного порта (Serial Plotter).

Чтобы увидеть этот график, убедитесь, что предыдущий скетч (GettingStartedProject) всё ещё запущен на Arduino. Затем в Arduino IDE перейдите в Tools > Serial Plotter. Через несколько секунд на экране должна появиться живая осциллограмма вашего сердцебиения.

Мониторинг частоты сердечных сокращений с помощью пульсометра и Arduino

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

Проблемы с отображением сердцебиения?

Если график не показывает ваше сердцебиение чётко, не паникуйте — есть несколько вещей, которые можно проверить и попробовать для улучшения сигнала.

  1. Во-первых, убедитесь, что палец правильно расположен на датчике. Если нажимать слишком сильно, можно вытеснить большую часть крови из пальца, и датчик ничего не обнаружит. Если нажимать слишком слабо, датчик может улавливать движение или фоновый свет, что приведёт к зашумлённому сигналу. Нужно найти «золотую середину» — достаточное давление, чтобы палец оставался неподвижным, но без пережатия кровообращения.

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

  3. Если датчик всё равно плохо работает на кончике пальца, попробуйте протестировать его на других участках тела, где кровоток легко обнаружить, например на мочке уха или нижней губе. Эти области также имеют кровеносные сосуды близко к поверхности и часто дают лучшие результаты.

Пример Arduino 3 — Измерение частоты пульса (BPM)

В этом третьем примере мы пойдём ещё дальше и будем измерять частоту сердечных сокращений в ударах в минуту (BPM) — аналогично тому, как это делают фитнес-трекеры и смарт-часы.

Чтобы попробовать самостоятельно, откройте Arduino IDE и загрузите скетч Getting_BPM_to_Monitor из меню примеров PulseSensor Playground.

Мониторинг частоты сердечных сокращений с помощью пульсометра и Arduino

Этот скетч вычисляет время между каждым ударом сердца, обнаруженным датчиком. Измеряя время от одного удара до следующего, программа может рассчитать, сколько ударов произойдёт за полную минуту — именно это и означает BPM.

Внимание:

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

#define USE_ARDUINO_INTERRUPTS true  // Set-up low-level interrupts for most acurate BPM math
#include <PulseSensorPlayground.h>   // Includes the PulseSensorPlayground Library

const int PulseWire = 0;  // 'S' Signal pin connected to A0
const int LED13 = 13;     // The on-board Arduino LED
int Threshold = 550;      // Determine which Signal to "count as a beat" and which to ignore

PulseSensorPlayground pulseSensor;  // Creates an object

void setup() {
  Serial.begin(9600);

  // Configure the PulseSensor object, by assigning our variables to it
  pulseSensor.analogInput(PulseWire);
  pulseSensor.blinkOnPulse(LED13);  // Blink on-board LED with heartbeat
  pulseSensor.setThreshold(Threshold);

  // Double-check the "pulseSensor" object was created and began seeing a signal
  if (pulseSensor.begin()) {
    Serial.println("PulseSensor object created!");
  }
}

void loop() {
  int myBPM = pulseSensor.getBeatsPerMinute();  // Calculates BPM

  if (pulseSensor.sawStartOfBeat()) {              // Constantly test to see if a beat happened
    Serial.println("♥  A HeartBeat Happened ! ");  // If true, print a message
    Serial.print("BPM: ");
    Serial.println(myBPM);  // Print the BPM value
  }

  delay(20);
}

После загрузки скетча в Arduino откройте монитор последовательного порта, чтобы увидеть результаты.

Мониторинг частоты сердечных сокращений с помощью пульсометра и Arduino

Вы можете заметить, что поначалу цифры выглядят немного странно. Это совершенно нормально. Обычно датчику требуется несколько секунд, чтобы «захватить» ваш пульс и начать выдавать стабильные показания.

Визуализатор сердцебиения

В этом последнем примере вы будете использовать специальную программу Processing Visualizer для просмотра сердцебиения на экране компьютера в реальном времени! Команда Pulse Sensor создала эту программу с помощью `языка программирования Processing `_. Вы сможете наблюдать за сердцебиением в виде движущегося графика, видеть количество ударов в минуту (BPM) и интервал между ударами (IBI) — время между каждым ударом сердца.

Мониторинг частоты сердечных сокращений с помощью пульсометра и Arduino

Важно знать, что этот скетч Processing не выполняет никаких вычислений сам. Вся сложная работа — обнаружение ударов, измерение BPM и расчёт IBI — выполняется Arduino. Единственная задача программы Processing — считывать данные из последовательного порта Arduino и отображать их в наглядном виде.

Загрузка скетча Arduino

Для начала необходимо загрузить правильный скетч в Arduino. В Arduino IDE перейдите в File > Examples > PulseSensor Playground и выберите скетч PulseSensor_BPM.

Мониторинг частоты сердечных сокращений с помощью пульсометра и Arduino

Перед загрузкой скетча нужно внести одно небольшое изменение в код. Найдите переменную OUTPUT_TYPE. По умолчанию она установлена в SERIAL_PLOTTER, что используется для Arduino Serial Plotter. Но для работы Processing Visualizer необходимо изменить это значение на PROCESSING_VISUALIZER.

Мониторинг частоты сердечных сокращений с помощью пульсометра и Arduino

После внесения изменения загрузите скетч в Arduino. Теперь ваш Arduino готов отправлять данные о сердцебиении в формате, понятном Processing Visualizer!

Настройка Processing Visualizer

Далее необходимо скачать программу Processing Visualizer. Её можно найти на `GitHub `_. После скачивания распакуйте архив и поместите папку PulseSensorAmpd_Processing_Visualizer в папку Documents > Processing.

Затем откройте программу Processing IDE. Перейдите в File > Sketchbook.

Мониторинг частоты сердечных сокращений с помощью пульсометра и Arduino

Вы должны увидеть PulseSensorAmped_Processing_Visualizer в списке. Нажмите на него, чтобы открыть программу.

Мониторинг частоты сердечных сокращений с помощью пульсометра и Arduino

Настройка визуализатора

При запуске программы в Processing вам будет предложено выбрать USB-порт, к которому подключён Arduino. Если вы не видите свой Arduino в списке сразу, просто нажмите кнопку «Refresh Serial Ports List».

Мониторинг частоты сердечных сокращений с помощью пульсометра и Arduino

После выбора правильного порта программа начнёт отображать данные о сердцебиении в реальном времени!

Полезные функции

Во время наблюдения за сердцебиением вы можете сделать несколько дополнительных вещей:

  • Нажмите клавишу „s“ на клавиатуре, чтобы сделать снимок экрана. Скриншот будет сохранён как .jpg-файл в папке скетча.

  • Нажмите клавишу „r“, чтобы очистить дисплей и начать заново. Это полезно, если вы хотите перезапустить график или начать новую запись.