Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
ekg-to-go [2017/07/10 19:42] – student | ekg-to-go [2023/07/03 10:15] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ===== EKG-to-go ===== | ||
+ | |||
+ | Unser EKG-to-go ist ein kleines EKG-Gerät für Zuhause, welches einem ermöglicht zu jeder Zeit eine Ableitung der {{ : | ||
+ | Herzfrequenz zu kontrollieren. Da das EKG mit einem Akku versehen ist, ist es zusätzlich auch unterwegs einsatzbereit. | ||
+ | Die Elektroden werden je nach gewünschter Ableitung unterschiedlich am Körper des Patienten angelegt. | ||
+ | |||
+ | |||
+ | |||
+ | **Aufbau:** | ||
+ | Das EKG-Gerät zieht seinen Strom aus dem Akku. Dieser versorgt das Raspberry und den [[lcd_display|LCD - Touch - Display]] jeweils mit Strom. | ||
+ | Um die Ableitung darstellen zu können, wird ein EKG-Chip benötigt, welcher zusätzlich mit den Elektroden verbunden ist. | ||
+ | Dieser EKG-Chip besitzt ein analoges Signal. Dieses Signal kann der Raspberry jedoch nicht einlesen, aufgrund dessen wurde | ||
+ | das Raspberry mit einem [[ad-wandler|Analog - Digital - Wandler]] versehen, der dieses Signal wiederum digitalisieren kann. Die Messwerte werden daraufhin | ||
+ | auf den [[lcd_display|LCD - Touch - Display]] geleitet, wo diese dann als Kurve graphisch dargestellt werden. | ||
+ | |||
+ | {{ : | ||
+ | **Bauteile: | ||
+ | unten links: Akku, oben: LCD-Bildschirm, | ||
+ | |||
+ | {{: | ||
+ | |||
+ | **Code-Ausschnitte: | ||
+ | Besteht aus drei Teilen: | ||
+ | * AD-Wandlung | ||
+ | * Graphische Oberfläche | ||
+ | * Wertezeichnung (Kurve) = Dauerschleife | ||
+ | |||
+ | Import von ,, | ||
+ | Python als Programmiersprache | ||
+ | <file python Bibliotheken.py> | ||
+ | #----> Import | ||
+ | from tkinter import * | ||
+ | import random | ||
+ | import time | ||
+ | import RPi.GPIO as GPIO | ||
+ | import numpy as np | ||
+ | import sys | ||
+ | if sys.hexversion > 0x02ffffff: | ||
+ | import tkinter as tk | ||
+ | else: | ||
+ | import Tkinter as tk | ||
+ | </ | ||
+ | <file python Analogwerte am ADChannel auslesen.py> | ||
+ | def getAnalogData(adCh, | ||
+ | GPIO.output(CSPin, | ||
+ | GPIO.output(CSPin, | ||
+ | GPIO.output(CLKPin, | ||
+ | | ||
+ | cmd = adCh | ||
+ | cmd |= 0b00011000 # Kommando zum Abruf der Analogwerte des Datenkanals adCh | ||
+ | # Bitfolge senden | ||
+ | for i in range(5): | ||
+ | if (cmd & 0x10): | ||
+ | GPIO.output(DINPin, | ||
+ | else: | ||
+ | GPIO.output(DINPin, | ||
+ | # Clocksignal negative Flanke erzeugen | ||
+ | GPIO.output(CLKPin, | ||
+ | GPIO.output(CLKPin, | ||
+ | cmd <<= 1 # Bitfolge eine Position nach links verschieben | ||
+ | # Datenabruf | ||
+ | adchvalue = 0 # Wert auf 0 zurücksetzen | ||
+ | for i in range(13): #12 Bit Auflösung vom Wandler + 0 Bit | ||
+ | GPIO.output(CLKPin, | ||
+ | GPIO.output(CLKPin, | ||
+ | adchvalue <<= 1 # 1 Postition nach links schieben | ||
+ | if(GPIO.input(DOUTPin)): | ||
+ | adchvalue |= 0x01 | ||
+ | adchvalue = adchvalue * 0.0008 | ||
+ | | ||
+ | |||
+ | # | ||
+ | CLK = 18 # Clock | ||
+ | DIN = 24 # Digital in | ||
+ | DOUT = 23 # Digital out | ||
+ | CS = 25 # Chip-Select | ||
+ | |||
+ | # | ||
+ | GPIO.setup(CLK, | ||
+ | GPIO.setup(DIN, | ||
+ | GPIO.setup(DOUT, | ||
+ | GPIO.setup(CS, | ||
+ | |||
+ | #----> Funktion: Beendet Programm | ||
+ | def callback1(): | ||
+ | sys.exit(0) | ||
+ | </ | ||
+ | <file python Wertedarstellung.py> | ||
+ | def append_values(self, | ||
+ | self.Line1.append(float(x)) | ||
+ | self.Line1 = self.Line1[-1 * self.npoints: | ||
+ | return | ||
+ | def replot(self): | ||
+ | | ||
+ | aufloesung = 1600 # Höhe Y-Achse - ((Auflösung-ADC /2)*Faktor) = 0 | ||
+ | h = self.winfo_height() | ||
+ | max_X = max(self.Line1) + 1e-5 | ||
+ | coordsX | ||
+ | for n in range(0, self.npoints): | ||
+ | x = (800 * n) / self.npoints # 800 ist die breite | ||
+ | coordsX.append(x) | ||
+ | coordsX.append(200-(self.Line1[n]*aufloesung)) | ||
+ | self.canvas.coords(' | ||
+ | |||
+ | def read(self): | ||
+ | self.after(1, | ||
+ | self.after_idle(self.replot) | ||
+ | self.after(20, | ||
+ | def ReadADC(self): | ||
+ | x = getAnalogData(1, | ||
+ | self.append_values(x) | ||
+ | |||
+ | root = tk.Tk() | ||
+ | w, h = root.winfo_screenwidth(), | ||
+ | root.overrideredirect(1) | ||
+ | root.geometry(" | ||
+ | app = App(root) | ||
+ | app.mainloop() | ||
+ | </ | ||