- Необходими компоненти
- Импулсен сензор SEN-11574
- Схема за свързване на импулсен сензор с микроконтролер PIC
- Обяснение на кода PIC16F877A за монитор за сърдечен ритъм
Честотата на сърдечните удари е най-важният параметър за наблюдение на здравето на всеки човек. В съвременната ера на носимите устройства има много устройства, които могат да измерват сърдечния ритъм, кръвното налягане, стъпките, изгорените калории и много други неща. Тези устройства имат импулсен сензор вътре в тях, за да усетят честотата на пулса. Днес ние също ще използваме импулсен сензор с PIC микроконтролер, за да отчитаме сърдечния ритъм в минута и Inter-Beat Interval, тези стойности ще бъдат допълнително показани на 16x2 символен LCD. В този проект ще използваме PIC16F877A PIC микроконтролер. Вече сме свързали пулсовия сензор с Arduino за система за наблюдение на пациентите.
Необходими компоненти
- Микроконтролер PIC16F877A
- 20 Mhz кристал
- 33pF кондензатор 2 бр
- 4.7k резистор 1 бр
- 16x2 символен LCD
- 10K пот за контрол на контраста на LCD
- SEN-11574 Импулсен сензор
- Каишка с велкро
- 5V захранващ адаптер
- Макети и кабели за свързване
Импулсен сензор SEN-11574
За измерване на сърдечния ритъм се нуждаем от импулсен сензор. Тук сме избрали сензор за импулс SEN-11574, който е лесно достъпен в онлайн или офлайн магазини. Използвахме този сензор, тъй като има примерни кодове, предоставени от производителя, но това е код на Arduino. Преобразувахме този код за нашия PIC микроконтролер.
Сензорът е наистина малък и идеален за четене на сърдечен ритъм през ушната мида или на върха на пръста. Той е 0,625 ”в диаметър и 0,125” дебел от кръглата страна на печатната платка.
Този сензор осигурява аналогов сигнал и сензорът може да се задвижва с 3V или 5V, текущата консумация на сензора е 4 mA, което е чудесно за мобилни приложения. Сензорът се предлага с три проводника с 24-инчов свързващ кабел и berg мъжки хедер в края. Също така, сензорът се предлага с велкро пръст, за да го носите през върха на пръста.
Схемата на импулсния сензор също се предоставя от производителя и също се предлага на sparkfun.com.
Схемата на сензора се състои от оптичен сензор за сърдечен ритъм, RC схема за анулиране на шума или филтри, които могат да се видят на схематичната диаграма. R2, C2, C1, C3 и операционен усилвател MCP6001 се използват за надежден усилен аналогов изход.
Има няколко други сензора за мониториране на сърдечния ритъм, но импулсният сензор SEN-11574 се използва широко в проекти за електроника.
Схема за свързване на импулсен сензор с микроконтролер PIC
Тук сме свързали импулсния сензор през 2- ри щифт на микроконтролера. Тъй като сензорът предоставя аналогови данни, трябва да преобразуваме аналоговите данни в цифров сигнал, като направим необходимите изчисления.
На кварцов генератор на 20MHz е свързан през две OSC щифтове на единицата микроконтролер с две керамични 33pF кондензатори. На дисплея е свързан целия RB пристанището на микроконтролер.
Обяснение на кода PIC16F877A за монитор за сърдечен ритъм
Кодът е малко сложен за начинаещи. Производителят предостави примерни кодове за сензора SEN-11574, но той е написан за платформата Arduino. Трябва да преобразуваме изчислението за нашия микрочип, PIC16F877A. Пълният код е даден в края на този проект с демонстрационно видео. А поддържащите C файлове можете да изтеглите от тук.
Нашият поток на код е сравнително прост и ние направихме стъпките, използвайки превключвател . Според производителя трябва да получаваме данните от сензора на всеки 2 милисекунди. И така, използвахме рутинна услуга за прекъсване на таймера, която ще задейства функция на всеки 2 милисекунди.
Нашият поток на код в инструкцията за превключване ще върви по следния начин:
Случай 1: Прочетете ADC
Случай 2: Изчислете сърдечния ритъм и IBI
Случай 3: Покажете сърдечния ритъм и IBI на LCD
Случай 4: НЕАКТИВНО (Не правете нищо)
Вътре във функцията за прекъсване на таймера променяме състоянието на програмата на Случай 1: Прочетете ADC на всеки 2 милисекунди.
И така, в основната функция дефинирахме състоянието на програмата и всички случаи на превключване .
void main () { system_init (); main_state = READ_ADC; while (1) { switch (main_state) { case READ_ADC: { adc_value = ADC_Read (0); // 0 е номерът на канала main_state = CALCULATE_HEART_BEAT; почивка; } случай CALCULATE_HEART_BEAT : { изчисли_сърце_бийт (adc_value); main_state = SHOW_HEART_BEAT; почивка; } case SHOW_HEART_BEAT: { if (QS == true) {// Намерен е сърдечен ритъм // BPM и IBI са определени // Количествено Self "QS" true, когато Arduino открие сърдечен ритъм QS = false; // нулиране на флага на количествения Self за следващия път // 0.9, използван за получаване на по-добри данни. всъщност не трябва да се използва BPM = BPM * 0.9; IBI = IBI / 0,9; lcd_com (0x80); lcd_puts ("BPM: -"); lcd_print_number (BPM); lcd_com (0xC0); lcd_puts ("IBI: -"); lcd_print_number (IBI); } } main_state = IDLE; почивка; случай на празен ход: { почивка; } по подразбиране: { } } } }
Използваме две хардуерни периферни устройства на PIC16F877A: Timer0 и ADC.
Във файла timer0.c, TMR0 = (uint8_t) (tmr0_mask & (256 - (((2 * _XTAL_FREQ) / (256 * 4)) / 1000)));
Това изчисление осигурява прекъсване на таймера от 2 милисекунди. Формулата за изчисление е
// TimerCountMax - (((забавяне (ms) * Focs (hz)) / (PreScale_Val * 4)) / 1000)
Ако видим функцията timer_isr , тя е-
void timer_isr () { main_state = READ_ADC; }
В тази функция състоянието на програмата се променя на READ_ADC на всеки 2 ms.
Тогава функцията CALCULATE_HEART_BEAT се взема от примерния код на Arduino.
void calcu_heart_beat (int adc_value) { Signal = adc_value; sampleCounter + = 2; // следим времето в mS с тази променлива int N = sampleCounter - lastBeatTime; // следим времето от последния ритъм, за да избегнем шума // намерим пика и дъното на пулсовата вълна, ако (Signal <thresh && N> (IBI / 5) * 3) {// избягваме дихротичния шум, като изчакаме 3/5 на последния IBI, ако (Signal <T) {// T е коритото T = Signal; // проследяване на най-ниската точка в импулсната вълна } } …………. ………………………..
Освен това, пълният код е даден по-долу и е добре обяснен от коментарите. Тези данни за сърдечен ритъм могат да бъдат допълнително качени в облака и наблюдавани по интернет от всяко място, което по този начин го прави базирана на IoT система за мониторинг на сърдечния ритъм, следвайте връзката, за да научите повече.
Изтеглете поддържащи C файлове за този проект за PIC импулсен сензор от тук.