MAX30102: Kula da ƙimar zuciya da ƙirar oximeter don Arduino

MAX30102

A duk wannan lokacin, mun nuna babban adadin Kayan lantarki jituwa tare da alluna kamar Arduino ko masu jituwa, da kuma ga sauran masu yin ko ayyuka na DIY da yawa. Yanzu za mu gabatar muku da module MAX30102, wanda ya haɗa da firikwensin don auna bugun jini da oxygen na jini.

Ta wannan hanyar, zaku iya ƙirƙirar abubuwan sawa kamar mundaye na aiki na kai ko kayan masarufi don kula da yanayin lafiya na mutum, samar da bayanan biometric ko telemetry na mutumin da aka faɗi godiya ga haɗawa da na'urar duba bugun zuciya da oximeter a cikin wannan na'urar ...

Menene ma'aunin bugun zuciya? Ta yaya yake aiki?

Un bugun bugun jini ko duban bugun zuciya Na'urar lantarki ce da ake amfani da ita don auna bugun zuciyar mutum a ainihin lokacin. Ana amfani da shi musamman a fagen wasanni don saka idanu kan aiki da ƙoƙari yayin horo ko kuma kullun. Masu lura da bugun zuciya sun shahara tsakanin 'yan wasa, amma kuma su ne na'ura mai mahimmanci a cibiyoyin kiwon lafiya don sanin bugun zuciya, wato, bugun zuciya ko bugun minti daya:

  • Farashin Bpm: yana nuna bugun zuciya, wato bugun minti daya.

A kowane hali, da Na'urori masu auna firikwensin suna ɗaukar bambancin ƙarar jini tare da kowace bugun zuciya. Ana fassara wannan bambancin zuwa siginar lantarki wanda aka sarrafa don samun bugun zuciya. Wasu na'urori masu auna bugun zuciya kuma sun haɗa da haɓakawa da da'irar soke amo don inganta daidaiton karatun.

Menene oximeter? Ta yaya yake aiki?

Un oximeter kayan aikin likita ne ko na wasanni wanda ake amfani dashi don auna yawan iskar oxygen a cikin jini. Wannan na'urar tana ba da bayanan jikewar oxygen na jini tare da ƙima daga 0 zuwa 100%. Ya zama ruwan dare ga na'ura iri ɗaya kuma ta haɗa da zaɓin bugun zuciya, yana nuna duk bayanan sa ido ko yin rikodi.

Bayanai cewa ma'aunin oximeter es:

  • % SpO2: yana nufin adadin yawan iskar oxygen a cikin jini.

Ana sanya Oximeter kamar manne ta yadda zai dace da yanayin halittar yatsanmu ko kuma a sanya shi a wasu wurare a jiki, kamar yadda yake a yanayin bugun zuciya, kamar wuyan hannu. ana iya gani a cikin mundayen ayyuka da yawa.,

Game da aikin su, oximeters suna fitarwa daban-daban haske raƙuman ruwa wanda ke ratsa fata. Abin da ke aiki akan wannan haske shine haemoglobin, kwayoyin jini da ke da alhakin jigilar iskar oxygen, yana ɗaukar haske daban-daban dangane da matakin oxygen da yake ɗauka. Cikakken tsari shine kamar haka:

  1. haske watsi- Oximeter yana fitar da tsawon tsawon haske guda biyu, daya ja da kuma infrared daya, wanda ke wucewa ta cikin yatsan da aka sanya akan na'urar.
  2. Haske haske: Haemoglobin, kwayar halitta a cikin jajayen ƙwayoyin jini mai ɗaukar iskar oxygen, yana ɗaukar nau'i daban-daban na waɗannan fitilu. Haemoglobin da ke ɗauke da iskar oxygen (oxyhemoglobin) da haemoglobin marasa oxygen (deoxyhemoglobin) suna da kaddarorin ɗaukar haske daban-daban.
  3. Gane haske: Na'urar ganowa a gefe guda na fidda haske yana tattara hasken da ya ratsa ta cikin yatsa.
  4. Lissafi na iskar oxygen- Na'urar tana ƙididdige rabon oxyhemoglobin zuwa jimlar adadin haemoglobin da ke akwai, duka oxyhemoglobin da deoxyhemoglobin. An gabatar da wannan kaso a matsayin yawan adadin iskar oxygen jikewa (% SpO2). Ana yin wannan ta hanyar na'ura mai sarrafa kwamfuta mai ikon fassara waɗannan siginar lantarki don fassara su zuwa ƙimar lambobi.

Menene MAX30102 module?

Na'urar haska bayanai MAX30102, Maxim Integrated ya samar, na'ura ce mai haɗaka wacce ke haɗa ayyukan na'urar duba bugun zuciya da oximeter. Ana iya amfani da wannan firikwensin cikin sauƙi tare da microcontroller kamar Arduino. MAX30102 yana cikin jerin MAX3010x na firikwensin gani daga wannan kamfani.

Ayyukansa sun dogara ne akan bambancin shawar haske ta hanyar jini, dangane da nasa oxygen jikewa matakin, da bugun jini kamar yadda na ambata a sassan biyu da suka gabata. Wannan firikwensin yana sanye da LEDs guda biyu, ja ɗaya da infrared ɗaya. Ana sanya shi a kan fata, kamar a kan yatsa ko wuyan hannu, kuma yana gano haske mai haske don sanin matakin iskar oxygen.

Ana aiwatar da sadarwa tare da MAX30102 ta hanyar bas I2C, Yin sauƙin haɗawa zuwa microcontroller kamar Arduino. MAX30102 yana buƙatar samar da wutar lantarki sau biyu: 1.8V don dabaru da 3.3V don LEDs. Yawanci ana samuwa akan nau'ikan 5V waɗanda suka riga sun haɗa da madaidaicin matakin da ya dace.

MAX30102 firikwensin firikwensin da ake amfani da shi a cikin gida ko ayyukan wasanni, wato, ƙila ba shi da isasshen abin dogaro da hankali don amfani da ƙwararrun likita.

La na gani bugun jini oximetry Hanya ce mara lalacewa don ƙayyade yawan adadin iskar oxygen a cikin jini. Kamar yadda na ambata a baya, ya dogara ne akan bambanci a cikin matakan ɗaukar haske na haemoglobin (Hb) da oxyhemoglobin (HbO2) don maɓalli daban-daban. Jinin da ke cikin iskar oxygen yana ɗaukar ƙarin hasken infrared, yayin da ƙarancin jini a cikin iskar oxygen yana ɗaukar haske mai ja. A cikin sassan jiki inda fatar jiki ta isa bakin ciki kuma akwai tasoshin jini a ƙarƙashinsa, ana iya amfani da wannan bambanci don sanin matakin iskar oxygen.

Siffofin tsarin MAX30102 tare da bugun jini da firikwensin oxygen na jini

MAX30102 ya haɗa da:

  • 2x LEDs, ja ɗaya (660nm) da infrared ɗaya (880nm)
  • 2x photodiodes don auna haske mai haske
  • 18-bit ADC Converter tare da samfur kudi na 50 zuwa 3200 samfurori a sakan daya.
  • Bugu da ƙari, yana da na'urorin lantarki masu mahimmanci don haɓaka sigina da tacewa, sokewar hasken yanayi, ƙin mitoci na 50-60Hz (hasken wucin gadi) da diyya na zafin jiki.

Amfanin module iya kai har zuwa 50mA yayin aunawa, kodayake ana iya daidaita ƙarfin ta cikin tsari, tare da ƙarancin yanayin wutar lantarki na 0.7µA yayin aunawa.

Farashi da inda zan saya

Na'urori masu auna firikwensin MAX30102 don auna bugun jini da iskar oxygen na jini suna da araha. Waɗannan samfuran za su iya zama naku don 'yan Yuro kaɗan akan shafuka kamar eBay, Aliexpress ko Amazon. Za ku ga cewa akwai nau'o'i da yawa, kuma muna ba da shawarar masu zuwa:

Haɗi da misali tare da Arduino

Arduino IDE, nau'ikan bayanai, shirye-shirye

Don gwada MAX30102 tare da Arduino, abu na farko shine haɗa wannan ƙirar zuwa allon Arduino. Wannan haɗi yana da sauƙi, kawai ku haɗa waɗannan abubuwan:

  1. Vcc na module dole ne a haɗa shi zuwa fitowar 5V na allon Arduino.
  2. Dole ne a haɗa GND na module ɗin zuwa soket na GND na allon Arduino.
  3. SCL na module ɗin dole ne a haɗa shi zuwa ɗaya daga cikin abubuwan analog na allon Arduino, kamar A5.
  4. SDA na module ɗin dole ne a haɗa shi zuwa wani na'urorin analog na allon Arduino, kamar A4.

Da zarar an kafa haɗin da ya dace tsakanin hukumar MAX30102 da hukumar Arduino, abu na gaba zai kasance a rubuta lambar tushe ko zane don yin aiki kuma fara karɓar bayanan biometric daga mutumin da ake tambaya. Wannan yana da sauƙi kamar rubuta lambar a ciki IDE na Arduino da kuma tsara allon:

Hakanan kuna buƙatar shigar da ɗakin karatu a cikin Arduino IDE don amfani da shi. SparkFun ne ya haɓaka ɗakin karatu, kuma ana samunsa a 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);
  }
}

Tabbas, zaku iya canza lambar gwargwadon bukatunku, wannan misali ne kawai...


Kasance na farko don yin sharhi

Bar tsokaci

Your email address ba za a buga. Bukata filayen suna alama da *

*

*

  1. Wanda ke da alhakin bayanan: Miguel Ángel Gatón
  2. Manufar bayanan: Sarrafa SPAM, sarrafa sharhi.
  3. Halacci: Yarda da yarda
  4. Sadarwar bayanan: Ba za a sanar da wasu bayanan ga wasu kamfanoni ba sai ta hanyar wajibcin doka.
  5. Ajiye bayanai: Bayanin yanar gizo wanda Occentus Networks (EU) suka dauki nauyi
  6. Hakkoki: A kowane lokaci zaka iyakance, dawo da share bayanan ka.