Inhaltsverzeichnis:

Hochgeschwindigkeits-EKG oder andere Daten kontinuierlich über einen Monat aufzeichnen - Gunook
Hochgeschwindigkeits-EKG oder andere Daten kontinuierlich über einen Monat aufzeichnen - Gunook

Video: Hochgeschwindigkeits-EKG oder andere Daten kontinuierlich über einen Monat aufzeichnen - Gunook

Video: Hochgeschwindigkeits-EKG oder andere Daten kontinuierlich über einen Monat aufzeichnen - Gunook
Video: Polar Vantage V3 im Test (2023): Einsteiger GUIDE | Alle Funktionen, Einstellungen, Menü, Daten 2024, Juli
Anonim
Protokollieren Sie Hochgeschwindigkeits-EKG oder andere Daten kontinuierlich über einen Monat
Protokollieren Sie Hochgeschwindigkeits-EKG oder andere Daten kontinuierlich über einen Monat

Dieses Projekt wurde entwickelt, um ein medizinisches Forschungsteam einer Universität zu unterstützen, das ein Wearable benötigte, das 2 x EKG-Signale mit jeweils 1000 Samples/Sek. (2K Samples/Sek. insgesamt) 30 Tage lang kontinuierlich aufzeichnen konnte, um Arrhythmien zu erkennen. Das hier vorgestellte Projekt umfasst die Fernsteuerung und Überwachung der Protokollierung. Die Fernbedienung erfolgt über Menüs, die auf einem seriellen Terminal angezeigt werden, entweder auf einem Computer oder Mobiltelefon. Dieses Projekt deckt nicht die EKG-Messung oder Verpackung oder Batterie ab, die für das endgültige Wearable erforderlich sind.

Diese Hochgeschwindigkeits-/Langzeitversion verwendet Teensy 3.2, Adafruit Micro-SD Breakout-Modul, eine hochwertige 16G SDHC Klasse 10 SD-Karte zum Protokollieren der Daten und ein Bluetooth-Kommunikationsmodul zur Steuerung und Überwachung. Eine weniger entwickelte und langsamere UNO/Mega2560-Version dieses Projekts ist ebenfalls verfügbar. Während dieses Projekt ein Bluetooth-Kommunikationsmodul zur Steuerung und Überwachung der Protokollierung verwendet, können Sie auch WiFi- oder BLE-Module verwenden.

Diese auf dem Teensy 3.2 basierende Version ist zu deutlich höheren Abtastraten fähig als die UNO/Mega2560-Version. Mit diesem Code kann der Teensy 3.2 zwei ADC-Samples bei >30 Khz mit Hardware-Mittelung über 4 Samples abtasten und protokollieren und erfüllt so problemlos die oben genannten Anforderungen von 1000 Samples/Sek. Der Code unterstützt das Speichern von 100.bin-Dateien mit jeweils 128 KB. Bei 30 Khz deckt das 29 Stunden 30 Minuten ab. Bei 1000 Samples/sec deckt sie 37 Tage ab. Der Code kann problemlos auf mehr als 100 Dateien erweitert werden, wodurch sich die Laufzeit verlängert. Am Ende des Laufs haben Sie >10 Gig an Daten,.bin, Dateien und eine.met-Datei mit Metadaten, die den Lauf und die Ergebnisse beschreiben. Mit der mitgelieferten SDtoCSV.jar (Quellcode SDtoCSV_src.zip) können Sie die.bin-Dateien auf Ihrem Computer zur weiteren Verarbeitung in.csv-Dateien konvertieren. Die resultierenden Daten sind > 60 Gig. Die UNO/Mega2560-Version hat eine.bin zu.csv-Konvertierung in der Arduino-Skizze enthalten, aber angesichts des von der Teensy-Version protokollierten Datenvolumens ist dies keine effiziente Möglichkeit, die Konvertierung durchzuführen.

Lieferungen

Teensy 3.2 von PJRC

Adafruit MicroSD-Karten Breakout Board+ oder ähnlich.

16G SDHC Klasse 10 MicroSD Karte von guter Qualität z. B. SanDisk.

5V USB-Versorgung

Eine LED mit einem 470R-Widerstand in Reihe.

2 x 100R-Widerstände (bietet Schutz vor Beschädigung durch Tx/Rx-Verdrahtungsfehler)

Bluetooth Mate Silver ODER eines der auf Arduino UNO/Mega Starter beschriebenen Module, gesteuert von Android/pfodApp

Schritt 1: Konstruktion

Konstruktion
Konstruktion

Laden Sie Arduino IDE V1.8.9+ von https://arduino.cc/en/Main/Software herunter und installieren Sie es. Diese Webseite enthält Links für verschiedene Betriebssysteme und einen Link zu GettingStarted (https://arduino.cc/en/Guide/HomePage).

Laden Sie das Teensyduino (Teensy Support für die Arduino IDE) herunter und installieren Sie es. BEACHTEN Sie sorgfältig die Anweisungen zum ersten Gebrauch.

Wählen Sie Teensy 3.2 als Board aus und prüfen Sie, ob das BLINK-Beispielprogramm geladen und ausgeführt wird.

Laden Sie die folgenden Bibliotheken herunter und installieren Sie sie: millisDelay und SdFat (Ein lokaler Snapshot der SdFat-Bibliothek, die für diese Tests verwendet wird, finden Sie hier.) und die pfodParser.zip (für die pfodBufferedStream- und pfodNonBlockingInput-Klasse)

Laden Sie die ZIP-Dateien der Bibliothek herunter und verwenden Sie dann das Arduino IDE → Sketch → Include Library → Add. ZIP library menu, um die Bibliotheken aus den ZIP-Dateien zu installieren.

Entpacken Sie die Datei Teensy32AnalogLogger.zip in Ihr Arduino-Skizzenverzeichnis und programmieren Sie das Teensy 3.2-Board mit Teensy32AnalogLogger.ino (Version 0.01)

Verdrahten Sie das Teensy 3.2, das Bluetooth-Modul und das SD-Kartenmodul wie oben gezeigt (pdf-Version)

Schritt 2: Ausführen des Programms – Testen

Formatieren Sie zuerst Ihre SD-Karte mit dem

Die SD-Karte muss leer sein, um das Logging zu starten.

Für erste Tests müssen Sie das Kommunikationsmodul nicht anschließen, sondern einfach das Teensy 3.2 + SD-Modul (mit einer installierten leeren Karte) über das serielle USB-Kabel an die Arduino IDE anschließen. Wie vorgesehen verwendet der Teensy32AnalogLogger.ino-Skizze den USB-Anschluss zur Steuerung und Überwachung. Weitere Informationen zur Verwendung eines Kommunikationsgeräts für die Steuerung und Überwachung finden Sie unten im Schritt Logging Real Data.

Bearbeiten Sie den oberen Teil der Skizze Teensy32AnalogLogger.ino, um COM_SERIAL auf Seriell zu setzen, um die Ausgabe an die Teensy-USB-Verbindung zu ermöglichen.

#define COM_SERIAL-Seriennummer

Dann laden Sie die Skizze auf den Teensy 3.2. hoch

Öffnen Sie den Arduino IDE Serial Monitor bei 115200 Baud (mit NL- und CR-Set). Nach einigen Sekunden zeigt das Teensy 3.2 ein Menü mit Befehlen an

Ver:0.01 Geben Sie einen der folgenden Befehle ein:? - Aktueller Status und Metadaten - Dateien initialisieren - Dateien auflisten>

Die ? cmd zeigt Details der aktuellen Einstellungen an. (Siehe oben auf Teensy32AnalogLogger.ino, um diese Einstellungen zu ändern) Cmds müssen mit einem NL oder CR oder beidem abgeschlossen werden.

0:00:00.000 von 720:00:00.000

Sample-Pins: 16 17 Byte-Reihenfolge: Little-Endian-ADC-Bits: 10 ADC-Sample-Durchschnitte über: 4 Sample-Rate: 1000,00 Sample-Intervall: 1000uS Samples pro Block: 127 Zeit zum Füllen eines Blocks: 127000uS Zeit zum Füllen einer Datei: 9:01: 52.000 Zeit zum Füllen ALLER Dateien: 894:04:48.000 Max. SD-Latenzzeit (einschließlich Schließen/Öffnen von Dateien): 0uS Max. Datei-Schließen/Öffnen-Latenz: 0uS Anzahl der Pufferblöcke: 28 Zeit zum Füllen ALLER Blockpuffer: 3556000uS Max. Anzahl der Puffer gespeichert im Aufruf von storeSampleBuffers(): 0 Missed Timers total: 0 Total Missed Samples bisher: 0 Total Blocks geschrieben: 0 Total Samples geschrieben: 0 Covering: 0:00:00.000 Aktuelle Datei:

In diesem Fall beträgt die aktuelle Protokollierungslaufzeit 0 der angeforderten 720 Stunden (30 Tage), wobei D16/A2 und D17/A3 (siehe unten für Einschränkungen bei der Auswahl der ADC-Eingänge unten) 1000 Mal pro Sekunde abgetastet werden. Die maximale Laufzeit kann bis zu 894 Stunden (37,25 Tage) betragen. Die Hauptschleife() kann bis zu 3,5 Sekunden lang belegt sein (Zeit zum Füllen ALLER Blockpuffer), bevor alle verfügbaren Puffer gefüllt sind und Samples verloren gehen. Gespeicherte Puffer usw. werden während des Laufs aktualisiert.

Legen Sie eine leere SD-Karte ein, verwenden Sie das cmd 'i', um die 99 Dateien zu initialisieren, die zum Speichern der Daten verwendet werden. Diese hier vorinitialisieren reduziert die Zeitverzögerung beim Wechsel von einer Datei zur nächsten und ermöglicht ein schnelleres Sampling.

99 Dateien initialisieren

Neue Datei erstellen: log00.bin Verstrichene Zeit: 368mS Neue Datei erstellen: log01.bin Verstrichene Zeit: 520mS… Neue Datei erstellen: log98.bin Verstrichene Zeit: 15660mS Neue Datei erstellen: log99.bin Verstrichene Zeit: 15812mS

Anschließend können Sie mit r cmd einen Logging-Lauf starten. Die Ausführung erfolgt für die angeforderte Zeit oder bis der s cmd verwendet wird, um sie zu stoppen. Sie können auch die ? cmd während der Protokollierung, um aktualisierte Timings und Zählungen abzurufen. Hier ist ein kurzer Lauf, der mit dem s cmd vorzeitig gestoppt wurde.

AUFZEICHNUNGSDATEN …..

Ver:0.01 Geben Sie einen der folgenden Befehle ein: ? - aktueller Status und Metadaten s - Datenaufzeichnung stoppen

AUFZEICHNUNGSDATEN… Prüfen mit ? Befehl

Verstrichene Laufzeit: 0:00:10.000 von 720:00:00.000 Verstrichene Laufzeit: 0:00:20.000 von 720:00:00.000…

Stoppen der Protokollierung und Entfernen nicht verwendeter Dateien.

… Nicht verwendete Datei entfernen: log98.bin Nicht verwendete Datei entfernen: log99.bin

0:01:04.976 von 720:00:00.000

Sample-Pins: 16 17 Byte-Reihenfolge: Little-Endian-ADC-Bits: 10 ADC-Sample-Durchschnitte über: 4 Sample-Rate: 1000,00 Sample-Intervall: 1000uS Samples pro Block: 127 Zeit zum Füllen eines Blocks: 127000uS Zeit zum Füllen einer Datei: 9:01: 52.000 Zeit zum Füllen ALLER Dateien: 894:04:48.000 Max. SD-Latenz (einschließlich Schließen/Öffnen von Dateien): 204uS Max. Datei-Schließen/Öffnen-Latenz: 0uS Anzahl der Pufferblöcke: 28 Zeit zum Füllen ALLER Blockpuffer: 3556000uS Max. Anzahl der Puffer gespeichert im Aufruf von storeSampleBuffers(): 1 Missed Timers total: 0 Total Missed Samples bisher: 0 Total Blocks geschrieben: 511 Total Samples geschrieben: 64832 Covering: 0:01:04.832 Current File: log00.bin

ls:

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

DATENLOGGING ABGESCHLOSSEN!

Ver:0.01 Geben Sie einen der folgenden Befehle ein: ? - aktueller Status und Metadaten ** r - ADC-Daten aufzeichnen ** nicht verfügbar. Daten sind bereits vorhanden ** i - Dateien initialisieren ** nicht verfügbar. Daten sind bereits vorhanden l - Dateien auflisten

DATEN WURDEN BEREITS AUFGEZEICHNET, überprüfen Sie mit ?

LED-Anzeige

Die an D3 angeschlossene LED (wobei D2 die GND-Verbindung bereitstellt) leuchtet dauerhaft, wenn ein Sample verpasst wird, und blinkt, wenn ein Fehler auftritt. Der Sketch versucht, nach Fehlern fortzufahren, aber möglicherweise nicht erfolgreich.

Schritt 3: Echte Daten protokollieren

Bei der Aufzeichnung echter Daten über lange Zeiträume ist es bequemer, ein Kommunikationsmodul an die D0/D1-Pins anzuschließen und die Aufzeichnung aus der Ferne zu steuern und zu überwachen. Hier wurde ein Bluetooth Mate Silver Modul mit den Standardeinstellungen 115200 Baud, kein Hardware Handshaking (RTC, CTS), Pincode 1234 verwendet.

Hinweis: Wenn das Mate Silver-Modul mit Strom versorgt wird, wechselt es in einen Konfigurationsmodus, wobei die rote LED für 60 Sekunden schnell blinkt. Während dieser Zeit können Sie $$$ über die serielle Verbindung an das Modul senden, um es zu konfigurieren, aber Sie können das Modul nicht anschließen. Sobald die rote LED langsam blinkt, akzeptiert das Bluetooth-Modul Verbindungen.

Ändern Sie die COM_SERIAL-Definition in der Teensy32AnalogLogger.ino auf die serielle Hardware-Verbindung (D0/D1), Serial1

#define COM_SERIAL Serial1

Nach dem Pairing mit dem Computer wurde ein neuer COM-Port auf dem Computer erstellt und CoolTerm kann zum Verbinden und Steuern und Überwachen der Protokollierung verwendet werden. Es können auch andere seriell verbundene Kommunikationsmodule wie WiFi oder BLE verwendet werden, siehe Arduino UNO/Mega Starter, gesteuert von Android/pfodApp für Details.

Sie können die Protokollierung auch von Ihrem Android-Handy aus steuern und überwachen, indem Sie eine Bluetooth-Terminal-App wie die Bluetooth-Terminal-App oder eine WiFi- und TCP-Terminal-App wie TCP Telnet Terminal Pro oder ein Uart to BLE-mdoule und eine BLE-Terminal-App wie verwenden nRF-UART V2

Schritt 4: Einschränkungen bei der Auswahl der ADC-Eingänge

Einschränkungen bei der Auswahl der ADC-Eingänge
Einschränkungen bei der Auswahl der ADC-Eingänge

Der Teensy 3.2 verfügt über zwei separate ADC-Hardwaremodule, ADC_0 und ADC_1, in seinem Mikroprozessor, sodass er zwei Eingänge gleichzeitig abtasten kann. Es verfügt auch über eine integrierte Hardware-Mittelung, die mehrere ADC-Abtastwerte nimmt und sie vor dem Drehen des Ergebnisses mittelt.

Es gibt Einschränkungen, welche Eingänge an ADC_0, ADC_1 angeschlossen werden können. Das Bild Teensy3_1_AnalogCard-p.webp

Zusammenfassend:-Für Single Ended Reads, dh + Volt bezogen auf GND ADC_0 kann A0 bis A9, A10, A11, A12, A14 ADC_1 lesen A2, A3, A10, A13, A15 bis A20 Wenn Sie einen Pin auswählen, den der ADC kann nicht gelesen werden, wird 0 zurückgegeben (immer)

Dieses Projekt verwendet A2, A3, auf die jeweils über ADC_0 oder ADC_1 zugegriffen werden kann.

Schritt 5: Konvertieren der.bin-Dateien in.csv-Dateien

Das Teensy32AnalogLogger.ino speichert die Samples als Binärdatei in logxx.bin-Dateien, also log00.bin in log99.bin. Teensy32AnalogLogger.ino speichert auch eine log.met-Datei mit Metadaten über den Lauf.

Sie können SDtoCSV.jar (Quellcode SDtoCSV_src.zip) verwenden, um die.bin-Dateien zur weiteren Verarbeitung in.csv zu konvertieren. Kopieren Sie die Dateien von der SD-Karte auf die Festplatte Ihres Computers mit mindestens 70 GB freiem Speicherplatz und kopieren Sie die SDtoCSV.jar in dasselbe Verzeichnis. Öffnen Sie ein Befehlsfenster in diesem Verzeichnis und führen Sie es aus

java -jar SDtoCSV.jar-Protokoll

Wenn auf Ihrem Computer keine Java-Installation installiert ist, installieren Sie sie von www.java.com

SDtoCSV verarbeitet die Datei log.met und dann jede der verfügbaren logxx.bin-Dateien im Verzeichnis und gibt für jede.bin eine.csv-Datei aus. Die.csv-Datei enthält die Probensequenznummer gefolgt von den beiden Messwerten.

Ein Beispiel für eine Konsolenausgabe für eine 2-adc-Messung, die 30303 Mal/Sek. abgetastet wurde, wird hier, output.txt, angezeigt. Es veranschaulicht, wie übersehene Stichproben gemeldet werden. (Durch die Verdoppelung der Anzahl der Puffer in der endgültigen Skizze wurden diese fehlenden Samples behoben.)

SD_Logging in CSV-Konvertierung. Überprüfen Sie SDtoCSV.log auf Fortschritts- und Fehlermeldungen. Verarbeitungsprotokoll00 Verarbeitete 256000 Blöcke Verarbeitungsprotokoll01 Verarbeitete 256000 Blöcke… Verarbeitungsprotokoll25 Verarbeitete 256000 Blöcke Verarbeitungsprotokoll26 Verarbeitete 256000 Blöcke Verarbeitungsprotokoll27 Verarbeitete 256000 Blöcke Verpasste Stichproben: 2715 Verarbeitungsprotokoll28 Verarbeitete 256000 Blöcke… Verarbeitungsprotokoll29 Verarbeitete 256000 Blöcke… Verarbeitungsprotokoll47 Verarbeitete 256000 Blöcke Verarbeitungsprotokoll48 Verarbeitete 35935 Blöcke --- Abgeschlossene Verarbeitung

Eine ausführlichere Protokolldatei, SDtoCSV.log, wird bei jeder Ausführung von SDtoCSV angehängt. Es beinhaltet die Metadatenausgabe und eventuelle Fehlermeldungen. Hier ist der Zählerstand: 254 der Zählerstand der in diesem Block gespeicherten Daten, d. h. 127 Abtastungen x 2 ADC-Messwerte pro Block. Die MissedSamples ist die Anzahl der Paare von verpassten Lesevorgängen, d. h. Zeilen in der.csv-Ausgabe.

=== Protokolldatei für die Konvertierung von SD_Logging in CSV Sa Jul 13 13:19:51 AEST 2019 Um Fortschrittsmeldungen auf der Konsole anzuzeigen, verwenden Sie java -jar SDtoCSV.jar Basisdateiname 'log' Metadaten Version: 0 (Little Endian) sampleInterval uS: 33 adcBits:10 adcAvgs:4 PinCount:2 Pins: 16, 17 SamplesPerBlock:127 noBufferBlocks:28 Dauer mS:51649820 Angeforderte Laufzeit mS:106216704 maxBuffersUsed:32 Warnung: Überschreitet die Anzahl der verfügbaren Puffer (28). Einige Beispiele können fehlen. maxLatency uS:221476 Warnung: Überschreitet die von Pufferblöcken bereitgestellte Zeit (117348uS). Einige Proben werden fehlen. maxFileOpenTime uS:20998 verpasstTimers:0 misssamplesTotal:2715 totalBlocksWritten:12323935 totalSamplesWritten:1565139665 Verarbeitung von log00.bin Verarbeitung von 256000 Blöcken Verarbeitung von log01.bin Verarbeitung von 256000 Blöcken… Verarbeitung von log26.bin Verarbeitung von 256000 Blöcken Verarbeitung von log27.bin !!! Block:57696 Anzahl:254 MissedSamples:2339 !!! Block: 57697 Anzahl: 254 MissedSamples: 376 Verarbeitete 256000 Blöcke --- Total Missed Samples: 2715

Verarbeitung von log28.bin Verarbeitete 256000 Blöcke

… Verarbeitung von log47.bin Verarbeitete 256000 Blöcke Verarbeitung von log48.bin Verarbeitete 35935 Blöcke --- Abgeschlossene Verarbeitung

Ein Beispiel für die Ausgabedatei log00.csv ist

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

Der Sample-Zähler erhöht sich von Datei zu Datei, sodass er als Zeitstempel verwendet werden kann. Bei fehlenden Abtastwerten wird der Abtastwertzähler um den fehlenden Zählwert erhöht, bevor die nächste Zeile ausgegeben wird, damit der Zähler/Zeitstempel für die aufgezeichneten Abtastwerte korrekt bleibt.

Schritt 6: Kommentare zum Code und Erweiterungen

Der Teensy32AnalogLogger ist eine stark modifizierte Version von Bill Greimans AnalogBinLogger-Beispiel in seiner SdFat Arduino-Bibliothek. Hier wurde die Bibliothek so umgeschrieben, dass sie auf dem Teensy 3.2 läuft.

Teensy32AnalogLogger verwendet timer0, um das Abtastintervall einzustellen. Der Interrupt-Handler für timer0 startet die beiden ADC-Konvertierungen. Ein Interrupt-Handler für das zweite ADC-Modul wird kontinuierlich aufgerufen, bis beide beendet sind, normalerweise wird das erste ADC-Modul, das ADC_0 gestartet hat, vor dem zweiten beendet, sodass der Interrupt-Handler nur einmal aufgerufen wird. Der Interrupt-Handler ADC_1 speichert die Samples in einem Datenpuffer.

In der Hauptschleife () speichert storeSampleBuffer () alle vollen Puffer auf der SD-Karte und recycelt die Puffer in die leere Pufferwarteschlange. Die große Menge an verfügbarem RAM auf dem Teensy 3.2 bedeutet, dass eine große Anzahl von Puffern zugewiesen werden kann, sodass storeSampleBuffer() nicht oft aufgerufen werden muss. Dies lässt Zeit für die Hauptschleife(), um andere Aufgaben zu erledigen, wie zum Beispiel Befehle zu verarbeiten und Ausgaben zu senden.

Erweiterungen

Während dieses Projekt als Hochgeschwindigkeits-Datenlogger funktioniert, muss es für ein komplettes Wearable immer noch verpackt und ein Batteriesystem und EKG-Sensoren geliefert werden. Darüber hinaus gibt es einige Erweiterungen, die berücksichtigt werden sollten.

  1. Fügen Sie Echtzeitsteuerung und Überwachung der abgetasteten Wellenform über pfodApp hinzu, indem Sie die Plotting-Funktion von pfodApp verwenden, um Schnappschüsse der Wellenform anzuzeigen
  2. Erweitern Sie die Dateinummern über 99 hinaus für längere Probenahmeläufe
  3. Abtasten Sie mehr als 2 Eingänge. Da der Teensy 3.2 über zwei ADC-Module verfügt, können Sie den Code ändern, um zusätzliche Eingänge paarweise hinzuzufügen, um die Abtastrate zu maximieren.
  4. Fügen Sie eine Batterieüberwachung hinzu, um die Batterieladung zu verfolgen. Der Teensy 3.2 verbraucht über 24 Stunden etwa 1100 mAh, einschließlich Bluetooth und SD-Modul, aber ohne Sensormodul
  5. Fügen Sie einen doppelten Batterieversorgungskreis hinzu, um Batteriewechsel zu ermöglichen, ohne die Protokollierung zu unterbrechen.

Empfohlen: