MAX30102: monitor de ritm cardiac și modul oximetru pentru Arduino

MAX30102

În tot acest timp, am arătat un număr mare de Componente electronice compatibil cu plăci precum Arduino sau compatibile, precum și pentru multe alte lucrări de producție sau bricolaj. Acum vă vom prezenta modulul MAX30102, care include un senzor pentru măsurarea pulsului și a oxigenului din sânge.

În acest fel, puteți crea și obiecte purtabile, cum ar fi brățări de activitate self-made sau hardware pentru monitoriza starea de sănătate a unei persoane, furnizând date biometrice sau telemetrie ale respectivei persoane datorită integrării monitorului de ritm cardiac și oximetrului în acest dispozitiv...

Ce este un monitor de ritm cardiac? Cum functioneazã?

Un senzor de puls sau monitor de ritm cardiac Este un dispozitiv electronic folosit pentru a măsura ritmul cardiac al unei persoane în timp real. Este folosit în principal în domeniul sportiv pentru a monitoriza performanța și efortul în timpul antrenamentului sau zilnic. Monitoarele de puls sunt populare în rândul sportivilor, dar sunt și un dispozitiv fundamental în centrele medicale pentru a cunoaște ritmul cardiac, adică ritmul cardiac sau bătăile pe minut:

  • PR Bpm: arată ritmul cardiac, adică bătăile pe minut.

În toate cazurile, Senzorii captează variația volumului sanguin cu fiecare bătaie a inimii. Această variație se traduce într-un semnal electric care este procesat pentru a obține ritmul cardiac. Unele monitoare de ritm cardiac includ, de asemenea, circuite de amplificare și anulare a zgomotului pentru a îmbunătăți acuratețea citirilor.

Ce este un oximetru? Cum functioneazã?

Un oximetrul este un dispozitiv medical sau sportiv care este folosit pentru a măsura saturația de oxigen din sânge. Acest dispozitiv oferă date de saturație a oxigenului din sânge cu valori de la 0 la 100%. Este obișnuit ca același dispozitiv să includă și opțiunea de ritm cardiac, indicând toate informațiile pentru monitorizare sau înregistrare.

Datele care măsoară un oximetru este:

  • % SpO2: se referă la procentul de saturație de oxigen din sânge.

Oximetrul este așezat ca o clemă în așa fel încât să fie adaptat la morfologia degetului nostru sau poate fi amplasat și în alte locuri de pe corp, cum este cazul monitorului de puls, precum încheietura mâinii, ca poate fi văzut în multe brățări de activitate. ,

În ceea ce privește funcționarea lor, oximetrele emit diferite lungimi de undă luminii care trec prin piele. Ceea ce acționează asupra acestei lumini este hemoglobina, o moleculă de sânge responsabilă cu transportul oxigenului, absorbind diferite cantități de lumină în funcție de nivelul de oxigen pe care îl transportă. Procesul detaliat este următorul:

  1. emisie de lumină- Oximetrul emite două lungimi de undă de lumină, una roșie și una în infraroșu, care trec prin degetul plasat pe dispozitiv.
  2. Absorbția luminii: Hemoglobina, o moleculă din globulele roșii care transportă oxigen, absoarbe cantități diferite din aceste lumini. Hemoglobina încărcată cu oxigen (oxihemoglobina) și hemoglobina fără oxigen (deoxihemoglobina) au proprietăți diferite de absorbție a luminii.
  3. Detectarea luminii: Un detector de pe partea opusă a emițătorului de lumină colectează lumina care a trecut prin deget.
  4. Calculul saturației de oxigen- Aparatul calculeaza raportul dintre oxihemoglobina si cantitatea totala de hemoglobina prezenta, atat oxihemoglobina cat si deoxihemoglobina. Această proporție este prezentată ca procent de saturație în oxigen din sânge (%SpO2). Acest lucru se realizează printr-un procesor capabil să interpreteze aceste semnale electrice pentru a le traduce într-o valoare numerică.

Ce este modulul MAX30102?

Senzorul MAX30102, produs de Maxim Integrated, este un dispozitiv integrat care combină funcționalitățile unui monitor de ritm cardiac și ale unui oximetru. Acest senzor poate fi utilizat cu ușurință cu un microcontroler precum Arduino. MAX30102 aparține seriei de senzori optici MAX3010x de la această firmă.

Funcționarea sa se bazează pe variația absorbției luminii de către sânge, în funcție de acesta nivelul de saturație în oxigen și pulsul așa cum am menționat în cele două secțiuni anterioare. Acest senzor este echipat cu două LED-uri, unul roșu și unul în infraroșu. Este plasat pe piele, cum ar fi pe deget sau pe încheietura mâinii, și detectează lumina reflectată pentru a determina gradul de saturație în oxigen.

Comunicarea cu MAX30102 este realizată prin magistrala I2C, facilitând conectarea la un microcontroler precum Arduino. MAX30102 are nevoie de o sursă dublă de alimentare: 1.8V pentru logica și 3.3V pentru LED-uri. Se găsește de obicei pe modulele de 5V care includ deja potrivirea nivelului necesară.

MAX30102 este un senzor utilizat în proiecte casnice sau sportive, adică este posibil să nu aibă suficientă fiabilitate și sensibilitate pentru uz medical profesional.

La pulsoximetrie optică Este o metodă neinvazivă pentru a determina procentul de saturație de oxigen din sânge. După cum am menționat anterior, se bazează pe diferența dintre coeficienții de absorbție a luminii ai hemoglobinei (Hb) și oxihemoglobinei (HbO2) pentru diferite lungimi de undă. Sângele bogat în oxigen absoarbe mai multă lumină infraroșie, în timp ce sângele cu conținut scăzut de oxigen absoarbe mai multă lumină roșie. În zonele corpului în care pielea este suficient de subțire și există vase de sânge dedesubt, această diferență poate fi folosită pentru a determina gradul de saturație în oxigen.

Caracteristicile modulului MAX30102 cu senzor de puls și oxigen din sânge

MAX30102 include:

  • 2x LED-uri, unul roșu (660nm) și unul în infraroșu (880nm)
  • 2x fotodiode pentru a măsura lumina reflectată
  • Convertor ADC pe 18 biți cu o rată de eșantionare de la 50 la 3200 de eșantioane pe secundă.
  • In plus, dispune de electronica necesara pentru amplificarea si filtrarea semnalului, anularea luminii ambientale, respingerea frecventelor de 50-60Hz (lumina artificiala) si compensarea temperaturii.

Consumul modulului poate ajunge până la 50mA în timpul măsurării, deși intensitatea poate fi ajustată programatic, cu un mod de putere redusă de 0.7µA în timpul măsurătorilor.

Preț și trebuie să cumpărați

Senzorii MAX30102 pentru măsurarea pulsului și a oxigenului din sânge sunt destul de ieftine. Aceste module pot fi ale tale pentru doar câțiva euro pe site-uri precum eBay, Aliexpress sau Amazon. Veți vedea că există mai multe tipuri și vă recomandăm următoarele:

Conexiuni și exemplu cu Arduino

Arduino IDE, tipuri de date, programare

Pentru a testa MAX30102 cu Arduino, primul lucru este să conectați acest modul la placa Arduino. Acest conexiunea este foarte simpla, trebuie doar să conectați următoarele:

  1. Vcc al modulului trebuie conectat la ieșirea de 5V a plăcii Arduino.
  2. GND al modulului trebuie să fie conectat la mufa GND a plăcii Arduino.
  3. SCL al modulului trebuie să fie conectat la una dintre intrările analogice ale plăcii Arduino, cum ar fi A5.
  4. SDA al modulului trebuie să fie conectat la o altă dintre intrările analogice ale plăcii Arduino, cum ar fi A4.

Odată ce s-au stabilit conexiunile corespunzătoare între placa MAX30102 și placa Arduino, următorul lucru va fi să scrieți un cod sursă sau o schiță pentru ca acesta să funcționeze și să începeți să primiți date biometrice de la persoana în cauză. Acest lucru este la fel de ușor ca și să scrieți următorul cod Arduino IDE si programeaza placa:

De asemenea, trebuie să instalați o bibliotecă în Arduino IDE pentru a o utiliza. Biblioteca a fost dezvoltată de SparkFun și este disponibilă la 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);
  }
}

Desigur, puteți modifica codul în funcție de nevoile dvs., acesta este doar un exemplu...


Fii primul care comenteaza

Lasă comentariul tău

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

*

*

  1. Responsabil pentru date: Miguel Ángel Gatón
  2. Scopul datelor: Control SPAM, gestionarea comentariilor.
  3. Legitimare: consimțământul dvs.
  4. Comunicarea datelor: datele nu vor fi comunicate terților decât prin obligație legală.
  5. Stocarea datelor: bază de date găzduită de Occentus Networks (UE)
  6. Drepturi: în orice moment vă puteți limita, recupera și șterge informațiile.