Spisu treści:

Rejestruj szybkie EKG lub inne dane w sposób ciągły przez ponad miesiąc: 6 kroków
Rejestruj szybkie EKG lub inne dane w sposób ciągły przez ponad miesiąc: 6 kroków

Wideo: Rejestruj szybkie EKG lub inne dane w sposób ciągły przez ponad miesiąc: 6 kroków

Wideo: Rejestruj szybkie EKG lub inne dane w sposób ciągły przez ponad miesiąc: 6 kroków
Wideo: Konferencja EZD RP organizowana przez NASK (październik 2023 r.) 2024, Lipiec
Anonim
Rejestruj szybkie EKG lub inne dane w sposób ciągły przez ponad miesiąc
Rejestruj szybkie EKG lub inne dane w sposób ciągły przez ponad miesiąc

Ten projekt został opracowany, aby wesprzeć uniwersytecki zespół badań medycznych, który potrzebował urządzenia do noszenia, które może rejestrować 2 sygnały EKG przy 1000 próbek/s każda (łącznie 2 tys. próbek/s) w sposób ciągły przez 30 dni, w celu wykrywania arytmii. Prezentowany tu projekt obejmuje zdalne sterowanie i monitorowanie rejestracji. Zdalne sterowanie odbywa się za pomocą menu prezentowanych na terminalu szeregowym, na komputerze lub telefonie komórkowym. Ten projekt nie obejmuje pomiaru EKG ani opakowania ani baterii wymaganych do ostatecznego noszenia.

Ta wersja o dużej szybkości i długim czasie działania wykorzystuje Teensy 3.2, moduł Adafruit Micro-SD breakout, wysokiej jakości kartę SD 16G SDHC klasy 10 do rejestrowania danych oraz moduł komunikacyjny Bluetooth do sterowania i monitorowania. Dostępna jest również mniej rozwinięta i wolniejsza wersja tego projektu UNO/Mega2560. Podczas gdy ten projekt wykorzystuje moduł komunikacyjny Bluetooth do sterowania i monitorowania rejestrowania, możesz również użyć modułów WiFi lub BLE.

Ta wersja, oparta na Teensy 3.2, jest zdolna do znacznie wyższych częstotliwości próbkowania niż wersja UNO/Mega2560. Używając tego kodu Teensy 3.2 może próbkować i rejestrować dwie próbki ADC z częstotliwością >30Khz ze sprzętem uśredniającym ponad 4 próbki iz łatwością spełnia powyższe wymagania 1000 próbek/s. Kod obsługuje zapisywanie 100 plików.bin po 128 KB każdy. Przy 30 Khz, które obejmuje 29 godzin 30 minut. Przy 1000 próbek/s obejmuje 37 dni. Kod można łatwo rozszerzyć, aby obsłużyć ponad 100 plików, co wydłuża czas działania. Pod koniec biegu będziesz mieć >10Gig danych,.bin, pliki i plik.met metadanych opisujących przebieg i wyniki. Dostarczonego pliku SDtoCSV.jar (kod źródłowy SDtoCSV_src.zip) można użyć do przekonwertowania plików.bin na pliki.csv na komputerze w celu dalszego przetwarzania. Wynikowe dane to >60Gig. Wersja UNO/Mega2560 zawiera konwersję.bin na.csv zawartą w szkicu Arduino, ale biorąc pod uwagę ilość danych zarejestrowanych przez wersję Teensy, nie jest to skuteczny sposób na wykonanie konwersji.

Kieszonkowe dzieci

Teensy 3.2 przez PJRC

Tabliczka zaciskowa karty Adafruit MicroSD+ lub podobna.

Karta microSD 16G SDHC klasy 10 dobrej jakości m.in. SanDisk.

Zasilanie USB 5 V

Led z rezystorem 470R w szeregu.

Rezystory 2 x 100R (zapewniają ochronę przed uszkodzeniem spowodowanym błędami okablowania Tx/Rx)

Bluetooth Mate Silver LUB jeden z modułów opisanych na Arduino UNO/Mega Starter, sterowany przez Android/pfodApp

Krok 1: Budowa

Budowa
Budowa

Pobierz i zainstaluj Arduino IDE V1.8.9+ ze strony https://arduino.cc/en/Main/Software. Ta strona internetowa zawiera łącza do różnych systemów operacyjnych oraz łącze do sekcji Pierwsze kroki (https://arduino.cc/en/Guide/HomePage).

Pobierz i zainstaluj Teensyduino (Wsparcie Teensy dla Arduino IDE). UWAGA dokładnie instrukcje pierwszego użycia.

Wybierz Teensy 3.2 jako tablicę i sprawdź, czy przykładowy program BLINK ładuje się i działa.

Pobierz i zainstaluj następujące biblioteki:- millisDelay i SdFat (tutaj znajduje się lokalna migawka biblioteki SdFat używanej do tych testów.) oraz pfodParser.zip (dla klas pfodBufferedStream i pfodNonBlockingInput)

Pobierz pliki zip biblioteki, a następnie użyj Arduino IDE → Szkic → Dołącz bibliotekę → Dodaj bibliotekę. ZIP, aby zainstalować biblioteki z plików zip.

Rozpakuj plik Teensy32AnalogLogger.zip do katalogu szkiców Arduino i zaprogramuj tablicę Teensy 3.2 za pomocą Teensy32AnalogLogger.ino (wersja 0.01)

Podłącz Teensy 3.2, moduł Bluetooth i moduł karty SD, jak pokazano powyżej (wersja pdf)

Krok 2: Uruchamianie programu - testowanie

Najpierw sformatuj kartę SD za pomocą

Karta SD musi być pusta, aby można było rozpocząć rejestrowanie.

Do wstępnego testowania nie trzeba podłączać modułu komunikacyjnego, wystarczy podłączyć moduł Teensy 3.2 + SD (z zainstalowaną pustą kartą) do Arduino IDE za pomocą kabla szeregowego USB. Jak podano, szkic Teensy32AnalogLogger.ino wykorzystuje połączenie USB do sterowania i monitorowania. Zobacz krok Rejestrowanie rzeczywistych danych poniżej, aby dowiedzieć się, jak używać urządzenia komunikacyjnego do sterowania i monitorowania.

Edytuj górną część szkicu Teensy32AnalogLogger.ino, aby ustawić COM_SERIAL na Serial, aby wyprowadzić do połączenia USB Teensy.

#define COM_SERIAL Serial

Następnie prześlij szkic do Teensy 3.2

Otwórz monitor szeregowy Arduino IDE z prędkością 115200 bodów (z zestawem NL i CR). Po kilku sekundach Teensy 3.2 wyświetli menu poleceń

Ver:0.01 wprowadź jedno z następujących poleceń:? - aktualny stan i metadane - inicjalizacja plikówl - lista plików>

Ten ? cmd wyświetla szczegóły bieżących ustawień. (Patrz góra strony Teensy32AnalogLogger.ino, aby zmienić te ustawienia) Polecenia cmd muszą być zakończone NL lub CR lub obydwoma.

0:00:00.000 z 720:00:00.000

Przykładowe piny: 16 17 Kolejność bajtów: Little-Endian ADC bity: 10 Średnie próbki ADC powyżej: 4 Częstotliwość próbkowania: 1000.00 Interwał próbkowania: 1000 uS Próbki na blok: 127 Czas do wypełnienia bloku: 127000 uS Czas do wypełnienia pliku: 9:01: 52.000 Czas do wypełnienia WSZYSTKICH plików: 894:04:48.000 Max opóźnienie SD (w tym zamknięcie/otwarcie pliku): 0uS Maksymalne opóźnienie zamknięcia/otwarcia pliku: 0uS Liczba bloków bufora: 28 Czas wypełnienia WSZYSTKICH buforów bloków: 3556000uS Maksymalna liczba buforów zapisane w wywołaniu storeSampleBuffers(): 0 Łącznie pominięte timery: 0 Całkowita liczba pominiętych próbek do tej pory: 0 Całkowita liczba zapisanych bloków: 0 Całkowita liczba zapisanych próbek: 0 obejmująca: 0:00:00.000 Bieżący plik:

W tym przypadku bieżący czas działania rejestrowania wynosi 0 z żądanych 720 godzin (30 dni), próbkowanie D16/A2 i D17/A3 (patrz poniżej ograniczenia dotyczące wyboru wejść ADC) 1000 razy na sekundę. Maksymalny czas pracy może wynosić do 894 godzin (37,25 dni). Główna pętla() może być zajęta do 3,5s (czas do wypełnienia WSZYSTKICH buforów bloków), zanim wszystkie dostępne bufory zostaną wypełnione i próbki zaczną być tracone. Zapisane bufory itp. są aktualizowane w miarę postępu przebiegu.

Włóż pustą kartę SD, użyj polecenia „i”, aby zainicjować 99 plików używanych do przechowywania danych. Wstępna ich inicjalizacja w tym miejscu zmniejsza opóźnienie czasowe podczas przełączania z jednego pliku do drugiego i umożliwia szybsze próbkowanie.

Inicjowanie 99 plików

Utworzenie nowego pliku: log00.bin Upłynął czas: 368mS Utworzenie nowego pliku: log01.bin Upłynął czas: 520mS… Utworzenie nowego pliku: log98.bin Upłynął czas: 15660mS Utworzenie nowego pliku: log99.bin Upłynął czas: 15812mS

Następnie możesz użyć polecenia r cmd, aby rozpocząć rejestrowanie. Uruchomienie będzie trwało przez żądany czas lub do momentu użycia polecenia s do jego zatrzymania. Możesz także użyć ? cmd podczas logowania, aby uzyskać zaktualizowane czasy i liczby. Oto krótki bieg zatrzymany wcześnie za pomocą polecenia s.

REJESTRACJA DANYCH …..

Ver:0.01 wprowadź jedno z następujących poleceń: ? - aktualny stan i metadane s - zatrzymaj rejestrację danych

REJESTRACJA DANYCH… Sprawdź za pomocą ? Komenda

Upływ czasu pracy: 0:00:10.000 z 720:00:00.000 Upływ czasu pracy: 0:00:20.000 z 720:00:00.000…

Zatrzymywanie rejestrowania i usuwanie nieużywanych plików.

… Usuwanie nieużywanego pliku: log98.bin Usuwanie nieużywanego pliku: log99.bin

0:01:04.976 z 720:00:00.000

Przykładowe piny: 16 17 Kolejność bajtów: Little-Endian ADC bity: 10 Średnie próbki ADC powyżej: 4 Częstotliwość próbkowania: 1000.00 Interwał próbkowania: 1000 uS Próbki na blok: 127 Czas do wypełnienia bloku: 127000 uS Czas do wypełnienia pliku: 9:01: 52.000 Czas do wypełnienia WSZYSTKICH plików: 894:04:48.000 Max opóźnienie SD (w tym zamknięcie/otwarcie pliku): 204uS Maksymalne opóźnienie zamknięcia/otwarcia pliku: 0uS Liczba bloków bufora: 28 Czas wypełnienia WSZYSTKICH buforów bloków: 3556000uS Maksymalna liczba buforów zapisane w wywołaniu storeSampleBuffers(): 1 Pominięte liczniki łącznie: 0 Całkowita liczba pominiętych próbek do tej pory: 0 Całkowita liczba zapisanych bloków: 511 Całkowita liczba zapisanych próbek: 64832 pokrycie: 0:01:04.832 Bieżący plik: log00.bin

ls:

2000-01-01 01:00:00 261632 log00.bin 2000-01-01 01:00:00 240 log.met

REJESTRACJA DANYCH ZAKOŃCZONA!

Ver:0.01 wprowadź jedno z następujących poleceń: ? - aktualny stan i metadane ** r - dane zapisu ADC ** niedostępne. Dane już istnieją ** i - pliki inicjujące ** niedostępne. Dane już istnieją l - lista plików

DANE JUŻ ZOSTAŁY ZAREJESTROWANE, sprawdź za pomocą ?

Wyświetlacz LED

Dioda LED podłączona do D3 (przy czym D2 zapewnia połączenie GND) zaświeci się na stałe, jeśli jakakolwiek próbka zostanie pominięta i będzie migać, jeśli wystąpi błąd. Szkic próbuje kontynuować po błędach, ale może się to nie udać.

Krok 3: Rejestrowanie rzeczywistych danych

Podczas rejestrowania rzeczywistych danych przez długi czas wygodniej jest podłączyć moduł komunikacyjny do pinów D0/D1 i zdalnie sterować i monitorować rejestrację. Tutaj zastosowano moduł Bluetooth Mate Silver z ustawieniami domyślnymi, 115200 bodów, bez sprzętowego uzgadniania (RTC, CTS), kod PIN 1234.

Uwaga: Po podłączeniu zasilania do modułu Mate Silver, przechodzi on w tryb konfiguracji, szybko miga czerwona dioda LED przez 60 sekund. W tym czasie możesz wysłać $$$ przez połączenie szeregowe do modułu, aby go skonfigurować, ale nie możesz podłączyć modułu. Gdy czerwona dioda zacznie powoli migać, moduł bluetooth zaakceptuje połączenia.

Zmień zdefiniowanie COM_SERIAL w Teensy32AnalogLogger.ino na sprzętowe połączenie szeregowe (D0/D1), Serial1

#define COM_SERIAL Serial1

Po sparowaniu z komputerem, nowy port COM został utworzony na komputerze, a CoolTerm może być używany do łączenia, kontrolowania i monitorowania logowania. Można również użyć innych modułów komunikacyjnych połączonych szeregowo, takich jak WiFi lub BLE, patrz Arduino UNO/Mega Starter, sterowany przez Android/pfodApp w celu uzyskania szczegółowych informacji.

Możesz także kontrolować i monitorować logowanie z telefonu komórkowego z systemem Android za pomocą aplikacji terminala Bluetooth, takiej jak aplikacja Terminal Bluetooth lub aplikacji terminala Wi-Fi i TCP, takiej jak TCP Telnet Terminal Pro lub mdoule Uart to BLE i aplikacji terminala BLE, takiej jak nRF UART V2

Krok 4: Ograniczenia w wyborze wejść ADC

Ograniczenia dotyczące wyboru wejść ADC
Ograniczenia dotyczące wyboru wejść ADC

Teensy 3.2 ma dwa oddzielne moduły sprzętowe ADC, ADC_0 i ADC_1, w swoim mikroprocesorze, dzięki czemu może próbkować dwa wejścia jednocześnie. Posiada również wbudowane uśrednianie sprzętowe, które pobiera wiele próbek ADC i uśrednia je przed odwróceniem wyniku.

Istnieją ograniczenia dotyczące tego, które wejścia można podłączyć do ADC_0, ADC_1. Obraz Teensy3_1_AnalogCard-p.webp

Podsumowując:-Dla odczytów z pojedynczym końcem, tj. + V odniesione do GND ADC_0 może czytać A0 do A9, A10, A11, A12, A14 ADC_1 może czytać A2, A3, A10, A13, A15 do A20 Jeśli wybierzesz pin, który ADC nie można odczytać, zwróci 0 (zawsze)

Ten projekt używa A2, A3, do których można uzyskać dostęp przez ADC_0 lub ADC_1.

Krok 5: Konwertowanie plików.bin na pliki.csv

Teensy32AnalogLogger.ino zapisuje próbki jako binarne w plikach logxx.bin, tj. od log00.bin do log99.bin. Teensy32AnalogLogger.ino zapisuje również plik log.met zawierający metadane dotyczące biegu.

Możesz użyć SDtoCSV.jar (kod źródłowy SDtoCSV_src.zip), aby przekonwertować pliki.bin na.csv w celu dalszego przetwarzania. Skopiuj pliki z karty SD na dysk twardy komputera z co najmniej 70 GB wolnego miejsca i skopiuj plik SDtoCSV.jar do tego samego katalogu. Otwórz okno poleceń w tym katalogu i uruchom

java -jar SDtoCSV.jar log

Jeśli Twój komputer nie ma zainstalowanej Javy, zainstaluj ją ze strony www.java.com

SDtoCSV przetworzy plik log.met, a następnie każdy z dostępnych plików logxx.bin w katalogu i wygeneruje plik.csv dla każdego.bin. Plik.csv zawiera numer sekwencji próbki, po którym następują dwa odczyty.

Przykładowe dane wyjściowe konsoli dla odczytu 2 ADC próbkowanego 30303 razy/s są pokazane tutaj, output.txt. Pokazuje, w jaki sposób zgłaszane są pominięte próbki. (Podwojenie liczby buforów w końcowym szkicu naprawiło te pominięte próbki)

SD_Logging do konwersji CSV. Sprawdź plik SDtoCSV.log pod kątem komunikatów o postępie i błędach. Przetwarzanie log00 Przetworzonych 256000 bloków Przetwarzanie log01 Przetworzonych 256000 bloków… Przetwarzanie log25 Przetworzonych 256000 bloków Przetwarzanie log26 Przetworzonych 256000 bloków Przetwarzanie log27 Przetworzonych 256000 bloków Pominięte Próbki: 2715 Przetwarzanie log28 Przetworzonych 256000 bloków… Log przetwarzania29 Przetworzonych 256000 bloków… Dziennik przetwarzania 47 Przetworzonych 256000 bloków Dziennik przetwarzania 48 Przetworzonych 35935 bloków --- Zakończone przetwarzanie

Pełniejszy plik dziennika, SDtoCSV.log, jest dołączany do każdego uruchomienia SDtoCSV. Zawiera dane wyjściowe meta i wszelkie komunikaty o błędach. Tutaj count:254 to liczba danych przechowywanych w tym bloku, tj. 127 próbek x 2 odczyty ADC na blok. PominięteSample to liczba par pominiętych odczytów, tj. wierszy w danych wyjściowych.csv.

=== Plik dziennika dla konwersji SD_Logging do CSV sob 13 lipca 13:19:51 AEST 2019 r. Aby wyświetlić komunikaty o postępie na konsoli, użyj java -jar SDtoCSV.jar Podstawowa nazwa pliku „log” Metadane Wersja: 0 (Little Endian) sampleInterval us: 33 adcBits:10 adcAvgs:4 pinCount:2 Pins: 16, 17 samplePerBlock:127 noBufferBlocks:28 czas trwania ms:51649820 żądany czas przebiegu ms:106216704 maxBuffersUsed:32 Ostrzeżenie: Przekroczono liczbę dostępnych buforów (28). Może brakować niektórych próbek. maxLatency uS:221476 Ostrzeżenie: Przekracza czas zapewniany przez bloki bufora (117348uS). Brakuje niektórych próbek. maxFileOpenTime uS:20998 pominięteTimers:0 pominięteSamplesTotal:2715 totalBlocksWritten:12323935 totalSamplesWritten:1565139665 Przetwarzanie log00.bin Przetworzone 256000 bloków Przetwarzanie log01.bin Przetworzone 256000 bloków… Przetwarzanie log26.bin Przetworzone 256000 bloków Przetwarzanie log27.bin !!! Blok: 57696 liczba: 254 pominiętyPróbki: 2339 !!! Blok: 57697 liczba: 254 pominięte Próbki: 376 Przetworzone 256000 bloków --- Całkowita liczba pominiętych próbek: 2715

Przetwarzanie log28.bin Przetworzono 256000 bloków

… Przetwarzanie log47.bin Przetworzone 256000 bloków Przetwarzanie log48.bin Przetworzone 35935 bloków --- Zakończone przetwarzanie

Przykładowy plik wyjściowy log00.csv to

SampleCounter (na 33uS), Pin 16, Pin 170, 248, 205 1, 273, 195 2, 228, 337 3, 360, 302 4, 355, 369 5, 220, 281…

Licznik próbek zwiększa się z pliku na plik, dzięki czemu może być używany jako znacznik czasu. Jeśli brakuje próbek, licznik próbek jest zwiększany o pominiętą liczbę przed wyprowadzeniem następnej linii, tak aby licznik/stempel czasu pozostawał dokładny dla zarejestrowanych próbek.

Krok 6: Komentarze do kodu i rozszerzeń

Teensy32AnalogLogger to mocno zmodyfikowana wersja przykładu AnalogBinLogger Billa Greimana w jego bibliotece SdFat Arduino. Tutaj biblioteka została przepisana, aby działała na Teensy 3.2.

Teensy32AnalogLogger używa timera0 do ustawienia interwału próbkowania. Obsługa przerwań dla timera0 uruchamia dwie konwersje ADC. Obsługa przerwań dla drugiego modułu ADC jest ciągle wywoływana, dopóki oba nie zostaną zakończone, zwykle pierwszy uruchomiony moduł ADC ADC_0 zakończy się przed drugim, więc obsługa przerwań jest wywoływana tylko raz. Obsługa przerwań ADC_1 zapisuje próbki w buforze danych.

W głównym loop() storeSampleBuffer() zapisuje wszystkie pełne bufory na karcie SD i przywraca bufory do pustej kolejki bufora. Duża ilość pamięci RAM dostępnej w Teensy 3.2 oznacza, że można przydzielić dużą liczbę buforów, a więc storeSampleBuffer() nie musi być często wywoływana. Pozostawia to czas na wykonanie przez główną pętlę () innej pracy, takiej jak polecenia przetwarzania i wysyłanie danych wyjściowych.

Rozszerzenia

Chociaż ten projekt działa jako szybki rejestrator danych, aby był w pełni nadający się do noszenia, nadal musi być zapakowany i dostarczony z systemem baterii i czujnikami EKG. Oprócz tego należy wziąć pod uwagę kilka rozszerzeń.

  1. Dodaj kontrolę w czasie rzeczywistym i monitorowanie próbkowanego kształtu fali za pomocą pfodApp za pomocą funkcji kreślenia pfodApp, aby wyświetlić migawki kształtu fali
  2. Rozszerz numery plików powyżej 99, aby uzyskać dłuższe przebiegi próbkowania
  3. Próbkuj więcej niż 2 wejścia. Ponieważ Teensy 3.2 ma podwójne moduły ADC, możesz zmodyfikować kod, aby dodać dodatkowe wejścia parami, aby zmaksymalizować częstotliwość próbkowania.
  4. Dodaj monitorowanie baterii, aby śledzić ładowanie baterii. Teensy 3.2 zużywa około 1100 mAh przez 24 godziny, w tym moduł bluetooth i SD, ale z wyłączeniem modułu czujnika
  5. Dodaj obwód zasilania podwójnej baterii, aby umożliwić wymianę baterii bez przerywania rejestrowania.

Zalecana: