- Požadované komponenty
- Pulzní senzor SEN-11574
- Schéma zapojení rozhraní snímače pulsu s mikrokontrolérem PIC
- Vysvětlení kódu PIC16F877A pro monitor srdečního rytmu
Srdeční rytmus je nejdůležitějším parametrem při sledování zdraví jakékoli osoby. V moderní době nositelných zařízení existuje spousta zařízení, která dokážou měřit srdeční rytmus, krevní tlak, kroky, spálené kalorie a mnoho dalšího. Tato zařízení mají uvnitř pulzní senzor pro snímání pulzní frekvence. Dnes budeme také používat pulzní senzor s mikrokontrolérem PIC k počítání srdečního rytmu za minutu a Inter-Beat Interval, tyto hodnoty se dále zobrazí na 16x2 znakovém LCD. V tomto projektu použijeme mikrokontrolér PIC16F877A PIC. Již jsme propojili pulzní senzor s Arduino pro systém sledování pacientů.
Požadované komponenty
- Mikrokontrolér PIC16F877A
- 20 Mhz krystal
- 33pF kondenzátor 2 ks
- 4,7k rezistor 1 ks
- 16x2 znaků LCD
- Hrnec 10K pro ovládání kontrastu LCD
- Pulzní senzor SEN-11574
- Popruh na suchý zip
- 5V napájecí adaptér
- Nepájivé pole a připojovací dráty
Pulzní senzor SEN-11574
K měření srdečního rytmu potřebujeme pulzní senzor. Zde jsme vybrali pulzní senzor SEN-11574, který je snadno dostupný v online nebo offline obchodech. Tento senzor jsme použili, protože od výrobce jsou k dispozici ukázkové kódy, ale jedná se o kód Arduino. Převedli jsme tento kód pro náš mikrokontrolér PIC.
Senzor je opravdu malý a je ideální pro čtení srdečního rytmu přes ušní lalůček nebo na koneček prstu. Má průměr 0,625 ”a tloušťku 0,125” z kulaté strany PCB.
Tento snímač poskytuje analogový signál a snímač lze napájet 3 V nebo 5 V, spotřeba proudu snímače je 4 mA, což je skvělé pro mobilní aplikace. Senzor je dodáván se třemi vodiči s 24 ”dlouhým připojovacím kabelem a zakončením berg male. Senzor je dodáván s řemínkem na suchý zip, který jej nosí přes konečky prstů.
Schéma snímače pulzu poskytuje také výrobce a je k dispozici také na sparkfun.com.
Schéma snímače se skládá z optického snímače srdečního tepu, RC obvodů pro potlačení šumu nebo filtrů, které lze vidět ve schematickém diagramu. Pro spolehlivý zesílený analogový výstup se používají R2, C2, C1, C3 a operační zesilovač MCP6001.
Existuje několik dalších senzorů pro monitorování srdečního rytmu, ale pulzní senzor SEN-11574 je široce používán v projektech elektroniky.
Schéma zapojení rozhraní snímače pulsu s mikrokontrolérem PIC
Zde jsme připojili pulzní senzor přes druhý pin jednotky mikrokontroléru. Protože senzor poskytuje analogová data, musíme převést analogová data na digitální signál provedením nezbytných výpočtů.
Crystal oscilátor 20 MHz je připojen přes dva OSC kolíky mikrokontroléru modulu se dvěma keramickými 33pF kondenzátory. LCD je připojen přes RB port mikrořadiče.
Vysvětlení kódu PIC16F877A pro monitor srdečního rytmu
Tento kód je pro začátečníky trochu složitý. Výrobce poskytl vzorové kódy pro senzor SEN-11574, ale byl napsán pro platformu Arduino. Musíme převést výpočet pro náš mikročip PIC16F877A. Kompletní kód je uveden na konci tohoto projektu s ukázkovým videem. A podpůrné soubory C lze stáhnout zde.
Náš tok kódu je relativně jednoduchý a kroky jsme provedli pomocí případu přepínače . Podle výrobce potřebujeme získat data ze senzoru každé 2 milisekundy. Použili jsme tedy rutinu služby přerušení časovače, která vypálí funkci každé 2 milisekundy.
Náš tok kódu v příkazu switch bude vypadat takto:
Případ 1: Přečtěte si ADC
Případ 2: Vypočítejte srdeční rytmus a IBI
Případ 3: Zobrazit tep a IBI na LCD
Případ 4: IDLE (Nedělat nic)
Uvnitř funkce časovače přerušení změníme stav programu na Případ 1: Číst ADC každé 2 milisekundy.
V hlavní funkci jsme tedy definovali stav programu a všechny případy přepnutí .
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; přestávka; } případ CALCULATE_HEART_BEAT: { Calculate_Heart_beat (adc_value); main_state = SHOW_HEART_BEAT; přestávka; } případ SHOW_HEART_BEAT: { if (QS == true) {// Byl nalezen prezenční signál // Byly stanoveny BPM a IBI // Kvantifikované vlastní "QS" true, když Arduino najde prezenční signál QS = false; // resetuje příznak Kvantifikované já pro příště // 0,9 slouží k získání lepších dat. ve skutečnosti by se nemělo používat 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; přestávka; případ IDLE: { break; } výchozí: { } } } }
Používáme dvě hardwarové periferie PIC16F877A: Timer0 a ADC.
Uvnitř souboru timer0.c
TMR0 = (uint8_t) (tmr0_mask & (256 - ((((2 * _XTAL_FREQ) / (256 * 4)) / 1000)));
Tento výpočet poskytuje přerušení časovače na 2 milisekundy. Vzorec pro výpočet je
// TimerCountMax - (((delay (ms) * Focs (hz)) / (PreScale_Val * 4)) / 1000)
Pokud vidíme funkci timer_isr , je to-
void timer_isr () { main_state = READ_ADC; }
V této funkci se stav programu změní na READ_ADC každé 2ms.
Poté je funkce CALCULATE_HEART_BEAT převzata z ukázkového kódu Arduino.
void count_heart_beat (int adc_value) { Signal = adc_value; sampleCounter + = 2; // sledujte čas v mS s touto proměnnou int N = sampleCounter - lastBeatTime; // sledovat čas od posledního rytmu, aby se zabránilo šumu // najít vrchol a koryto pulzní vlny if (Signal <thresh && N> (IBI / 5) * 3) {// vyhnout se dichrotickému šumu čekáním 3/5 z posledního IBI if (Signal <T) {// T je koryto T = Signal; // sledování nejnižšího bodu v pulzní vlně } } …………. ………………………..
Celý kód je dále uveden níže a je dobře vysvětlen v komentářích. Tato data ze snímače srdečního rytmu lze dále nahrávat do cloudu a monitorovat přes internet odkudkoli, což z něj dělá monitorovací systém srdečního rytmu založený na IoT. Další informace získáte kliknutím na odkaz.
Zde si stáhněte podpůrné soubory C pro tento projekt snímače pulzů PIC.