ADS1294 Android FunkEKG

Aus toolbox_interaktion
Wechseln zu: Navigation, Suche

Einleitung

Android FunkEKG misst ein Elektrokardiogramm und überträgt diese Messdaten mit Hilfe eines Android Smartphoens an einen Server zur Auswertung. Wir wollten die Auswertung von 24 Stunden Langzeit-EKGs über Funk ermöglichen. Somit hätte ein Arzt die EKG-Daten schon vorliegen bevor ein Patient das EKG-Messgerät zur Auswertung abgegeben hätte.

Damit die Signale überhaupt übertragen werden können müsse diese zuerst digitalisiert werden. Wir verwenden, um uns etwas Zeit zu sparen, anstatt einer eigenen entworfenen Schaltung einen IC von Texas Instruments aus der ADS129x Familie. Dieser Verstärkt das Signal und digitalisiert es dann. Die Verstärkung und Digitalisierung ist konfigurierbar. Zudem ist es möglich die Spannungsversorgung wahlweise als Unipolar oder Bipolar auszulegen. Der IC kommuniziert über SPI, und da wir mit unser Smartphone über USB kommunizieren, verwenden wir ein Arduino-Board um die Kommunikationsbrücke herzustellen.

Dieser Eintrag ist nur eine Kurzfassung, für den vollständigen Bericht einfach die Projektdateien herunterladen. Zudem möchte ich noch verwarnen, dass das Projekt nicht vollständig fertiggestellt wurde.

Prinzipieller Signalfluss

ADS1294

Der ADS1294 verstärkt das Analoge Signal der Elektroden, und digitalisiert dies dann. Die Verstärkung und Digitalisierungsrate ist über die Konfigurationsregister einstellbar. Da wir eine Platine mit 2,54mm Rastermaß für den Aufbau verwenden, und wir den IC nur in der Bauform TQFP besitzen, kommt eine Adapterplatine zum Einsatz, um den IC auf die 2,54mm Platine zu befestigen.

Schaltplan

Die Spannungsversorgung des ADS1294 ist in aufgeteilt in eine Spannungsversorgung für den Analogen Teil des IC und eine für den Digitalen Teil. Der Arduino Uno stellt in unserem Projekt die Spannungsversorgung über seinen 3,3V Pin für den ADS1294 zur Verfügung. Zusätzlich sind Entkoppelkondensatoren nötig, um gegen Rauschen abzuschirmen.

Spannungsversorgung mit Entkoppelkondensatoren

Probleme

Leider können wir mit den Nachrichten des ADS1294 nichts anfangen, da die Daten die wir empfangen nicht den erwarteten Daten entsprechen. Dieses Problem konnte durch uns nicht behoben werden, weshalb nicht sicher ist ob unser Aufbau oder unser IC fehlerhaft ist.

Arduino Uno

Der Arduino Uno, ein ATmega328 auf einer Platine, dient zur Kommunikation zwischen dem ADS1294 und unserem Smartphone. Der Arduino Uno ist mit einem USB-Anschluss ausgestattet, über den mit dem Smartphone kommuniziert wird und der gleichzeitig die Stromversorgung für den Arduino Uno darstellt.

Arduino Uno SMD

Software

Zur Kommunikation zwischen dem ADS1294 und dem Arduino, werden am Arduino die vordefinierten SPI-Pins verwendet. Über die SPI-Kommunikation wird der ADS1294 konfiguriert, und die digitalisierten Daten abgeholt. Dazu läuft auf dem Arduino ein Programm, dessen aktueller Sourcecode nach folgendem Prinzip vorgeht.

Funktionsprinzip der Arduino-software

Im Arduino Setup werden die Pins auf ihren entsprechenden Wert eingestellt, das SPI Library gestartet, die Geschwindigkeit der Serielle Datenkommunikation eingestellt und zum Schluss ein START über SPI an den ADS1294 gesendet. Im Arduino Main Loop wird nichts gemacht, aber sobald der Pin 2 des Arduino auf LOW gezogen wird, wird einen Interrupt Service Routine(ISR) ausgelöst, welche die Daten über SPI abholt und diese dann per serieller Kommunikation an das Smartphone überträgt. Dann wird wieder ein START an den ADS1294 gesendet und die ISR beendet. Leider stellte sich heraus, dass die so nicht funktioniert, da wir einen weiteren Interrupt in unserem Code in der ISR aufrufen und dies bei einem ATmega328 nicht möglich ist. Dazu musste der Code umgeschrieben werden, was in dem Code, der zum Testen der Kommunikation von ADS1294 mit Arduino auch gemacht wurde, aber dabei zeigte sich, dass die Hardware leider Fehler produziert.

Android Smartphone

Um mit dem Arduino zu kommunizieren muss das Smartphone die USB-Host-API vollständig unterstützen. Dies ist ab Android 3.1 Honeycomb möglich, aber nicht jedes Android Smartphone das mit Android 3.1 oder höher ausgestattet ist, unterstützt dies vollständig. Zuverlässige Informationen zur USB-Host-API Unterstützung scheint es nicht zu geben, so war selbst auf Herstellerangaben nicht verlass. Um die USB-Host-API Unterstützung zu überprüfen wurde daher die App "USB Host Diagnostics" verwendet. Da wir selber kein kompatibles Smartphone besitzen, wurden die Android Smartphones der Hochschule überprüft, dabei stellte sich heraus, das das Samsung Galaxy S2 vollständig kompatibel ist.

Software

Die Aufgabe des Smartphone ist es die EKG-Daten die vom Arduino weitergeleitet werden, über TCP/IP diese an den Server zur Auswertung zu schicken. Der Empfang der seriellen Kommunikation erfolgt mit Hilfe der "usb-serial-for-android" Bibliothek. Diese kam mit einem Beispielprogramm, das als Vorlage für unsere Implementierung dient. In dem Beispielprogramm werden Daten innerhalb einer Activity empfangen und angezeigt. Da einen Activitygestoppt wird sobald ein Benutzer diese verlässt oder das Smartphone in den Standby geht, kann das Beispielprogramm nur Daten empfangen wenn die entsprechende Activity auf dem Smartphone-display sichtbar ist. Da wir ständig daten empfangen und weiterleiten wollen, wurde die App in folgende Hauptkomponenten aufgeteilt:

  • EcgService, ein Service der die Hauptaufgabe, Daten weiterleiten die vom Arduino Board kommen, im Hintergrund und unabhängig von einer Activity durchführt
  • EcgControlPanel, ein Activity die es dem Benutzer erlaubt den EcgService zu starten oder anzuhalten, sowie Fehler- und Statusinformationen anzeigt. Sie wird außerdem dazu verwendet die Adresse und den Port des Zielgerätes einzustellen.

Nützliche Links

[Link zu den Projekt Dateien]

[Arduino Homepage]

[ADS1294 Homepage]

[Android Homepage]