Herzfrequenz-Sensor mit Arduino

Der Sensor zum Messen der Pulsfrequenz des menschlichen Herzens ist ein recht gängiges Arduino-Modul. Es wurde als Open Hardware von Joel Murphy and Yury Gitman erstellt.
Geliefert wird es entweder verlötet mit einer Stiftleiste oder mit Jumperkabeln, wobei letztere den Umgang mit dem Modul erleichtern, da ja der Kontakt mit der Haut (z.B. den Fingerspitzen) erforderlich ist. Betrieben wird das Modul mit 3V bis 5V und verbraucht ca. 4mA (bei 5V).

Herzfrequenz-Sensor als Arduino-Modul

Funktionsweise

Die Herzfrequenz wird mit einer hellen LED im Zentrum der kreisförmigen Platine und einem unmittelbar daneben liegenden Umgebungslichtsensor (hier: APDS-9008 von Avago) gemessen. Man drückt das Modul leicht auf eine Stelle der Haut, wo sich eine Arterie befindet und die Haut möglichst dünn ist, z.B. eine Fingerspitze. Dabei muss darauf geachtet werden, dass der Druck nicht zu stark (Blutzufuhr wird sonst abgeklemmt) aber auch nicht zu gering ist (Umgebungslicht kann den Sensor stören).

Reverse SMD LED AM2520ZGC09 von Kingbright
Abb.: Reverse SMD LED AM2520ZGC09 von Kingbright
Umgebungslichtsensor APDS-9008 von Avago
Abb.: Umgebungslichtsensor APDS-9008 von Avago

Das zurückgeworfene Licht wird vom Umgebungslichtsensor aufgefangen und mittels eines Operationsverstärkers an den Signal-Ausgang weitergeleitet. Durch die unterschiedliche Durchlässigkeit des Lichts der Arterien, während das Blut hindurch fließt, werden auch unterschiedliche Signal-Stärken an den Ausgang geliefert.

Anschlüsse

Anschlüsse des Pulsfrequenz-Moduls
Pin Arduino
+ (VCC) 5V oder 3V
- (GND) GND
S (Signal) analoger Pin (z.B. A0)

Achtung: Nicht das Sensor-Modul mit dem Körper berühren/anschließen, solange noch eine Verbindung zum Stromnetz besteht! (PC, Laptop, USB-Ladegeräte etc.)! Am besten immer eine 3V/5V Stromquelle verwenden.

Verwendete Bauteile

Vorbereitung des Moduls

Um zu vermeiden, dass durch den Körperkontakt die offenen Leiterbahnen des Pulsmoduls einen Kurzschluss und/oder unvorhergesehene Messungen produzieren, wird das Modul zunächst mit der Berührungsseite mit der mitgelieferten, selbstklebenden PVC-Folie (oder einem anderen durchsichtigen Klebeband) isoliert.

Isolierung des Pulsmoduls
Abb.: Isolierung der Berührungsfläche des Pulsmoduls

Da auf der Unterseite des Moduls die elektronischen Komponenten offen liegen, wird hier ein Stück des mitgelieferten Klettbandes darüber befestigt.

Isolierung des Pulsmoduls
Abb.: Isolierung der Unterseite des Pulsmoduls mit Klettband

Diese Vorbereitungen reichen für einen Prototypen aus, aber dennoch sind noch Anschlüsse nicht isoliert, so dass es nicht für ein "Endverbraucher-Produkt" tauglich ist.
Für detailliertere Informationen siehe: Pulse Sensor Getting Started Guide

Puls-Monitor

Der folgende Sketch sendet die Puls-Signale kontinuierlich vom analogen Pin an die serielle Konsole. Durch den in der Arduino-IDE eingebauten seriellen Plotter werden die Signale in einen Graphen umgewandelt, der an einen Herz-Monitor erinnert.

#define PIN_SENSOR A0
#define PIN_LED    13

#define PULSE_THRESHOLD 510

void setup()
{
    pinMode(PIN_LED, OUTPUT);
    Serial.begin(9600);
}

void loop()
{
    int pulseSignal = analogRead(PIN_SENSOR);
    Serial.println(pulseSignal);

    if (pulseSignal > PULSE_THRESHOLD) {
        digitalWrite(PIN_LED, HIGH);
    } else {
        digitalWrite(PIN_LED, LOW);
    }
    delay(10);
}
Anzeige der Herzfrequenz im seriellen Plotter
Abb.: Anzeige der Herzfrequenz im seriellen Plotter

Pulsfrequenz (BPM)

Es wird von pulsesensor.com eine Arduino-Library mit einigen Beispielen zur Verfügung gestellt, um u.a. die durchschnittliche Herzfrequenz zu errechnen und auf dem seriellen Plotter anzuzeigen. Der folgende Sketch ist das vereinfachte Beispiel "PulseSensor_BPM". (siehe mehr Informationen im Beispiel-Sketch bzw. der Library).

#define USE_ARDUINO_INTERRUPTS true
#include <PulseSensorPlayground.h>

const int OUTPUT_TYPE = SERIAL_PLOTTER;

const int PULSE_INPUT = A0;
const int PULSE_BLINK = 13;
const int PULSE_FADE = 5;
const int THRESHOLD = 510;

PulseSensorPlayground pulseSensor;

void setup()
{
    Serial.begin(115200);

    pulseSensor.analogInput(PULSE_INPUT);
    pulseSensor.blinkOnPulse(PULSE_BLINK);
    pulseSensor.fadeOnPulse(PULSE_FADE);

    pulseSensor.setSerial(Serial);
    pulseSensor.setOutputType(OUTPUT_TYPE);
    pulseSensor.setThreshold(THRESHOLD);

    if (!pulseSensor.begin()) {
        Serial.println("Error init pulseSensor!");
        while (true);
    }
}

void loop()
{
    pulseSensor.outputSample();
    if (pulseSensor.sawStartOfBeat()) {
        pulseSensor.outputBeat();
    }

    delay(20);
}
Anzeige der durchschnittlichen Herzfrequenz im seriellen Plotter
Abb.: Anzeige der durchschnittlichen Herzfrequenz im seriellen Plotter (grün: aktueller Puls; blau: durchschnittliche Herzfrequenz; rot: Zeit zwischen den Herzschlägen in ms)
zurück