- Components necessaris
- Sensor de pols SEN-11574
- Diagrama de circuits per a la interfície del sensor de pols amb el microcontrolador PIC
- PIC16F877A Explicació del codi per al monitor de batec cardíac
La freqüència del batec cardíac és el paràmetre més important per controlar la salut de qualsevol persona. A l'era moderna dels dispositius portàtils, hi ha molts dispositius que poden mesurar els batecs del cor, la pressió arterial, els passos, les calories cremades i moltes altres coses. Aquests dispositius tenen un sensor de pols al seu interior per detectar la freqüència de pols. Avui també utilitzarem un sensor de pols amb microcontrolador PIC per comptar els batecs del cor per minut i l’interval de batecs, aquests valors es mostraran a la pantalla LCD de 16x2 caràcters. En aquest projecte utilitzarem el microcontrolador PIC PIC16F877A. Ja hem interficat el sensor de pols amb Arduino per al sistema de monitorització del pacient.
Components necessaris
- Microcontrolador PIC16F877A
- Cristall de 20 Mhz
- Condensador de 33pF 2 unitats
- 4,7 k resistència 1 unitats
- LCD de 16x2 caràcters
- Pot de 10K per al control de contrast de la pantalla LCD
- SEN-11574 Sensor de pols
- Corretja de velcro
- Adaptador d'alimentació de 5V
- Taula de pa i cables de connexió
Sensor de pols SEN-11574
Per mesurar els batecs del cor necessitem un sensor de pols. Aquí hem seleccionat el sensor de pols SEN-11574 que és fàcilment disponible a les botigues en línia o fora de línia. Hem utilitzat aquest sensor ja que hi ha exemples de codis proporcionats pel fabricant, però és un codi Arduino. Hem convertit aquest codi per al nostre microcontrolador PIC.

El sensor és realment petit i perfecte per llegir els batecs del cor a través del lòbul de l’orella o a la punta dels dits. Té un diàmetre de 0,625 "i un gruix de 0,125" del costat rodó del PCB.
Aquest sensor proporciona un senyal analògic i el sensor es pot accionar amb 3V o 5V, el consum actual del sensor és de 4 mA, cosa ideal per a aplicacions mòbils. El sensor ve amb tres cables amb cable de connexió de 24 polzades de llarg i capçalera masculina Berg al final. A més, el sensor ve amb corretja de dit de velcro per portar-lo a la punta dels dits.
El fabricant també proporciona l’esquema del sensor de pols i també està disponible a sparkfun.com.

L’esquema del sensor consisteix en un sensor òptic de freqüència cardíaca, circuits de RC de cancel·lació de soroll o filtres, que es poden veure al diagrama esquemàtic. R2, C2, C1, C3 i un amplificador operacional MCP6001 s’utilitzen per a una sortida analògica amplificada fiable.
Hi ha pocs altres sensors per al seguiment del batec cardíac, però el sensor de pols SEN-11574 és àmpliament utilitzat en projectes electrònics.
Diagrama de circuits per a la interfície del sensor de pols amb el microcontrolador PIC

Aquí hem connectat el sensor de pols a un segon pin de la unitat de microcontrolador. Com que el sensor proporciona dades analògiques, hem de convertir les dades analògiques en senyal digital fent els càlculs necessaris.
L' oscil·lador Crystal de 20 MHz està connectat a dos pins OSC de la unitat de microcontroladors amb dos condensadors ceràmics de 33pF. La pantalla LCD està connectada al port RB del microcontrolador.

PIC16F877A Explicació del codi per al monitor de batec cardíac
El codi és una mica complex per als principiants. El fabricant va proporcionar codis de mostra per al sensor SEN-11574, però va ser escrit per a la plataforma Arduino. Hem de convertir el càlcul del nostre microxip, PIC16F877A. El codi complet es dóna al final d’aquest projecte amb un vídeo de demostració. I els fitxers C compatibles es poden descarregar des d’aquí.
El nostre flux de codi és relativament senzill i hem fet els passos mitjançant un cas de commutació . Segons el fabricant, hem d’obtenir les dades del sensor cada 2 mil·lisegons. Per tant, hem utilitzat una rutina de servei d’interrupció del temporitzador que activarà una funció cada 2 mil·lisegons.
El nostre flux de codi a la sentència switch passarà així:
Cas 1: llegiu l'ADC
Cas 2: Calculeu el batec del cor i l'IBI
Cas 3: mostra els batecs del cor i l'IBI a la pantalla LCD
Cas 4: IDLE (no fer res)
Dins de la funció d’interrupció del temporitzador, canviem l’estat del programa a Cas 1: Llegiu l’ADC cada 2 mil·lisegons.
Per tant, a la funció principal , hem definit l’estat del programa i tots els casos de commutació .
void main () { system_init (); main_state = LLEGIR_ADC; while (1) { switch (main_state) { case READ_ADC: { adc_value = ADC_Read (0); // 0 és el número del canal main_state = CALCULATE_HEART_BEAT; trencar; } cas CALCULAR_HEART_BEAT: { calculate_heart_beat (adc_value); main_state = SHOW_HEART_BEAT; trencar; } cas SHOW_HEART_BEAT: { if (QS == true) {// S'ha trobat un batec del cor // BPM i IBI s'han determinat // Quantified Self "QS" true quan Arduino troba un batec del cor QS = false; // restableix la marca Quantified Self per a la propera vegada // 0,9 utilitzat per obtenir millors dades. en realitat no s'ha d'utilitzar 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; trencar; cas IDLE: { break; } predeterminat: { } } } }
Estem utilitzant dos perifèrics de maquinari del PIC16F877A: Timer0 i ADC.
Dins del fitxer timer0.c, TMR0 = (uint8_t) (tmr0_mask & (256 - (((2 * _XTAL_FREQ) / (256 * 4)) / 1000)));
Aquest càlcul proporciona la interrupció del temporitzador de 2 mil·lisegons. La fórmula de càlcul és
// TimerCountMax - (((delay (ms) * Focs (hz)) / (PreScale_Val * 4)) / 1000)
Si veiem la funció timer_isr , és-
void timer_isr () { main_state = LLEGIR_ADC; }
En aquesta funció, l'estat del programa es canvia a READ_ADC cada 2 ms.
A continuació, la funció CALCULATE_HEART_BEAT es pren del codi d'exemple d'Arduino.
void calculate_heart_beat (int adc_value) { Senyal = adc_value; sampleCounter + = 2; // feu un seguiment del temps en mS amb aquesta variable int N = sampleCounter - lastBeatTime; // supervisar el temps transcorregut des de l’últim batec per evitar sorolls // trobar el pic i l’abast de l’ona de pols si (Senyal <batre && N> (IBI / 5) * 3) {// eviteu el soroll dicròtic esperant 3/5 de l'últim IBI si (Senyal <T) {// T és el mínim T = Senyal; // fer un seguiment del punt més baix de l'ona de pols } } …………. ………………………..
A més, el codi complet es dóna a continuació i s’explica bé pels comentaris. Aquestes dades del sensor de batecs cardíacs es poden pujar al núvol i controlar-les des de qualsevol lloc a Internet, cosa que el converteix en un sistema de monitorització del batec cardíac basat en IoT, seguiu l'enllaç per obtenir més informació.
Descarregueu els fitxers C compatibles per a aquest projecte de sensor de pols PIC des d’aquí.
