- Nødvendige komponenter
- Pulssensor SEN-11574
- Kretsdiagram for pulsfølergrensesnitt med PIC Microcontroller
- PIC16F877A Kode Forklaring for hjerteslagmonitor
Hjerteslagfrekvens er den viktigste parameteren for å overvåke en persons helse. I den moderne tid med bærbare enheter er det mange enheter som kan måle hjerterytme, blodtrykk, fotspor, kaloriforbrenning og mye annet. Disse enhetene har pulssensor i seg for å registrere pulsfrekvensen. I dag vil vi også bruke en pulssensor med PIC Microcontroller for å telle hjerterytme per minutt og Inter-Beat Interval, disse verdiene vil bli vist videre på 16x2 tegn LCD. Vi vil bruke PIC16F877A PIC-mikrokontroller i dette prosjektet. Vi har allerede koblet pulssensor til Arduino for pasientovervåkingssystem.
Nødvendige komponenter
- PIC16F877A mikrokontroller
- 20 MHz krystall
- 33pF kondensator 2 stk
- 4,7 k motstand 1 stk
- 16x2 tegn LCD
- 10K-pott for kontrastkontroll av LCD-skjermen
- SEN-11574 Pulssensor
- Borrelås
- 5V strømadapter
- Paneler og oppkoblingstråder
Pulssensor SEN-11574
For å måle hjerterytmen trenger vi en pulssensor. Her har vi valgt SEN-11574 pulssensor som er lett tilgjengelig på online eller offline butikker. Vi brukte denne sensoren siden det er eksempler fra produsenten, men det er en Arduino-kode. Vi konverterte den koden for PIC-mikrokontrolleren vår.
Sensoren er veldig liten og perfekt for å lese hjerterytme over øreflippen eller på fingertuppen. Den er 0,625 ”i diameter og 0,125” tykk fra den runde PCB-siden.
Denne sensoren gir et analogt signal, og sensoren kan drives med 3V eller 5V, strømforbruket til sensoren er 4 mA, noe som er bra for mobile applikasjoner. Sensoren leveres med tre ledninger med 24 ”lang tilkoblingskabel og berg hannhode på slutten. Sensoren leveres også med borrelåsfingerrem for å bære den over fingertuppene.
Pulssensorskjema er også levert av produsenten og er også tilgjengelig på sparkfun.com.
Sensordiagrammet består av optisk pulssensor, støykansellerende RC-kretsløp eller filtre, som kan sees i skjematisk diagram. R2, C2, C1, C3 og en operasjonsforsterker MCP6001 brukes for pålitelig forsterket analog utgang.
Det er få andre sensorer for Heart Beat Monitoring, men SEN-11574 pulssensor er mye brukt i elektronikkprosjekter.
Kretsdiagram for pulsfølergrensesnitt med PIC Microcontroller
Her har vi koblet til pulssensor over et 2 nd tapp av mikrokontrolleren enhet. Siden sensoren gir analoge data, må vi konvertere de analoge dataene til digitalt signal ved å gjøre nødvendige beregninger.
Den Crystal Oscillator som 20Mhz er koblet over to OSC pinner av mikrokontrolleren enhet med to keramiske kondensatorer 33pF. Det LCD er koblet over RB-porten på mikrokontrolleren.
PIC16F877A Kode Forklaring for hjerteslagmonitor
Koden er litt kompleks for nybegynnere. Produsenten ga eksempler på SEN-11574-sensoren, men den ble skrevet for Arduino-plattformen. Vi må konvertere beregningen for mikrochipet vårt, PIC16F877A. Komplett kode er gitt på slutten av dette prosjektet med en demonstrasjonsvideo. Og de støttende C-filene kan lastes ned herfra.
Kodestrømmen vår er relativt enkel, og vi gjorde trinnene ved hjelp av et bryterveske . I følge produsenten må vi hente dataene fra sensoren hvert 2. millisekund. Så vi brukte en timeravbruddsrutin som vil utløse en funksjon hver 2. millisekund.
Kodestrømmen vår i switch- setningen vil gå slik:
Sak 1: Les ADC
Tilfelle 2: Beregn hjerteslag og IBI
Tilfelle 3: Vis hjerterytmen og IBI på LCD
Sak 4: IDLE (Gjør ingenting)
Inne i tidsavbruddsfunksjonen endrer vi programmets tilstand til Case 1: Les ADC hver 2. millisekund.
Så, i den viktigste funksjonen, vi definert programmet staten og alle bryter tilfeller.
ugyldig hoved () { 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; gå i stykker; } sak CALCULATE_HEART_BEAT: { calcute_heart_beat (adc_value); hovedstat = SHOW_HEART_BEAT; gå i stykker; } case SHOW_HEART_BEAT: { if (QS == true) {// A Heartbeat Was Found // BPM and IBI has been determined // Quantified Self "QS" true when Arduino finner a heartbeat QS = false; // tilbakestill kvantifisert selvflagg for neste gang // 0,9 brukt for å få bedre data. skal egentlig ikke brukes 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; gå i stykker; sak IDLE: { pause; } standard: { } } } }
Vi bruker to maskinvareutstyr til PIC16F877A: Timer0 og ADC.
Inne i timer0.c-filen, TMR0 = (uint8_t) (tmr0_mask & (256 - (((2 * _XTAL_FREQ) / (256 * 4)) / 1000)));
Denne beregningen gir tidsavbruddet på 2 millisekunder. Beregningsformelen er
// TimerCountMax - (((forsinkelse (ms) * Focs (hz)) / (PreScale_Val * 4)) / 1000)
Hvis vi ser timer_isr- funksjonen, er det-
ugyldig timer_isr () { main_state = READ_ADC; }
I denne funksjonen endres programtilstanden til READ_ADC hver 2. sekund.
Deretter er funksjonen CALCULATE_HEART_BEAT hentet fra Arduino-eksempelkoden.
ugyldig beregne_hjerteslag (int adc_value) { Signal = adc_value; sampleCounter + = 2; // holde oversikt over tiden i mS med denne variabelen int N = sampleCounter - lastBeatTime; // overvåke tiden siden siste taktslag for å unngå støy // finne topp og trau av pulsbølgen hvis (Signal <trøske && N> (IBI / 5) * 3) {// unngå dikrotisk støy ved å vente 3/5 av siste IBI hvis (Signal <T) {// T er trau T = Signal; // holde oversikt over laveste punkt i pulsbølge } } …………. ………………………..
Videre er den komplette koden gitt nedenfor og godt forklart av kommentarene. Disse hjerterytmesensordataene kan lastes opp videre til skyen og overvåkes over internett hvor som helst, noe som gjør det til det IoT-baserte Heart Beat Monitoring-systemet. Følg lenken for å lære mer.
Last ned støttende C-filer for dette PIC Pulse Sensor Project herfra.