Änderungen

KY-039 Herzschlag Sensor Modul

6.039 Byte hinzugefügt, 13:21, 4. Apr. 2016
/* Codebeispiel Raspberry Pi */
Somit empfehlen wir, bei analogen Sensoren dieses Sets das KY-053 Modul mit dem besagten ADC dazwischenzuschalten. Nähere Informationen finden Sie auf der Informationsseite zum [[KY-053 Analog Digital Converter|'''KY-053'''   Analog Digital Converter]]
!! <span style="color: #ff0000;">Achtung</span>!! <span style="color: #99cc00;">Analoger Sensor</span>  !! <span style="color: #ff0000;">Achtung</span>!!
<pre class="brush:py">
Programmierbeispiel in der Programmiersprache Python#!/usr/bin/python# coding=utf-8
#############################################################################################################
### Copyright by Joy-IT
### Published under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License
### Commercial use only after permission is requested and granted
###
### Parts of Code based on Dan Truong's KY039 Arduino Heartrate Monitor V1.0
### [https://forum.arduino.cc/index.php?topic=209140.msg2168654] Message #29
#############################################################################################################
'''Folgt # Dieser Code nutzt die ADS1115 und die I2C Python Library fuer den Raspberry Pi# Diese ist unter folgendem Link unter der BSD Lizenz veroeffentlicht# [https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code]from Adafruit_ADS1x15 import ADS1x15from time import sleep # Weitere benoetigte Module werden importiert und eingerichtetimport time, signal, sys, osimport RPi.GPIO as GPIOGPIO.setmode(GPIO.BCM)GPIO.setwarnings(False) # Benutzte Variablen werden initialisiertbeatsPerMinute = 0isPeak = Falseresult = FalsedelayTime = 0.01maxValue = 0schwelle = 25beatTime = 0oldBeatTime = 0 # Adresszuweisung ADS1x15 ADC ADS1015 = 0x00 # 12-bit ADCADS1115 = 0x01 # 16-bit # Verstaerkung (Gain) wird ausgewaehltgain = 4096 # +/- 4.096V# gain = 2048 # +/- 2.048V# gain = 1024 # +/- 1.024V# gain = 512 # +/- 0.512V# gain = 256 # +/- 0.256V # Abtasterate des ADC (SampleRate) wird ausgewaehltsps = 8 # 8 Samples pro Sekunde# sps = 16 # 16 Samples pro Sekunde# sps = 32 # 32 Samples pro Sekunde# sps = 64 # 64 Samples pro Sekunde# sps = 128 # 128 Samples pro Sekunde# sps = 250 # 250 Samples pro Sekunde# sps = 475 # 475 Samples pro Sekunde# sps = 860 # 860 Samples pro Sekunde # Hier wird der ADC initialisiert - beim KY-053 verwendeten ADC handelt es sich um einen ADS1115 Chipsatzadc = ADS1x15(ic=ADS1115) # Hier wird der Ausgangs-Pin deklariert, an dem die LED angeschlossen ist.LED_PIN = 24GPIO.setup(LED_PIN, GPIO.OUT, initial= GPIO.LOW)  ############################################################################################################# # 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 Monatg 04Fototransistor ausgelesen # und in der rawValue - Variable zwischengespeichert rawValue = adc.04readADCSingleEnded(0, gain, sps)  # Reset der Ergebnis Variable if result == True: result = False  # Sollte der aktuelle Wert vom letzten maximalen Wert zu weit abweichen # (z.2016B.da der Finger neu aufgesetzt oder weggenommen wurde) # So wird der MaxValue resetiert, um eine neue Basis zu erhalten. if rawValue * 4 < maxValue: maxValue = rawValue * 0.8;  # 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 > (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 ############################################################################################################# # ######### Hauptprogrammschleife# ######### Das Prgramm sieht vor, dass im Abstand der eingestellten "delayTime" (Standard: 10ms)# die Funktion zur Herzschlagdetektion aufgerufen wird. Wurde ein Herzschlag erkannt,# so wird der Puls ausgegeben. try: while True: time.sleep(delayTime) beatsPerMinute = heartBeatDetect(schwelle) if result == True: print "---Herzschlag erkannt !--- Puls:", int(beatsPerMinute),"(bpm)"   except KeyboardInterrupt: GPIO.cleanup() </pre> '''Anschlussbelegung Raspberry Pi:''' {| style="height: 58px; padding-left: 30px;" width="228"|-||Signal||=||GPIO24||[Pin 18]|-||+V||=||3,3V||[Pin 1]|-||GND||=||Masse||[Pin 6]|}'''Beispielprogramm Download''' [[Medium:KY-006-RPI_PWM.zip|KY-006-RPI_PWM.zip]] Zu starten mit dem Befehl: <pre class="brush:bash">sudo python KY-006-RPI_PWM.py</pre>
Bürokrat, Administrator
611
Bearbeitungen