Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Rejestracja tętna podczas snu - Arduino nano.

TechEkspert 19 Wrz 2017 00:05 5328 5
  • Rejestracja tętna podczas snu - Arduino nano.

    Rejestracja tętna podczas snu - Arduino nano.
    Ostatnio trafiłem na czujnik tętna oparty o element fotoelektryczny. Testując czujnik UV z cyfrowym interfejsem SI1132 okazało się, że przy odpowiednim zakresie pomiarowym czujnika określanie tętna na podstawie przyłożonego palca oświetlonego LED IR jest dość prostym zadaniem. Czujniki optyczne są nieco mniej "inwazyjne" niż prawdziwe EKG czyli odczyt potencjałów z elektrod umieszczonych na klatce piersiowej. Profesjonalne pulsoksymetry zakładane na palec potrafią oszacować nasycenie krwi tlenem. Analogowy czujnik na który trafiłem był tańszy od SI1132 i nie ma nic wspólnego z profesjonalnym sprzętem medycznym, kosztował 2$ ale po przyłożeniu do palca potrafi wykrywać tętno. Opis czujnika i kod dla Arduino na stronie producenta https://pulsesensor.com podobne czujniki możecie znaleźć na portalach aukcyjno/sprzedażowych wpisując w wyszukiwarkę "pulse sensor".
    Ostrzeżenie:
    Tego typu tanie czujniki "medyczne" nie mają nic wspólnego z prawdziwą elektroniką medyczną, prezentuję tutaj efekty własnych prób podejmowanych na własne ryzyko, osoby które chciałby podjąć podobne próby wykonują je na własne ryzyko. Co może pójść nie tak? Wiele rzeczy, zasilanie wyłącznie bateryjne to rzecz oczywista, ale nawet źródło takie jak bateria/akumulator może być groźna przy zwarciu i np. wywołać oparzenie lub pożar, możliwe jest zaplątanie się w kabel i zrobienie sobie przez przypadek krzywdy. Dlatego materiał umieszczam jako ciekawostkę, źródło informacji o rozwiązaniach układowych.

    Czujnik posiada element oświetlający, element czuły na natężenie światła, oraz wzmacniacz, przepływ krwi w tkankach w rytm pracy serca "moduluje" światło przenikające przez palec.

    Zmiany analogowego sygnału na wyjściu są dość słabe:
    Rejestracja tętna podczas snu - Arduino nano.

    Na stronie producenta jednego z czujników znajdziecie kod programu dla Arduino określającego częstotliwość pulsu:Link

    Rejestracja tętna podczas snu - Arduino nano.

    Do rejestracji wykorzystałem Ardunino nano, po modyfikacji programu z https://pulsesensor.com/pages/code-and-guide dane były cyklicznie zapisywane w EEPROM mikrokontrolera. Dodałem możliwość odczytu zawartości EEPROM i kasowania zawartości z wykorzystaniem komend wydawanych w terminalu UART. Urządzenie zasiliłem z power banku, tutaj uwaga część z tych urządzeń przy zbyt małym poborze wyłącza się po upływie określonego czasu.
    Rejestracja tętna podczas snu - Arduino nano.
    Wyjście czujnika należy połączyć z wejściem A0 płytki, czujnik i płytka pracuje z napięciem 5V. Wbudowany konwerter UART<->USB w Arduino nano pozwala na łatwą komunikację interfejsem szeregowym.

    Plik Interrupt.ino pozostawiamy bez zmian:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Natomiast w pliku głównym modyfikujemy pętlę główną i dodajmy obsługę komend wydawanych po UART oraz cykliczny zapis danych do EEPROM:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Zainteresowała mnie możliwość rejestracji częstotliwości pracy serca podczas snu. Po odczytaniu danych zaskoczyła mnie chaotyczność uzyskanego wykresu, właściwie nie wiem czego oczekiwałem przecież organizm to nie jakieś urządzenie lub generator ;)
    Rejestracja tętna podczas snu - Arduino nano.

    Po bliższym przyjrzeniu się uzyskanemu zapisowi można dostrzec pewne zależności.
    Fragment 1 - etap szybkiego zasypania, częstotliwość tętna szybko zmniejsza swoją wartość i utrzymuje się na stałym poziomie.
    Fragment 2 - ten etap pamiętam, zbudziłem się ale uznałem że jest wolny dzień i można jeszcze spać.
    Fragment 3 - przed ostatecznym przebudzeniem widoczne zwiększenie częstotliwości tętna, oraz co ciekawe spadek częstotliwości tętna przed samym wybudzeniem i wyłączeniem rejestracji.

    Można dodać np. czujnik oddechu, "foliowe" tensometry czułe na nacisk lub ugięcie są teraz dość tanie. Można zarejestrować sygnał z czujnika na kartę SD z próbkowaniem np 10Hz i przeanalizować "offline". Tutaj przykład wykorzystania karty SD z Arduino: Tygodniowy pomiar częstotliwości napięcia sieciowego - eksperyment.

    Na koniec takie spostrzeżenie, jako elektronik zauważyłem że podczas pobytu w szpitalu czułem się mniej przytłoczony widokiem wszelkiego rodzaju otaczającej elektroniki gdyż wiele z tych urządzeń ma dość oczywiste działanie czasami zbliżone zasadami działania do sprzętu w pracowni elektronika. Po pewnym czasie wspomnienie o tych doświadczeniach może nawet działać inspirująco w zakresie rozwiązań układowych.


    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
  • #2
    Poziom 13  

    Czy możesz opisać w jaki sposób odczytujesz dane z Arduino? coś jak instrukcja krok po kroku. Pozdrawiam.

  • #3
    Redaktor

    @grawastar1986 program został tak zmodyfikowany aby odczyt i kasowanie eeprom można było zrealizować przez port szeregowy z wykorzystaniem monitora portu szeregowego wbudowanego w Arduino i ustawionego na prędkość 115200. Podczas pracy program szuka pierwszego zerowego bajtu w pamięci eeprom i tam umieszcza wyniki tak aż do wypełnienia całej pamięci eeprom lub wyłączenia modułu. Do zarządzania programem przez COM wykorzystałem fragment kodu do testów SPIFS w ESP8266: Moduł D1 mini Pro - ESP8266 WiFi - pierwsze uruchomienie, testy SPIFFS.

    1. Podłączamy Arduino nano do portu USB.
    2. Arduino nano przez kilkadziesiąt sekund nasłuchuje komend na porcie szeregowym, na którym zainstalował się konwerter USB<->UART,
    jeżeli żadna komenda nie zostanie wydana uruchamiana jest pętla pomiaru i zapisu wartości tętna.
    3. Możemy wydać komendy: help, read, erase.
    4. Wydajemy komendę "read" i w terminalu otrzymujemy kolejno zarejestrowane wartości tętna, kopiujemy zawartość np. do notatnika lub excela.
    5. Wydajemy komendę "erase" i zerujemy zawartość eeprom.

    Warto obserwować temat: Arduino nano - pierwsze uruchomienie, test, opinia.
    moduły Arduino nano pojawią się dostępne na elektroda.pl

  • #4
    Poziom 34  

    TechEkspert napisał:
    Testując czujnik UV z cyfrowym interfejsem SI1132 okazało się, że przy odpowiednim zakresie pomiarowym czujnika określanie tętna na podstawie przyłożonego palca oświetlonego LED IR jest dość prostym zadaniem.


    Niejasne jest dla mnie jakim czujnikiem się posłużyłeś. Piszesz o SI1132 (z I2C) a w źródłach czytasz z pomocą analogRead(pulsePin) i pokazujesz jakieś oscylogramy.
    Moim zdaniem ten rejestrator, szczególnie przy jego prostocie, jest ciekawym tematem ale obawiam się że w tym akurat tu prezentowanym wykonaniu ma pewne słabe punkty, które poddają w wątpliwość wyniki (ten "dziwny" wynikowy wykres).

  • #5
    Redaktor

    Wykorzystałem analogowy czujnik za 2$ ze źródłem oświetlenia, czujnikiem optycznym i wzmacniaczem, po wpisaniu na różnych giełdach "pusle sensor" jest tego trochę: https://pl.aliexpress.com/wholesale?SearchText=pulse+sensor
    Są też znacznie ciekawsze czujniki z interfejsem cyfrowym które określają saturację krwi tlenem.

    Natomiast o SI1132 wspomniałem gdyż miałem okazję go testować (w zalinkowanym materiale) miał on tak szeroką dynamikę/zakres pracy że bez trudu wykrywał puls po przyłożeniu oświetlonego IR palca:
    Testy cyfrowego czujnika UV SI1132 z wykorzystaniem Arduino.

  • #6
    Poziom 13  

    Dziekuje za instrukcje :) bede budowal ten uklad. Pozdrawiam

    Dodano po 9 [godziny] 31 [minuty]:

    Niestety mam problem z kompilacją. Pokazuje błąd:

    Code:

    Arduino:1.8.4 (Windows 7), Płytka:"Arduino Nano, ATmega328P"

    C:\Users\Kot\Downloads\PulseSensor_Amped_Arduino-master\PulseSensor_Amped_Arduino-master\PulseSensorAmped_Arduino_1.5.0\AllSerialHandling.ino: In function 'void serialOutput()':

    AllSerialHandling:9: error: 'outputType' was not declared in this scope

       switch(outputType){

              ^

    AllSerialHandling:10: error: 'PROCESSING_VISUALIZER' was not declared in this scope

         case PROCESSING_VISUALIZER:

              ^

    AllSerialHandling:13: error: 'SERIAL_PLOTTER' was not declared in this scope

         case SERIAL_PLOTTER:  // open the Arduino Serial Plotter to visualize these data

              ^

    C:\Users\Kot\Downloads\PulseSensor_Amped_Arduino-master\PulseSensor_Amped_Arduino-master\PulseSensorAmped_Arduino_1.5.0\AllSerialHandling.ino: In function 'void serialOutputWhenBeatHappens()':

    AllSerialHandling:28: error: 'outputType' was not declared in this scope

       switch(outputType){

              ^

    AllSerialHandling:29: error: 'PROCESSING_VISUALIZER' was not declared in this scope

         case PROCESSING_VISUALIZER:    // find it here https://github.com/WorldFamousElectronics/PulseSensor_Amped_Processing_Visualizer

              ^

    exit status 1
    'outputType' was not declared in this scope

    Ten raport powinien zawierać więcej informacji jeśli w
    File -> Preferencje zostanie włączona opcja "Pokaż
    szczegółowe informacje podczas kompilacji"

    Dodano po 1 [minuty]:

    Już mam: trzeba było usunąć plik AllSerialHandling.