Instructions
KY-039 Herzschlag Sensor Modul
Ausgabe: 29.04.2016 Copyright by Joy-IT - Published under CC BY-NC-SA 3.0 Seite 197 von 227
########################################################################################
# Hier wird der Ausgangs-Pin deklariert, an dem der Buzzer angeschlossen ist.
def heartBeatDetect(schwelle):
global maxValue
global isPeak
global result
global oldBeatTime
# Hier wird der aktuelle Spannungswert am Fototransistor ausgelesen
# und in der rawValue - Variable zwischengespeichert
# Mit "adc_channel" wird der am ADC angeschlossene Channel ausgewaehlt
rawValue = adc.readADCSingleEnded(adc_channel, gain, sps)
# Reset der Ergebnis Variable
if result == True:
result = False
# Sollte der aktuelle Wert vom letzten maximalen Wert zu weit abweichen
# (z.B.da der Finger neu aufgesetzt oder weggenommen wurde)
# So wird der MaxValue resetiert, um eine neue Basis zu erhalten.
# Hier wurd der eigentliche Peak detektiert. Sollte ein neuer RawValue groeßer sein
# als der letzte maximale Wert, so wird das als Spitze der aufgezeichneten Daten erkannt.
if rawValue * 4 < maxValue: maxValue = rawValue * 0.8;
if rawValue > (maxValue - schwelle):
if rawValue > maxValue:
maxValue = rawValue
# Zum erkannten Peak soll nur ein Herzschlag zugewiesen werden
if isPeak == False:
result = True
isPeak = True
else:
if rawValue < maxValue - schwelle:
isPeak = False
# Hierbei wird der maximale Wert bei jedem Durchlauf
# etwas wieder herabgesetzt. Dies hat den Grund, dass
# nicht nur der Wert sonst immer stabil bei jedem Schlag
# gleich oder kleiner als maxValue sein wuerde, sondern auch,
# falls der Finder sich minimal bewegen sollte und somit
# das Signal generell schwaecher sein sollte.
maxValue = maxValue - schwelle/2
# Wurde in der oberen Abfrage ein Herzschlag detektiert, so wird nun die Ausgabe freigegeben
if result == True:
# Berechnung des Puls
# Hierbei wird bei jedem registrierten Herzschlag die System-Zeit aufgenommen
# Beim naechsten Herzschlag wird dann die aktuelle Systemzeit mit der gespeicherten verglichen
# Die Differenz der beiden ergibt dann die Zeit zwischen den Herz-Schlaegen
# womit man dann auch den Puls berechnen kann.
beatTime = time.time()
timedifference = beatTime - oldBeatTime
beatsPerMinute = 60/timedifference
oldBeatTime = beatTime
# Neben der Berechnung des Puls, wird der Herzschlag auch auf eine LED
# als kurzes Aufblinken ausgegeben
GPIO.output(LED_PIN, GPIO.HIGH)
time.sleep(delayTime*10)
GPIO.output(LED_PIN, GPIO.LOW)
# Erechneter Puls wird der Funktion übergeben
return beatsPerMinute
# ########










