Präzisen Herzfrequenz-Monitor mit Fotowiderstand und Arduino bauen
Komponenten und Zubehör
| Digilent OpenScope MZ | 1 | Oszilloskop / Wellenform-Generator (optional, für Signalanalyse) |
| Arduino UNO | 1 | Für Herzfrequenz-Berechnung & Anzeige |
| Texas Instruments Quad Op-Amp (z. B. TL084) | 1 | Allzweck-Operationsverstärker |
| Texas Instruments High-Speed Comparator (z. B. TLV3501) | 1 | Schneller Komparator für Puls-Detektion |
| Präzisions-Potentiometer 10 kΩ (25-fach) | 2 | Für Verstärkung (R7) & virtuelle Masse (R8/R9) |
| Potentiometer 100 kΩ (einfach) | 1 | Für Komparator-Schwellwerte (R3/R4) – Mehrgang besser |
| Potentiometer 10 kΩ (einfach) | 1 | |
| Kondensator 100 µF | 1 | |
| Kondensator 100 nF | 1 | |
| Widerstand 10 kΩ | 2 | Oder ein einzelner 20 kΩ für Spannungsteiler |
| Widerstand 4,75 kΩ | 1 | |
| Widerstand 82 kΩ | 1 | Alternativ: 100 kΩ Potentiometer auf 82 kΩ einstellen |
Apps und Online-Dienste
- Arduino IDE – Programmierung
- Digilent WaveForms Live – Oszilloskop-Software für OpenScope (Signalvisualisierung & Schwellwert-Einstellung)
Über dieses Projekt
Einführung
Inspiriert durch ein YouTube-Video von CapitanoRed, der einen fotowiderstandsbasierten Herzfrequenz-Monitor für Oszilloskop-Darstellung baute. Ziel war es, das Projekt zu replizieren und einen Arduino hinzuzufügen, der die Herzfrequenz berechnet und anzeigt – so kann man gleichzeitig das Wellenform-Signal am Oszilloskop beobachten und die Herzfrequenz ablesen.
Bei jedem Herzschlag werden durch den Blutdruck momentane Schwankungen erzeugt, die wir als Puls spüren. An Stellen mit dünner Haut (Fingerspitze, Ohrläppchen) lassen sich diese Pulse als winzige Lichtintensitätsänderungen detektieren. Das Auge reicht nicht aus, aber Fotowiderstände (LDRs) sind empfindlich genug.
Ein Fotowiderstand ändert seinen Widerstand mit der einfallenden Lichtintensität. Die Widerstandsänderung ist bei subtilen Lichtänderungen sehr klein, wird aber durch Operationsverstärker verstärkt.
Funktionsprinzip
Signalweg:
- Spannungsteiler: Fotowiderstand + 20 kΩ → Spannung steigt mit Lichtintensität
- Amp1 (Filter): Entfernt Hochfrequenz-Rauschen
- Amp2 (Invertierender Verstärker): Maximiert Signalamplitude
- Amp3 (Virtuelle Masse): Zentriert Signal auf 2,5 V für maximalen Ausschlag (0–5 V)
Komparator (Cmp): Wandelt analoges Signal in digitale Impulse um. Grundkonfiguration als Schwellenwert-Detektor funktioniert hier nicht zuverlässig wegen:
- Dicrotic Notch (zweiter Puls beim Abfall der Kurve)
- Signifikantes Rauschen → mehrfaches Überschreiten der Schwelle
Lösung: Hysterese (asymmetrischer Komparator)
Nach Texas Instruments Application Note: Rückkopplung vom Ausgang ändert die Spannung am positiven Eingang → unterschiedliche Schwellwerte für Low→High (Vh) und High→Low (Vl). So triggert der Komparator einmal pro Herzschlag (auf der Anstiegsflanke) und schaltet erst nach der Dicrotic Notch wieder zurück.
Vorbereitung des Fotowiderstands
Empfehlung: Klare Schrumpfschlauch-Isolierung über dem Fotowiderstand. Mindestens die Anschlüsse vollständig isolieren, da Körper-Spannungen im gleichen Bereich liegen wie das Nutzsignal und Messwerte verfälschen würden.
Abstimmung des Herzfrequenz-Monitors
- Verstärkung (R7): Einfaches Potentiometer, ca. 375 Ω auf Filter-Seite einstellen. In WaveForms Live Pulse beobachten. Amplitude durch Verkleinern des Widerstands erhöhen, bei Clipping vergrößern.
- Komparator-Schwellwerte (R3, R4): Mehrgang-Potentiometer für präzise Einstellung. R5 (10–100 kΩ) genau messen. Beiliegendes Excel-Sheet berechnet R3/R4 aus R5, Vl, Vh.
- Virtuelle Masse (R8, R9): Ein Potentiometer mit Mittelanzapfung an positiven Op-Amp-Eingang. Auf 2,5 V einstellen (Multimeter/OpenScope).
Pulse in WaveForms Live anzeigen
- OpenScope Kanal 2 (blau) an Amp2-Ausgang, Masse an Breadboard-GND
- Time: 1 s
- Trigger: OFF
- Osc Ch 1 & Ch 2: Offset 2,5 V, Samples: 1000 (Lock-Symbol anklicken)
- Bildschirm aktualisiert ca. alle 4 s. Für schnellere Updates Samples erhöhen (2000 ≈ 1 Herzschlag)
- RUN drücken, Finger ruhig auf Fotowiderstand halten (bestes Ergebnis: erstes Fingergelenk des Zeigefingers)
Komparator-Schwellwerte einstellen
- Repräsentativen Wellenform anhalten (Stop)
- CURSORS → Type: Voltage, beide Cursor auf Osc 2
- Eine Linie nahe Pulse-Peak (Vh), andere unter Dicrotic Notch (Vl) platzieren
- Abgelesene Spannungen notieren (kleiner = Vl, größer = Vh)
- In Excel-Sheet eintragen → R3, R4 Werte berechnen lassen → Potentiometer einstellen
Arduino-Code
Der Code implementiert einen Frequenzzähler mit Pulsbreiten-Filter (200–800 ms) und gleitendem Durchschnitt über 15 Sekunden zur Rauschunterdrückung.
#define INT0 3
float frequency, freqAvg, total = 15;
long timeCount, pulseStart;
int counter = 0, inputPin = 3;
boolean low = false;
void setup() {
attachInterrupt(digitalPinToInterrupt(INT0), intrruption, CHANGE);
Serial.begin(9600);
}
void loop() {
timeCount = millis();
while (millis() - timeCount < 5000) {
frequency = counter;
}
if (frequency > 3) {
total += frequency;
total -= freqAvg;
freqAvg = total / 3;
}
showHR();
counter = 0;
}
void intrruption() {
if (digitalRead(3) == 0) { fallDetect(); low = true; }
else if (digitalRead(3) == 1) widthCheck();
}
void fallDetect() { pulseStart = millis(); }
void widthCheck() {
long pulseEnd = millis();
if ((pulseEnd - pulseStart > 200) && (pulseEnd - pulseStart < 800) && low) {
counter++;
low = false;
}
}
void showHR() {
Serial.print("Heart rate = ");
Serial.println(freqAvg * 12); // 5s Messung → *12 = bpm
}
Zukünftige Verbesserungen
- Konstante Lichtquelle: IR-LED wie bei Pulsoximetern oder Smartphone-Herzfrequenz-Sensoren für konsistente Ergebnisse unabhängig von Umgebungslicht
- Auto-Ranging-Algorithmus: Arduino erkennt Pulse, findet Peaks/Troughs, setzt Komparator-Schwellwerte über digitale Potentiometer, nutzt dann digitalen Komparator-Ausgang mit Interrupts für präzise Frequenzmessung
Code-Dateien
- comparator calcs.xlsx – Excel-Tabelle zur Berechnung von R3/R4 für asymmetrische Komparator-Schwellwerte (Vl, Vh, R5 einstellbar)
- Arduino Heart Rate Counter – Vollständiger Arduino-Sketch (siehe oben)
Schaltplan
Fritzing-Datei: hr_monitor_tnffXlVQQV.fzz
Herstellungsprozess
- Externer Defibrillator: Geschichte, Design und Fertigung
- Künstliches Herz: Technologie, Geschichte und Zukunftsperspektiven
- Künstliche Herzklappen: Typen, Geschichte und zukünftige Innovationen
- Moderne EKG-Geräte: Technologie, Fertigung und zukünftige Innovationen
- Blitzdetektion mit Raspberry Pi und AS3935: Praktischer Leitfaden
- Herzfrequenz mit Windows 10 IoT Core auf Raspberry Pi auslesen – Schritt-für-Schritt-Anleitung
- Fern-Herzfrequenz-Überwachung mit AWS IoT Alarmen
- Messung der magnetischen Signatur eines einzelnen Atomkerns
- Integrierte Herzfrequenz-Sensoren in Smart Clothing: Zuverlässiges Wearable-Monitoring
- Herz schützen: Wesentliche Lebensgewohnheiten für den Herzgesundheitsmonat Februar