Категория: Arduino - проекты | Комментарии: 0
20 января 2016

Датчик сердцебиения для Ардуино [Визуализируем сердце]

Датчик сердцебиения ардуино



Идея отобразить свое сердцебиение за время сна возникла ранее чем замерять температуру.
Это очень интересно, с первоначальной точки зрения. Просто интересно посмотреть на ритм сердца в период сна за 4 часа, 8 часов, 12 часов, в различных состояниях (к примеру, не трезвым), после различной информации на ночь. Новостей, фильмов, музыки. Согласитесь? Не исследование, а интересная забава.

На рисунке выше изображен датчик сердцебиения для Ардуино стоимостью $4.3 доллара, при условии что оригинал стоит ровно $24. Но перед тем как его купить прошло несколько этапов.
Фотографировать не на что, так что будет много текста для чтения.
Если Вы начали читать статью и Вы не кардиолог, возможно понадобится следующая информация про QRS комплекс и расшифровку сигналов сердцебиения (Взято из Гугл).

интерналы сердца ардуино


Р – этот зубец должен быть положительным. Рассматриваются данные первого, второго отведений. Если говорить про VR, здесь зубец будет отрицательным;
Q – он регистрирует активизацию левой половины перегородки. Нормальным показателем его считается ¼ R при 0,3 с. Повышение нормального показателя свидетельствует про патологию миокарда;
R – по нему определяется активность стенок желудочков. Должен определяться на каждом отведении. В противном случае предполагается гипертрофия желудочков;
S – его высота должна составлять 20 мм. Также стоит уделить внимание сегменту ST. Его отклонения говорят об ишемии миокарда;
Т – обычно в первом-втором отведении направлен вверх, на VR имеет отрицательное значение. Изменение показателя свидетельствует про наличие гипер- или гипокалемии.

Начну, все же, по сути. Прежде чем купить датчик сердцебиения (Pulse Sensor Arduino) который изображен на рисунке выше был приобретен самый дешевый стетоскоп. Идея №1 заключалась в подключении 2х микрофонов (капсюлей) к ушным Оливам (Те что в уши вставляются) и запись звука сердца соответственно на компьютер с помощью Adobe Audition. Звук сердца для прослушивания записать получилось с первого раза не используя фантомное питание микрофона или усилитель звука. Но по итогу в сигнале было очень много шума из за самых минимальных движений акустической головки стетоскопа. Форму сигнала в Adobe Audition просмотреть не удалось бы даже при глубокой очистке сигнала различными методами Audition. На сколько я понимал необходимо на входе отбрасывать все нежелательные частоты сторонним фильтром для микрофона или все же использовать "какие то" программные фильтры. Глубоко с этим разбираться не стал.

Идея 2 заключалась в вставке микрофона непосредственно в акустическую головку стетоскопа, нелепо и просто. Эта идея провалилась, так как эхо в самой головке заводило микрофон и создавало очень много помех.

9684_dinfj4c1pjo.jpg



После множества ссылок в гугле был найден вариант c пьезодатчиком. Один иностранный парень с ровными руками за $4 доллара на основе пьезодатчика собрал систему которая визуализирует сердцебиение человека. По сути определяет наличие сердцебиения и соответственно изъять можно количество и периодичность ударов сердца и делать какие либо выводы

7889_vtjqa5z_ea.jpg



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

Этот метод так же хорош и его исследование можно вынести в отдельную статью, но продолжим все же по теме.

Наигравшись разными методами получения сердцебиения и откинув различные оптические пары без обвеса - крайними мерами была покупка нормального датчика сердцебиения Pulse Sensor Arduino. Рассчитывая на свои средства соответственно датчик был китайским аналогом оригинального за $24 доллара. В упаковке был только датчик, без клипсы, липучки и защитной пленки. Защитная пленка нужна затем что датчик устроен на принципе открытого кремниевого элемента который очень не устойчив к статике. Поэтому приходится использовать либо антистатический браслет, или прикреплять пленочку (как на телефоне).

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

  1. /*
  2. >> Pulse Sensor Amped 1.2 <<
  3. This code is for Pulse Sensor Amped by Joel Murphy and Yury Gitman
  4. www.pulsesensor.com
  5. >>> Pulse Sensor purple wire goes to Analog Pin 0 <<<
  6. Pulse Sensor sample aquisition and processing happens in the background via Timer 2 interrupt. 2mS sample rate.
  7. PWM on pins 3 and 11 will not work when using this code, because we are using Timer 2!
  8. The following variables are automatically updated:
  9. Signal : int that holds the analog signal data straight from the sensor. updated every 2mS.
  10. IBI : int that holds the time interval between beats. 2mS resolution.
  11. BPM : int that holds the heart rate value, derived every beat, from averaging previous 10 IBI values.
  12. QS : boolean that is made true whenever Pulse is found and BPM is updated. User must reset.
  13. Pulse : boolean that is true when a heartbeat is sensed then false in time with pin13 LED going out.
  14. This code is designed with output serial data to Processing sketch "PulseSensorAmped_Processing-xx"
  15. The Processing sketch is a simple data visualizer.
  16. All the work to find the heartbeat and determine the heartrate happens in the code below.
  17. Pin 13 LED will blink with heartbeat.
  18. If you want to use pin 13 for something else, adjust the interrupt handler
  19. It will also fade an LED on pin fadePin with every beat. Put an LED and series resistor from fadePin to GND.
  20. Check here for detailed code walkthrough:
  21. http://pulsesensor.myshopify.com/pages/pulse-sensor-amped-arduino-v1dot1
  22. Code Version 1.2 by Joel Murphy & Yury Gitman Spring 2013
  23. This update fixes the firstBeat and secondBeat flag usage so that realistic BPM is reported.
  24. Проверенно для сайта 1injener.ru
  25. */
  26. //Все просто. Датчик вставляем в 15й аналоговый вход.
  27. //Светодиоды отображающие удар сердца в 2х комплексах к 13 и 5 пинам.
  28. // VARIABLES
  29. int pulsePin = 15; // Pulse Sensor purple wire connected to analog pin 15
  30. int blinkPin = 13; // pin to blink led at each beat
  31. int fadePin = 5; // pin to do fancy classy fading blink at each beat
  32. int fadeRate = 0; // used to fade LED on with PWM on fadePin
  33. // these variables are volatile because they are used during the interrupt service routine!
  34. volatile int BPM; // used to hold the pulse rate
  35. volatile int Signal; // holds the incoming raw data
  36. volatile int IBI = 600; // holds the time between beats, must be seeded!
  37. volatile boolean Pulse = false; // true when pulse wave is high, false when it's low
  38. volatile boolean QS = false; // becomes true when Arduoino finds a beat.
  39. void setup(){
  40. pinMode(blinkPin,OUTPUT); // pin that will blink to your heartbeat!
  41. pinMode(fadePin,OUTPUT); // pin that will fade to your heartbeat!
  42. Serial.begin(115200); // we agree to talk fast!
  43. interruptSetup(); // sets up to read Pulse Sensor signal every 2mS
  44. // UN-COMMENT THE NEXT LINE IF YOU ARE POWERING The Pulse Sensor AT LOW VOLTAGE,
  45. // AND APPLY THAT VOLTAGE TO THE A-REF PIN
  46. //analogReference(EXTERNAL);
  47. }
  48. void loop(){
  49. sendDataToProcessing('S', Signal); // send Processing the raw Pulse Sensor data
  50. if (QS == true){ // Quantified Self flag is true when arduino finds a heartbeat
  51. fadeRate = 255; // Set 'fadeRate' Variable to 255 to fade LED with pulse
  52. sendDataToProcessing('B',BPM); // send heart rate with a 'B' prefix
  53. sendDataToProcessing('Q',IBI); // send time between beats with a 'Q' prefix
  54. QS = false; // reset the Quantified Self flag for next time
  55. }
  56. ledFadeToBeat();
  57. delay(20); // take a break
  58. }
  59. void ledFadeToBeat(){
  60. fadeRate -= 15; // set LED fade value
  61. fadeRate = constrain(fadeRate,0,255); // keep LED fade value from going into negative numbers!
  62. analogWrite(fadePin,fadeRate); // fade LED
  63. }
  64. void sendDataToProcessing(char symbol, int data ){
  65. Serial.print(symbol); // symbol prefix tells Processing what type of data is coming
  66. Serial.println(data); // the data to send culminating in a carriage return
  67. }

Скачать файлы прошивки для датчика сердцебиения
Основная прошивка:
Скачать pulse_Arduino_ok.ino
Дополнительный файл для прерываний должен лежать вместе с файлом прошивки:
Скачать interrupt.ino

Так как много текста, добро пожаловать на следующую страницу за результатами. Визуализация и графики.

Другие статьи по разделу:

anchore Как я спал на датчике температуры DHT-11 для Arduino [Опыт 1]


anchore Домашний веб сервер на Аrduino. Температура и Реле [Проверенно]


anchore ЖКИ дисплей WH0802 подключение к Ардуино [Много проводов]


anchore Управление шаговым биполярным двигателем A4988ET [Рабочий код ino]



Новые изобретения инженеров и техников, дизайнеров и обычных людей, все то что может изменить наш мир к лучшему. Новая техника и оружие, спасателей и спецназа. Гаджеты и девайсы, устройства для отдыха и работы. Советы для экономии семейного состояния. Все гениальные изобретения в простом формате! Ведь "Все - Просто!"
Copyright © 2013–2017
Автоматизация и проектирование - 1injener.ru