Аналоговий датчик фіксації пульсу

Аналоговий датчик фіксації пульсу Pulse Sensor - це аналоговий датчик дозволяє фіксувати пульс.

На датчику встановлені світлодіод і фотоприймач, розташовані так, що промінь світла випромінюється світлодіодом, потрапляє на фотоприймач тільки відбившись від перешкоди, яким повинна виступати подушечка пальця або мочку вуха.

Загальні відомості

На датчику встановлені світлодіод і фотоприймач, розташовані так, що промінь світла випромінюється світлодіодом, потрапляє на фотоприймач тільки відбившись від перешкоди, яким повинна виступати подушечка пальця або мочку вуха.

Судини, наповнюючись кров'ю, змінюють свою оптичну щільність, що впливає на зміну кількості відбитого світла. Отже, при постійному рівні світлового потоку, випромінюваного світлодіодом, інтенсивність світла реєструється фотоприймачем, буде залежати від наповнюваності судин кров'ю.

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

Специфікація датчика

  • Вхідна напруга: 3 ... 5 В.
  • Струм: 5 мА, при Vcc = 5 В.
  • Габарити: Ø15 мм x 3 мм.
  • Вага: 1 м

Підключення

Вихід датчика підключається до будь-якого аналогового входу arduino. У комплекті є кабель для швидкого і зручного підключення.

Для роботи установки з датчиком,потрібно:

  • Arduino х 1шт.
  • TFT дисплей 2.8 - 320x240 х 1шт.
  • Датчик пульса х 1шт.
  • Trema зуммер х 1шт.
  • Double Shield х 1шт.
  • Trema Shield х 1шт.

Для реалізації проекту нам необхідно встановити бібліотеки:

  • Бібліотека iarduino_SensorPulse для роботи з датчиком пульсу.
  • Бібліотека UTFT для роботи з кольоровими TFT дисплеями

Принцип дії датчика фіксації пульсу

Судини, наповнюючись кров'ю, змінюють свою оптичну щільність, що впливає на зміну кількості відбитого світла. Отже, при постійному рівні світлового потоку, випромінюваного світлодіодом, інтенсивність світла реєструється фотоприймачем, буде залежати від наповнюваності судин кров'ю.

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

Схема підключення

TFT дисплей реалізований у вигляді shield і використовує наступні висновки arduino Uno: A0-A4 (управління), 2-9 (дані), 10-13 (SD-карта), харчування. Датчик пульсу підключається до аналогового входу A5. Trema зумер підключається до цифрового висновку 1. чином датчик не потребує підстроювання під кожну людину.

Так як цифровий висновок 1 є лінією TX шини UART, то при завантаженні скетчу буде чути звук.

Приклад програми

// Підключаємо бібліотеки:

  1. include <iarduino_SensorPulse.h> // підключаємо бібліотеку для роботи з датчиком пульсу
  2. include <UTFT.h> // підключаємо бібліотеку для роботи з TFT дисплеями

// Оголошуємо змінні і константи: extern uint8_t SmallFont []; extern uint8_t BigFont []; const uint16_t colorBG = VGA_BLACK; // колір фону const uint16_t colorGR = VGA_GREEN; // колір графіка const uint16_t colorCD = VGA_WHITE; // колір тексту і символу пульсу const uint16_t colorER = VGA_RED; // колір тексту про помилку

      uint16_t graphY0; // положення попередньої точки графіка по осі Y
      uint16_t graphY; // положення поточної точки графіка по осі Y
      uint16_t graphX; // положення поточної точки графіка по осі X
      uint16_t screenW; // ширина дисплея
      uint16_t screenH; // висота дисплея

UTFT myGLCD (TFT28UNO, A2, A1, A3, A4, A0); // підключаємо дисплей TFT28UNO iarduino_SensorPulse Pulse (A5,1); // підключаємо сенсор до 5 аналоговому входу, а зумер до 1 цифровому висновку void setup () {

  Pulse.begin (); // ініціюємо сенсор
  myGLCD.InitLCD (); // ініціюємо дисплей
  myGLCD.clrScr (); // стираємо всю інформацію з дисплея
  screenW = myGLCD.getDisplayXSize () - 1; // отримуємо ширину дисплея
  screenH = myGLCD.getDisplayYSize () - 1; // отримуємо висоту дисплея

} void loop () { // визначаємо координати поточної точки графіка

  graphX ​​++; if (graphX> = screenW) {graphX ​​= 0;} // зрушуємо точку графіка по осі X
  graphY = map (Pulse.check (ISP_ANALOG), 1024,0,0, screenH); // визначаємо точку графіка по осі Y

// якщо стан сенсора змінилося, то ...

  if (Pulse.check (ISP_VALID) == ISP_CHANGED) {
    myGLCD.clrScr (); // стираємо всю інформацію з дисплея
    graphX ​​= 0; // скидаємо координату поточної точки по осі X
  }

// якщо сенсор підключений, то ...

  if (Pulse.check (ISP_VALID) == ISP_CONNECTED) {

// виводимо графік

                                 myGLCD.setColor (colorBG); myGLCD.drawLine (graphX, 30, graphX, screenH);
      if (graphX> 0) {myGLCD.setColor (colorGR); myGLCD.drawLine (graphX, graphY0, graphX, graphY);
                                 myGLCD.setColor (colorGR); myGLCD.drawLine (graphX-1, graphY0-1, graphX-1, graphY-1); // товщають лінію
      }

// виводимо пульс і серце

    if (Pulse.check (ISP_BEEP) == 0) {myGLCD.setColor (colorCD); myGLCD.fillCircle (20, 20, 4);}
    if (Pulse.check (ISP_BEEP) == 1) {myGLCD.setColor (colorBG); myGLCD.fillCircle (20, 20, 4);}
    if (Pulse.check (ISP_BEEP) == 2) {myGLCD.setColor (colorCD); myGLCD.setFont (SmallFont); myGLCD.printNumI (Pulse.check (ISP_PULSE), 24,16,3);}

// інакше, якщо сенсор відключений, то виводимо повідомлення про помилку

  } Else {myGLCD.setColor (colorER); myGLCD.setFont (BigFont); myGLCD.print ( "DISCONNECTED", CENTER, 100);}

// присвоюємо координату поточної точки графіка, координаті попередньої точки

  graphY0 = graphY;
  delay (5);

} / * опис функції check () бібліотеки iarduino_SensorPulse

* Pulse.check (ISP_ANALOG); - повертає число від 0 до 1024 - дані з аналогового входу, до якого підключений датчик
* Pulse.check (ISP_PULSE); - повертає число від 0 до 999 - пульс (кількість пульсацій за хвилину)
* Pulse.check (ISP_BEEP); - повертає число від 0 до 2621 - кількість десятих часток секунди, що минув після останнього піку пульсу
* Pulse.check (ISP_VALID); - повертає стан датчика - ISP_DISCONNECTED - відключений (дані не відповідають пульсу)
* ISP_CONNECTED - підключений (дані схожі на пульс)
* ISP_CHANGED - стан сенсора змінилося (з підключений на відключений або навпаки)
* / </ Span>

Робота з даними

Прийом даних

Дані датчика пульсу повертає функція check () бібліотеки iarduino_SensorPulse, яка приймає в якості аргументу 1 з 4 параметрів: ISP_ANALOG, ISP_PULSE, ISP_BEEP, ISP_VALID.

   *Pulse.check (ISP_ANALOG); - повертає число від 0 до 1024 - дані з аналогового входу, до якого підключений датчик;
   *Pulse.check (ISP_PULSE); - повертає число від 0 до 999 - пульс (кількість пульсацій за хвилину);
   *Pulse.check (ISP_BEEP); - повертає число від 0 до 2621 - кількість десятих часток секунди, що минув після останнього піку пульсу;
   *Pulse.check (ISP_VALID); - повертає стан датчика - ISP_CONNECTED, ISP_DISCONNECTED, ISP_CHANGED:
       ISP_CONNECTED - підключений (дані схожі на пульс);
       ISP_DISCONNECTED - відключений (дані не відповідають пульсу);
       ISP_CHANGED - стан сенсора змінилося (з підключений на відключений або навпаки)

Вивід даних

  • Графік виводиться промальовуванням ліній від попередньої (graphX-1, graphY0), до поточної (graphX, graphY) точки.
       Координата graphX ​​зсувається від 0 до screenW, при кожному циклі loop.
       Координата graphY число повернене функцією Pulse.check (ISP_ANALOG) і перетворене функцією map () від діапазону 1024-0 до діапазону 0-screenH;
       Координата graphY0 відповідає значенню graphY попереднього циклу loop.
       Перед промальовуванням ліній графіка, виводиться чорна вертикальна лінія, що пере точку попереднього графіка.
  • Символ пульсу (білий круг) виводиться і стирається через певний проміжок часу після фіксації пульсу.
       якщо Pulse.check (ISP_BEEP) == 0 (пульс тільки що зафіксований), то виводимо білий зафарбований круг.
       якщо Pulse.check (ISP_BEEP) == 1 (після фіксації пульсу пройшла 0,1 сек), то зафарбовує білий круг, чорним кругом.
  • Значення пульсу повертається функцією Pulse.check (ISP_PULSE) і виводиться на дисплей через 0,2 сек після фіксації пульсу Pulse.check (ISP_BEEP) == 2.

Перелік посилань