- Reikalingi komponentai
- Impulsų jutiklis SEN-11574
- Impulsų jutiklio sąsajos su PIC mikrovaldikliu schema
- PIC16F877A širdies ritmo monitoriaus kodo paaiškinimas
Širdies plakimo dažnis yra svarbiausias parametras stebint bet kurio asmens sveikatą. Šiuolaikinėje nešiojamų prietaisų eroje yra daugybė prietaisų, kurie gali išmatuoti širdies plakimą, kraujospūdį, žingsnius, sudegintas kalorijas ir daugelį kitų dalykų. Šiuose prietaisuose yra pulso jutiklis, kad būtų galima suvokti pulso dažnį. Šiandien mes taip pat naudosime pulso jutiklį su „PIC“ mikrovaldikliu, kad suskaičiuotume širdies plakimą per minutę ir „Inter-Beat Interval“. Šios vertės toliau bus rodomos 16x2 simbolių skystųjų kristalų ekrane. Šiame projekte naudosime PIC16F877A PIC mikrovaldiklį. Mes jau sujungėme pulso jutiklį su „Arduino“ pacientų stebėjimo sistemai.
Reikalingi komponentai
- PIC16F877A mikrovaldiklis
- 20 MHz kristalas
- 33pF kondensatorius 2 vnt
- 4,7 k rezistorius 1 vnt
- 16x2 simbolių LCD ekranas
- 10K puodas LCD kontrastui valdyti
- SEN-11574 pulso jutiklis
- Velcro dirželis
- 5 V maitinimo adapteris
- Breadboard ir prijungimo laidai
Impulsų jutiklis SEN-11574
Norėdami išmatuoti širdies plakimą, mums reikia pulso jutiklio. Čia mes pasirinkome SEN-11574 impulsų jutiklį, kurį galima lengvai įsigyti internetinėse ar ne parduotuvėse. Mes naudojome šį jutiklį, nes yra gamintojo pateiktų pavyzdžių kodų, tačiau tai yra „Arduino“ kodas. Mes konvertuojome šį kodą savo PIC mikrovaldikliui.
Jutiklis yra tikrai mažas ir puikiai tinka širdies plakimui skaityti per ausies landą ar ant piršto galiuko. Jis yra 0,625 "skersmens ir 0,125" storio iš apvalios PCB pusės.
Šis jutiklis teikia analoginį signalą, o jutiklį galima valdyti 3 V arba 5 V įtampa, jutiklio srovės sąnaudos yra 4 mA, o tai puikiai tinka mobiliesiems įrenginiams. Jutiklyje yra trys laidai su 24 ”ilgio prijungimo kabeliu ir bergo antgaliu gale. Jutiklis taip pat yra su „Velcro“ pirštų dirželiu, kad jį būtų galima nešioti per piršto galiuką.
Impulsų jutiklio schemą taip pat pateikia gamintojas, taip pat galima rasti tinklalapyje sparkfun.com.
Jutiklio schemą sudaro optinis širdies ritmo jutiklis, triukšmo slopinimo RC grandinė arba filtrai, kuriuos galima pamatyti schemoje. Patikimam sustiprintam analoginiam išėjimui naudojami R2, C2, C1, C3 ir operacinis stiprintuvas MCP6001.
Širdies ritmo stebėjimui yra keletas kitų jutiklių, tačiau SEN-11574 impulsų jutiklis yra plačiai naudojamas elektronikos projektuose.
Impulsų jutiklio sąsajos su PIC mikrovaldikliu schema
Čia mes sujungėme impulsų jutiklį per antrąjį mikrovaldiklio bloko kaištį. Kadangi jutiklis teikia analoginius duomenis, atlikdami būtinus skaičiavimus, analoginius duomenis turime paversti skaitmeniniais signalais.
20 MHz dažnio kristalinis osciliatorius yra sujungtas per du mikrovaldiklio bloko OSC kaiščius su dviem keraminiais 33pF kondensatoriais. LCD prijungtas visoje RB uosto mikrovaldiklį.
PIC16F877A širdies ritmo monitoriaus kodo paaiškinimas
Kodas yra šiek tiek sudėtingas pradedantiesiems. Gamintojas pateikė pavyzdinius SEN-11574 jutiklio kodus, tačiau jis buvo parašytas „Arduino“ platformai. Turime konvertuoti savo mikroschemos, PIC16F877A, apskaičiavimą. Pilnas kodas pateikiamas šio projekto pabaigoje su demonstraciniu vaizdo įrašu. Palaikomus C failus galite atsisiųsti iš čia.
Mūsų kodų srautas yra gana paprastas, ir mes atlikome veiksmus naudodami jungiklio atvejį. Kaip nurodo gamintojas, duomenis turime gauti iš jutiklio kas 2 milisekundes. Taigi, mes naudojome laikmačio pertraukimo tarnybos režimą, kuris suaktyvins funkciją kas 2 milisekundes.
Mūsų kodo srautas jungiklio sakinyje bus toks:
1 atvejis: perskaitykite ADC
2 atvejis: Apskaičiuokite širdies plakimą ir IBI
3 atvejis: rodykite širdies plakimą ir IBI LCD ekrane
4 atvejis: IDLE (nieko nedaryti)
Laikmačio pertraukimo funkcijos viduje mes pakeičiame programos būseną į 1 atvejį: skaitykite ADC kas 2 milisekundes.
Taigi pagrindinėje funkcijoje mes apibrėžėme programos būseną ir visus jungiklių atvejus.
void main () { system_init (); main_state = READ_ADC; while (1) { switch (main_state) { case READ_ADC: { adc_value = ADC_Read (0); // 0 yra kanalo numeris main_state = CALCULATE_HEART_BEAT; pertrauka; } atvejis CALCULATE_HEART_BEAT: { apskaičiuoti_širdies_mušti (adc_value); main_state = SHOW_HEART_BEAT; pertrauka; } atvejis SHOW_HEART_BEAT: { if (QS == true) {// Buvo rastas širdies plakimas // BPM ir IBI buvo nustatyti // Kiekybinis Aš „QS“ tiesa, kai Arduino randa širdies plakimą QS = false; // iš naujo nustatykite „Quantified Self“ vėliavą kitą kartą // 0,9 naudojamas geresniems duomenims gauti. iš tikrųjų neturėtų būti naudojamas 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; pertrauka; case IDLE: { pertrauka; } numatytasis nustatymas: { } } } }
Mes naudojame du PIC16F877A aparatinės įrangos periferinius įrenginius: „ Timer0“ ir ADC.
Failo „timer0.c“ viduje
TMR0 = (uint8_t) (tmr0_mask & (256 - (((2 * _XTAL_FREQ) / (256 * 4)) / 1000)));
Šis skaičiavimas suteikia 2 milisekundžių laikmačio pertraukimą. Skaičiavimo formulė yra
// TimerCountMax - (((delay (ms) * Focs (hz)) / (PreScale_Val * 4)) / 1000)
Jei matome „ timer_isr“ funkciją, tai
void timer_isr () { main_state = READ_ADC; }
Šioje funkcijoje programos būsena keičiama į READ_ADC kas 2 ms.
Tada funkcija „ CALCULATE_HEART_BEAT“ paimama iš „Arduino“ pavyzdžio kodo.
negaliojantis apskaičiuoti_širdies_mušti (int adc_value) { Signalas = adc_value; sampleCounter + = 2; // stebėkite laiką mS su šiuo kintamuoju int N = sampleCounter - lastBeatTime; // stebėti laiką, nes paskutinio ritmas išvengti triukšmo // rasti piko ir dauboje impulso bangos , jei (Signalo <Namłócić && n> (IBI / 5) * 3) {// išvengti dichrotic triukšmą laukia 3/5 paskutinio IBI, jei (Signalas <T) {// T yra lovys T = Signalas; // sekti žemiausią pulso bangos tašką } } …………. ………………………..
Toliau visas kodas pateiktas žemiau ir gerai paaiškintas komentaruose. Šie širdies ritmo jutiklio duomenys gali būti toliau įkeliami į debesį ir stebimi internetu iš bet kurios vietos, todėl tai tampa IoT pagrįsta širdies ritmo stebėjimo sistema. Norėdami sužinoti daugiau, spustelėkite nuorodą.
Čia atsisiųskite palaikomuosius C failus šiam PIC pulso jutiklio projektui.