- Potrebne komponente
- Pulsni senzor SEN-11574
- Kružna shema za povezivanje senzora pulsa s PIC mikrokontrolerom
- Objašnjenje PIC16F877A koda za monitor otkucaja srca
Otkucaji srca su najvažniji parametar u praćenju zdravlja bilo koje osobe. U modernoj eri nosivih uređaja postoji puno uređaja koji mogu mjeriti otkucaje srca, krvni tlak, korake, sagorijevanje kalorija i puno drugih stvari. Ovi uređaji imaju pulsni senzor u sebi za mjerenje brzine pulsa. Danas ćemo upotrijebiti i pulsni senzor s PIC mikrokontrolerom za brojanje otkucaja srca u minuti i Inter-Beat Interval, te vrijednosti će se dalje prikazivati na LCD-u sa 16x2 znaka. U ovom ćemo projektu koristiti PIC16F877A PIC mikrokontroler. Pulsni senzor već smo povezali s Arduinom za sustav praćenja pacijenta.
Potrebne komponente
- PIC16F877A mikrokontroler
- Kristal od 20 MHz
- 33pF kondenzator 2 kom
- Otpor 4.7k 1 kom
- LCD s 16x2 karaktera
- 10K lonac za kontrolu kontrasta LCD-a
- SEN-11574 Pulsni senzor
- Remen na čičak
- 5V adapter za napajanje
- Žičane ploče i priključne žice
Pulsni senzor SEN-11574
Za mjerenje otkucaja srca potreban nam je pulsni senzor. Ovdje smo odabrali pulsni senzor SEN-11574 koji je lako dostupan u mrežnim ili izvanmrežnim trgovinama. Koristili smo ovaj senzor s obzirom na to da proizvođač nudi uzorke kodova, ali to je Arduino kod. Taj smo kod pretvorili za naš PIC mikrokontroler.

Senzor je stvarno mali i savršen za očitavanje otkucaja srca preko ušne školjke ili na vršku prsta. Promjer je 0,625 ”i debljine 0,125” s okrugle strane PCB-a.
Ovaj senzor daje analogni signal, a senzor se može pokretati s 3 V ili 5 V, trenutna potrošnja senzora je 4 mA, što je izvrsno za mobilne aplikacije. Senzor dolazi s tri žice s 24-inčnim kabelom za spajanje i muškim zaglavljem berg na kraju. Također, senzor dolazi s čičak trakom za nošenje preko vrha prsta.
Shemu senzora pulsa također pruža proizvođač, a dostupna je i na sparkfun.com.

Shema senzora sastoji se od optičkog senzora brzine otkucaja srca, RC sklopa za uklanjanje šuma ili filtera, što se može vidjeti na shematskom dijagramu. R2, C2, C1, C3 i operativno pojačalo MCP6001 koriste se za pouzdani pojačani analogni izlaz.
Postoji nekoliko drugih senzora za nadzor otkucaja srca, ali impulsni senzor SEN-11574 široko se koristi u elektroničkim projektima.
Kružna shema za povezivanje senzora pulsa s PIC mikrokontrolerom

Ovdje smo spojili pulsni senzor preko drugog pina jedinice mikrokontrolera. Kako senzor daje analogne podatke, moramo pretvoriti analogne podatke u digitalni signal radeći potrebne proračune.
Crystal oscilator od 20MHz je spojen preko dva osc kočiće mikrokontrolerom jedinice s dva keramičkih 33pF kondenzatora. LCD spojen preko RB port mikrokontrolera.

Objašnjenje PIC16F877A koda za monitor otkucaja srca
Kôd je malo složen za početnike. Proizvođač je dostavio uzorke kodova za senzor SEN-11574, ali on je napisan za Arduino platformu. Moramo pretvoriti izračun za naš mikročip, PIC16F877A. Kompletni kod dat je na kraju ovog projekta s demonstracijskim videom. A podržavajuće C datoteke možete preuzeti ovdje.
Naš protok koda relativno je jednostavan i korake smo napravili pomoću kućišta prekidača . Prema proizvođaču, podatke sa senzora moramo dobiti u svake 2 milisekunde. Dakle, koristili smo rutinu usluge prekida timera koja će aktivirati funkciju u svake 2 milisekunde.
Naš tijek koda u naredbi switch ići će ovako:
Slučaj 1: Pročitajte ADC
Slučaj 2: Izračunajte otkucaje srca i IBI
Slučaj 3: Prikažite otkucaje srca i IBI na LCD-u
Slučaj 4: Prazan rad (ne poduzimati ništa)
Unutar funkcije prekida timera mijenjamo stanje programa u Slučaj 1: Pročitajte ADC svake 2 milisekunde.
Dakle, u glavnoj funkciji definirali smo stanje programa i sve slučajeve prekidača .
void main () { system_init (); main_state = READ_ADC; while (1) { switch (main_state) { case READ_ADC: { adc_value = ADC_Read (0); // 0 je broj kanala main_state = CALCULATE_HEART_BEAT; pauza; } slučaj CALCULATE_HEART_BEAT: { izračunaj_srce_beat (adc_value); main_state = SHOW_HEART_BEAT; pauza; } case SHOW_HEART_BEAT: { if (QS == true) {// Otkucaj srca je pronađen // Utvrđeni su BPM i IBI // Kvantificirani Self "QS" true kada Arduino otkrije otkucaje srca QS = false; // resetiranje kvantificirane zastave za sljedeći put // 0.9 koristi se za dobivanje boljih podataka. zapravo se ne smije koristiti 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; pauza; IDLE case: { break; } zadano: { } } } }
Koristimo dvije hardverske periferne jedinice PIC16F877A: Timer0 i ADC.
Unutar datoteke timer0.c, TMR0 = (uint8_t) (tmr0_maska & (256 - (((2 * _XTAL_FREQ) / (256 * 4)) / 1000)));
Ovaj izračun pruža prekid odbrojavanja od 2 milisekunde. Formula za izračun je
// TimerCountMax - (((kašnjenje (ms) * Focs (hz)) / (PreScale_Val * 4)) / 1000)
Ako vidimo funkciju timer_isr , to je-
void timer_isr () { main_state = READ_ADC; }
U ovoj se funkciji stanje programa mijenja u READ_ADC svakih 2 ms.
Tada se funkcija CALCULATE_HEART_BEAT preuzima iz primjera koda Arduino.
nevažeće izračunaj_srce_biota (int adc_value) { Signal = adc_value; sampleCounter + = 2; // pratimo vrijeme u mS s ovom varijablom int N = sampleCounter - lastBeatTime; // nadziremo vrijeme od zadnjeg otkucaja kako bismo izbjegli buku // pronašli vrhunac i donji dio pulsnog vala ako (Signal <thresh && N> (IBI / 5) * 3) {// izbjegli dikrotični šum čekanjem 3/5 zadnjeg IBI if (Signal <T) {// T je korito T = Signal; // pratiti najnižu točku u impulsnom valu } } …………. ………………………..
Nadalje, u nastavku je dan cjelovit kod i dobro objašnjen komentarima. Ovi podaci senzora otkucaja srca mogu se dalje prenositi u oblak i nadzirati putem Interneta s bilo kojeg mjesta, što ga čini sustavom za nadzor otkucaja srca temeljenim na IoT-u, slijedite vezu da biste saznali više.
Preuzmite datoteke podrške C za ovaj projekt PIC impulsnog senzora od ovdje.
