- Nødvendige komponenter
- Pulssensor SEN-11574
- Kredsløbsdiagram for grænseflade mellem pulssensor og PIC-mikrocontroller
- PIC16F877A Kode Forklaring til Heart Beat Monitor
Puls er den vigtigste parameter til overvågning af enhver persons helbred. I den moderne æra af bærbare enheder er der mange enheder, der kan måle hjerterytme, blodtryk, fodspor, forbrændte kalorier og mange andre ting. Disse enheder har pulssensor indeni dem for at registrere pulsfrekvensen. I dag bruger vi også en pulssensor med PIC Microcontroller til at tælle hjerterytme pr. Minut og Inter-Beat Interval, disse værdier vises yderligere på 16x2 tegn LCD. Vi bruger PIC16F877A PIC-mikrocontroller i dette projekt. Vi har allerede interfacet med pulssensor med Arduino til patientovervågningssystem.
Nødvendige komponenter
- PIC16F877A mikrokontroller
- 20 MHz krystal
- 33pF kondensator 2 stk
- 4,7 k modstand 1 stk
- 16x2 tegn LCD
- 10K pot til kontrastkontrol af LCD'et
- SEN-11574 Pulssensor
- Velcrobånd
- 5V strømadapter
- Breadboard og tilslutningstråde
Pulssensor SEN-11574
For at måle hjerterytmen har vi brug for en pulssensor. Her har vi valgt SEN-11574 pulsføler, som er let tilgængelig i online eller offline butikker. Vi brugte denne sensor, da der er eksempler på koder fra producenten, men det er en Arduino-kode. Vi konverterede den kode til vores PIC-mikrocontroller.
Sensoren er virkelig lille og perfekt til at læse hjerterytme over øreflippen eller lige ved hånden. Den er 0,625 ”i diameter og 0,125” tyk fra den runde PCB-side.
Denne sensor giver et analogt signal, og sensoren kan drives med 3V eller 5V, sensorens strømforbrug er 4 mA, hvilket er fantastisk til mobile applikationer. Sensoren leveres med tre ledninger med 24 ”langt tilslutningskabel og berg hanhoved i slutningen. Sensoren leveres også med velcro-fingerrem til at bære den over fingerspidsen.
Pulssensor-skema er også leveret af producenten og er også tilgængelig på sparkfun.com.
Sensordiagrammet består af optisk pulsføler, støjreduktion RC-kredsløb eller filtre, som kan ses i det skematiske diagram. R2, C2, C1, C3 og en operationsforstærker MCP6001 bruges til pålidelig forstærket analog udgang.
Der er få andre sensorer til Heart Beat-overvågning, men SEN-11574-pulsføler bruges meget i elektronikprojekter.
Kredsløbsdiagram for grænseflade mellem pulssensor og PIC-mikrocontroller
Her har vi tilsluttet pulssensoren på tværs af en 2. pin på mikrocontrollerenheden. Da sensoren leverer analoge data, er vi nødt til at konvertere de analoge data til digitalt signal ved at udføre nødvendige beregninger.
The Crystal Oscillator ifølge 20MHz er forbundet over to OSC stifter af microcontroller enhed med to keramiske 33pF kondensatorer. Det LCD forbindes på tværs af RB-porten på microcontroller.
PIC16F877A Kode Forklaring til Heart Beat Monitor
Koden er en smule kompleks for begyndere. Producenten leverede prøvekoder til SEN-11574 sensoren, men den blev skrevet til Arduino-platformen. Vi er nødt til at konvertere beregningen for vores mikrochip, PIC16F877A. Komplet kode gives i slutningen af dette projekt med en demonstrationsvideo. Og de understøttende C-filer kan downloades herfra.
Vores kodeflow er relativt simpelt, og vi lavede trinnene ved hjælp af en switch case. I henhold til producenten skal vi hente dataene fra sensoren hver 2. millisekund. Så vi brugte en timer-afbrydelsesrutine, der vil affyre en funktion i hvert 2. millisekunder.
Vores kodestrøm i switch- erklæringen vil gå sådan her:
Tilfælde 1: Læs ADC
Tilfælde 2: Beregn hjerteslag og IBI
Tilfælde 3: Vis hjerterytmen og IBI på LCD
Sag 4: IDLE (gør ingenting)
Inde i timer-afbrydelsesfunktionen ændrer vi programmets tilstand til sag 1: Læs ADC hver 2. millisekund.
Så i hovedfunktionen definerede vi programtilstanden og alle switchcases .
ugyldig main () { system_init (); hovedstat = READ_ADC; mens (1) { switch (main_state) { case READ_ADC: { adc_value = ADC_Read (0); // 0 er kanalnummeret main_state = CALCULATE_HEART_BEAT; pause; } sag CALCULATE_HEART_BEAT: { calcut_heart_beat (adc_value); hovedstat = SHOW_HEART_BEAT; pause; } sag SHOW_HEART_BEAT: { if (QS == true) {// Der blev fundet et hjerterytme // BPM og IBI er bestemt // Kvantificeret selv "QS" sandt, når Arduino finder et hjerterytme QS = false; // nulstil det kvantificerede selvflag til næste gang // 0,9 bruges til at få bedre data. faktisk ikke bør bruges 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; pause; sag IDLE: { pause; } standard: { } } } }
Vi bruger to hardwareudstyr til PIC16F877A: Timer0 og ADC.
Inde i filen timer0.c, TMR0 = (uint8_t) (tmr0_mask & (256 - (((2 * _XTAL_FREQ) / (256 * 4)) / 1000)));
Denne beregning giver timeafbrydelsen på 2 millisekunder. Beregningsformlen er
// TimerCountMax - (((forsinkelse (ms) * Focs (hz)) / (PreScale_Val * 4)) / 1000)
Hvis vi ser timer_isr- funktionen, er det-
ugyldig timer_isr () { main_state = READ_ADC; }
I denne funktion ændres programtilstanden til READ_ADC i hver 2. ms.
Derefter er funktionen CALCULATE_HEART_BEAT taget fra Arduino-eksempelkoden.
ugyldig beregne_hjerte_beat (int adc_value) { Signal = adc_value; sampleCounter + = 2; // holde styr på tiden i mS med denne variabel int N = sampleCounter - lastBeatTime; // overvåge tiden siden sidste beat for at undgå støj // find toppen og truget af pulsbølgen hvis (Signal <tærsk && N> (IBI / 5) * 3) {// undgå dikrotisk støj ved at vente 3/5 af sidste IBI, hvis (Signal <T) {// T er truget T = Signal; // holde styr på laveste punkt i pulsbølge } } …………. ………………………..
Yderligere er den komplette kode angivet nedenfor og forklaret godt af kommentarerne. Disse hjerterytmesensordata kan yderligere uploades til skyen og overvåges over internettet overalt, hvilket gør det til det IoT-baserede Heart Beat Monitoring-system, følg linket for at lære mere.
Download understøttende C-filer til dette PIC Pulse Sensor Project herfra.