Сердечный ритм (частота сокращений сердечной мышцы), температура тела и давление крови – крайне важные параметры человеческого организма, поэтому для их измерения создано множество разнообразных устройств. В этой статье мы рассмотрим пульсоксиметр (монитор сердечного ритма) на основе платы Arduino Uno, который подсчитывает количество сокращений сердечной мышцы (пульс) в минуту. Для этой цели мы будем использовать специальный датчик, который измеряет сердечный ритм человека когда тот прислонит свой палец к нему.
Необходимые компоненты
- Плата Arduino Uno (купить на AliExpress).
- Датчик сердечного ритма (Heart beat sensor) (купить на AliExpress).
- ЖК дисплей 16х2 (купить на AliExpress).
- Кнопка (2 шт.).
- Макетная плата.
- Источник питания.
- Соединительные провода.
Принципы измерения сердечного ритма
Работа проекта крайне проста, но необходимо освоить небольшие формулы для подсчета частоты сердечного ритма. Существует несколько методов для определения частоты сердечного ритма, но мы будем использовать метод пяти импульсов. В соответствии с данным методом частоту сердечного ритма можно определить по следующим формулам:
Five_pusle_time=time2-time1;
Single_pulse_time= Five_pusle_time /5;
rate=60000/ Single_pulse_time;
где time1 – время поступления первого импульса,
time2 – время поступления последнего (пятого) импульса,
rate – рассчитанная частота сердечного ритма.
Когда поступает первый импульс (сердечный удар) мы запускаем таймер подсчета времени на Arduino с помощью функции millis();. После этого мы сохраняем в памяти время первого импульса в переменной time1. Затем ждем когда закончатся 5 импульсов. После этого сохраняем время пятого импульса в переменной time2. Затем мы вычитаем time1 из time2 чтобы определить длительность пяти импульсов. Далее мы делим получившуюся разницу на 5 чтобы получить длительность одного импульса. Теперь, когда нам известна длительность одного импульса мы легко можем подсчитать количество импульсов в минуту разделив 60000 миллисекунд на длительность одного импульса:
Rate= 600000/single pulse time,
где single pulse time – длительность одного импульса.
Структурная схема работы устройства показана на следующем рисунке.
В этом проекте мы использовали датчик сердечного ритма, который содержит пару инфракрасных датчиков, способных считывать сердечный ритм с давления крови. Сердце при помощи своих сокращений заставляет кровь циркулировать (пульсировать), а мы считываем эти изменения.
Работа схемы
Схема монитора сердечного ритма представлена на следующем рисунке и содержит плату Arduino Uno, датчик сердечного ритма, кнопку сброса и ЖК дисплей. Плата Arduino управляет всем процессом, считывая данные от датчика сердечного ритма, вычисляя частоту сердечного ритма и передавая результат вычислений на ЖК дисплей. Мы можем регулировать чувствительность датчика сердечного ритма с помощью потенциометра, размешенного на нем.
Исходный код программы
В программе мы будем использовать функцию digitalRead() для считывания выхода датчика сердечного ритма и функцию millis() для расчета времени, которое мы потом будем использовать для расчета частоты сердечных сокращений.
Но перед этим мы должны инициализировать все компоненты, которые будем использовать в программе.
И еще необходимо подключить внутренние подтягивающие регистры к контактам, к которым подключены кнопки:
digitalWrite(Reset, HIGH);
digitalWrite(start, HIGH);
Далее представлен полный текст программы.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
#include<LiquidCrystal.h> // подключаем библиотеку для работы с ЖК дисплеем LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // контакты Arduino, к которым подключен ЖК дисплей int in = 8; int Reset=6; int start=7; int count=0,i=0,k=0,rate=0; unsigned long time2,time1; unsigned long time; byte heart[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000 }; void setup() { lcd.createChar(1, heart); lcd.begin(16,2); // инициализируем ЖК дисплей 16х2 lcd.print("Heart Beat "); lcd.write(1); lcd.setCursor(0,1); lcd.print("Monitoring"); pinMode(in, INPUT); // на ввод данных pinMode(Reset, INPUT); // на ввод данных pinMode(start, INPUT); // на ввод данных digitalWrite(Reset, HIGH); digitalWrite(start, HIGH); delay(1000); } void loop() { if(!(digitalRead(start))) { k=0; lcd.clear(); lcd.print("Please wait......."); while(k<5) // до 5 импульсов { if(digitalRead(in)) { if(k==0) time1=millis(); k++; while(digitalRead(in)); } } time2=millis(); rate=time2-time1; rate=rate/5; rate=60000/rate; lcd.clear(); lcd.print("Heart Beat Rate:"); lcd.setCursor(0,1); lcd.print(rate); lcd.print(" "); lcd.write(1); k=0; rate=0; } if(!digitalRead(Reset)) { rate=0; lcd.clear(); lcd.print("Heart Beat Rate:"); lcd.setCursor(0,1); lcd.write(1); lcd.print(rate); k=0; } } |