Knižnica Arduino na monitorovanie srdcového tepu pomocou pulzného oxymetra

Knižnica Arduino na monitorovanie srdcového tepu pomocou pulzného oxymetra

Knižnica Arduino na monitorovanie srdcového tepu pomocou pulzného oxymetra

Jeden z parametrov sledovaných v mojom projekte riadenia spánku

Je to pulz. zmerať to Vyvinul som prístroj založený na správaní sa hemoglobínu a oxyhemoglobínu voči rôznym vlnovým dĺžkam svetla. V podstate ide o meranie toho, koľko svetla určitého typu je schopné prejsť alebo sa odrážať v dobre zavlažovanej oblasti tela. Frekvencia, s ktorou nastáva úplný cyklus tohto javu, umožňuje meranie pulz.

Obsah

    Vo fáze návrhu a testovania prístroj na meranie pulzu Vyvinul som niekoľko malých programov, ktoré mi pomôžu overiť, či je zostava správna. Najprv som napísal nižšie uvedený kód, ktorý z času na čas nabral namerané hodnoty (aspoň každý MAXIMUM_MEASUREMENT_TIME a maximálne každý MINIMUM_MEASUREMENT_TIME), keď sa menili minimálne medzi jednou a predchádzajúcou hodnotou (hodnota, ktorá zodpovedá MINIMUM_SIZE) a monitorované z počítača pomocou aplikácie Python aby ste ich mohli neskôr analyzovať.

    Akonáhle boli hodnoty upravené (začínajúc veľmi hustými meraniami), dostal som zbierku hodnôt z pulzný oxymeter v priebehu času som mohol vytvoriť graf pomocou tabuľky, LibreOffice Calc de LibreOffice, konkrétne.

    graf meraní pulzného oxymetra s

    So zozbieranými údajmi, ako je znázornené na obrázku vyššie, bolo ďalšou operáciou určiť, či hustota hodnôt umožňuje vypočítať spoľahlivým, ale „ekonomickým“ spôsobom (bez odberu väčšieho množstva údajov, ako je potrebné), hodnotu pulz; Ako je možné vidieť v nižšie uvedenom grafe, zdalo sa, že prijaté opatrenia slúžili na získanie výsledkov, ktoré možno odôvodnene očakávať.

    .

    meranie prítomnosti oxyhemoglobínu v priebehu času pulzným oxymetrom

    Ďalej, s informáciami zo vzorkovania dát, bolo potrebné vyvinúť algoritmus, ktorý by meral tepovú frekvenciu. Držíme sa grafu, ktorý pre jednoduchosť predpokladá, že predstavuje rozloženie podobné tomu QRS komplex, najjednoduchšie sa zdá byť meranie časov medzi najvýznamnejšími časťami, s vyššími hodnotami (čo zodpovedá qRs zóne depolarizácie komôr), vylúčením plochejšej a „hlučnejšej“ zóny, ktorá je preto náročnejšia. merať. Prijaté riešenie, ktoré zodpovedá nižšie uvedenému testovaciemu kódu, funguje podľa nasledujúceho postupu:

    • V každom prípade zistite meranú oblasť, aby ste sa venovali iba vrcholom hodnôt qR a zahodiť údolie. Na tento účel by sa mohli merať hodnoty vyššie ako určitá konštanta, ale existuje riziko, že jednotlivec a/alebo okolnosti môžu, hoci úmerne, hodnoty zvýšiť alebo znížiť. Aby sa tomu zabránilo, hodnota v oblasti sa považuje za väčšiu ako tá, ktorá presahuje priemernú hodnotu určitým koeficientom. Meranie je tak citlivo samokalibrované a dalo by sa ešte upraviť doladením koeficientu, ktorý som v mojom prípade experimentálne počas testov dosiahol.

      Vyberte hodnoty zostupnej zóny pre meranie (Rs) z vrcholu qR, čo najbližšie k maximu krivky. Aby ste vedeli, že stúpajúca zóna je opustená, stačí overiť, že nová hodnota je menšia ako predchádzajúca a overiť, že hľadaná hodnota ešte nebola nájdená, pretože vo všeobecnosti existuje niekoľko hodnôt v zostupnej zóna qR v závislosti od hustoty odberu vzoriek. Na načasovanie impulzu sa uloží hodnota okamihu, v ktorom bol bod nájdený (milisekundy vrátené o millis ()) a porovná ho s nasledujúcim.

      Aby sa zabezpečilo, že nameraná hodnota je najväčšia v zostupnej zóne najvyššej krivky, používa sa premenná boolovská hodnota (merať_pulz v tomto príklade a active_pulse_measurement v knižnici), ktorá sa aktivuje pri vstupe do vzostupnej zóny hlavnej krivky a deaktivuje sa, keď sa nájde prvá zostupná hodnota, ktorá je časovaná.

      Keďže je obvyklé reprezentovať trvanie impulzu ako údery za minútu (ppm), hodnota času medzi získanými impulzmi sa koriguje výpočtom vydelením celkového času zobrazenia (jedna minúta, 60000 XNUMX milisekúnd) intervalom získaným odpočítaním aktuálnych milisekúnd (aktuálnej hodnoty) od tých, ktoré boli predtým načasované.

      Aby sa predišlo falošným meraniam (ako napríklad prístroj meria vo vákuu), overuje sa, že výsledok je medzi maximálnymi a minimálnymi hodnotami, než sa to považuje za samozrejmosť. Aj keď sa za priemer považuje, že normálna hodnota pre zdravého dospelého v pokoji je medzi 60 a 100 ppm, nižšie sú prípustné hodnoty, u športovca v pokoji je ľahké nájsť 40 ppm, až do 200 ppm počas intenzívne cvičenie a viac 100 ppm u dospelých so sedavým zamestnaním v stavoch vzrušenia, presne zaujímavý faktor pre projekt manažmentu spánku čo ma vedie k tomu, aby som to rozvinul prístroj na meranie pulzu. Z tohto dôvodu je vhodné tieto hodnoty veľmi uvoľniť, aby sa nestratili extrémy, ktoré by mohli presne ukázať relevantné aspekty.

      Nová priemerná hodnota sa vypočíta znížením relevantnosti aktuálneho priemeru na základe počtu vzorkovaných hodnôt a pripočíta sa posledná hodnota, tiež vážená koeficientom, ktorý ju ďalej znižuje, čím viac hodnôt bolo doteraz nameraných .

    Nakoniec som pomocou vyššie opísaného algoritmu vyvinul knižnicu na výpočet pulzu detekciou prítomnosti hemoglobín o la oxyhemoglobínu (v závislosti od použitej vlnovej dĺžky svetla) z nižšie uvedeného kódu.

    Knižnica očakáva, že funkcia vzorkovania sa bude volať pravidelne monitor_pulse() na výpočet pulzu, ktorý je možné konzultovať s funkciou posledný_pulz() alebo s funkciou priemerný_pulz() priemerný pulz. Okrem toho, že ide o obmedzený zdroj, vylúčil som používanie prerušení, pretože som nepotreboval okamžité hodnoty, ale skôr trvalé hodnoty v priebehu času na monitorovanie pulz v mojom projekte riadenia spánku

    . V každom prípade sa to podľa testov, ktoré som urobil, nezdá byť potrebné; buď zariadením alebo správaním pulz, vzorkovanie pri určitej frekvencii ponúka dostatok informácií a ich zvýšením sa nezíska oveľa viac (relevantných), ani ich nie je možné výrazne znížiť bez straty relevantných údajov pre výpočet; v skorých verziách kódu na monitorovanie čítania pulzný oxymeter Zistil som, že nie je potrebné držať sa maximálneho času merania, pretože ak sa správne zohľadnili variácie po sebe nasledujúcich hodnôt, bol veľmi blízko minima.

    Nasledujúci príklad programu ukazuje, ako použiť predchádzajúcu knižnicu na meranie pulz s a pulzný oxymeter. Okrem inštancie triedy Pulso sledovanie úrovne oxyhemoglobínu/hemoglobín as menšou periodicitou hodnota pulz vypočítané a priemerné.

    Aby sa zabezpečilo, že merania sú relevantné, pred zobrazením akejkoľvek hodnoty sa naprogramuje čakanie. Keďže hodnota môže byť nesprávna (napríklad ak používateľ odstráni zariadenie), hodnoty sa zobrazia iba vtedy, ak sú v rozsahu hodnôt, ktoré sa považujú za platné.

    Pridať komentár

    Možno ste zmeškali