MAX30102: Herzfrequenzmonitor und Oximetermodul für Arduino

MAX30102

In all dieser Zeit haben wir eine große Anzahl davon gezeigt Elektronische Bauteile kompatibel mit Boards wie Arduino oder kompatiblesowie für viele andere Maker- oder Heimwerkerarbeiten. Nun stellen wir Ihnen das Modul vor MAX30102, das einen Sensor zur Messung von Puls und Blutsauerstoff enthält.

Auf diese Weise können Sie auch Wearables wie selbstgemachte Aktivitätsarmbänder oder Hardware für erstellen Gesundheitszustand überwachen einer Person, die biometrische Daten oder Telemetrie dieser Person dank der Integration des Herzfrequenzmessers und des Oximeters in dieses Gerät liefert ...

Was ist ein Herzfrequenzmesser? Wie funktioniert es?

Un Pulssensor oder Herzfrequenzmesser Dabei handelt es sich um ein elektronisches Gerät, mit dem die Herzfrequenz einer Person in Echtzeit gemessen wird. Es wird vor allem im Sportbereich eingesetzt, um Leistung und Anstrengung beim Training oder im Alltag zu überwachen. Herzfrequenzmesser sind bei Sportlern beliebt, aber auch in medizinischen Zentren sind sie ein grundlegendes Gerät, um die Herzfrequenz, also die Herzfrequenz oder Schläge pro Minute, zu ermitteln:

  • PR Bpm: Zeigt die Herzfrequenz an, also die Schläge pro Minute.

In allen Fällen ist die Sensoren erfassen Schwankungen des Blutvolumens bei jedem Herzschlag. Diese Variation wird in ein elektrisches Signal umgewandelt, das verarbeitet wird, um die Herzfrequenz zu ermitteln. Einige Herzfrequenzmesser verfügen außerdem über Schaltkreise zur Verstärkung und Geräuschunterdrückung, um die Genauigkeit der Messwerte zu verbessern.

Was ist ein Oximeter? Wie funktioniert es?

Un Oximeter ist ein medizinisches oder Sportgerät mit dem die Sauerstoffsättigung im Blut gemessen wird. Dieses Gerät bietet Daten zur Blutsauerstoffsättigung mit Werten von 0 bis 100 %. Üblicherweise verfügt das gleiche Gerät auch über die Herzfrequenzoption, die alle Informationen zur Überwachung oder Aufzeichnung anzeigt.

Die Daten, die misst ein Oximeter ist:

  • %SpO2: bezieht sich auf den Prozentsatz der Sauerstoffsättigung im Blut.

Das Oximeter wird wie eine Klemme so platziert, dass es an die Morphologie unseres Fingers angepasst ist oder es kann auch an anderen Stellen des Körpers angebracht werden, wie es beim Herzfrequenzmesser der Fall ist, etwa am Handgelenk ist in vielen Aktivitätsarmbändern zu sehen. ,

Oximeter emittieren hinsichtlich ihrer Funktionsweise unterschiedliche Werte Lichtwellenlängen die durch die Haut gehen. Was auf dieses Licht einwirkt, ist Hämoglobin, ein Blutmolekül, das für den Sauerstofftransport verantwortlich ist und je nach transportiertem Sauerstoffgehalt unterschiedliche Lichtmengen absorbiert. Der detaillierte Ablauf ist wie folgt:

  1. Lichtemission- Das Oximeter sendet Licht mit zwei Wellenlängen aus, eine rote und eine infrarote, die durch den auf das Gerät gelegten Finger gelangen.
  2. Lichtabsorption: Hämoglobin, ein Molekül in roten Blutkörperchen, das Sauerstoff transportiert, absorbiert unterschiedliche Mengen dieser Lichter. Sauerstoffbeladenes Hämoglobin (Oxyhämoglobin) und sauerstofffreies Hämoglobin (Desoxyhämoglobin) haben unterschiedliche Lichtabsorptionseigenschaften.
  3. Lichterkennung: Ein Detektor auf der gegenüberliegenden Seite des Lichtsenders sammelt das Licht, das durch den Finger gelangt ist.
  4. Berechnung der Sauerstoffsättigung- Das Gerät berechnet das Verhältnis von Oxyhämoglobin zur Gesamtmenge des vorhandenen Hämoglobins, sowohl Oxyhämoglobin als auch Desoxyhämoglobin. Dieser Anteil wird als Prozentsatz der Blutsauerstoffsättigung (%SpO2) dargestellt. Dies geschieht durch einen Prozessor, der diese elektrischen Signale interpretieren und in einen numerischen Wert umwandeln kann.

Was ist das MAX30102-Modul?

Der Sensor MAX30102, hergestellt von Maxim Integratedist ein integriertes Gerät, das die Funktionen eines Herzfrequenzmessers und eines Oximeters kombiniert. Dieser Sensor kann problemlos mit einem Mikrocontroller wie Arduino verwendet werden. Der MAX30102 gehört zur MAX3010x-Serie optischer Sensoren dieser Firma.

Seine Funktionsweise basiert auf der Variation der Lichtabsorption durch das Blut in Abhängigkeit von seiner Umgebung Sauerstoffsättigungsgrad und Puls wie ich in den beiden vorherigen Abschnitten erwähnt habe. Dieser Sensor ist mit zwei LEDs ausgestattet, einer roten und einer Infrarot-LED. Es wird auf die Haut, beispielsweise am Finger oder Handgelenk, gelegt und erkennt reflektiertes Licht, um den Grad der Sauerstoffsättigung zu bestimmen.

Die Kommunikation mit dem MAX30102 wird durchgeführt über I2C-BusDies erleichtert den Anschluss an einen Mikrocontroller wie Arduino. Der MAX30102 benötigt eine doppelte Stromversorgung: 1.8 V für die Logik und 3.3 V für die LEDs. Typischerweise bei 5-V-Modulen zu finden, die bereits über die erforderliche Pegelanpassung verfügen.

Der MAX30102 ist ein Sensor, der in Heim- oder Sportprojekten verwendet wird, d. h. er verfügt möglicherweise nicht über ausreichende Zuverlässigkeit und Empfindlichkeit für den professionellen medizinischen Einsatz.

La optische Pulsoximetrie Es handelt sich um eine nicht-invasive Methode zur Bestimmung des Prozentsatzes der Sauerstoffsättigung im Blut. Wie ich bereits erwähnt habe, basiert es auf dem Unterschied in den Lichtabsorptionskoeffizienten von Hämoglobin (Hb) und Oxyhämoglobin (HbO2) für verschiedene Wellenlängen. Sauerstoffreiches Blut absorbiert mehr Infrarotlicht, während sauerstoffarmes Blut mehr rotes Licht absorbiert. In Körperregionen, in denen die Haut dünn genug ist und sich darunter Blutgefäße befinden, kann dieser Unterschied zur Bestimmung des Sauerstoffsättigungsgrads genutzt werden.

Merkmale des MAX30102-Moduls mit Puls- und Blutsauerstoffsensor

Der MAX30102 beinhaltet:

  • 2x LEDs, eine rote (660 nm) und eine infrarote (880 nm)
  • 2x Fotodioden zur Messung des reflektierten Lichts
  • 18-Bit-ADC-Wandler mit einer Abtastrate von 50 bis 3200 Abtastungen pro Sekunde.
  • Darüber hinaus verfügt es über die notwendige Elektronik zur Signalverstärkung und -filterung, Unterdrückung von Umgebungslicht, Unterdrückung von Frequenzen von 50–60 Hz (künstliches Licht) und Temperaturkompensation.

Modulverbrauch kann bis zu 50mA erreichen während der Messung, obwohl die Intensität programmgesteuert angepasst werden kann, mit einem Energiesparmodus von 0.7 µA während der Messungen.

Preis und wo zu kaufen

Die MAX30102-Sensoren zur Messung von Puls und Blutsauerstoff Sie sind ziemlich billig. Diese Module können Sie für nur wenige Euro auf Websites wie eBay, Aliexpress oder Amazon erwerben. Sie werden sehen, dass es verschiedene Arten gibt, und wir empfehlen Folgendes:

Verbindungen und Beispiel mit Arduino

Arduino IDE, Datentypen, Programmierung

Um den MAX30102 mit Arduino zu testen, müssen Sie zunächst dieses Modul mit der Arduino-Platine verbinden. Das Der Anschluss ist sehr einfach, Sie müssen nur Folgendes anschließen:

  1. Vcc des Moduls muss an den 5V-Ausgang des Arduino-Boards angeschlossen werden.
  2. GND des Moduls muss mit der GND-Buchse des Arduino-Boards verbunden werden.
  3. Der SCL des Moduls muss mit einem der analogen Eingänge des Arduino-Boards verbunden werden, z. B. A5.
  4. Der SDA des Moduls muss mit einem anderen analogen Eingang des Arduino-Boards verbunden werden, z. B. A4.

Sobald die entsprechenden Verbindungen zwischen dem MAX30102-Board und dem Arduino-Board hergestellt wurden, müssen Sie als Nächstes einen Quellcode oder eine Skizze schreiben, damit es funktioniert und mit dem Empfang biometrischer Daten von der betreffenden Person beginnt. Dies ist so einfach wie das Schreiben des folgenden Codes Arduino IDE und programmiere das Board:

Sie müssen außerdem eine Bibliothek in der Arduino IDE installieren, um sie verwenden zu können. Die Bibliothek wurde von SparkFun entwickelt und ist verfügbar unter https://github.com/sparkfun/SparkFun_MAX3010x_Sensor_Library.
#include <Wire.h>
#include "MAX30105.h"
#include "spo2_algorithm.h"

MAX30102 pulsioximetro;


#define MAX_BRIGHTNESS 255


#if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__)
//Arduino Uno no tiene suficiente SRAM para almacenar 100 muestreos, por lo que hay que truncar las muestras en 16-bit MSB.
uint16_t pulsoBuffer[100]; //infrared LED sensor data
uint16_t oxiBuffer[100];  //red LED sensor data

#else
uint32_t pulsoBuffer[100]; //Sensores
uint32_t oxiBuffer[100];  

#endif

int32_t BufferLongitud; //Longitud de datos
int32_t spo2; //Valor de SPO2
int8_t SPO2valido; //Indicador de validez del valor SPO2
int32_t rangopulsacion; //PR BPM o pulsaciones
int8_t validrangopulsacion; //Indicador de validez del valor PR BPM

byte pulsoLED = 11; //Pin PWM
byte lecturaLED = 13; //Titila con cada lectura

void setup()
{
  Serial.begin(115200); // Inicia la comunicación con el microcontrolador a 115200 bits/segundo

  pinMode(pulsoLED, OUTPUT);
  pinMode(lecturaLED, OUTPUT);

  // Inicializar sensores
  if (!pulsioximetro.begin(Wire, I2C_SPEED_FAST)) //Usar el bus I2C a 400kHz 
  {
    Serial.println(F("MAX30102 no encontrado. Por favor, comprueba la conexión y alimentación del módulo."));
    while (1);
  }

  Serial.println(F("Pon el sensor en contacto con tu dedo y presiona cualquier tecla para iniciar la conversión."));
  while (Serial.available() == 0) ; //Esperar hasta que se pulsa una tecla
  Serial.read();

  byte brilloLED = 60; //Opciones: 0=Apagado hasta 255=50mA
  byte mediaMuestreo = 4; //Opciones: 1, 2, 4, 8, 16, 32
  byte ModoLED = 2; //Opciones: 1 = Rojo solo, 2 = Rojo + IR, 3 = Rojo + IR + Verde
  byte rangoMuestreo = 100; //Opciones: 50, 100, 200, 400, 800, 1000, 1600, 3200
  int anchoPulso = 411; //Opciones: 69, 118, 215, 411
  int rangoADC = 4096; //Opciones: 2048, 4096, 8192, 16384

  pulsioximetro.setup(brilloLED, mediaMuestreo, ModoLED, rangoMuestreo, anchoPulso, rangoADC); //Configuración del módulo
}

void loop()
{
  BufferLongitud = 100; //10 almacenamientos en el buffer con 4 segundos corriendo a 25sps

  //Leer las primeras 100 muestras
  for (byte i = 0 ; i < BufferLongitud ; i++)
  {
    while (pulsioximetro.available() == false) //Comprobar nuevos datos
      pulsioximetro.check(); 
    oxiBuffer[i] = pulsioximetro.getRed();
    pulsoBuffer[i] = pulsioximetro.getIR();
    pulsioximetro.siguienteMuestreo(); //Muestreo terminado, ir al siguiente muestreo

    Serial.print(F("red="));
    Serial.print(oxiBuffer[i], DEC);
    Serial.print(F(", ir="));
    Serial.println(pulsoBuffer[i], DEC);
  }

  //Calcular el valor del pulso PM y SpO2 tras los primeros 100 samples
  maxim_heart_rate_and_oxygen_saturation(pulsoBuffer, BufferLongitud, oxiBuffer, &spo2, &SPO2valido, &rangopulsacion, &validrangopulsacion);

  //Calcular muestreos continuos
  while (1)
  {
    //Volcar los 25 primeros valores en memoria y desplazar los últimos 75 arriba
    for (byte i = 25; i < 100; i++)
    {
      oxiBuffer[i - 25] = oxiBuffer[i];
      pulsoBuffer[i - 25] = pulsoBuffer[i];
    }

    for (byte i = 75; i < 100; i++)
    {
      while (pulsioximetro.available() == false) //Comprobar si existen nuevos datos
        pulsioximetro.check(); 

      digitalWrite(lecturaLED, !digitalRead(lecturaLED)); //Parpadea el LED on-board con cada dato

      oxiBuffer[i] = pulsioximetro.getRed();
      pulsoBuffer[i] = pulsioximetro.getIR();
      pulsioximetro.siguienteMuestreo(); //Al finalizar, moverse al siguiente muestreo

      Serial.print(F("Oxígeno="));
      Serial.print(oxiBuffer[i], DEC);
      Serial.print(F(", Pulso="));
      Serial.print(pulsoBuffer[i], DEC);

      Serial.print(F(", HR="));
      Serial.print(rangopulsacion, DEC);

      Serial.print(F(", HRvalid="));
      Serial.print(validrangopulsacion, DEC);

      Serial.print(F(", SPO2="));
      Serial.print(spo2, DEC);

      Serial.print(F(", SPO2 válido="));
      Serial.println(SPO2valido, DEC);
    }

    //Recalcular tras los primeros muestreos
    maxim_heart_rate_and_oxygen_saturation(pulsoBuffer, BufferLongitud, oxiBuffer, &spo2, &SPO2valido, &rangopulsacion, &validrangopulsacion);
  }
}

Natürlich können Sie den Code entsprechend Ihren Anforderungen ändern. Dies ist nur ein Beispiel ...


Schreiben Sie den ersten Kommentar

Hinterlasse einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert mit *

*

*

  1. Verantwortlich für die Daten: Miguel Ángel Gatón
  2. Zweck der Daten: Kontrolle von SPAM, Kommentarverwaltung.
  3. Legitimation: Ihre Zustimmung
  4. Übermittlung der Daten: Die Daten werden nur durch gesetzliche Verpflichtung an Dritte weitergegeben.
  5. Datenspeicherung: Von Occentus Networks (EU) gehostete Datenbank
  6. Rechte: Sie können Ihre Informationen jederzeit einschränken, wiederherstellen und löschen.