- Vereiste componenten
- Polssensor SEN-11574
- Schakelschema voor puls-sensor-interface met PIC-microcontroller
- PIC16F877A Code-uitleg voor Heart Beat Monitor
De hartslag is de belangrijkste parameter bij het bewaken van de gezondheid van een persoon. In het moderne tijdperk van draagbare apparaten zijn er veel apparaten die hartslag, bloeddruk, voetstappen, verbrande calorieën en veel andere dingen kunnen meten. Deze apparaten hebben een hartslagsensor om de hartslag te detecteren. Vandaag zullen we ook een polssensor met PIC Microcontroller gebruiken om de hartslag per minuut te tellen en het Inter-Beat Interval, deze waarden zullen verder worden weergegeven op een 16x2 karakter LCD. We zullen PIC16F877A PIC-microcontroller gebruiken in dit project. We hebben de polssensor al gekoppeld aan Arduino voor Patient Monitoring System.
Vereiste componenten
- PIC16F877A microcontroller
- 20 Mhz kristal
- 33pF condensator 2 stuks
- 4.7k weerstand 1 st
- LCD-scherm van 16x2 tekens
- 10K pot voor contrastregeling van de LCD
- SEN-11574 Polssensor
- Klittenband
- 5V voedingsadapter
- Breadboard en aansluitdraden
Polssensor SEN-11574
Om de hartslag te meten hebben we een polssensor nodig. Hier hebben we de SEN-11574-polssensor geselecteerd die gemakkelijk verkrijgbaar is in online of offline winkels. We hebben deze sensor gebruikt omdat er voorbeeldcodes van de fabrikant zijn, maar dat is een Arduino-code. We hebben die code omgezet voor onze PIC-microcontroller.
De sensor is erg klein en perfect voor het meten van de hartslag over de oorlel of op de vingertop. Het is 0,625 "in diameter en 0,125" dik vanaf de ronde PCB-zijde.
Deze sensor geeft een analoog signaal af en de sensor kan aangestuurd worden met 3V of 5V, het stroomverbruik van de sensor is 4 mA, wat prima geschikt is voor mobiele toepassingen. De sensor wordt geleverd met drie draden met een 24-inch lange aansluitkabel en een mannelijke header aan het uiteinde. De sensor wordt ook geleverd met een klittenbandvingerband om hem over de vingertop te dragen.
Het pulssensor-schema wordt ook geleverd door de fabrikant en is ook beschikbaar op sparkfun.com.
Het sensorschema bestaat uit een optische hartslagsensor, RC-circuits voor ruisonderdrukking of filters, die te zien zijn in het schematische diagram. R2, C2, C1, C3 en een operationele versterker MCP6001 worden gebruikt voor betrouwbare versterkte analoge output.
Er zijn weinig andere sensoren voor Heart Beat Monitoring, maar de SEN-11574-polssensor wordt veel gebruikt in elektronicaprojecten.
Schakelschema voor puls-sensor-interface met PIC-microcontroller
Hier hebben wij de aangesloten sensor over een 2 tweede pin van de microcontroller -eenheid. Omdat de sensor analoge gegevens levert, moeten we de analoge gegevens omzetten in een digitaal signaal door de nodige berekeningen uit te voeren.
De kristaloscillator van 20Mhz is verbonden over twee OSC-pinnen van de microcontrollereenheid met twee keramische 33pF-condensatoren. Het LCD-scherm is aangesloten via de RB-poort van de microcontroller.
PIC16F877A Code-uitleg voor Heart Beat Monitor
De code is een beetje ingewikkeld voor beginners. De fabrikant heeft voorbeeldcodes verstrekt voor de SEN-11574-sensor, maar deze is geschreven voor het Arduino-platform. We moeten de berekening converteren voor onze microchip, PIC16F877A. De volledige code wordt aan het einde van dit project gegeven met een demonstratievideo. En de ondersteunende C-bestanden kunnen vanaf hier worden gedownload.
Onze codestroom is relatief eenvoudig en we hebben de stappen gemaakt met behulp van een schakelkast . Volgens de fabrikant moeten we de gegevens van de sensor om de 2 milliseconden ophalen. Daarom hebben we een timeronderbrekingsserviceroutine gebruikt die elke 2 milliseconden een functie activeert.
Onze codestroom in switch- instructie zal als volgt verlopen:
Case 1: Lees de ADC
Case 2: Bereken de hartslag en IBI
Geval 3: toon de hartslag en IBI op het LCD-scherm
Geval 4: IDLE (niets doen)
Binnen de timeronderbrekingsfunctie veranderen we de status van het programma naar Geval 1: Lees de ADC elke 2 milliseconden.
Dus in de hoofdfunctie hebben we de programmastatus en alle schakelcases gedefinieerd.
void main () { system_init (); main_state = READ_ADC; while (1) { switch (main_state) { case READ_ADC: { adc_value = ADC_Read (0); // 0 is het kanaalnummer main_state = CALCULATE_HEART_BEAT; breken; } geval CALCULATE_HEART_BEAT: { bereken_hartslag (adc_waarde); main_state = SHOW_HEART_BEAT; breken; } case SHOW_HEART_BEAT: { if (QS == true) {// Er is een hartslag gevonden // BPM en IBI zijn bepaald // Quantified Self "QS" waar als Arduino een hartslag vindt QS = false; // reset de Quantified Self-vlag voor de volgende keer // 0.9 gebruikt voor het verkrijgen van betere gegevens. eigenlijk mag niet worden gebruikt 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; breken; case IDLE: { pauze; } standaard: { } } } }
We gebruiken twee hardware-randapparatuur van de PIC16F877A: Timer0 en ADC.
In het timer0.c-bestand, TMR0 = (uint8_t) (tmr0_mask & (256 - (((2 * _XTAL_FREQ) / (256 * 4)) / 1000)));
Deze berekening levert de timeronderbreking van 2 milliseconden op. De berekeningsformule is
// TimerCountMax - (((delay (ms) * Focs (hz)) / (PreScale_Val * 4)) / 1000)
Als we de functie timer_isr zien, is het-
void timer_isr () { main_state = READ_ADC; }
In deze functie wordt de programmastatus elke 2 ms gewijzigd in READ_ADC.
Vervolgens wordt de functie CALCULATE_HEART_BEAT overgenomen uit de Arduino-voorbeeldcode.
void bereken_hart_slag (int adc_value) { Signal = adc_value; sampleCounter + = 2; // houd de tijd in mS bij met deze variabele int N = sampleCounter - lastBeatTime; // controleer de tijd sinds de laatste tel om ruis te vermijden // vind de piek en dieptepunt van de pulsgolf als (Signaal <thresh && N> (IBI / 5) * 3) {// vermijd dichrotische ruis door 3/5 te wachten van de laatste IBI als (Signaal <T) {// T het dal- T = Signaal is; // houd het laagste punt in de pulsgolf bij } } …………. ………………………..
Verder wordt de volledige code hieronder gegeven en goed uitgelegd door de opmerkingen. Deze hartslagsensorgegevens kunnen verder worden geüpload naar de cloud en overal via internet worden bewaakt, waardoor het een op IoT gebaseerd Heart Beat Monitoring-systeem wordt, volg de link voor meer informatie.
Download ondersteunende C-bestanden voor dit PIC Pulse Sensor Project van hier.