- Nepieciešamās sastāvdaļas
- Impulsa sensors SEN-11574
- Impulsu sensora shēmas shēma, kas mijiedarbojas ar PIC mikrokontrolleru
- PIC16F877A koda skaidrojums sirdsdarbības monitoram
Sirdsdarbības ātrums ir vissvarīgākais parametrs jebkura cilvēka veselības uzraudzībā. Mūsdienās valkājamo ierīču laikmetā ir daudz ierīču, ar kurām var izmērīt sirdsdarbību, asinsspiedienu, soļus, sadedzinātās kalorijas un daudz ko citu. Šīm ierīcēm ir pulsa sensors, kas uztver pulsa ātrumu. Šodien mēs izmantosim arī pulsa sensoru ar PIC mikrokontrolleru, lai uzskaitītu sirdsdarbības ātrumu minūtē un starplaiku intervālu. Šīs vērtības turpmāk tiks parādītas 16x2 rakstzīmju LCD. Šajā projektā mēs izmantosim PIC16F877A PIC mikrokontrolleru. Mēs jau esam sasaistījuši impulsu sensoru ar pacienta uzraudzības sistēmas Arduino.
Nepieciešamās sastāvdaļas
- PIC16F877A mikrokontrolleris
- 20 Mhz kristāls
- 33pF kondensators 2 gab
- 4.7k rezistors 1 gab
- 16x2 rakstzīmju LCD
- 10K katls LCD kontrasta kontrolei
- SEN-11574 impulsa sensors
- Velcro siksna
- 5V strāvas adapteris
- Maizes dēļa un savienojuma vadi
Impulsa sensors SEN-11574
Lai izmērītu sirdsdarbību, mums ir nepieciešams pulsa sensors. Šeit mēs esam izvēlējušies SEN-11574 pulsa sensoru, kas ir viegli pieejams tiešsaistes vai bezsaistes veikalos. Mēs izmantojām šo sensoru, jo ir ražotāja sniegtie kodu paraugi, taču tas ir Arduino kods. Mēs pārveidojām šo kodu savam PIC mikrokontrollerim.
Sensors ir patiešām mazs un ideāls sirdsdarbības nolasīšanai visā auss ļipiņā vai uz pirksta gala. No apaļas PCB puses tā diametrs ir 0,625 ”un biezums 0,125”.
Šis sensors nodrošina analogo signālu, un sensoru var darbināt ar 3V vai 5V, pašreizējais sensora patēriņš ir 4 mA, kas ir lieliski piemērots mobilajām lietojumprogrammām. Sensoram ir trīs vadi ar 24 ”garu pievienošanas kabeli un bergu uzgaļa galā. Sensoram ir arī Velcro pirkstu siksna, lai to nēsātu pirksta galā.
Impulsu sensora shēmu nodrošina arī ražotājs, un tā ir pieejama arī vietnē sparkfun.com.
Sensora shēma sastāv no optiskā sirdsdarbības sensora, trokšņu slāpēšanas RC shēmas vai filtriem, kas redzami shematiskajā diagrammā. Lai uzticama pastiprināta analogā izeja, tiek izmantoti R2, C2, C1, C3 un operatīvais pastiprinātājs MCP6001.
Sirdsdarbības kontrolei ir maz citu sensoru, bet SEN-11574 impulsu sensors tiek plaši izmantots elektronikas projektos.
Impulsu sensora shēmas shēma, kas mijiedarbojas ar PIC mikrokontrolleru
Šeit mēs esam savienojuši impulsa sensoru pāri mikrokontrolleru bloka 2. tapai. Tā kā sensors nodrošina analogus datus, analogie dati jāpārvērš ciparu signālā, veicot nepieciešamos aprēķinus.
Oscillator 20 MHz ir savienots pāri diviem OSC tapām mikrokontrolleru vienība ar diviem keramikas 33pF kondensatoru. LCD ir savienota pāri RB ostas mikrokontrolleru.
PIC16F877A koda skaidrojums sirdsdarbības monitoram
Kods ir mazliet sarežģīts iesācējiem. Ražotājs sniedza SEN-11574 sensora kodu paraugus, bet tie tika uzrakstīti platformai Arduino. Mums jāpārvērš mūsu mikroshēmas PIC16F877A aprēķins. Pilns kods tiek dots šī projekta beigās ar demonstrācijas video. C atbalsta failus var lejupielādēt šeit.
Mūsu kodu plūsma ir salīdzinoši vienkārša, un mēs veicām darbības, izmantojot slēdža lietu. Saskaņā ar ražotāju mums dati no sensora jāsaņem ik pēc 2 milisekundēm. Tātad, mēs izmantojām taimera pārtraukuma pakalpojumu rutīnu, kas aktivizēs funkciju ik pēc 2 milisekundēm.
Mūsu koda plūsma slēdža paziņojumā notiks šādi:
1. gadījums: izlasiet ADC
2. gadījums: aprēķiniet sirdsdarbību un IBI
3. gadījums: LCD ekrānā parādiet sirdsdarbību un IBI
4. gadījums: IDLE (nedarīt neko)
Taimera pārtraukšanas funkcijas ietvaros mēs mainām programmas stāvokli uz 1. gadījumu: lasiet ADC ik pēc 2 milisekundēm.
Tātad galvenajā funkcijā mēs definējām programmas stāvokli un visus slēdžu gadījumus.
void main () { system_init (); galvenā stacija = READ_ADC; while (1) { switch (main_state) { case READ_ADC: { adc_value = ADC_Read (0); // 0 ir kanāla numurs main_state = CALCULATE_HEART_BEAT; pārtraukums; } gadījums CALCULATE_HEART_BEAT: { aprēķināt_sirds_sitiens (reklāmas_vērtība); galvenā stacija = SHOW_HEART_BEAT; pārtraukums; } gadījums SHOW_HEART_BEAT: { if (QS == true) {// Tika atrasts sirdsdarbība // BPM un IBI ir noteikti // Kvantificēts Self "QS" taisnība, kad Arduino atrod sirdsdarbību QS = false; // atiestatīt Quantified Self karodziņu nākamajai reizei // 0,9 izmanto, lai iegūtu labākus datus. faktiski nevajadzētu lietot 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; pārtraukums; gadījums IDLE: { pārtraukums; } noklusējums: { } } } }
Mēs izmantojam divas PIC16F877A aparatūras perifērijas ierīces: Timer0 un ADC.
Failā timer0.c, TMR0 = (uint8_t) (tmr0_maska & (256 - (((2 * _XTAL_FREQ) / (256 * 4)) / 1000)));
Šis aprēķins nodrošina 2 milisekunžu taimera pārtraukumu. Aprēķina formula ir
// TimerCountMax - (((kavēšanās (ms) * Focs (hz)) / (PreScale_Val * 4)) / 1000)
Ja redzam funkciju timer_isr , tas ir-
void timer_isr () { main_state = READ_ADC; }
Šajā funkcijā programmas stāvoklis tiek mainīts uz READ_ADC ik pēc 2 ms.
Tad funkcija CALCULATE_HEART_BEAT tiek ņemta no Arduino koda parauga.
void aprēķināt_sirds_sitiens (int adc_value) { Signāls = adc_value; sampleCounter + = 2; // sekojiet laikam mS ar šo mainīgo int N = sampleCounter - lastBeatTime; // novērojiet laiku kopš pēdējā sitiena, lai izvairītos no trokšņa // atrodiet pulsa viļņa virsotni un sile, ja (Signal <thresh && N> (IBI / 5) * 3) {// izvairieties no dihrotiska trokšņa, gaidot 3/5 no pēdējās IBI, ja (signāls <T) {// T ir sile T = signāls; // sekot pulsa viļņa zemākajam punktam } } …………. ………………………..
Tālāk pilns kods ir norādīts zemāk un ir labi izskaidrots ar komentāriem. Šos sirdsdarbības sensora datus var tālāk augšupielādēt mākonī un uzraudzīt internetā no jebkuras vietas, tādējādi padarot to par IoT balstītu sirdsdarbības uzraudzības sistēmu. Lai uzzinātu vairāk, sekojiet saitei.
Šeit lejupielādējiet šī PIC impulsa sensoru projekta atbalstošos C failus.