Elektrokardiogramm
Das Elektrokardiogramm (kurz EKG) ist die Aufzeichnung der elektrischen Aktivitäten der Herzmuskelfasern mittels eines Elektrokardiografen. Auch dieses Gerät lässt sich mit einem Arduino umsetzen. Für das Experiment werden 3 Körperelektroden benötigt. Eine davon wird mit dem rechten Fuß verbunden, die beiden anderen werden an den in der Abbildung gezeigten Stellen platziert. Die schwachen Spannungen werden mit einem Instrumentenverstärker (INA128) erfasst und verarbeitet.
Mit einem Oszilloskop lässt sich dann die Herztätigkeit visuell darstellen. Um den Puls zu ermitteln, wird der Ausgang des zur Verstärkung des Signals dienenden LM741 mit dem Arduino über einen digitalen Pin (z.B. D7) verbunden.
Zur besseren Kopplung der Elektroden an die Haut wird EKG-Gel empfohlen.
Arduino-Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
// This program reads the incoming signal from the electrocardiograph and outputs the heart rate // Pin D7 is connected to the signal input // Pin D6 is connected to a mini-speaker // For the connection to the liquid crystal display, see the LiquidCrystal Librairy #include <LiquidCrystal_I2C.h> #include <Wire.h> LiquidCrystal_I2C lcd(0x27,16,2); // ACHTUNG: set the LCD address to 0x20 or 0x27 for a 16 chars and 2 line display!!! // Anschlüsse: // GND - GND // VCC - 5V // SDA - ANALOG Pin 4 // SCL - ANALOG Pin 5 // Variablendeklaration // ==================== const int signal = 7; // Pin connected to the filtered signal from the circuit unsigned long time; unsigned long frequency; int period = 2000; int starttime = 2000; int input = 0; int lastinput = 0; // ========================================== // ================= SETUP ================== // ========================================== void setup() { Serial.begin(9600); pinMode(signal, INPUT); lcd.init(); // initialize the lcd lcd.backlight(); lcd.setCursor(0,0); lcd.print("Puls = "); lcd.setCursor(0,1); lcd.print("You are "); } // ========================================== // ============= HAUPTSCHLEIFE=============== // ========================================== void loop() { time = millis(); // erfasst die aktuelle Zeit input = digitalRead(signal); // Liest das Ausgabesignal ein if ((input != lastinput)&&(input == HIGH)) // Abfrage bzgl. einer steigenden Flanke { period = time - starttime; // Berechnet die seit dem letzten Puls vergangene Zeit starttime = time; // Werteübergabe bzgl. Zeit tone(6,800,100); // kurze Tonausgabe } lastinput = input; // Werteübergabe bzgl. Ausgabesignal if (period < 0) { frequency = 0; } else { frequency = 60000/period; // Berechnung der Herzfrequenz in Schläge/min Serial.print("f = " ); Serial.println(frequency); } if (frequency < 20) // Puls < 20 bpm --> möglicher Herzstillstand { tone(6,900); // kontinuierliche Tonausgabe lcd.setCursor(7,0); lcd.print("<20"); lcd.setCursor(8,1); lcd.print("dead! "); } else { lcd.setCursor(7,0); lcd.print(" "); lcd.setCursor(7,0); lcd.print(frequency); lcd.setCursor(8,1); lcd.print("alive "); } } |