MAX30102: pulsikell ja oksümeetri moodul Arduino jaoks

MAX30102

Kogu selle aja jooksul oleme näidanud suurt hulka Elektroonilised osad ühildub seadmega lauad nagu Arduino või ühilduvad, aga ka paljude muude tegija- või isetegemistööde jaoks. Nüüd tutvustame teile moodulit MAX30102, mis sisaldab andurit pulsi ja vere hapniku mõõtmiseks.

Sel viisil saate luua ka kantavaid esemeid, näiteks isetehtud tegevuskäevõrusid või riistvara jälgida tervislikku seisundit isiku biomeetrilisi või telemeetrilisi andmeid edastades tänu südame löögisageduse monitori ja oksümeetri integreerimisele sellesse seadmesse...

Mis on pulsikell? Kuidas see töötab?

Un pulsiandur või pulsikell See on elektrooniline seade, mida kasutatakse inimese südame löögisageduse reaalajas mõõtmiseks. Seda kasutatakse peamiselt spordiväljakul, et jälgida sooritust ja pingutust treeningu ajal või igapäevaselt. Pulsikellad on sportlaste seas populaarsed, kuid need on ka meditsiinikeskustes põhiseade pulsisageduse ehk pulsisageduse või löökide määramiseks minutis:

  • PR Bpm: näitab pulsisagedust, st lööki minutis.

Kõigil juhtudel on Andurid fikseerivad veremahu kõikumised iga südamelöögiga. See variatsioon teisendatakse elektriliseks signaaliks, mida töödeldakse südame löögisageduse saamiseks. Mõned pulsikellad sisaldavad näitude täpsuse parandamiseks ka võimendus- ja mürasummutusahelaid.

Mis on oksümeeter? Kuidas see töötab?

Un oksimeeter on meditsiini- või spordiseade mida kasutatakse vere hapnikuküllastuse mõõtmiseks. See seade pakub vere hapnikuga küllastumise andmeid väärtustega 0 kuni 100%. On tavaline, et sama seade sisaldab ka pulsivalikut, mis näitab kogu jälgimiseks või salvestamiseks vajalikku teavet.

Los datos Quee mõõdab oksümeetrit on:

  • %SpO2: viitab hapniku küllastumise protsendile veres.

Oksümeeter on paigutatud nagu klamber nii, et see on kohandatud meie sõrme morfoloogiaga või seda saab asetada ka mujale kehal, nagu pulsikella puhul, näiteks randmele, võib näha paljudes tegevuskäevõrudes. ,

Seoses nende tööga eraldavad oksümeetrid erinevat valguse lainepikkused mis läbivad nahka. Sellele valgusele mõjub hemoglobiin, hapniku transportimise eest vastutav veremolekul, mis neelab erineva koguse valgust olenevalt transporditava hapniku tasemest. Üksikasjalik protsess on järgmine:

  1. valguse emissioon- Oksümeeter kiirgab kahte lainepikkust valgust, ühte punast ja teist infrapuna, mis läbivad seadmele asetatud sõrme.
  2. Valguse neeldumine: Hemoglobiin, punaste vereliblede molekul, mis kannab hapnikku, neelab erinevas koguses neid valguseid. Hapnikuga täidetud hemoglobiinil (oksühemoglobiinil) ja hapnikuvabal hemoglobiinil (desoksühemoglobiinil) on erinevad valguse neeldumisomadused.
  3. Valguse tuvastamine: Valguskiirguri vastasküljel asuv detektor kogub sõrmest läbi käinud valguse.
  4. Hapnikuküllastuse arvutamine- Seade arvutab oksühemoglobiini ja olemasoleva hemoglobiini koguhulga, nii oksühemoglobiini kui ka desoksühemoglobiini. See osakaal on esitatud vere hapnikuga küllastumise protsendina (%SpO2). Seda tehakse protsessori kaudu, mis on võimeline neid elektrilisi signaale tõlgendama, et muuta need arvväärtuseks.

Mis on moodul MAX30102?

Andur MAX30102, tootja Maxim Integrated, on integreeritud seade, mis ühendab endas pulsikella ja oksümeetri funktsioonid. Seda andurit saab hõlpsasti kasutada mikrokontrolleriga, näiteks Arduinoga. MAX30102 kuulub selle ettevõtte MAX3010x optiliste andurite seeriasse.

Selle töö põhineb vere valguse neeldumise muutumisel, sõltuvalt sellest hapnikuga küllastatuse tase ja pulss nagu ma kahes eelmises osas mainisin. See andur on varustatud kahe LED-iga, üks punane ja teine ​​infrapuna. See asetatakse nahale, näiteks sõrmele või randmele, ja tuvastab peegeldunud valguse, et määrata hapnikuküllastuse aste.

Side MAX30102-ga toimub I2C bussi kaudu, mistõttu on lihtne ühendada mikrokontrolleriga, näiteks Arduinoga. MAX30102 vajab topelt toiteallikat: loogika jaoks 1.8 V ja LED-ide jaoks 3.3 V. Tavaliselt leidub 5 V moodulitel, mis juba sisaldavad vajalikku taseme sobitamist.

MAX30102 on kodu- või spordiprojektides kasutatav andur, see tähendab, et sellel ei pruugi olla piisavat töökindlust ja tundlikkust professionaalseks meditsiiniliseks kasutamiseks.

La optiline pulssoksümeetria See on mitteinvasiivne meetod vere hapnikuküllastuse protsendi määramiseks. Nagu ma varem mainisin, põhineb see hemoglobiini (Hb) ja oksühemoglobiini (HbO2) valguse neeldumistegurite erinevusel erinevatel lainepikkustel. Hapnikurikas veri neelab rohkem infrapunavalgust, madala hapnikusisaldusega veri aga rohkem punast valgust. Kehapiirkondades, kus nahk on piisavalt õhuke ja selle all on veresooned, saab seda erinevust kasutada hapnikuküllastuse määra määramiseks.

Pulsi ja vere hapnikuanduriga mooduli MAX30102 omadused

MAX30102 sisaldab:

  • 2x LED-i, üks punane (660nm) ja üks infrapuna (880nm)
  • 2x fotodioodi peegeldunud valguse mõõtmiseks
  • 18-bitine ADC-muundur, mille diskreetimissagedus on 50 kuni 3200 proovi sekundis.
  • Lisaks on sellel vajalik elektroonika signaali võimendamiseks ja filtreerimiseks, ümbritseva valguse kustutamiseks, sageduste 50-60Hz (tehisvalgus) tagasilükkamiseks ja temperatuuri kompenseerimiseks.

Mooduli tarbimine võib ulatuda kuni 50 mA-ni mõõtmise ajal, kuigi intensiivsust saab programmiliselt reguleerida, madala võimsusega 0.7 µA mõõtmise ajal.

Hind ja kust osta

MAX30102 andurid pulsi ja vere hapniku mõõtmiseks need on üsna odavad. Need moodulid võivad olla teie omad vaid mõne euro eest sellistel saitidel nagu eBay, Aliexpress või Amazon. Näete, et neid on mitut tüüpi, ja soovitame järgmist.

Ühendused ja näide Arduinoga

Arduino IDE, andmetüübid, programmeerimine

MAX30102 testimiseks Arduinoga tuleb kõigepealt ühendada see moodul Arduino plaadiga. See ühendus on väga lihtne, peate lihtsalt ühendama järgmise:

  1. Mooduli Vcc tuleb ühendada Arduino plaadi 5V väljundiga.
  2. Mooduli GND tuleb ühendada Arduino plaadi GND pesaga.
  3. Mooduli SCL tuleb ühendada ühe Arduino plaadi analoogsisendiga, näiteks A5.
  4. Mooduli SDA tuleb ühendada mõne teise Arduino plaadi analoogsisendiga, näiteks A4.

Kui sobivad ühendused MAX30102 plaadi ja Arduino plaadi vahel on loodud, tuleb järgmiseks kirjutada lähtekood või visand selle toimimiseks ja alustada biomeetriliste andmete vastuvõtmist kõnealuselt isikult. See on sama lihtne kui järgmise koodi sisestamine Arduino IDE ja programmeerige tahvel:

Selle kasutamiseks peate installima ka Arduino IDE-sse raamatukogu. Raamatukogu on välja töötanud SparkFun ja see on saadaval aadressil 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);
  }
}

Loomulikult saate koodi muuta vastavalt oma vajadustele, see on vaid näide...


Ole esimene kommentaar

Jäta oma kommentaar

Sinu e-postiaadressi ei avaldata. Kohustuslikud väljad on tähistatud *

*

*

  1. Andmete eest vastutab: Miguel Ángel Gatón
  2. Andmete eesmärk: Rämpsposti kontrollimine, kommentaaride haldamine.
  3. Seadustamine: teie nõusolek
  4. Andmete edastamine: andmeid ei edastata kolmandatele isikutele, välja arvatud juriidilise kohustuse alusel.
  5. Andmete salvestamine: andmebaas, mida haldab Occentus Networks (EL)
  6. Õigused: igal ajal saate oma teavet piirata, taastada ja kustutada.