MAX30102: hartslagmeter en oximetermodule voor Arduino

MAX30102

Gedurende al die tijd hebben we er een groot aantal getoond Elektronische componenten compatibel met borden zoals Arduino of compatibel, maar ook voor vele andere maker- of doe-het-zelfklussen. Nu laten we u kennismaken met de module MAX30102, die een sensor bevat om de hartslag en de zuurstof in het bloed te meten.

Op deze manier kun je ook wearables maken, zoals zelfgemaakte activiteitsarmbanden of hardware voor gezondheidsstatus monitoren van een persoon, het verstrekken van biometrische gegevens of telemetrie van die persoon dankzij de integratie van de hartslagmeter en oximeter in dit apparaat...

Wat is een hartslagmeter? Hoe werkt het?

Un polssensor of hartslagmeter Het is een elektronisch apparaat dat wordt gebruikt om de hartslag van een persoon in realtime te meten. Het wordt vooral gebruikt in de sportwereld om prestaties en inspanning te monitoren tijdens trainingen of dagelijks. Hartslagmeters zijn populair onder atleten, maar ze zijn ook een fundamenteel apparaat in medische centra om de hartslag te kennen, dat wil zeggen de hartslag of het aantal slagen per minuut:

  • PR Bpm: toont de hartslag, dat wil zeggen het aantal slagen per minuut.

In alle gevallen is de Sensoren registreren de variatie in het bloedvolume bij elke hartslag. Deze variatie wordt vertaald in een elektrisch signaal dat wordt verwerkt om de hartslag te verkrijgen. Sommige hartslagmeters bevatten ook versterkings- en ruisonderdrukkingscircuits om de nauwkeurigheid van de metingen te verbeteren.

Wat is een oximeter? Hoe werkt het?

Un oximeter is een medisch of sportapparaat die wordt gebruikt om de zuurstofverzadiging in het bloed te meten. Dit apparaat biedt bloedzuurstofverzadigingsgegevens met waarden van 0 tot 100%. Het is gebruikelijk dat hetzelfde apparaat ook de hartslagoptie bevat, die alle informatie voor monitoring of opname aangeeft.

De gegevens die meet een oximeter is:

  • %SpO2: verwijst naar het percentage zuurstofverzadiging in het bloed.

De oximeter wordt als een klem zo geplaatst dat deze zich aanpast aan de morfologie van onze vinger of hij kan ook op andere plaatsen op het lichaam geplaatst worden, zoals bij de hartslagmeter het geval is, zoals de pols, zoals is te zien in veel activiteitsarmbanden.

Wat hun werking betreft, zenden oximeters anders uit golflengten van licht die door de huid gaan. Wat op dit licht inwerkt, is hemoglobine, een bloedmolecuul dat verantwoordelijk is voor het transport van zuurstof en dat verschillende hoeveelheden licht absorbeert, afhankelijk van het zuurstofniveau dat het transporteert. Het gedetailleerde proces is als volgt:

  1. lichtemissie- De oximeter zendt twee golflengten licht uit, één rood en één infrarood, die door de vinger gaan die op het apparaat is geplaatst.
  2. Lichtabsorptie: Hemoglobine, een molecuul in rode bloedcellen dat zuurstof transporteert, absorbeert verschillende hoeveelheden van dit licht. Met zuurstof beladen hemoglobine (oxyhemoglobine) en zuurstofvrije hemoglobine (deoxyhemoglobine) hebben verschillende lichtabsorptie-eigenschappen.
  3. lichte detectie: Een detector aan de andere kant van de lichtzender verzamelt het licht dat door de vinger is gegaan.
  4. Berekening van de zuurstofverzadiging- Het apparaat berekent de verhouding van oxyhemoglobine tot de totale hoeveelheid aanwezige hemoglobine, zowel oxyhemoglobine als deoxyhemoglobine. Dit aandeel wordt weergegeven als het percentage zuurstofverzadiging in het bloed (%SpO2). Dit gebeurt via een processor die deze elektrische signalen kan interpreteren en ze in een numerieke waarde kan vertalen.

Wat is MAX30102-module?

De sensor MAX30102, geproduceerd door Maxim Integrated, is een geïntegreerd apparaat dat de functionaliteiten van een hartslagmeter en een oximeter combineert. Deze sensor kan eenvoudig worden gebruikt met een microcontroller zoals Arduino. De MAX30102 behoort tot de MAX3010x-serie optische sensoren van dit bedrijf.

De werking ervan is gebaseerd op de variatie van de lichtabsorptie door het bloed, afhankelijk van de mate waarin het wordt geabsorbeerd zuurstofverzadigingsniveau en hartslag zoals ik in de twee voorgaande paragrafen heb vermeld. Deze sensor is voorzien van twee LED's, één rode en één infrarood. Het wordt op de huid geplaatst, bijvoorbeeld op de vinger of pols, en detecteert gereflecteerd licht om de mate van zuurstofverzadiging te bepalen.

Er wordt communicatie met de MAX30102 uitgevoerd via I2C-bus, waardoor het eenvoudig is om verbinding te maken met een microcontroller zoals Arduino. De MAX30102 heeft een dubbele voeding nodig: 1.8V voor de logica en 3.3V voor de LED's. Meestal te vinden op 5V-modules die al over de nodige niveauafstemming beschikken.

De MAX30102 is een sensor die wordt gebruikt in thuis- of sportprojecten, wat betekent dat hij mogelijk niet voldoende betrouwbaar en gevoelig is voor professioneel medisch gebruik.

La optische pulsoximetrie Het is een niet-invasieve methode om het percentage zuurstofverzadiging in het bloed te bepalen. Zoals ik eerder al zei, is het gebaseerd op het verschil in de lichtabsorptiecoëfficiënten van hemoglobine (Hb) en oxyhemoglobine (HbO2) voor verschillende golflengten. Bloed dat rijk is aan zuurstof absorbeert meer infrarood licht, terwijl bloed met weinig zuurstof meer rood licht absorbeert. In delen van het lichaam waar de huid dun genoeg is en er bloedvaten onder zitten, kan dit verschil worden gebruikt om de mate van zuurstofverzadiging te bepalen.

Kenmerken van de MAX30102-module met hartslag- en bloedzuurstofsensor

De MAX30102 omvat:

  • 2x LED's, één rood (660 nm) en één infrarood (880 nm)
  • 2x fotodiodes om gereflecteerd licht te meten
  • 18-bits ADC-converter met een samplingsnelheid van 50 tot 3200 samples per seconde.
  • Daarnaast beschikt hij over de nodige elektronica voor signaalversterking en filtering, onderdrukking van omgevingslicht, onderdrukking van frequenties van 50-60 Hz (kunstlicht) en temperatuurcompensatie.

Moduleverbruik kan oplopen tot 50mA tijdens de meting, hoewel de intensiteit programmatisch kan worden aangepast, met een energiezuinige modus van 0.7 µA tijdens metingen.

Prijs en waar te koop

De MAX30102-sensoren voor het meten van hartslag en bloedzuurstof ze zijn vrij goedkoop. Deze modules zijn voor slechts een paar euro van jou op sites als eBay, AliExpress of Amazon. U zult zien dat er verschillende soorten zijn, en wij raden het volgende aan:

Aansluitingen en voorbeeld met Arduino

Arduino IDE, datatypes, programmeren

Om de MAX30102 met Arduino te testen, moet je eerst deze module op het Arduino-bord aansluiten. Dit aansluiten is heel eenvoudig, je hoeft alleen maar het volgende aan te sluiten:

  1. Vcc van de module moet worden aangesloten op de 5V-uitgang van het Arduino-bord.
  2. GND van de module moet worden aangesloten op de GND-aansluiting van het Arduino-bord.
  3. SCL van de module moet worden aangesloten op een van de analoge ingangen van het Arduino-bord, zoals A5.
  4. SDA van de module moet worden aangesloten op een andere analoge ingang van het Arduino-bord, zoals A4.

Zodra de juiste verbindingen tot stand zijn gebracht tussen het MAX30102-bord en het Arduino-bord, is de volgende stap het schrijven van een broncode of schets om deze te laten werken en het ontvangen van biometrische gegevens van de persoon in kwestie. Dit is net zo eenvoudig als het schrijven van de volgende code Arduino IDE en programmeer het bord:

Je moet ook een bibliotheek in de Arduino IDE installeren om deze te kunnen gebruiken. De bibliotheek is ontwikkeld door SparkFun en is beschikbaar op 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);
  }
}

Uiteraard kunt u de code naar wens aanpassen, dit is slechts een voorbeeld...


Wees de eerste om te reageren

Laat je reactie achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

*

*

  1. Verantwoordelijk voor de gegevens: Miguel Ángel Gatón
  2. Doel van de gegevens: Controle SPAM, commentaarbeheer.
  3. Legitimatie: uw toestemming
  4. Mededeling van de gegevens: De gegevens worden niet aan derden meegedeeld, behalve op grond van wettelijke verplichting.
  5. Gegevensopslag: database gehost door Occentus Networks (EU)
  6. Rechten: u kunt uw gegevens op elk moment beperken, herstellen en verwijderen.