Категория: 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 заключалась в вставке микрофона непосредственно в акустическую головку стетоскопа, нелепо и просто. Эта идея провалилась, так как эхо в самой головке заводило микрофон и создавало очень много помех.
После множества ссылок в гугле был найден вариант c пьезодатчиком. Один иностранный парень с ровными руками за $4 доллара на основе пьезодатчика собрал систему которая визуализирует сердцебиение человека. По сути определяет наличие сердцебиения и соответственно изъять можно количество и периодичность ударов сердца и делать какие либо выводы
Проверив его код и собрав подобную систему я сделал вывод что это реально, но стоит только пошевелить пальцем, начинается каша. Так как его метод основывается на считывании аналогового сигнала сердца с пьезоэлемента и его последующем трешолдинге и визуализации.
Этот метод так же хорош и его исследование можно вынести в отдельную статью, но продолжим все же по теме.
Наигравшись разными методами получения сердцебиения и откинув различные оптические пары без обвеса - крайними мерами была покупка нормального датчика сердцебиения Pulse Sensor Arduino. Рассчитывая на свои средства соответственно датчик был китайским аналогом оригинального за $24 доллара. В упаковке был только датчик, без клипсы, липучки и защитной пленки. Защитная пленка нужна затем что датчик устроен на принципе открытого кремниевого элемента который очень не устойчив к статике. Поэтому приходится использовать либо антистатический браслет, или прикреплять пленочку (как на телефоне).
Друг, Ближе к делу!!!
После приезда датчика, в интернете на официальном сайте, официальных сенсоров сердцебиения, нашелся код для получения данных.
Код проверен и приведен ниже с небольшими пояснениями, которые особо и не нужны так как все описано на не родном языке.
- /*
- >> Pulse Sensor Amped 1.2 <<
- This code is for Pulse Sensor Amped by Joel Murphy and Yury Gitman
- www.pulsesensor.com
- >>> Pulse Sensor purple wire goes to Analog Pin 0 <<<
- Pulse Sensor sample aquisition and processing happens in the background via Timer 2 interrupt. 2mS sample rate.
- PWM on pins 3 and 11 will not work when using this code, because we are using Timer 2!
- The following variables are automatically updated:
- Signal : int that holds the analog signal data straight from the sensor. updated every 2mS.
- IBI : int that holds the time interval between beats. 2mS resolution.
- BPM : int that holds the heart rate value, derived every beat, from averaging previous 10 IBI values.
- QS : boolean that is made true whenever Pulse is found and BPM is updated. User must reset.
- Pulse : boolean that is true when a heartbeat is sensed then false in time with pin13 LED going out.
- This code is designed with output serial data to Processing sketch "PulseSensorAmped_Processing-xx"
- The Processing sketch is a simple data visualizer.
- All the work to find the heartbeat and determine the heartrate happens in the code below.
- Pin 13 LED will blink with heartbeat.
- If you want to use pin 13 for something else, adjust the interrupt handler
- It will also fade an LED on pin fadePin with every beat. Put an LED and series resistor from fadePin to GND.
- Check here for detailed code walkthrough:
- http://pulsesensor.myshopify.com/pages/pulse-sensor-amped-arduino-v1dot1
- Code Version 1.2 by Joel Murphy & Yury Gitman Spring 2013
- This update fixes the firstBeat and secondBeat flag usage so that realistic BPM is reported.
- Проверенно для сайта 1injener.ru
- */
- //Все просто. Датчик вставляем в 15й аналоговый вход.
- //Светодиоды отображающие удар сердца в 2х комплексах к 13 и 5 пинам.
- // VARIABLES
- int pulsePin = 15; // Pulse Sensor purple wire connected to analog pin 15
- int blinkPin = 13; // pin to blink led at each beat
- int fadePin = 5; // pin to do fancy classy fading blink at each beat
- int fadeRate = 0; // used to fade LED on with PWM on fadePin
- // these variables are volatile because they are used during the interrupt service routine!
- volatile int BPM; // used to hold the pulse rate
- volatile int Signal; // holds the incoming raw data
- volatile int IBI = 600; // holds the time between beats, must be seeded!
- volatile boolean Pulse = false; // true when pulse wave is high, false when it's low
- volatile boolean QS = false; // becomes true when Arduoino finds a beat.
- void setup(){
- pinMode(blinkPin,OUTPUT); // pin that will blink to your heartbeat!
- pinMode(fadePin,OUTPUT); // pin that will fade to your heartbeat!
- Serial.begin(115200); // we agree to talk fast!
- interruptSetup(); // sets up to read Pulse Sensor signal every 2mS
- // UN-COMMENT THE NEXT LINE IF YOU ARE POWERING The Pulse Sensor AT LOW VOLTAGE,
- // AND APPLY THAT VOLTAGE TO THE A-REF PIN
- //analogReference(EXTERNAL);
- }
- void loop(){
- sendDataToProcessing('S', Signal); // send Processing the raw Pulse Sensor data
- if (QS == true){ // Quantified Self flag is true when arduino finds a heartbeat
- fadeRate = 255; // Set 'fadeRate' Variable to 255 to fade LED with pulse
- sendDataToProcessing('B',BPM); // send heart rate with a 'B' prefix
- sendDataToProcessing('Q',IBI); // send time between beats with a 'Q' prefix
- QS = false; // reset the Quantified Self flag for next time
- }
- ledFadeToBeat();
- delay(20); // take a break
- }
- void ledFadeToBeat(){
- fadeRate -= 15; // set LED fade value
- fadeRate = constrain(fadeRate,0,255); // keep LED fade value from going into negative numbers!
- analogWrite(fadePin,fadeRate); // fade LED
- }
- void sendDataToProcessing(char symbol, int data ){
- Serial.print(symbol); // symbol prefix tells Processing what type of data is coming
- Serial.println(data); // the data to send culminating in a carriage return
- }
Скачать файлы прошивки для датчика сердцебиения
Основная прошивка:
Скачать pulse_Arduino_ok.ino
Дополнительный файл для прерываний должен лежать вместе с файлом прошивки:
Скачать interrupt.ino
Так как много текста, добро пожаловать на следующую страницу за результатами. Визуализация и графики.
Как я спал на датчике температуры DHT-11 для Arduino [Опыт 1]
Домашний веб сервер на Аrduino. Температура и Реле [Проверенно]
ЖКИ дисплей WH0802 подключение к Ардуино [Много проводов]
Управление шаговым биполярным двигателем A4988ET [Рабочий код ino]
Новые изобретения инженеров и техников, дизайнеров и обычных людей, все то что может изменить наш мир к лучшему. Новая техника и оружие, спасателей и спецназа. Гаджеты и девайсы, устройства для отдыха и работы. Советы для экономии семейного состояния. Все гениальные изобретения в простом формате! Ведь "Все - Просто!"
Copyright © 2013–2024
Автоматизация и проектирование - 1injener.ru
Copyright © 2013–2024
Автоматизация и проектирование - 1injener.ru