Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Kategoria: Kamery IP / Alarmy / Automatyka Bram
Montersi
Kategoria: Akumulatorki / Baterie / Ładowarki

Proste EKG na Arduino z interfejsem webowym

ghost666 15 Gru 2016 10:21
  • Proste EKG na Arduino z interfejsem webowym
    Elektrokardiogram (EKG) to urządzenie które stworzone jest do monitorowania i obrazowania aktywności mięśnia sercowego. Urządzenie to wykorzystane może być do monitorowania tempa pracy serca, regularności uderzeń itp. Aby lepiej zrozumieć działanie EKG przejrzeć można np. tą prezentację .

    Do konstrukcji układu wykorzystano Arduino i kompatybilny z nim shield z układami potrzebnymi do realizacji EKG wraz z zestawem elektrod.

    Uwaga!

    Należy pamiętać, że zaprezentowane urządzenie nie jest urządzeniem medycznym i nie nadaje się do takich zastosowań. Układ nie ma żadnych certyfikatów, a autor żadnego przeszkolenia medycznego. Przyczepianie elektrod do swojego ciała, może skutkować - w najgorszym przypadku - porażeniem bądź wywołaniem napadu padaczkowego.

    Do zestawienia układu potrzebne będą nam:

    * Arduino Uno, dostępne tutaj
    * Shield Olimex EKG dostępny tutaj wraz z dedykowanym oprogramowaniem.
    * Zestaw dedykowanych do shielda EKG elektrod, dostępny tutaj , ale także do znalezienia na eBay czy Amazonie.

    Jakkolwiek projekt powstawał na OS X, to wykorzystano przeglądarkę Google Chrome, aby połączyć się z Arduino, co sprawia, że aplikacja powinna funkcjonować na dowolnej platformie.

    Konfiguracja zworek na płytce Olimexa doskonale opisana jest w instrukcji do tego shielda. Konfiguracja wykorzystana przez autora projektu widoczna jest obok.

    Sketch Arduino, dostarczony wraz z shieldem, odpowiedzialny jest za odczytywanie wejść analogowych dedykowanych dla EKG. Program ten następnie wysyła dane poprzez interfejs szeregowy. Ustawienia transmisji są następujące:

    * Prędkość transmisji wynosi 57600 bps, a nie typowe 9600 bps.
    * Dane wysyłane są w formie binarnej, więc nie można odczytywać ich standardowym oprogramowaniem do monitorowania portu szeregowego.
    * Program do odczytu danych dostępny jest tylko na Windowsa, a celem autora było strumieniowanie danych na dowolną platformę. Kolejnymi krokami jest zautomatyzowana analiza, jednakże jest to dalszy etap realizacji projektu - pierwszym jest odczyt danych z shielda.

    Do stworzenia oprogramowania autor wykorzystał Chrome App, które pozwalają na tworzenie aplikacji z wykorzystaniem jedynie HTMLa i JavaScriptu. Więcej o tych aplikacjach dowiedzieć można się tutaj .

    Kod programu który odbiera dane z Arduino autor zapisał na repozytorium dostępnym tutaj . Aplikacja po zainstalowaniu zapewnia interfejs, wyglądający mniej-więcej tak:



    Aby zainstalować aplikację w Chromie wystarczy sklonować powyższe repozytorium i kliknąć w sekcję "Load the extension". Następnie na Arduino instalujemy skecz dostępny na githubie .

    Sketch stworzony w Arduino wysyła pakiety danych binarnych o następującym formacie:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    To oznacza łącznie 17 bajtów. Pierwsza dwa to odpowiednio 165 i 90 a ostatni to jedynka. Dzięki temu Chrome App może z łatwością dzielić dane na poszczególne pakiety. W jego obrębie każdy odczyt wartości analogowej zapisywany jest jako 16 bitowy integer, co oznacza, że trzeba te liczby zrekonstruować na podstawie podzielonych na części wartości. Do tego celu wykorzystana została prosta funkcja:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    W skeczu Arduino widać, że dane nadawane są w następującej kolejności - najpierw wysoka część bajtu, potem niska:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Więc aby zrekonstruować wartość z pierwszego kanału (CH1) wystarczy wykorzystać funkcję: byteArrayToLong([TXBuf[5], TXBuff[4]]), to znaczy najpierw z niską (low) częścią, a potem wysoką (high). Następnie aplikacja wykorzystuje CanvasJS aby prezentować dane w czasie rzeczywistym. W danym momencie na żywo prezentowany jest jedynie jeden kanał analogowy.

    Teraz wystarczy tylko podłączyć elektrody do "pacjenta", co jak zauważa autor nie jest takie proste, gdyż trudni jest zrealizować odpowiedni kontakt pomiędzy skórą a elektrodą. Konfiguracja w której układ działał najlepiej to elektrody L i R na, odpowiednio lewym i prawym nadgarstku, a elektroda D na kostce. Jak zauważa autor, elektrody na nadgarstkach muszą być ciasno zapięte i najlepiej posmarowane żelem poprawiającym ich kontakt ze skórą.
    Proste EKG na Arduino z interfejsem webowym


    Dalsze plany:

    * Automatyczna detekcja szczytów
    * Obliczanie częstotliwości skurczu serca
    * Obliczanie wariancji częstotliwości skurczu serca

    Źrodło: http://www.talkingquickly.co.uk/2015/01/diy-ekg-with-arduino-javascript/

  • #2 15 Gru 2016 11:17
    rb401
    Poziom 26  

    ghost666 napisał:
    Dalsze plany:

    * Automatyczna detekcja szczytów
    * Obliczanie częstotliwości skurczu serca
    * Obliczanie wariancji częstotliwości skurczu serca


    Przy takich fatalnych rezultatach odnośnie jakości przebiegu, to osobiście kiepsko widzę obróbkę tych danych nawet w zakresie pomiaru tętna.
    Jak na elementy użyte w torze analogowym, to dziwi mnie taki zaśmiecony przebieg. Widywałem dużo lepsze sygnały na prostych układach z 741. Tu tylko można orzec czy pacjent żyje.

    I jest tam pewien błąd w sztuce, mianowicie najpierw jest robione duże wzmocnienie (rzędu 100x) a później jest filtr dolnoprzepustowy 40Hz, nawet dość stromy 18dB/okt, w zamierzeniu chyba jako eliminujący sieć 50Hz czy 60Hz. Niestety wybranie takiej kolejności powoduje że przy dużych zakłóceniach sieciowych, wzmacniacz liniowy będzie przesterowany i filtr za nim to już musztarda po obiedzie. Wytnie sieć, ale nie odratuje tego co zniekształcił poprzedni stopień. Tym bardziej że wzmacniacze są tam zasilane tylko z 3,3V.

    Schemat

    Tak że osobiście odradzałbym kopiowanie tej konstrukcji jak chodzi o analogówkę.

  • #4 16 Gru 2016 11:38
    tmf
    Moderator Mikrokontrolery Projektowanie

    @ghost666 Elektrokardiogram to nie urządzenie, a wynik jego działania - zapis na papierze. Urządzenie to elektrokardiograf. Ale to tylko takie tam uwagi. Znacznie poważniejszy problem - to urządzenie jest niebezpieczne, potencjalnie śmiertelnie niebezpieczne. Wszelkie tego typu zabawki powinny mieć zasilanie bateryjne, w żadnym przypadku nie można ich podłączączać do zasilaczy, komputera itd. Jeśli tak, to cały układ musi posiadać optoizolację. Pomyślcie - mamy na klatce piersiowej zestaw elektrod, co się stanie jeśli pojawi się na nich 230V?
    Kolejna sprawa to jakość - pokazany zapis to masakra, ledwo widać na nim QRS, a i to nie zawsze. IMHO to się do niczego nie nadaje. Szczególnie biorąc pod uwagę, że są dostępne schematy równie prostych, a działających urządzeń tego typu.

  • #5 16 Gru 2016 13:16
    Qdlaty78
    Poziom 11  

    @tmf Właśnie to miałem napisać - Weźcie sobie "Podstawy.." Pawlickiego, albo dla odważniejszych biblię biomedu pod redakcją Pałko/Tadeusiewicz. PIERWSZA NAJWAŻNIEJSZA ZASADA POMIARÓW BIOLOGICZNYCH - PEŁNA SEPARACJA GALWANICZNA CZĘŚCI APLIKACYJNEJ. Oczywiście zasilanie bateryjne załatwia temat w jakiejś części.

    Ale jeśli chodzi o przedstawione dane, to nie są złe. Widać czasem nawet falę U. Zespoły QRS też klarowne. Trochę artefaktów ruchowych, jakieś tańce izolinii, ale idzie to wyeliminować.. Moja osobista małżonka ze znacznie gorszych przebiegów (magnetokardiografia) robiła całkiem śliczniutkie przebiegi:) oczywiście to wyklucza pewne zastosowania, ale raczej przedstawiony układ nie służy do wykrywania ektopów czy innych zaburzeń krótkotrwałych, a do zabawy.. Elektrody Ag/AgCl powinny poprawić kontakt ze skórą dość ładnie.

  • #7 16 Gru 2016 23:15
    Dawid90u
    Poziom 23  

    Kiedyś zrobiłem projekt mogący ukazać krzywą fotopletyzmograficzną na wzmacniaczu MCP604 i transoptorze. Pomiary robiłem na ręce w dwóch miejscach i wyniki jak na prymitywne sondy wychodziły w miarę dobre i bez szumu.
    Proste EKG na Arduino z interfejsem webowym Proste EKG na Arduino z interfejsem webowym Proste EKG na Arduino z interfejsem webowym

  • #8 21 Gru 2016 13:23
    _JAG_
    Poziom 14  

    A nie lepiej było to zrobić na ESP8266. Szybsze, małe i bezprzewodowe. Całość zmieściła by się w pudełku po papierosach razem z baterią i dodatkowymi elementami.
    Można by to połączyć z jakąś platformą IoT.

    No tak ale wtedy nikt by nie sprzedał dodatkowych gadżetów....