Instructions
KY-039 Herzschlag Sensor Modul
Ausgabe: 29.04.2016 Copyright by Joy-IT - Published under CC BY-NC-SA 3.0 Seite 193 von 227
Codebeispiel Arduino
Das folgende Code-Beispiel stammt aus der Feder von Dan Truong, welcher diesen Code unter [folgenden
] veröffentlicht hat. Dieser steht unter der [ ]zur Verfügung. Die unten stehende Link |MIT OpenSource Lizenz
Version ist die übersetzte deutsche Fassung - das original steht unten zum Download zur Verfügung.
Dieser Code stellt eine sog. Peak-Detection dar. Es wird kein Herzschlagverlauf aufgezeichnet, sondern es
wird innerhalb der aufgezeichneten Daten nach "Peaks" (Spitzen) gesucht, als Herschlag erkannt und per
LED angezeigt. Mittels der bekannten Delay Abstände, kann somit grob der Puls errechnet werden.
Wird der Finger beim messen neu aufgelegt oder stark bewegt, so kann es etwas dauern, bis das Programm
sich auf die neue Gegebenheit kalibriert und wieder den richtigen Wert ausgibt.
////////////////////////////////////////////////////////////////////////
/// Copyright (c)2015 Dan Truong
/// Permission is granted to use this software under the MIT
/// licence, with my name and copyright kept in source code
/// http://http://opensource.org/licenses/MIT
///
/// KY039 Arduino Heartrate Monitor V1.0 (April 02, 2015)
////////////////////////////////////////////////////////////////////////
// German Comments by Joy-IT
////////////////////////////////////////////////////////////////////////
/// @param[in] IRSensorPin Analog PI an welchen der Sensor angeschlossen ist
/// @param[in] delay (msec) Die Verzoegerung zwischen den Aufrufen der Abtastfunktion.
// Die besten Ergebnisse erhaelt man, wenn man 5 mal Pro Herzschlag abtastet.
/// Nicht langsamer als 150mSec für z.B. 70 BPM Puls
/// Besser waere 60 mSec für z.B. bis zu einen Puls von 200 BPM.
///
/// @Kurzbeschreibung
/// Dieser Code stellt eine sog. Peak-Detection dar.
/// Es wird kein Herzschlagverlauf aufgezeichnet, sondern es
/// wird innerhalb der aufgezeichneten Daten nach "Peaks" (Spitzen) gesucht,
/// und per LED angezeigt. Mittels der bekannten Delay Abstaende, kann somit
/// grob der Puls errechnet werden.
////////////////////////////////////////////////////////////////////////
int rawValue;
bool
heartbeatDetected(int IRSensorPin, int delay)
{
static int maxValue = 0;
static bool isPeak = false;
bool result = false;
rawValue = analogRead(IRSensorPin);
// Hier wird der aktuelle Spannungswert am Fototransistor ausgelesen+in der rawValue-Variable gespeichert
rawValue *= (1000/delay);
// 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.
if (rawValue * 4L < maxValue) { maxValue = rawValue * 0.8; }
if (rawValue > maxValue - (1000/delay)) {
// Hier wird 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) {










