Biblioteka Arduino do monitorowania tętna za pomocą pulsoksymetru

Biblioteka Arduino do monitorowania tętna za pomocą pulsoksymetru

Biblioteka Arduino do monitorowania tętna za pomocą pulsoksymetru

Jeden z parametrów monitorowanych w moim projekcie zarządzania snem

To puls. zmierzyć Opracowałem urządzenie oparte na zachowaniu hemoglobiny i oksyhemoglobiny pod wpływem różnych długości fal światła. Zasadniczo chodzi o pomiar, ile światła określonego rodzaju jest w stanie przejść lub zostać odbite w dobrze nawodnionym obszarze ciała. Częstotliwość z jaką zachodzi pełny cykl tego zjawiska pozwala zmierzyć pulso.

Spis treści

    Na etapie projektowania i testowania urządzenie do pomiaru tętna Opracowałem kilka małych programów, które pomogły mi zweryfikować poprawność montażu. Na początek napisałem poniższy kod, który co jakiś czas pobierał zmierzone wartości (przynajmniej co MAXIMUM_MEASUREMENT_TIME i co najwyżej każdy MINIMUM_MEASUREMENT_TIME), gdy różniły się minimum między jednym a poprzednim (wartość, która odpowiada MINIMALNY_ROZMIAR) i monitorowane z komputera z aplikacją w języku Python aby móc je później przeanalizować.

    Po dostosowaniu wartości (zaczynając od bardzo gęstych pomiarów) otrzymałem zbiór wartości z pulsoksymetr z biegiem czasu mogłem sporządzać wykresy za pomocą arkusza kalkulacyjnego, Kalkulator LibreOffice de LibreOffice, konkretny.

    wykres pomiarów pulsoksymetru za pomocą

    Na podstawie zebranych danych, jak pokazano na powyższym obrazku, kolejną operacją było sprawdzenie, czy gęstość wartości pozwala w rzetelny, ale „ekonomiczny” sposób obliczyć (nie pobierając więcej niż niezbędne dane) wartość pulso; Jak widać na poniższym wykresie, podjęte działania zdawały się służyć uzyskaniu wyników, których można było się spodziewać.

    .

    pomiar obecności oksyhemoglobiny w czasie za pomocą pulsoksymetru

    Następnie, korzystając z informacji pochodzących z pobierania próbek danych, konieczne było opracowanie algorytmu, który mierzyłby częstość tętna. Trzymając się wykresu, dla uproszczenia przyjmuje się, że reprezentuje on układ podobny do Zespół QRSnajprostszą rzeczą wydaje się być zmierzenie czasów pomiędzy najbardziej wydatnymi częściami, przy wyższych wartościach (co odpowiada strefie depolaryzacji qRs komór) z pominięciem strefy bardziej płaskiej i „głośniejszej”, przez co trudniejsza do mierzyć. Przyjęte rozwiązanie, które odpowiada poniższemu kodowi testowemu, działa według następującej procedury:

    • W każdym przypadku należy wykryć mierzony obszar, aby uwzględnić tylko szczyty wartości qR i wyrzuć dolinę. W tym celu można zmierzyć wartości wyższe od określonej stałej, ale istnieje ryzyko, że osoba i/lub okoliczności mogą, choć proporcjonalnie, podnieść lub obniżyć te wartości. Aby tego uniknąć, wartość w obszarze uważa się za większą niż ta, która przekracza wartość średnią o określony współczynnik. W ten sposób pomiar jest automatycznie kalibrowany z dużą czułością i można go jeszcze bardziej dostosować poprzez dostrojenie współczynnika, co w moim przypadku osiągnąłem eksperymentalnie podczas testów.

      Wybierz wartości strefy malejącej dla pomiaru (Rs) szczytu qR, jak najbliżej maksimum krzywej. Aby wiedzieć, że strefa rosnąca jest porzucana, wystarczy sprawdzić, czy nowa wartość jest mniejsza od poprzedniej i sprawdzić, czy szukana wartość nie została jeszcze znaleziona, gdyż generalnie w strefie malejącej jest kilka wartości strefa qR w zależności od gęstości próbkowania. Do pomiaru czasu impulsu zapisywana jest wartość chwili znalezienia punktu (milisekundy zwracane przez millis ()) i porównuje go z kolejnym.

      Aby mieć pewność, że zmierzona wartość będzie największa w strefie opadającej najwyższej krzywej, stosuje się zmienną logiczna (pomiar_pulsu w tym przykładzie i pomiar_aktywnego_impulsu w bibliotece), która jest aktywowana w momencie wejścia w strefę rosnącą krzywej głównej i dezaktywowana po znalezieniu pierwszej wartości malejącej, czyli wartości czasowej.

      Ponieważ czas trwania impulsu zwykle przedstawia się jako uderzenia na minutę (ppm), wartość czasu między uzyskanymi impulsami koryguje się poprzez obliczenie poprzez podzielenie całkowitego czasu reprezentacji (jedna minuta, 60000 XNUMX milisekund) przez przedział uzyskany przez odejmując bieżące milisekundy (od bieżącej wartości) od wcześniej zmierzonych.

      Aby uniknąć fałszywych pomiarów (takich jak na przykład urządzenie mierzące w próżni), przed przyjęciem go za pewnik sprawdza się, czy wynik mieści się pomiędzy wartościami maksymalnymi i minimalnymi. Choć za średnią przyjmuje się, że dla zdrowego dorosłego człowieka w spoczynku wartość ta mieści się w przedziale od 60 do 100 ppm, poniżej znajdują się wartości dopuszczalne, łatwo znaleźć u sportowca w spoczynku 40 ppm, do 200 ppm w trakcie intensywne ćwiczenia i więcej 100 ppm u dorosłych prowadzących siedzący tryb życia w stanach podniecenia, to właśnie interesujący czynnik w projekcie zarządzania snem co skłania mnie do rozwinięcia tego urządzenie do pomiaru tętna. Z tego powodu wskazane jest znaczne rozluźnienie tych wartości, aby nie zgubić skrajności, które mogłyby precyzyjnie pokazać istotne aspekty.

      Nowa średnia wartość jest obliczana poprzez zmniejszenie trafności bieżącej średniej na podstawie liczby pobranych wartości i dodawana jest ostatnia wartość, również ważona współczynnikiem, który zmniejsza ją tym bardziej, im więcej wartości zostało zmierzonych do tej pory .

    Na koniec, korzystając z opisanego wcześniej algorytmu, opracowałem bibliotekę do obliczania pulsu poprzez wykrywanie obecności hemoglobina o oksyhemoglobina (w zależności od użytej długości fali światła) z poniższego kodu.

    Biblioteka oczekuje, że funkcja próbkowania będzie wywoływana okresowo monitor_impulsu() do obliczenia pulsu, który można sprawdzić za pomocą funkcji ostatni_impuls() lub z funkcją średni_impuls() średni puls. Oprócz tego, że mam ograniczone zasoby, wykluczyłem stosowanie przerw, ponieważ nie potrzebowałem natychmiastowych wartości, ale raczej wartości trwałych w czasie, aby monitorować pulso w moim projekcie zarządzania snem

    . W każdym razie z przeprowadzonych przeze mnie testów wynika, że ​​nie jest to konieczne; albo przez urządzenie, albo przez zachowanie pulsopobieranie próbek z określoną częstotliwością zapewnia wystarczającą ilość informacji, a zwiększenie go nie daje wiele więcej (istotnego), ani też nie jest możliwe jego znaczne zmniejszenie bez utraty danych istotnych do obliczeń; we wczesnych wersjach kodu do monitorowania odczytu pliku pulsoksymetr Odkryłem, że nie trzeba trzymać się maksymalnego czasu pomiaru, gdyż przy prawidłowym uwzględnieniu zmian kolejnych wartości był on bardzo bliski minimum.

    Poniższy przykładowy program pokazuje, jak wykorzystać poprzednią bibliotekę do pomiaru pulso z pulsoksymetr. Oprócz tworzenia instancji klasy Puls monitorowanie poziomu oksyhemoglobina/hemoglobina i przy mniejszej okresowości wartość pulso obliczone i średnie.

    Aby mieć pewność, że pomiary są istotne, przed wyświetleniem jakiejkolwiek wartości zaprogramowane jest oczekiwanie. Ponieważ wartość może być niepoprawna (na przykład, jeśli użytkownik usunie urządzenie), wartości są wyświetlane tylko wtedy, gdy mieszczą się w zakresie uznawanych za prawidłowe.

    Zamieść komentarz

    Być może przegapiłeś