Echtzeit-IoT-Herzfrequenzmonitor mit Arduino & MAX30100
Komponenten und Materialien
| Arduino UNO | × | 1 |
| ProtoCentral Pulse Oximeter & Herzfrequenzsensor (MAX30100) | × | 1 |
| USB-A auf Micro-USB Kabel | × | 1 |
| Steckbrücken (Jumper Wires) | × | 1 |
Software & Online-Dienste
- Arduino IDE
- Node.js
- Amazon Web Services (AWS EC2)
Projektbeschreibung
Dieses Projekt realisiert ein Herzfrequenz-Mess- und Überwachungssystem. Der Arduino liest die Rohdaten des MAX30100-Sensors (IR-Pulssensor) aus und sendet sie über die serielle Schnittstelle an einen Computer (PC, Mac, Raspberry Pi). Dort läuft ein Node.js-Skript, das die Daten per WebSocket an eine Webseite weiterleitet. Für den Zugriff über das Internet wird ein AWS EC2-Instanz als Relay-Server genutzt.
1. Arduino vorbereiten
Lade den Sketch IR_Pulsr.ino auf den Arduino. Öffne den Serial Monitor – du solltest nun kontinuierlich BPM-Werte (Schläge pro Minute) sehen.

2. Node.js installieren
- Windows: Installer von nodejs.org herunterladen und ausführen.
- macOS:
brew install nodejsim Terminal. - Linux / Raspberry Pi:
sudo apt-get install nodejs.
3. Erforderliche Node.js-Pakete installieren
Führe im Terminal nacheinander aus:
npm install -g socket.io
npm install -g serialport
npm install -g johnny-five
npm install -g express
4. Skripte ausführen
- Arduino per USB anschließen und prüfen, ob Daten im Serial Monitor der Arduino IDE ankommen.
- Die Node.js-Skripte in der angegebenen Reihenfolge starten (z. B.
node run.js). - Sobald im Terminal „Communication is on!“ erscheint, die Datei
page.htmlim Browser öffnen – die Herzfrequenz wird angezeigt.
Dies funktioniert zunächst nur lokal (localhost). Für den Internetzugriff wird AWS konfiguriert.
5. Amazon Web Services (AWS EC2) einrichten
- AWS-Konto erstellen oder anmelden.
- Zum EC2-Dashboard navigieren und „Launch Instance“ klicken.
- Ein beliebiges OS wählen (z. B. Ubuntu).
- „Review and Launch“ → „Launch“.
- Neues Schlüsselpaar erstellen, herunterladen und sicher aufbewahren (für späteren SSH-Zugriff).
- Instanz starten und im nächsten Schritt die Sicherheitsgruppen so konfigurieren, dass Port 3005 (Node.js) und Port 4000 (WebSocket-Relay) zugänglich sind.
- Mit dem heruntergeladenen Key per SSH verbinden:
ssh -i key.pem ubuntu@ec2-xxx.compute.amazonaws.com. - Auf der EC2-Instanz Node.js und die Pakete (Schritt 2 & 3) installieren.
- Die Skripte dort starten. Die öffentliche URL der EC2-Instanz (z. B.
https://ec2-xxx.compute.amazonaws.com:3005) ermöglicht nun den weltweiten Zugriff auf die Herzfrequenzanzeige.








Code
IR_Pulsr.ino (Arduino)
int UpperThreshold = 518;
int LowerThreshold = 490;
int reading = 0;
float BPM = 0.0;
bool IgnoreReading = false;
bool FirstPulseDetected = false;
unsigned long FirstPulseTime = 0;
unsigned long SecondPulseTime = 0;
unsigned long PulseInterval = 0;
void setup() {
Serial.begin(9600);
}
void loop() {
reading = analogRead(0);
if (reading > UpperThreshold && IgnoreReading == false) {
if (FirstPulseDetected == false) {
FirstPulseTime = millis();
FirstPulseDetected = true;
} else {
SecondPulseTime = millis();
PulseInterval = SecondPulseTime - FirstPulseTime;
FirstPulseTime = SecondPulseTime;
}
IgnoreReading = true;
}
if (reading < LowerThreshold) {
IgnoreReading = false;
}
BPM = (1.0 / PulseInterval) * 60.0 * 1000;
Serial.print(BPM);
Serial.println(" BPM");
Serial.flush();
}
run.js (Node.js Server)
var SerialPort = require('serialport');
var Readline = SerialPort.parsers.Readline;
var express = require('express');
var socket = require('socket.io');
var app = express();
var server = app.listen(3005);
app.use(express.static('public'));
var io = socket(server);
io.on('connection', function(socket) {
console.log(socket.id);
});
var serialPort = new SerialPort('/dev/tty.usbmodem1421', { baudRate: 9600 });
var parser = new Readline();
serialPort.pipe(parser);
parser.on('data', function(data) {
io.sockets.emit('map', data);
});
serialPort.on('open', function() {
console.log('Communication is on!');
});
Hinweis: Der serielle Port (/dev/tty.usbmodem1421) muss an dein System angepasst werden (Windows: z. B. COM3).
page.html (Web-Interface)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script src='nerve.js'></script>
<script src='speech.js'></script>
<meta name="viewport" content="user-scalable=no,initial-scale=1,maximum-scale=1" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.1.0/socket.io.dev.js"></script>
<title>Herzfrequenz-Monitor</title>
<style>
body { margin: 0; background-image: url('https://www.skipprichard.com/wp-content/uploads/2015/07/bigstock-Red-Heart-On-Wooden-Background-56485448.jpg'); }
h1 { padding-top: 100px; font-family: monospace; text-align: center; font-size: 100px; }
</style>
</head>
<body>
<h1 id="hello"></h1>
<script>
var socket = io.connect("https://localhost:3005");
var socket_1 = io.connect("https://ec2-18-220-142-52.us-east-2.compute.amazonaws.com:4000"); // AWS-URL anpassen!
socket.on('map', function(data) {
socket_1.emit('map', data);
document.getElementById('hello').innerHTML = data;
});
</script>
</body>
</html>
Schaltplan

Herstellungsprozess
- Herzfrequenz mit Windows 10 IoT Core auf Raspberry Pi auslesen – Schritt-für-Schritt-Anleitung
- Fern-Herzfrequenz-Überwachung mit AWS IoT Alarmen
- Imkerei revolutionieren: IoT-Sensoren überwachen Bienenstockgesundheit und steigern Bestäubung
- Monitor-Ambilight selbst bauen mit Arduino Nano & WS2812B LEDs
- Echtzeit-IoT-Herzfrequenzmonitor mit Arduino & MAX30100
- Fernsteuerung eines Roboterarms per IoT: Eigenbau mit Arduino MKR1000
- DIY Infrarot-Herzschlag-Sensor mit Arduino: Schritt-für-Schritt-Anleitung
- Smart IoT-Glas bauen: Füllstand überwachen mit ESP8266, Arduino & Ultraschall
- TV per Alexa steuern mit Arduino IoT Cloud – Schritt-für-Schritt
- Integrierte Herzfrequenz-Sensoren in Smart Clothing: Zuverlässiges Wearable-Monitoring