- Nödvändiga komponenter
- Pulssensor SEN-11574
- Kretsschema för gränssnitt mellan pulsgivare och PIC-mikrokontroller
- PIC16F877A Kodförklaring för hjärtslagmonitor
Hjärtrytm är den viktigaste parametern för att övervaka alla människors hälsa. I den moderna eran av bärbara enheter finns det många enheter som kan mäta hjärtslag, blodtryck, fotsteg, brända kalorier och mycket annat. Dessa enheter har pulssensor inuti för att känna av pulsfrekvensen. Idag kommer vi också att använda en pulssensor med PIC Microcontroller för att räkna hjärtslag per minut och Inter-Beat Interval, dessa värden visas ytterligare på 16x2 tecken LCD. Vi kommer att använda PIC16F877A PIC-mikrokontroller i detta projekt. Vi har redan kopplat pulssensor med Arduino för patientövervakningssystem.
Nödvändiga komponenter
- PIC16F877A mikrokontroller
- 20 MHz kristall
- 33pF kondensator 2 st
- 4,7 k motstånd 1 st
- 16x2 tecken LCD
- 10K potten för kontrastkontroll av LCD-skärmen
- SEN-11574 Pulssensor
- Kardborreband
- 5V nätadapter
- Brödbrädor och anslutningsledningar
Pulssensor SEN-11574
För att mäta hjärtslag behöver vi en pulssensor. Här har vi valt SEN-11574 pulssensor som är lätt tillgänglig i online- eller offlinebutiker. Vi använde den här sensorn eftersom det finns provkoder från tillverkaren, men det är en Arduino-kod. Vi konverterade den koden för vår PIC-mikrokontroller.
Sensorn är väldigt liten och perfekt för att läsa hjärtslag över öronsnäckan eller på fingertoppen. Den är 0,625 ”i diameter och 0,125” tjock från den runda kretskortsidan.
Denna sensor ger en analog signal och sensorn kan drivas med 3V eller 5V, sensorns strömförbrukning är 4 mA, vilket är bra för mobila applikationer. Sensorn levereras med tre trådar med 24 ”lång anslutningskabel och berghuvud i slutet. Dessutom kommer sensorn med kardborreband för att bära den över fingertoppen.
Pulsgivarschemat tillhandahålls också av tillverkaren och finns också på sparkfun.com.
Sensorschemat består av optisk pulssensor, brusreducerande RC-kretsar eller filter, vilket kan ses i det schematiska diagrammet. R2, C2, C1, C3 och en operationsförstärkare MCP6001 används för tillförlitlig förstärkt analog utgång.
Det finns få andra sensorer för Heart Beat Monitoring men SEN-11574 pulssensor används ofta i elektronikprojekt.
Kretsschema för gränssnitt mellan pulsgivare och PIC-mikrokontroller
Här har vi anslutit pulssensorn över en andra stift av mikrokontroller- enheten. Eftersom sensorn tillhandahåller analoga data måste vi konvertera analoga data till digital signal genom att göra nödvändiga beräkningar.
Den Crystal oscillator av 20 MHz är ansluten över två OSC stiften på mikrostyrenheten enhet med två keramiska 33pF kondensatorer. Den LCD är ansluten över RB-porten på mikrokontroller.
PIC16F877A Kodförklaring för hjärtslagmonitor
Koden är lite komplex för nybörjare. Tillverkaren tillhandahöll provkoder för SEN-11574-sensorn, men den skrevs för Arduino-plattformen. Vi måste konvertera beräkningen för vårt mikrochip, PIC16F877A. Komplett kod ges i slutet av detta projekt med en demonstrationsvideo. Och de stödjande C-filerna kan laddas ner härifrån.
Vårt kodflöde är relativt enkelt och vi gjorde stegen med hjälp av en switch case. Enligt tillverkaren måste vi hämta data från sensorn varannan millisekund. Så vi använde en timeravbrottsrutin som avfyrar en funktion varannan millisekund.
Vårt kodflöde i switch- uttalandet kommer att gå så här:
Fall 1: Läs ADC
Fall 2: Beräkna hjärtrytmen och IBI
Fall 3: Visa hjärtslag och IBI på LCD
Fall 4: IDLE (Gör ingenting)
Inuti timeravbrottsfunktionen ändrar vi programmets tillstånd till fall 1: Läs ADC varannan sekund.
Så i huvudfunktionen definierade vi programtillståndet och alla kopplingsfall.
ogiltig huvud () { system_init (); huvudstat = READ_ADC; medan (1) { switch (main_state) { case READ_ADC: { adc_value = ADC_Read (0); // 0 är kanalnumret main_state = CALCULATE_HEART_BEAT; ha sönder; } fall CALCULATE_HEART_BEAT: { beräkna_hjärtat_slag (adc_value); huvudstat = SHOW_HEART_BEAT; ha sönder; } fall SHOW_HEART_BEAT: { if (QS == true) {// Ett hjärtslag hittades // BPM och IBI har bestämts // Kvantifierat själv "QS" sant när Arduino hittar hjärtslag QS = false; // återställ den kvantifierade självflaggan för nästa gång // 0,9 används för att få bättre data. ska egentligen inte användas 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; ha sönder; fall IDLE: { break; } standard: { } } } }
Vi använder två hårdvaruprodukter från PIC16F877A: Timer0 och ADC.
Inuti filen timer0.c, TMR0 = (uint8_t) (tmr0_mask & (256 - (((2 * _XTAL_FREQ) / (256 * 4)) / 1000)));
Denna beräkning ger tidsavbrottet på 2 millisekunder. Beräkningsformeln är
// TimerCountMax - ((((fördröjning (ms) * Focs (hz)) / (PreScale_Val * 4)) / 1000)
Om vi ser funktionen timer_isr är det-
ogiltig timer_isr () { main_state = READ_ADC; }
I denna funktion ändras programtillståndet till READ_ADC varannan sekund.
Sedan tas CALCULATE_HEART_BEAT- funktionen från Arduino-exempelkoden.
ogiltig beräkna_hjärta_beat (int adc_value) { Signal = adc_value; sampleCounter + = 2; // hålla koll på tiden i mS med denna variabel int N = sampleCounter - lastBeatTime; // övervaka tiden sedan sista takten för att undvika buller // hitta topp och tråg för pulsvågen om (Signal <trösk && N> (IBI / 5) * 3) {// undvik dikrotiskt ljud genom att vänta 3/5 av sista IBI om (Signal <T) {// T är tråget T = Signal; // hålla koll på lägsta punkten i pulsvåg } } …………. ………………………..
Vidare ges den fullständiga koden nedan och förklaras väl av kommentarerna. Denna hjärtslagssensordata kan laddas upp vidare till molnet och övervakas över internet var som helst, vilket gör det till det IoT-baserade Heart Beat Monitoring-systemet, följ länken för att lära dig mer.
Hämta stödjande C-filer för detta PIC Pulse Sensor Project härifrån.