Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Kabelloser EKG-Herzfrequenz-Monitor: Wearable-Design mit Arduino Nano & nRF24

Komponenten und Materialien

Komponente Anzahl Hinweis
uECG-Gerät 1 Misst BPM, sendet Daten via nRF24-kompatibles Protokoll
Arduino Nano R3 1
nRF24-Modul (beliebig) 1 Empfängt BPM-Daten vom uECG
Adafruit NeoPixel Ring: WS2812 5050 RGB LED (16 LEDs) 1
LiPo-Akku (200+ mAh) 1

Benötigte Werkzeuge und Maschinen

Projektbeschreibung

Dies ist die zweite Iteration meines Herzmonitoring-Projekts. Die erste Version zeigte Herzschläge auf der Brust, war aber per Kabel mit dem uECG verbunden – unpraktisch: Man sieht die LEDs schlecht, sie liegen außerhalb des Sichtfelds, und das Kabel stört den Sensor beim Laufen.

Diese Version löst alle Probleme: Handgelenk-getragen (im Blickfeld beim Laufen), kabellos (keine Signalverfälschung), funktioniert beim Joggen und zeigt die Herzlast zuverlässig an.

Kabelloser EKG-Herzfrequenz-Monitor: Wearable-Design mit Arduino Nano & nRF24

1. Komponenten

Wie beim Vorgänger übernimmt der uECG die schwere Arbeit: Messung und BPM-Berechnung on-board. Im „Direct Link Mode“ sendet er Daten (inkl. hochauflösendem EKG, hier ungenutzt) via nRF24-kompatiblem Protokoll. Zweite kritische Komponente: nRF24-Modul. Arduino Nano passt perfekt unter den LED-Ring und dient als Controller.

2. Schaltung

nRF24-Anschluss ist aufwendig: Alle SPI-Leitungen (MISO, MOSI, SCK, CS), Chip Enable, Versorgung. Für kompakte Bauweise: Pin-Header entfernen, Drähte direkt auf Pads löten – 7 Drähte, 14 Lötstellen. Der Rest ist einfach: LED-Ring (1 Data + 2 Power), Akku (2 Power).

Kabelloser EKG-Herzfrequenz-Monitor: Wearable-Design mit Arduino Nano & nRF24

Verbindungsliste:

Wichtig: MOSI, MISO, SCK müssen an D11, D12, D13 (Hardware-SPI). Andere Pins sind änderbar (mit Code-Anpassung).

3. Programm

Die einzige Software-Herausforderung: RF-Kanal-Konfiguration. uECG und nRF24 nutzen unterschiedliche Bit-Reihenfolge für die Pipe-Adresse. Nach Korrektur lief alles sofort. Ablauf: Pakete empfangen, 5. Byte = BPM, filtern (Kanal rauschend, CRC deaktiviert für Kompatibilität). BPM → Farbe & Anzahl aktiver Pixel.

#include 
#ifdef __AVR__
#include 
#endif
#include 
#include 
#include 
#include 

int rf_cen = 9; // CE
int rf_cs = 8;  // CSN
RF24 rf(rf_cen, rf_cs);

// Pipe-Adresse (hardcoded im uECG) – Bit-Reihenfolge vertauscht!
uint8_t pipe_rx[8] = {0x0E, 0xE6, 0x0D, 0xA7, 0, 0, 0, 0};

#define PIN 5
#define NUMPIXELS 16
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

// Bit-Reihenfolge umkehren (uECG vs nRF24)
uint8_t swapbits(uint8_t a) {
  uint8_t v = 0;
  if(a & 0x80) v |= 0x01;
  if(a & 0x40) v |= 0x02;
  if(a & 0x20) v |= 0x04;
  if(a & 0x10) v |= 0x08;
  if(a & 0x08) v |= 0x10;
  if(a & 0x04) v |= 0x20;
  if(a & 0x02) v |= 0x40;
  if(a & 0x01) v |= 0x80;
  return v;
}

void setup() {
  pixels.begin();
  for(int i=0;i 0) rf_bpm = bb;
  }

  long ms = millis();
  if(ms - last_pix_upd > 10) { // Pixel nicht zu oft updaten
    int r, g, b;
    last_pix_upd = ms;
    int bpm = rf_bpm;
    int max_bright = 160; // max 255, aber blendfrei
    float dd = 25; // BPM-Schritt pro Farbton
    float t1 = 90, t2, t3, t4; // t1 = Basis-BPM (darunter = blau)
    t2 = t1 + dd; t3 = t2 + dd; t4 = t3 + dd;

    // Farbverlauf: blau → grün → gelb → pink → rot
    if(bpm < t1) { r=0; g=0; b=max_bright; }
    else if(bpm < t2) { r=0; g=max_bright*(bpm-t1)/dd; b=max_bright-g; }
    else if(bpm < t3) { r=max_bright*(bpm-t2)/dd; g=max_bright-r; b=r/4; }
    else if(bpm < t4) { r=max_bright; g=0; b=max_bright/2 - max_bright*(bpm-t3)/(2*dd); }
    else { r=max_bright; g=0; b=0; }

    int on_pixels = (bpm-80)/8; // Anzeige ab 80 BPM (für Sport)
    for(int i=0;i

4. Armband-Montage

Nach dem Löten, Flashen und Test (uECG-Daten empfangen?) alles zusammenbauen.

Kabelloser EKG-Herzfrequenz-Monitor: Wearable-Design mit Arduino Nano & nRF24
Kabelloser EKG-Herzfrequenz-Monitor: Wearable-Design mit Arduino Nano & nRF24

Einfache Methode: Heißkleber. Teile passen fast perfekt (Nano in äußeren Ring, nRF24 in inneren Ring, Akku irgendwie dazwischen – funktioniert erstaunlich gut). Auf ein altes Handgelenkband (von Lötstation, ESD-Band) genäht – fertig!

Kabelloser EKG-Herzfrequenz-Monitor: Wearable-Design mit Arduino Nano & nRF24

5. Praxistest

Beim Joggen getestet – funktionierte tadellos. Eine Überraschung: Ich hatte 192 BPM als Maximum eingestellt (alle LEDs an), was laut Empfehlungen zu hoch für meine Parameter ist. Ich überschritt es nach wenigen Minuten, ohne es zu merken. Kein Sensorfehler – beim Stoppen sank der Wert langsam (Sensor zuverlässig bei wenig Bewegung).

Frage: Ist mein Maximalpuls durch Jugend-Herzbeschwerden verschoben, oder trainiere ich unwissentlich zu hart? Lösung: Max-BPM im Monitor erhöhen oder Training reduzieren.

P.S. uECG funktioniert überraschend gut als EMG-Sensor – siehe mein „Robotic Hand Control“-Projekt.

Code

bpm_watch.ino (Arduino)

#include 
#ifdef __AVR__
#include 
#endif
#include 
#include 
#include 
#include 

int rf_cen = 9;
int rf_cs = 8;
RF24 rf(rf_cen, rf_cs);
uint8_t pipe_rx[8] = {0x0E, 0xE6, 0x0D, 0xA7, 0, 0, 0, 0};
#define PIN 5
#define NUMPIXELS 16
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

uint8_t swapbits(uint8_t a) {
  uint8_t v = 0;
  if(a & 0x80) v |= 0x01;
  if(a & 0x40) v |= 0x02;
  if(a & 0x20) v |= 0x04;
  if(a & 0x10) v |= 0x08;
  if(a & 0x08) v |= 0x10;
  if(a & 0x04) v |= 0x20;
  if(a & 0x02) v |= 0x40;
  if(a & 0x01) v |= 0x80;
  return v;
}

void setup() {
  pixels.begin();
  for(int i=0;i 0) rf_bpm = bb;
  }
  long ms = millis();
  if(ms - last_pix_upd > 10) {
    int r, g, b;
    last_pix_upd = ms;
    int bpm = rf_bpm;
    int max_bright = 160;
    float dd = 25;
    float t1 = 90, t2 = t1+dd, t3 = t2+dd, t4 = t3+dd;
    if(bpm < t1) { r=0; g=0; b=max_bright; }
    else if(bpm < t2) { r=0; g=max_bright*(bpm-t1)/dd; b=max_bright-g; }
    else if(bpm < t3) { r=max_bright*(bpm-t2)/dd; g=max_bright-r; b=r/4; }
    else if(bpm < t4) { r=max_bright; g=0; b=max_bright/2 - max_bright*(bpm-t3)/(2*dd); }
    else { r=max_bright; g=0; b=0; }
    int on_pixels = (bpm-80)/8;
    for(int i=0;i

Schaltpläne

Kein separates Dokument.

nrf24_led_ring_o2Gij5oigT.fzz (Fritzing-Datei)

Herstellungsprozess

  1. Renesas & Altran veröffentlichen erste Low-Rate-Pulse UWB Armbanduhr für Social Distancing
  2. Raspberry Pi Luftqualitäts- & Wetterstation mit InfluxDB & Grafana bauen
  3. Fern-Temperatursensor mit Raspberry Pi & Python bauen – Schritt-für-Schritt-Anleitung
  4. Heimtemperatur mit Raspberry Pi Dashboard überwachen
  5. Fern-Herzfrequenz-Überwachung mit AWS IoT Alarmen
  6. Monitor-Ambilight selbst bauen mit Arduino Nano & WS2812B LEDs
  7. Intelligentes Voltmeter mit Arduino & Smartphone bauen – Einfaches DIY-Projekt
  8. Echtzeit-IoT-Herzfrequenzmonitor mit Arduino & MAX30100
  9. Integrierte Herzfrequenz-Sensoren in Smart Clothing: Zuverlässiges Wearable-Monitoring
  10. CNC-Bearbeitung: Präzisionsfertigung von Materialien und Komponenten