Android BluetoothEKG

Aus toolbox_interaktion
Wechseln zu: Navigation, Suche

Einleitung

MobileBT EKG (Android BluetoothEKG) ist die Messung eines Elektrokardiogramms über Elektroden und eine Funkübertragung zwischen dem Messgerät und einem Smartphone. Dabei soll das Smartphone als Display genutzt werden, um das Signal graphisch darzustellen. Die Idee zu dieser Projektarbeit kam durch unsere Vertiefungsrichtung Medizintechnik. Die Messung allein wurde durch andere Projekte bereits untersucht. Wir wollten jedoch einen Schritt weiter gehen und die gemessenen Signale modern auf einem Smartphone darstellen. In Gesprächen mit Mitarbeitern des Rettungsdienstes wurde uns versichert, dass eine solche Anwendung keineswegs nur eine schöne Spielerei sei, sondern durchaus Anwendung fände. Übliche EKG-Geraete sind sehr groß, verfügen über unzählige Funktionen und sind deshalb teuer in der Anschaffung. Für Ärzte, die Patienten zu Hause besuchen, ist es meist zu umständlich noch ein großes EKG-Gerät zu tragen. Außerdem muss bei einem Hausbesuch nicht zwangsläufig ein ausführliches EKG ausgewertet werden. Es ist ausreichend, bestimmte Anzeichen zu erkennen, die auf eine notwendige Behandlung im Krankenhaus hinweisen. Hierfür bietet sich ein handliches Gerät mit EKG-Elektroden, das in einer Tasche verstaut werden kann, an. Als Display kann der Arzt sein eigenes Smartphone benutzen.


Prinizpieller Signalfluss

Analoger Teil

Schaltungsdesign

Zunächst galt es, eine Schaltung zur Messung der Signale zu entwerfen. Als Vorlage diente eine bereits fertig verfügbare Schaltung von Texas Instruments. Diese wurde jedoch mit einer Dual Power Supply betrieben. Um unsere Platine möglichst kompakt zu gestalten, wollten wir diese jedoch nur mit einer Single Supply durch eine Batterie versorgen. Über Texas Instruments konnten wir außerdem für kostenlose Samples bestellen. Mit den verfügbaren Bauteilen entwarfen wir eine neue Schaltung, die mit einer Single Supply versorgt wurde.


Schaltplan

In der folgenden Abbildung ist der Zweig der Schaltung zu sehen, in dem das Signal Lead 1 (LI) aus den Mes- sungen am rechten Arm (RA) und linken Arm (LA) erzeugt wird. Die Eingänge RA und LA sind direkt mit den Elektroden am Körper des Patienten verbunden. Zu erwarten sind Signale zwischen 0,1 mV und 5 mV. Die Eingänge RA und LA sind mit dem Messverstärker INA 326 verbunden. In der Vorlage von Texas Instruments wurde zwar der INA 128 verwendet, doch konnten wir mit dem INA 326 eine Single Supply realisieren. Der Widerstand R11 ist maßgebend für die Verstärkung und kann je nach Stärke des Eingangsignals angepasst wer- den. In unserem Fall verwendeten wir ein Gain von 200. Der Messverstärker ist als Subtrahierer aufgebaut und liefert als Ausgangssignal die Differenz aus RA und LA. Dieses Signal durchläuft einen Tiefpass-Filter zweiter Ordnung. Als Grenzfrequenz wurden 150 Hz gewählt. Als Operationsverstärker für den Tiefpass benutzten wir den OPA 2335. Nach dem Filter ist schließlich noch ein Addierer eingefügt. Dieser sorgt für den gewünschten Offset von 1,5 V. Mithilfe des Addierers wird außerdem eine weitere Verstärkung von 100 erzeugt. Für die Bildung von Lead 2 wurde der Zweig identisch aufgebaut. Als Eingangssignal wurde jedoch RA und LL verwendet. Lead 3 wird letztlich mit der Software im Smartphone berechnet, da dies nur die Differenz aus Lead 2 und Lead 1 ist. Um die Gleichtaktstärung des EKGs zu verringern, entschieden wir uns nach der Vorlage von Texas Instruments einen Right Leg Drive zu dimensionieren. Hierbei wird der Störanteil mit negativer Amplitude über die Elektrode am rechten Bein (RL) an den Patienten zur ̈ckgeliefert. Um das Signal RL zu bilden, werden die Signale LA, RA und LL mit einem Impedanzwandler abgegriffen und zusammengefasst. Anschließend ist ein Tiefpass 1. Ordnung nachgeschaltet. Das erzeugte Signal RL wird schließlich mit der Elektrode am rechten Bein verbunden. Die Signale L I und L II werden nun an den Microcontroller übertragen, der diese in digitale Signale umwandelt.

Erzeugung des Signals Lead1.


Digitaler Teil

Herangehensweise

Ein weiterer Teil dieser Projektarbeit bestand aus der Übertragung und Aufbereitung des verstärkten EKG Signals, damit dieses auf einem handelsüblichen Smartphone mit Android Betriebssystem dargestellt werden kann.

Um das zu erreichen, muss das analoge EKG-Signal zuerst digitalisiert werden. Dazu boten sich zweierlei Vorgehensweisen an. Einmal die Nutzung eines ADC, welcher über einen Bus ausgelesen werden kann. Dies erfordert jedoch zusätzliche Hardware. Eine andere Möglichkeit ist die Verwendung eines Microcontrollers mit Analogeingang. Bei der Verwendung eines Microcontrollers ist vor allem die Messung von Signalen mit größeren Frequenzen schwierig, da die analogen Eingänge erst eine gewisse Zeit benötigen um sich einzuschwingen. Außerdem ist die Spannungsauflösung im Vergleich zu einem separaten A/D Wandler schlechter. Wir gehen in unserem Projekt davon aus, dass bei den zu messenden Signalen keine allzu hohen Frequenzanteile auftreten werden. Außerdem sind wir darauf bedacht, die Schaltung nicht durch zusätzliche Bauteile fehleranfällig zu machen. Deshalb haben wir uns zur Verwendung eines Microcontrollers für die Analog / Digitalwandlung entschlossen. Bei der Suche nach einem geeignetem Microcontroller fiel der Blick schnell auf die vielseitig einsetzbaren AVR Prozessoren von Atmel. Ein Nachteil bei dem Einsatz eines solchen Prozessors ist aber, dass sich dieser nur über SPI über einen ISP programmieren lässt, was zusätzliche Hardware voraussetzt. Bei weiterer Recherche stießen wir auf die Arduino Plattform. Diese realisiert über einen vorinstallierten Bootloader, den AVR Prozessor mit einer seriellen Schnittstelle zu programmieren. Außerdem bietet diese Plattform die Möglichkeit, auf einfache Weise die analogen Pins des Prozessors auszulesen. Die Werte können auf der seriellen Schnittstelle ausgegeben werden, da eine Klasse zur Benutzung der seriellen Schnittstelle bereits enthalten ist.

Für die Übertragung der Daten des EKG, welche nun über die serielle Schnittstelle des Microprozessors auf ein Smartphone ausgegebenen werden, wählen wir eine Bluetooth Verbindung. Roving Networks bietet für diesen Zweck Bluetooth Module an, welche das SPP(Serial Port Profile unterstützen. Damit ist es möglich, die Daten von der seriellen Schnittstelle direkt an das Bluetooth Modul weiterzugeben ohne eine weiterführende Kommunikation mit einer externen Komponente einzugehen.

Die so übertragenen Daten können, nach der Verbindung des Smartphones mit dem Bluetooth Modul, ausgewertet und dargestellt werden.

Inbetriebnahme

Zuerst wurde der Microcontroller getestet. Dazu wurde um die Funktion als A/D Wandler übernehmen zu können, nach einer Möglichkeit gesucht, über einen Timer Interrupt getriggert, einen Analogpin auszulesen. Für diesen Zweck wurde von der Arduino Homepage die MsTimer2 Bibliothek heruntergeladen. Diese nutzt den Timer2 des ATMega 168 auf dem Arduino Board. Dadurch werden die PWM Pins 3 und 11 unbrauchbar, welche in unserer Anwendung aber nicht benötigt werden HPinterrupt. Durch den Timer Interrupt wird eine Unterfunktion aufgerufen, die einen Analogeingang ausliest und dessen Wert dann auf der seriellen Schnittstelle ausgibt. Außerdem wird ein Digitalpin bei jedem Aufruf dieser Unterfunktion invertiert. So kann jeder Aufruf der Subroutine von außen nachvollzogen werden. Das ist vor allem bei niedrigen Bitraten und schneller Timereinstellung interessant.

Arduino Board mit ATMega168

Der Analog / Digitalwandler des ATMega 168 arbeitet mit sukzessiver Approximation und benötigt im schlechtesten Fall ca. 0,26 ms. Die kleinste Auflösung des Timers beträgt 1 ms. Dadurch lassen sich also maximal Signale bis zu 500 Hz abtasten. Die Auflösung des A/D Wandler beträgt 10 Bit und eine Genauigkeit von +/-2LSB bei 3,3 V Referenzspannung, was einer Auflösung von ca. +/-0,0065 V entspricht. Um die Daten eines Kanals übertragen zu können, muss die serielle Schnittstelle, welche die Daten als Charakter Array sendet, durchschnittlich drei Charakter senden. Dazu werden acht Bit Daten plus ein Start- und ein Stopbit benötigt. So muss für einen Kanal, der bei der maximalen Abtastfrequenz von 1 kHz ausgelesen wird, 38400 Bit/s zur Datenübertragung genutzt werden. Die maximal mögliche Datenrate mit dem ATMega beträgt 115100 Bit/s. Daher könnten bei maximaler Übertragungsrate bei einer Abtastfrequenz von 1 kHz höchstens drei Analogkanäle übertragen werden.

Als nächstes wurde das Bluetooth Modul RN-42 von Roving Networks in Betrieb genommen. Dieses Modul arbeitet standardmäßig im SPP Modus. Damit dieses Modul an der seriellen Schnittstelle des Microcontrollers betrieben werden kann, muss dieses aber auf die gleiche Bitrate, wie die, die vom Controller verwendet wird, eingestellt werden. Dies kann über ein Hyperterminal geschehen. Außerdem können an dem Modul abgesehen von der Bitrate noch weitere Einstellungen vorgenommen werden, wie zum Beispiel Sendeleistung oder Verschlüsselung. Um die Funktion des Moduls in Zusammenhang mit dem ATMega zu testen wurde eine normale Terminalverbindung zu dem Microcontroller geöffnet. Unter Linux lässt sich nach Bluetooth-Geräten mit „hcitool“ scannen. Gefundene Geräte können dann mit

rfcomm <dev><MAC><channel> 

eingebunden und wie ein normales serielles Device benutzt werden (vorausgesetzt der SPP Modus ist aktiv).


---------Platzhalter Bluetooth RN-42 Modul von Roving Networks -------------

Darstellung des Signals

Nachdem die Hardware in Betrieb genommen wurde, wurde eine Software zur Visualisierung des analogen Signals geschrieben. Diese sollte auf Android laufen und Daten über Bluetooth empfangen können. Da noch keine weiteren Kenntnisse über das Programmieren von Software für das Android-Betriebssystem oder für sonstige grafische Anwendungen vorhanden waren, wurde als nächstes nach einer geeigneten Vorgehensweise gesucht. Dabei fiel die Processing Entwicklungsumgebung durch ihre Verwandtschaft zu Arduino auf HPproc. Diese bietet die Möglichkeit, über eine vereinfachte Version der Programmiersprache Java, schnell und unkompliziert grafische Darstellungen zu erzeugen. Außerdem kann von ihr auf die serielle Schnittstelle zugegriffen werden. Des Weiteren ist eine direkte Portierung des Programms zur Android-Plattform möglich.

Processing mit Simulation einer EKG Darstellung

us diesen Gründen wurde diese Entwicklungsumgebung für erste Tests genutzt. Leider stellte sich bei fortschreitendem Projekt heraus, dass sobald serielle Treiber genutzt werden, die Portierung zum Android Betriebssystem doch nicht ohne weiteres möglich ist. Deshalb musste auf das komplexere SDK von Android ausgewichen werden. Bei der Suche nach der besten Möglichkeit, eine Bluetoothverbindung zu einem seriellen Gerät herzustellen fiel das Amarino Projekt auf. Dieses Projekt hat es sich zum Ziel gesetzt Android Smartphones mit der Arduino Plattform zu verbinden. Um Amarino nutzen zu können muss sowohl auf dem Handy als auch auf dem Arduino spezielle Software installiert werden. Dazu gehören die Amarino - Android Application, das Amarino Plug-in Bundle, welche auf dem Smartphone zu installieren sind, die Amarino Library, die bei der Erstellung von Projekten in der Android SDK eingebunden werden muss und der MeetAndroid Library für die Arduino Software. Die weitere Vorgehensweise wurde anhand des Beispielprojektes SensorGraph vollzogen.

Digitaler Filter

Außerdem sollte, um das EKG-Signal von ungewünschten Störeinflüssen zu befreien und um den schaltungstechnischen Aufwand gering zu halten, ein digitaler Filter integriert werden. Dabei entschieden wir uns für einen FIR Filter. Dieser ist mit wenig Aufwand zu realisieren. Außerdem besteht nicht die Gefahr, dass er bei ungünstiger Abstimmung zu schwingen beginnt. Der Filter besteht im Wesentlichen aus den vier Funktionen Push, Pop, isPacektReady und computefilter. Mit der Funktion Push wird in einen als Ringpuffer ausgelegten FIFO geschrieben. Bei jedem Aufruf dieser Funktion wird die Position des letzten Wertes im Speicher inkrementiert. IsPacketReady prüft ob der FIFO voll ist. Wenn das der Fall ist, lässt sich die Pop Funktion über computefilter den mit den Filterkoeffizienten gewichteten Ausgabewert berechnen. Außerdem wird dann mit jedem Aufruf der Funktion Pop der Wert des ersten Elementes im Speicher erhöht. Die Filterkoeffizienten wurden mit dem fdatool aus MATLAB erzeugt.

Nützliche Links

[| Link zu den Projekt Dateien]

[| Amarino Toolkit|]

[| Arduino Hompage]

[| Processing Homepage]

[| Android Entwickler HP]