Arduino knjižnica za spremljanje srčnega utripa s pulznim oksimetrom

Arduino knjižnica za spremljanje srčnega utripa s pulznim oksimetrom

Arduino knjižnica za spremljanje srčnega utripa s pulznim oksimetrom

Eden od parametrov, ki se spremlja v mojem projektu upravljanja spanja

To je utrip. da ga izmerite Razvil sem napravo, ki temelji na obnašanju hemoglobina in oksihemoglobina glede na različne valovne dolžine svetlobe.. V bistvu gre za merjenje, koliko svetlobe določene vrste lahko preide ali se odbije v dobro namakanem predelu telesa. Pogostost, s katero se zgodi celoten cikel tega pojava, omogoča merjenje pulz.

Kazalo

    V fazi načrtovanja in testiranja naprava za merjenje pulza Razvil sem nekaj majhnih programov, ki so mi pomagali preveriti, ali je sestavljanje pravilno. Najprej sem napisal spodnjo kodo, ki je občasno prevzela izmerjene vrednosti (vsaj vsak MAXIMUM_MEASUREMENT_TIME in največ vsak MINIMUM_MEASUREMENT_TIME), ko so spreminjali minimum med eno in prejšnjo (vrednost, ki ustreza MINIMUM_SIZE) in spremljati iz računalnika z aplikacijo Python da jih lahko kasneje analiziramo.

    Ko so bile vrednosti prilagojene (začenši z zelo gostimi meritvami), sem dobil zbirko vrednosti iz pulzni oksimeter sčasoma, da sem lahko naredil graf s preglednico, LibreOffice Calc de LibreOffice, specifično.

    graf meritev pulznega oksimetra z

    Z zbranimi podatki, kot je prikazano na zgornji sliki, je bila naslednja operacija ugotoviti, ali gostota vrednosti omogoča izračun na zanesljiv, a "ekonomičen" način (brez vzorčenja več kot potrebnih podatkov) vrednosti pulz; Kot je razvidno iz spodnjega grafa, se je zdelo, da so sprejeti ukrepi služili doseganju razumno pričakovanih rezultatov.

    .

    merjenje prisotnosti oksihemoglobina skozi čas s pulznim oksimetrom

    Nato je bilo treba z informacijami iz vzorčenja podatkov razviti algoritem, ki bi meril frekvenco pulza. Držimo se grafa, da zaradi enostavnosti predpostavljamo, da predstavlja postavitev, podobno kompleks QRS, se zdi najpreprostejša stvar meriti čase med najvidnejšimi deli, z višjimi vrednostmi (kar ustreza coni qRs depolarizacije prekatov), ​​pri čemer zavržemo bolj ravno in "hrupno" cono, ki je zato težje meriti. Sprejeta rešitev, ki ustreza spodnji testni kodi, deluje po naslednjem postopku:

    • V vsakem primeru zaznajte območje, ki se meri, da se osredotočite samo na vrhove vrednosti qRs in zavrzite dolino. Da bi to naredili, je mogoče izmeriti vrednosti, ki so višje od določene konstante, vendar obstaja tveganje, da bi lahko posameznik in/ali okoliščine, čeprav sorazmerno, zvišale ali znižale vrednosti. Da bi se temu izognili, velja, da je vrednost v območju večja od tiste, ki za določen koeficient presega povprečno vrednost. Na ta način je meritev občutljivo samokalibrirana in jo je mogoče še dodatno prilagajati s fino nastavitvijo koeficienta, kar sem v mojem primeru med preizkusi dosegel eksperimentalno.

      Izberite vrednosti padajoče cone za meritev (Rs) vrha qRs, čim bližje maksimumu krivulje. Če želite vedeti, da je naraščajoče območje opuščeno, je dovolj, da preverite, ali je nova vrednost manjša od prejšnje, in preverite, ali iskana vrednost še ni bila najdena, saj je na splošno več vrednosti v padajočem območje od qRs odvisno od gostote vzorčenja. Za merjenje impulza se shrani vrednost trenutka, ko je bila točka najdena (milisekunde, ki jih vrne milis ()) in ga primerja z naslednjim.

      Za zagotovitev, da je izmerjena vrednost največja v padajočem območju najvišje krivulje, se uporabi spremenljivka logično (meri_pulz v tem primeru in aktivno_merjenje_impulza v knjižnici), ki se aktivira ob vstopu v naraščajoče območje glavne krivulje in deaktivira, ko je najdena prva padajoča vrednost, ki je časovno merjena.

      Ker je običajno, da se trajanje utripa predstavi kot utripi na minuto (ppm), se vrednost časa med dobljenimi utripi popravi z izračunom tako, da se skupni čas utripa (ena minuta, 60000 milisekund) deli z intervalom, dobljenim z odštevanje trenutnih milisekund (od trenutne vrednosti) med predhodno merjenimi.

      Da bi se izognili napačnim meritvam (kot je na primer naprava, ki meri v vakuumu), je treba preveriti, ali je rezultat med najvišjo in najmanjšo vrednostjo, preden ga vzamemo za samoumevnega. Čeprav se kot povprečje šteje, da je normalna vrednost za zdravo odraslo osebo v mirovanju med 60 in 100 ppm, so spodaj navedene dovoljene vrednosti, pri športniku v mirovanju zlahka najdemo 40 ppm, med mirovanjem pa do 200 ppm. intenzivna vadba in več 100 ppm pri sedečih odraslih v stanjih vznemirjenosti, prav zanimiv dejavnik za projekt upravljanja spanja kar me vodi k razvoju tega naprava za merjenje pulza. Zaradi tega je priporočljivo, da se te vrednosti precej sprostijo, da se ne izgubijo skrajnosti, ki bi lahko natančno prikazale pomembne vidike.

      Nova povprečna vrednost se izračuna tako, da se zmanjša relevantnost trenutnega povprečja na podlagi števila vzorčenih vrednosti in se doda zadnja vrednost, prav tako ponderirana s koeficientom, ki jo zmanjša, čim več vrednosti je bilo izmerjenih do zdaj .

    Končno sem z uporabo prej opisanega algoritma razvil knjižnico za izračun utripa z zaznavanjem prisotnosti hemoglobin ali oksihemoglobin (odvisno od uporabljene valovne dolžine svetlobe) iz spodnje kode.

    Knjižnica pričakuje, da bo funkcija vzorčenja občasno klicana monitor_pulse() za izračun utripa, ki ga je mogoče pregledati s funkcijo last_pulse() ali s funkcijo povprečni_pulz() povprečni utrip. Poleg tega, da gre za omejen vir, sem izključil uporabo prekinitev, ker nisem potreboval takojšnjih vrednosti, temveč dolgotrajne vrednosti za spremljanje pulz v mojem projektu upravljanja spanja

    . V vsakem primeru se glede na teste, ki sem jih opravil, ne zdi potrebno; bodisi z napravo ali z vedenjem pulz, vzorčenje pri določeni frekvenci ponuja dovolj informacij in s povečanjem le-te ne dobimo veliko več (relevantnega), niti je ni mogoče veliko zmanjšati, ne da bi izgubili relevantne podatke za izračun; v zgodnjih različicah kode za spremljanje branja pulzni oksimeter Ugotovil sem, da se ni treba držati maksimalnega časa merjenja, saj je bil, če so bile variacije zaporednih vrednosti pravilno upoštevane, zelo blizu minimuma.

    Naslednji primer programa prikazuje, kako uporabiti prejšnjo knjižnico za merjenje pulz s pulzni oksimeter. Poleg instanciranja razreda Pulso spremljanje ravni oksihemoglobin/hemoglobin in z manjšo periodičnostjo vrednosti pulz izračunano in povprečno.

    Da bi zagotovili ustreznost meritev, je pred prikazom katere koli vrednosti programirano čakanje. Ker je vrednost lahko napačna (na primer, če uporabnik odstrani napravo), so vrednosti prikazane le, če so v območju veljavnih.

    po Komentar

    Morda ste zamudili