- Požadované komponenty
- Snímač impulzov SEN-11574
- Schéma zapojenia rozhrania snímača impulzu s mikrokontrolérom PIC
- PIC16F877A Vysvetlenie kódu pre monitor srdcového rytmu
Srdcový rytmus je najdôležitejším parametrom pri sledovaní zdravia každej osoby. V modernej dobe nositeľných zariadení existuje veľa zariadení, ktoré dokážu merať tep, krvný tlak, kroky, spálené kalórie a veľa ďalších vecí. Tieto zariadenia majú v sebe zabudovaný snímač pulzu na snímanie pulzovej frekvencie. Dnes budeme tiež využívať pulzný senzor s mikrokontrolérom PIC na počítanie srdcového rytmu za minútu a Inter-Beat Interval, tieto hodnoty sa ďalej zobrazia na 16x2 znakovom LCD. V tomto projekte použijeme mikrokontrolér PIC16F877A PIC. Už sme prepojili pulzný senzor s Arduinom pre systém monitorovania pacientov.
Požadované komponenty
- Mikrokontrolér PIC16F877A
- 20 Mhz kryštál
- Kondenzátor 33pF 2 ks
- 4,7k rezistor 1 ks
- 16x2 znakový LCD
- 10K hrniec na nastavenie kontrastu LCD
- SEN-11574 snímač impulzov
- Remienok na suchý zips
- 5V napájací adaptér
- Nepájivé pole a pripojovacie drôty
Snímač impulzov SEN-11574
Na meranie srdcového rytmu potrebujeme snímač pulzu. Tu sme vybrali impulzný senzor SEN-11574, ktorý je ľahko dostupný v online alebo offline obchodoch. Tento snímač sme použili, pretože od výrobcu existujú vzorové kódy, ale jedná sa o kód Arduino. Tento kód sme previedli na náš mikrokontrolér PIC.
Senzor je naozaj malý a je ideálny na čítanie tepu cez ušný lalôčik alebo po špičke prsta. Má priemer 0,625 ”a hrúbku 0,125” z guľatej strany PCB.
Tento snímač poskytuje analógový signál a snímač je možné napájať s napätím 3V alebo 5V, spotreba prúdu snímača je 4 mA, čo je skvelé pre mobilné aplikácie. Senzor je dodávaný s tromi vodičmi s 24 ”dlhým pripájacím káblom a na konci s konektorom berg male. Senzor je tiež dodávaný s páskom na suchý zips, aby ste ho nosili cez prst.
Schéma snímača impulzov poskytuje aj výrobca a je k dispozícii aj na sparkfun.com.
Schéma snímača pozostáva z optického snímača srdcovej frekvencie, RC obvodov s potlačením šumu alebo filtrov, ktoré je možné vidieť na schematickom diagrame. Pre spoľahlivý zosilnený analógový výstup sa používajú R2, C2, C1, C3 a operačný zosilňovač MCP6001.
Existuje niekoľko ďalších senzorov pre monitorovanie srdcového rytmu, ale pulzný senzor SEN-11574 sa často používa v projektoch elektroniky.
Schéma zapojenia rozhrania snímača impulzu s mikrokontrolérom PIC
Tu sme pripojili pulzný senzor cez druhý pin jednotky mikrokontroléra. Pretože senzor poskytuje analógové dáta, musíme prevádzať analógové dáta na digitálny signál vykonaním potrebných výpočtov.
Crystal oscilátor 20 MHz je pripojený cez dva OSC kolíky mikrokontroléra modulu s dvoma keramickými 33pF kondenzátory. LCD je pripojený cez RB port mikroradiče.
PIC16F877A Vysvetlenie kódu pre monitor srdcového rytmu
Tento kód je pre začiatočníkov trochu zložitý. Výrobca poskytol vzorové kódy pre snímač SEN-11574, bol však napísaný pre platformu Arduino. Musíme previesť výpočet pre náš mikročip PIC16F877A. Kompletný kód je uvedený na konci tohto projektu s ukážkovým videom. A podporné súbory C si môžete stiahnuť odtiaľto.
Náš tok kódu je pomerne jednoduchý a kroky sme vykonali pomocou prípadu prepínača . Podľa výrobcu musíme údaje zo snímača získavať každé 2 milisekundy. Použili sme teda rutinu obsluhy prerušenia časovača, ktorá spustí funkciu každé 2 milisekundy.
Náš tok kódu v príkaze switch pôjde takto:
Prípad 1: Prečítajte si ADC
Prípad 2: Vypočítajte tlkot srdca a IBI
Prípad 3: Ukazujte tep a IBI na LCD displeji
Prípad 4: IDLE (Nerobiť nič)
Vo vnútri funkcie prerušenia časovača zmeníme stav programu na Prípad 1: Prečítajte si ADC každé 2 milisekundy.
Takže v hlavnej funkcii sme definovali stav programu a všetky prípady prepínania .
void main () { system_init (); main_state = READ_ADC; while (1) { switch (main_state) { case READ_ADC: { adc_value = ADC_Read (0); // 0 je číslo kanálu main_state = CALCULATE_HEART_BEAT; prestávka; } prípad CALCULATE_HEART_BEAT: { calc_heart_beat (adc_value); main_state = SHOW_HEART_BEAT; prestávka; } prípad SHOW_HEART_BEAT: { if (QS == true) {// Bol nájdený srdcový rytmus // Boli určené BPM a IBI // Kvantifikované vlastné „QS“ pravdivé, keď Arduino zistí srdcový rytmus QS = false; // resetuje príznak Kvantifikované vlastné nabudúce // 0,9 slúži na získanie lepších údajov. v skutočnosti by sa nemalo používať 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; prestávka; prípad IDLE: { break; } predvolené: { } } } }
Používame dve hardvérové periférie PIC16F877A: Timer0 a ADC.
V súbore timer0.c
TMR0 = (uint8_t) (tmr0_mask & (256 - ((((2 * _XTAL_FREQ) / (256 * 4)) / 1000)));
Tento výpočet poskytuje prerušenie časovača na 2 milisekundy. Vzorec na výpočet je
// TimerCountMax - (((delay (ms) * Focs (hz)) / (PreScale_Val * 4)) / 1000)
Ak vidíme funkciu timer_isr , je to-
void timer_isr () { main_state = READ_ADC; }
V tejto funkcii sa stav programu zmení na READ_ADC každé 2ms.
Potom je funkcia CALCULATE_HEART_BEAT prevzatá z ukážkového kódu Arduino.
void Calculate_heart_beat (int adc_value) { Signal = adc_value; sampleCounter + = 2; // sledovanie času v mS pomocou tejto premennej int N = sampleCounter - lastBeatTime; // monitorujte čas od posledného taktu, aby ste sa vyhli šumu // nájdite vrchol a koryto pulznej vlny, ak (Signal <thresh && N> (IBI / 5) * 3) {// vyhnite sa dichrotickému šumu čakaním 3/5 z posledného IBI, ak (Signál <T) {// T je žľab T = Signál; // sledujte najnižší bod v pulznej vlne } } …………. ………………………..
Celý kód je ďalej uvedený nižšie a je dobre vysvetlený v komentároch. Tieto údaje zo senzora srdcového rytmu je možné ďalej nahrávať do cloudu a monitorovať cez internet odkiaľkoľvek, čo z neho robí monitorovací systém srdcového rytmu založený na IoT. Ak sa chcete dozvedieť viac, kliknite na odkaz.
Stiahnite si podporné súbory C pre tento projekt snímača pulzu PIC odtiaľto.