Biblioteca Arduino pentru monitorizarea ritmului cardiac cu pulsoximetru

Biblioteca Arduino pentru monitorizarea ritmului cardiac cu pulsoximetru

Biblioteca Arduino pentru monitorizarea ritmului cardiac cu pulsoximetru

Unul dintre parametrii monitorizați în proiectul meu de management al somnului

Este pulsul. să-l măsoare Am dezvoltat un dispozitiv bazat pe comportamentul hemoglobinei și oxihemoglobinei față de diferite lungimi de undă de lumină. Practic, este vorba despre măsurarea câtă lumină de un anumit tip poate trece sau se reflectă într-o zonă bine irigată a corpului. Frecvența cu care are loc un ciclu complet al acestui fenomen permite măsurarea pulso.

Cuprins

    În faza de proiectare și testare a aparat de masurare a pulsului Am dezvoltat câteva mici programe care să mă ajute să verific dacă asamblarea a fost corectă. Mai întâi am scris codul de mai jos, care a luat din când în când valorile măsurate (cel puțin la fiecare MAXIMUM_MEASUREMENT_TIME si cel mult fiecare MINIMUM_MEASUREMENT_TIME) când au variat un minim între unu și precedentul (valoarea care îi corespunde MINIMUM_SIZE) si monitorizat de pe un computer cu o aplicație Python pentru a le putea analiza ulterior.

    Odată ce valorile au fost ajustate (începând cu măsurători foarte dense) am obținut o colecție de valori din puls oximetru de-a lungul timpului, am putut reprezenta grafic folosind o foaie de calcul, LibreOffice Calc de LibreOffice, specific.

    graficul măsurătorilor pulsoximetrului cu

    Cu datele colectate, așa cum este reprezentat în imaginea de mai sus, următoarea operațiune a fost de a determina dacă densitatea valorilor ne permite să calculăm într-un mod fiabil, dar „economic” (fără eșantionare mai mult decât datele necesare) valoarea pulso; După cum se poate observa în graficul de mai jos, măsurile luate par să servească la obținerea unor rezultate rezonabile de așteptat.

    .

    măsurarea prezenței oxihemoglobinei în timp cu un pulsioximetru

    În continuare, cu informațiile din eșantionarea datelor, a fost necesară dezvoltarea unui algoritm care să măsoare frecvența pulsului. Rămânând la graficul care, pentru simplitate, se presupune că reprezintă un aspect similar celui complex QRS, cel mai simplu pare să fie măsurarea timpilor dintre părțile cele mai proeminente, cu valori mai mari (care corespunde zonei qRs de depolarizare a ventriculilor), eliminând zona mai plată și „mai zgomotoasă”, care este deci mai dificilă. a masura. Soluția adoptată, care corespunde codului de testare de mai jos, funcționează conform următoarei proceduri:

    • Detectați zona care este măsurată în fiecare caz pentru a urmări doar vârfurile valorii qRs și aruncă valea. Pentru a face acest lucru, ar putea fi măsurate valori mai mari decât o anumită constantă, dar există riscul ca un individ și/sau circumstanțe să poată, deși proporțional, să crească sau să scadă valorile. Pentru a evita acest lucru, o valoare din zonă este considerată mai mare decât cea care depășește valoarea medie cu un anumit coeficient. În acest fel, măsurarea este sensibil auto-calibrată și ar putea fi ajustată și mai mult prin reglarea fină a coeficientului, ceea ce în cazul meu l-am realizat experimental în timpul testelor.

      Alegeți valorile zonei descendente pentru măsurare (Rs) vârfului qRs, cât mai aproape de maximul curbei. Pentru a ști că zona ascendentă este abandonată, este suficient să verificați că o nouă valoare este mai mică decât cea anterioară și să verificați că valoarea căutată nu a fost încă găsită deoarece, în general, există mai multe valori în descendența zona de qRs în funcţie de densitatea de eşantionare. Pentru a cronometra pulsul, este stocată valoarea momentului în care a fost găsit punctul (milisecundele returnate de milis ()) și îl compară cu următorul.

      Pentru a vă asigura că valoarea măsurată este cea mai mare în zona descendentă a celei mai înalte curbe, se utilizează o variabilă boolean (măsura_puls în acest exemplu şi măsurarea_pulsului_activ în bibliotecă) care se activează la intrarea în zona ascendentă a curbei majore și se dezactivează odată ce este găsită prima valoare descendentă, care este cea cronometrată.

      Deoarece este de obicei să se reprezinte durata pulsului ca bătăi pe minut (ppm), valoarea timpului dintre impulsuri obţinute se corectează prin calculul împărţind timpul total al reprezentării (un minut, 60000 milisecunde) la intervalul obţinut prin scăzând milisecundele curente (ale valorii curente) dintre cele cronometrate anterior.

      Pentru a evita măsurătorile false (cum ar fi dispozitivul care măsoară în vid, de exemplu), se verifică ca rezultatul să fie între valorile maxime și minime înainte de a se lua de la sine înțeles. Deși se consideră ca o medie că o valoare normală pentru un adult sănătos în repaus este între 60 și 100 ppm, mai jos sunt valori admisibile, este ușor de găsit 40 ppm la un sportiv în repaus, până la 200 ppm în timpul exerciții fizice intense și nu numai de 100 ppm la adulții sedentari în stări de excitare, tocmai un factor interesant pentru proiectul de management al somnului ceea ce mă face să dezvolt asta dispozitiv de măsurare a pulsului. Din acest motiv, este indicat să relaxați foarte mult aceste valori pentru a nu se pierde extremele, care ar putea arăta tocmai aspecte relevante.

      Noua valoare medie se calculează prin scăderea relevanței mediei curente pe baza numărului de valori eșantionate și se adaugă ultima valoare, ponderată tot cu un coeficient care o reduce și mai mult cu cât au fost măsurate mai multe valori până acum. .

    În cele din urmă, folosind algoritmul descris anterior, am dezvoltat biblioteca pentru a calcula pulsul prin detectarea prezenței hemoglobină o oxihemoglobina (în funcție de lungimea de undă a luminii utilizate) din codul de mai jos.

    Biblioteca se așteaptă ca funcția de eșantionare să fie apelată periodic monitor_pulse() pentru a calcula pulsul, care poate fi consultat cu funcția ultimul_puls() sau cu funcția puls_mediu() pulsul mediu. Pe lângă faptul că sunt o resursă limitată, am exclus să folosesc întreruperi pentru că nu aveam nevoie de valori imediate, ci mai degrabă susținute în timp pentru a monitoriza pulso în proiectul meu de management al somnului

    . In orice caz, din testele pe care le-am facut, nu pare a fi necesar; fie de dispozitiv, fie de comportamentul pulso, eșantionarea la o anumită frecvență oferă suficiente informații și nu se obține mult mai mult (relevant) prin creșterea acesteia și nici nu se poate micșora mult fără a pierde datele relevante pentru calcul; în versiunile timpurii ale codului pentru a monitoriza citirea puls oximetru Am descoperit că nu era necesar să se țină la un timp maxim de măsurare, deoarece, dacă variațiile valorilor succesive erau corect luate în considerare, acesta era foarte aproape de minim.

    Următorul exemplu de program arată cum să utilizați biblioteca anterioară pentru a măsura pulso cu un singur puls oximetru. Pe lângă instanțiarea clasei puls monitorizarea nivelului de oxihemoglobina/hemoglobină iar cu o periodicitate mai mică valoarea lui pulso calculate si medii.

    Pentru a vă asigura că măsurătorile sunt relevante, este programată o așteptare înainte de afișarea oricărei valori. Deoarece valoarea poate fi incorectă (de exemplu dacă utilizatorul scoate dispozitivul), valorile sunt afișate doar dacă se încadrează în intervalul celor considerate valide.

    Posteaza un comentariu

    S-ar putea să fi ratat