- Vaaditut komponentit
- Pulssianturi SEN-11574
- Piirikaavio pulssianturille, joka on yhteydessä PIC-mikrokontrolleriin
- PIC16F877A-koodiselitys sydämen sykemittarille
Syke on tärkein parametri kenenkään terveyden seurannassa. Pukeutuvien laitteiden nykyaikana on paljon laitteita, joilla voidaan mitata sykettä, verenpainetta, askeleita, poltettuja kaloreita ja paljon muuta. Näiden laitteiden sisällä on pulssianturi pulssin tunnistamiseksi. Tänään käytämme myös PIC-mikrokontrollerilla varustettua pulssianturia sydämen lyönnin laskemiseen minuutissa ja lyöntien välisen intervallin, nämä arvot näytetään edelleen 16x2-merkkisellä LCD-näytöllä. Käytämme PIC16F877A PIC -mikro-ohjainta tässä projektissa. Olemme jo liittäneet pulssisensorin Arduino-potilaiden seurantajärjestelmään.
Vaaditut komponentit
- PIC16F877A-mikrokontrolleri
- 20 MHz kristalli
- 33pF kondensaattori 2 kpl
- 4,7 kt vastus 1 kpl
- 16x2-merkkinen LCD-näyttö
- 10K potti nestekidenäytön kontrastin hallintaan
- SEN-11574 Pulssianturi
- Tarranauha
- 5 V: n virtalähde
- Leipälauta ja kytkentäjohdot
Pulssianturi SEN-11574
Sykkeen mittaamiseen tarvitaan pulssianturi. Täältä olemme valinneet SEN-11574-pulssianturin, joka on helposti saatavana verkkokaupoista tai offline-kaupoista. Käytimme tätä anturia, koska valmistajalta on saatu näytekoodeja, mutta se on Arduino-koodi. Muunnimme kyseisen koodin PIC-mikrokontrollerillemme.
Anturi on todella pieni ja täydellinen sydämenlyönnin lukemiseen korvalehdestä tai sormenpäästä. Sen halkaisija on 0,625 tuumaa ja pyöreän piirilevyn puolelta 0,125 tuumaa.
Tämä anturi antaa analogisen signaalin ja anturia voidaan käyttää 3 V: n tai 5 V: n jännitteellä, anturin virrankulutus on 4 mA, mikä sopii erinomaisesti mobiilisovelluksiin. Anturin mukana tulee kolme johtoa, 24 tuuman pitkä kytkentäkaapeli ja berg-urosotsikko lopussa. Anturin mukana tulee myös tarranauhahihna, joka käyttää sitä sormenpäässä.
Pulssianturin kaaviokuvan tarjoaa myös valmistaja, ja se on saatavana myös osoitteessa sparkfun.com.
Anturikaavio koostuu optisesta sykesensorista, melunvaimennus-RC-piiristä tai suodattimista, jotka voidaan nähdä kaaviosta. R2, C2, C1, C3 ja toimintavahvistinta MCP6001 käytetään luotettavaan vahvistettuun analogiseen lähtöön.
Sydämenlyönnin tarkkailuun on vain muutama anturi, mutta SEN-11574-pulssianturia käytetään laajalti elektroniikkaprojekteissa.
Piirikaavio pulssianturille, joka on yhteydessä PIC-mikrokontrolleriin
Tässä meillä on kytketty pulssianturi yli 2 toinen tappi on mikro -yksikön. Koska anturi tuottaa analogista dataa, meidän on muunnettava analoginen data digitaaliseksi signaaliksi tekemällä tarvittavat laskelmat.
20 MHz: n kristallioskillaattori on kytketty mikro-ohjainyksikön kahden OSC-nastan yli kahdella keraamisella 33pF-kondensaattorilla. LCD on kytketty yli RB-porttiin mikro.
PIC16F877A-koodiselitys sydämen sykemittarille
Koodi on hieman monimutkainen aloittelijoille. Valmistaja toimitti näytekoodit SEN-11574-anturille, mutta se kirjoitettiin Arduino-alustalle. Meidän on muunnettava mikrosirumme, PIC16F877A, laskenta. Täydellinen koodi annetaan tämän projektin lopussa esittelyvideolla. Ja tukevat C-tiedostot voidaan ladata täältä.
Koodivirta on suhteellisen yksinkertainen ja teimme vaiheet kytkentätapauksella . Valmistajan mukaan meidän on saatava tiedot anturilta 2 millisekunnin välein. Joten käytimme ajastimen keskeytyspalvelurutiinia, joka käynnistää toiminnon 2 millisekunnin välein.
Koodivirta kytkinlausekkeessa menee näin:
Tapaus 1: Lue ADC
Tapaus 2: Laske sydämen syke ja IBI
Tapaus 3: Näytä syke ja IBI LCD-näytöllä
Tapaus 4: IDLE (Älä tee mitään)
Ajastimen keskeytystoiminnon sisällä muutamme ohjelman tilaksi Tapaus 1: Lue ADC 2 millisekunnin välein.
Joten päätoiminnossa määriteltiin ohjelman tila ja kaikki kytkentätapaukset .
void main () { system_init (); pääasema = READ_ADC; while (1) { switch (main_state) { tapaus READ_ADC: { adc_value = ADC_Read (0); // 0 on kanavanumero pääasema = CALCULATE_HEART_BEAT; tauko; } tapaus CALCULATE_HEART_BEAT: { Laske sydämen lyönti (adc_arvo); pääasema = SHOW_HEART_BEAT; tauko; } tapaus SHOW_HEART_BEAT: { if (QS == true) {// Sydämenlyönti löydettiin // BPM ja IBI on määritetty // Kvantifioitu itse "QS" tosi, kun Arduino löytää sydämenlyönnin QS = false; // nollaa Kvantifioitu itse -lippu seuraavaa kertaa // 0,9 käytetään parempien tietojen saamiseen. ei tosiasiallisesti pitäisi käyttää BPM = BPM * 0,9; IBI = IBI / 0,9; lcd_com (0x80); lcd_puts ("BPM: -"); lcd_print_numero (BPM); lcd_com (0xC0); lcd_puts ("IBI: -"); lcd_print_numero (IBI); } } main_state = IDLE; tauko; tapaus IDLE: { tauko; } oletus: { } } } }
Käytämme PIC16F877A: n kahta oheislaitetta: Timer0 ja ADC.
Timer0.c-tiedoston sisällä, TMR0 = (uint8_t) (tmr0maski & (256 - (((2 * _XTAL_FREQ) / (256 * 4)) / 1000)));
Tämä laskelma tuottaa 2 millisekunnin ajastimen keskeytyksen. Laskentakaava on
// TimerCountMax - (((delay (ms) * Focs (hz)) / (PreScale_Val * 4)) / 1000)
Jos näemme funktion timer_isr , se on-
void timer_isr () { main_state = READ_ADC; }
Tässä toiminnossa ohjelmatila muutetaan READ_ADC: ksi 2 ms välein.
Sitten CALCULATE_HEART_BEAT- funktio otetaan Arduinon esimerkkikoodista.
void calc_heart_beat (int adc_value) { Signaali = adc_value; sampleCounter + = 2; // seuraa aikaa mS: ssä tällä muuttujalla int N = sampleCounter - lastBeatTime; // tarkkaile viimeisestä lyönnistä kulunutta aikaa melun välttämiseksi // etsi pulssiaallon huippu ja syvyys jos (Signal <thresh && N> (IBI / 5) * 3) {// vältä dikroottista melua odottamalla 3/5 viimeisestä IBI: stä, jos (Signaali <T) {// T on kaukalo T = Signaali; // seuraa pulssiaallon alinta kohtaa } } …………. ………………………..
Lisäksi täydellinen koodi on annettu alla ja selitetty hyvin kommenteilla. Nämä sydämen sykesensoritiedot voidaan edelleen ladata pilveen ja seurata Internetissä mistä tahansa, mikä tekee siitä IoT-pohjaisen sykeentarkkailujärjestelmän. Seuraa linkkiä saadaksesi lisätietoja.
Lataa tämän PIC-pulssianturiprojektin tukevat C-tiedostot täältä.