Instructions

Arduino Nano Sensor Set
Veröffentlicht: 17.10.2018 Copyright by Maker Factory 12
6. DER HERZSCHLAGSENSOR
Bitte kopieren sie den, auf den nächsten 2 Seiten folgenden Code vollständig und fügen Sie
ihn in Ihr Skript ein.
////////////////////////////////////////////////////////////////////////
/// Copyright (c)2015 Dan Truong
/// Permission is granted to use this soware under the MIT
/// licence, with my name and copyright kept in source code
/// hp://hp://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 Abtasunkon.
// 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-Detecon dar.
/// Es wird kein Herzschlagverlauf aufgezeichnet, sondern es
/// wird innerhalb der aufgezeichneten Daten nach "Peaks" (Spitzen) gesucht,
/// und per LED angezeigt. Miels der bekannten Delay Abstaende, kann somit
/// grob der Puls errechnet werden.
////////////////////////////////////////////////////////////////////////
int rawValue;
bool heartbeatDetected(int IRSensorPin, int delay)
{
stac int maxValue = 0;
stac bool isPeak = false;
bool result = false;
rawValue = analogRead(IRSensorPin);
// Hier wird der aktuelle Spannungswert am Fototransistor ausgelesen und in der rawValue-Variable zwischengespeichert
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 reseert, um eine neue Basis zu erhalten.
if (rawValue * 4L < maxValue) { maxValue = rawValue * 0.8; } // Detect new peak
if (rawValue > maxValue - (1000/delay)) {
// Hier wird der eigentliche Peak detekert. Sollte ein neuer RawValue groeßer sein
// als der letzte maximale Wert, so wird das als Spitze der aufgezeichnten Daten erkannt.
if (rawValue > maxValue) {
maxValue = rawValue;
}