Ардуино: датчик пульса

В этом уроке мы разберём, как подключить датчик пульса к Arduino и измерять сердечный ритм. Для работы воспользуемся оптическим датчиком Pulse Sensor.

Принцип работы датчика пульса

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

Фотоплетизмограмма — метод регистрации кровяного потока с использованием источника инфракрасного или светового излучения и фоторезистора или фототранзистора.

Фоторезистор меняет сопротивление в зависимости от количества поглощённого света. Чем больше кровяной поток, тем меньше света поглощается в тканях организма, следовательно, больше света приходит на фоторезистор.

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

Принцип действия фотоплетизмограммы:

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

Импульсный датчик Pulse Sensor реагирует на относительные изменения интенсивности света. Если количество света, падающего на датчик, остается постоянным, значение сигнала останется на (или близко к) 512 (средняя точка 10-разрядного диапазона АЦП Arduino). Больше света и сигнал поднимается. Меньше света — падает.

Подключение датчика к Ардуино

Для соединения с микроконтроллером у Pulse Sensor имеется три вывода. Подключаем их к Ардуино по следующей схеме:

Pulse Sensor GND VCC OUT
Arduino Uno GND +5V A0

Принципиальная схема:

Внешний вид макета:

Программа:

Для того, чтобы наша Ардуино подружилась с датчиком пульса, нужно установить PulseSensor Playground Library.

Заходим в меню Эскиз > Include Library > Manage Library, вбиваем в поиске PulseSensor и устанавливаем последнюю версию среди найденных результатов.

После того, как библиотека успешно установилась, выбираем в меню Файл > Образцы > PulseSensor Playground > GettingStartedProject.

Листинг нашей программы:

//  Переменные
int PulseSensorPurplePin = 0;                  // выход Ардуино А0
int LED13 = 13;                                // светодиод на плате

int Signal;                
int Threshold = 550;                           // значение для данных сенсора, после которого подаётся сигнал           

void setup(){
    pinMode(LED13, OUTPUT);        
    Serial.begin(9600);         
}
void loop(){
    Signal = analogRead(PulseSensorPurplePin);   // чтение данных с сенсора
    Serial.println(Signal);                    
    if (Signal > Threshold){
        digitalWrite(LED13, HIGH);                 // если значение выше "550", то сигнал на светодиод
    }
    else {
        digitalWrite(LED13, LOW);               
    }
    delay(10);
}

Компилируем проект и прошиваем в Ардуино.

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

Аппарат для наблюдения сердечного ритма

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

Примерный вид модели прибора:

График пульса, полученный по показаниям с нашего прибора:

Листинг программы:

int PulseSensorPurplePin = 0;        // выход Ардуино А0
int LED13 = 13;                      //  светодиод на плате

int Signal;               
int Threshold = 550;                 // значение для данных сенсора, после которого подаётся сигнал

const byte dynPin = 2;               // зуммер

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

void loop(){
  Signal = analogRead(PulseSensorPurplePin);  // чтение данных с сенсора
  Serial.println(Signal);                    
  if (Signal > Threshold){
    digitalWrite(LED13, HIGH);               // если значение выше "550", то сигнал на светодиод
    digitalWrite(dynPin, HIGH );             // если значение выше "550", то включение зуммера
  }
  else {
    digitalWrite(LED13, LOW); 
    digitalWrite(dynPin, LOW );
  }
  delay(10);
}

Следует отметить, что значение для данных сенсора (переменная Threshold) равно 550 в нашем примере, но оно может изменяться при использовании прибора разными людьми.

0

Изменено: