I-MAX30102: ukuqapha izinga lokushaya kwenhliziyo kanye nemodyuli ye-oximeter ye-Arduino

MAX30102

Phakathi naso sonke lesi sikhathi, siye sabonisa inani elikhulu Izingxenye ze-elekthronikhi iyahambisana ne- amabhodi afana ne-Arduino noma ahambisanayo, kanye neminye imisebenzi eminingi yomenzi noma ye-DIY. Manje sizokwethula kumojula MAX30102, okufaka inzwa yokulinganisa ukushaya kwenhliziyo nomoya wegazi.

Ngale ndlela, ungakha nezinto ezigqokwayo ezifana namasongo omsebenzi wokuzenzela noma i-hardware qapha isimo sezempilo yomuntu, ehlinzeka ngedatha yebhayomethrikhi noma i-telemetry yomuntu oshiwoyo ngenxa yokuhlanganiswa kweqapha lokushaya kwenhliziyo kanye ne-oximeter kule divayisi...

Siyini isiqapha senhliziyo? Isebenza kanjani?

Un inzwa yokushaya kwenhliziyo noma ukushaya kwenhliziyo Kuyithuluzi le-elekthronikhi elisetshenziselwa ukukala izinga lokushaya kwenhliziyo yomuntu ngesikhathi sangempela. Isetshenziswa kakhulu emkhakheni wezemidlalo ukuqapha ukusebenza nokuzikhandla ngesikhathi sokuqeqeshwa noma nsuku zonke. Iziqapha zokushaya kwenhliziyo zithandwa kakhulu kubasubathi, kodwa futhi ziyithuluzi elibalulekile ezikhungweni zezokwelapha ukwazi izinga lokushaya kwenhliziyo, okungukuthi, ukushaya kwenhliziyo noma ukushaya ngomzuzu:

  • PR Bpm: ibonisa ukushaya kwenhliziyo, okungukuthi, ukushaya ngomzuzu.

Kuzo zonke izimo, i- Izinzwa zithwebula ukuhluka kwevolumu yegazi ngokushaya kwenhliziyo ngakunye. Lokhu kuhlukahluka kuhunyushwa kusignali kagesi ecutshungulwa ukuthola ukushaya kwenhliziyo. Amanye ama-monitor okushaya kwenhliziyo aphinde afake amasekhethi okukhulisa kanye nokukhansela umsindo ukuze kuthuthukiswe ukunemba kokufundwayo.

Iyini i-oximeter? Isebenza kanjani?

Un I-oximeter iyithuluzi lezokwelapha noma lezemidlalo esetshenziselwa ukukala ukugcwala komoyampilo egazini. Le divayisi inikezela ngedatha yokugcwala komoyampilo egazini ngamanani asuka ku-0 kuye ku-100%. Kuvamile ukuthi idivayisi efanayo iphinde ifake inketho yokushaya kwenhliziyo, okubonisa lonke ulwazi lokuqapha noma ukurekhoda.

Idatha leyo ilinganisa i-oximeter es:

  • %SpO2: isho iphesenti lokugcwala komoyampilo egazini.

I-oximeter ibekwe njenge-clamp ngendlela yokuthi ivumelane ne-morphology yomunwe wethu noma ingabuye ibekwe kwezinye izindawo emzimbeni, njengoba kwenzeka nge-monitor rate yenhliziyo, njengesihlakala, ingabonakala kumasongo amaningi omsebenzi. ,

Ngokuphathelene nokusebenza kwawo, ama-oximeter akhipha okuhlukile ukukhanya kwamaza ezidlula esikhumbeni. Okusebenza kulokhu kukhanya i-hemoglobin, ingqamuzana legazi elithwala umoya-mpilo, limunca amanani ahlukahlukene okukhanya kuye ngezinga lomoya-mpilo eliwuhambisayo. Inqubo enemininingwane imi kanje:

  1. ukuphuma kokukhanya- I-oximeter ikhipha amaza okukhanya amabili, okubomvu kanye nenye infrared, edlula emunweni obekwe kudivayisi.
  2. Ukumuncwa kokukhanya: I-Hemoglobin, i-molecule esemangqamuzaneni abomvu egazi athwala umoya-mpilo, imunca amanani ahlukene alezi zibani. I-hemoglobin egcwele umoya-mpilo (i-oxyhemoglobin) ne-hemoglobin engenawo umoya-mpilo (i-deoxyhemoglobin) inezinto ezihlukene zokumunca ukukhanya.
  3. ukutholwa kokukhanya: Umtshina ohlangothini oluphambene lomthumeli wokukhanya uqoqa ukukhanya okudlule ngomunwe.
  4. Ukubalwa kokugcwala komoyampilo- Idivayisi ibala isilinganiso se-oxyhemoglobin nenani eliphelele le-hemoglobin ekhona, kokubili i-oxyhemoglobin ne-deoxyhemoglobin. Le ngxenye yethulwa njengephesenti lokugcwala komoyampilo egazini (%SpO2). Lokhu kwenziwa ngeprosesa ekwazi ukuhumusha lezi zimpawu zikagesi ukuze ziwahumushe abe inani lezinombolo.

Iyini imojula ye-MAX30102?

Inzwa I-MAX30102, ikhiqizwe nguMaxim Integrated, iyithuluzi elihlanganisiwe elihlanganisa ukusebenza kokuqapha kwenhliziyo kanye ne-oximeter. Le nzwa ingasetshenziswa kalula nge-microcontroller efana ne-Arduino. I-MAX30102 ingeye-MAX3010x yochungechunge lwama-optical sensors avela kule nkampani.

Ukusebenza kwayo kusekelwe ekuhlukeni kokumuncwa kokukhanya ngegazi, kuye ngokuthi ikuphi izinga lokugcwala kwe-oxygen, kanye ne-pulse njengoba ngike ngasho ezigabeni ezimbili ezedlule. Le nzwa ifakwe ama-LED amabili, eyodwa ebomvu neyodwa infrared. Ibekwa esikhumbeni, njengasemunweni noma esihlakaleni, futhi ithola ukukhanya okubonisiwe ukuze kunqunywe izinga lokugcwala komoyampilo.

Ukuxhumana ne-MAX30102 kuyenziwa ngebhasi le-I2C, okwenza kube lula ukuxhuma kusilawuli esincane esifana ne-Arduino. I-MAX30102 idinga ukunikezwa kwamandla okuphindwe kabili: i-1.8V ye-logic kanye ne-3.3V yama-LED. Ivamise ukutholakala kumamojula we-5V asevele ahlanganisa ukufanisa izinga elidingekayo.

I-MAX30102 iyinzwa esetshenziswa kumaphrojekthi asekhaya noma ezemidlalo, okusho ukuthi, ingahle ingabi nakho ukwethembeka nokuzwela okwanele kokusetshenziswa kwezokwelapha okuchwepheshile.

La i-optical pulse oximetry Kuyindlela engangeneleli yokunquma iphesenti lokugcwala komoyampilo egazini. Njengoba ngike ngasho ngaphambili, kusekelwe emehlukweni ku-coefficients yokumunca ukukhanya kwe-hemoglobin (Hb) ne-oxyhemoglobin (HbO2) yamaza ahlukene. Igazi eligcwele umoya-mpilo limunca ukukhanya okwengeziwe kwe-infrared, kuyilapho igazi eliphansi komoyampilo lidonsa ukukhanya okubomvu okwengeziwe. Ezindaweni zomzimba lapho isikhumba sincane ngokwanele futhi kunemithambo yegazi ngaphansi, lo mehluko ungasetshenziswa ukunquma izinga lokugcwala komoyampilo.

Izici zemojula ye-MAX30102 enenzwa ye-pulse ne-blood oxygen sensor

I-MAX30102 ihlanganisa:

  • Ama-LED angu-2, abomvu (660nm) kanye ne-infrared eyodwa (880nm)
  • 2x ama-photodiodes ukulinganisa ukukhanya okubonisiwe
  • Isiguquli se-ADC esingu-18-bit esinesilinganiso samasampula samasampula angama-50 kuye kwangama-3200 ngomzuzwana.
  • Ngaphezu kwalokho, inogesi odingekayo wokukhulisa isignali nokuhlunga, ukwesulwa kokukhanya okuzungezile, ukwenqatshwa kwamafrikhwensi ka-50-60Hz (ukukhanya okwenziwayo) kanye nesinxephezelo sokushisa.

Ukusetshenziswa kwemojula ingafinyelela ku-50mA ngesikhathi sokulinganisa, nakuba ukuqina kungalungiswa ngokohlelo, ngemodi yamandla aphansi engu-0.7µA phakathi nezilinganiso.

Intengo nokuthi ungathenga kuphi

Izinzwa ze-MAX30102 zokulinganisa ukushaya kwenhliziyo nomoya wegazi ashibhile impela. Lawa mamojula angaba awakho ngama-euro ambalwa nje kumasayithi afana ne-eBay, i-Aliexpress noma i-Amazon. Uzobona ukuthi kunezinhlobo ezimbalwa, futhi sincoma okulandelayo:

Ukuxhumana nesibonelo nge-Arduino

I-Arduino IDE, izinhlobo zedatha, ukuhlela

Ukuhlola i-MAX30102 nge-Arduino, into yokuqala ukuxhuma le module ebhodini le-Arduino. Lokhu uxhumano ilula kakhulu, kufanele nje uxhume okulandelayo:

  1. I-Vcc yemojula kufanele ixhunywe kokuphumayo okungu-5V kwebhodi le-Arduino.
  2. I-GND yemojula kufanele ixhunywe kusokhethi ye-GND yebhodi le-Arduino.
  3. I-SCL yemojula kufanele ixhunywe kokunye okokufaka kwe-analog yebhodi le-Arduino, njenge-A5.
  4. I-SDA yemojula kufanele ixhunywe kokunye okokufaka kwe-analog yebhodi le-Arduino, njenge-A4.

Uma uxhumano olufanele selusungulwe phakathi kwebhodi le-MAX30102 nebhodi le-Arduino, into elandelayo kuzoba ukubhala ikhodi yomthombo noma umdwebo ukuze uwenze usebenze futhi uqale ukuthola idatha ye-biometric kumuntu okukhulunywa ngaye. Lokhu kulula njengokubhala ikhodi elandelayo kuyo I-Arduino IDE bese uhlela ibhodi:

Udinga futhi ukufaka umtapo wolwazi ku-Arduino IDE ukuze uyisebenzise. Umtapo wolwazi uthuthukiswe ngabakwaSparkFun, futhi utholakala kwa- 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);
  }
}

Kunjalo, ungakwazi ukuguqula ikhodi ngokwezidingo zakho, lesi isibonelo nje...


Yiba ngowokuqala ukuphawula

Shiya umbono wakho

Ikheli lakho le ngeke ishicilelwe. Ezidingekayo ibhalwe nge *

*

*

  1. Ubhekele imininingwane: Miguel Ángel Gatón
  2. Inhloso yedatha: Lawula Ugaxekile, ukuphathwa kwamazwana.
  3. Ukusemthethweni: Imvume yakho
  4. Ukuxhumana kwemininingwane: Imininingwane ngeke idluliselwe kubantu besithathu ngaphandle kwesibopho esisemthethweni.
  5. Isitoreji sedatha: Idatabase ebanjwe yi-Occentus Networks (EU)
  6. Amalungelo: Nganoma yisiphi isikhathi ungakhawulela, uthole futhi ususe imininingwane yakho.