MAX30102: monitor i rrahjeve të zemrës dhe moduli i oksimetrit për Arduino

MAX30102

Gjatë gjithë kësaj kohe kemi treguar një numër të madh të Komponentët elektronikë i përputhshëm me bordet si Arduino ose të pajtueshme, si dhe për shumë punë të tjera krijuese ose DIY. Tani do t'ju prezantojmë me modulin MAX30102, i cili përfshin një sensor për të matur pulsin dhe oksigjenin në gjak.

Në këtë mënyrë, ju gjithashtu mund të krijoni pajisje për veshje, si byzylykë aktiviteti të bërë vetë ose pajisje për monitorojnë gjendjen shëndetësore të një personi, duke siguruar të dhëna biometrike ose telemetri të personit në fjalë falë integrimit të monitorit të rrahjeve të zemrës dhe oksimetrit në këtë pajisje...

Çfarë është një monitor i rrahjeve të zemrës? Si punon?

Un sensori i pulsit ose monitori i rrahjeve të zemrës Është një pajisje elektronike që përdoret për të matur rrahjet e zemrës së një personi në kohë reale. Përdoret kryesisht në fushën sportive për të monitoruar performancën dhe përpjekjet gjatë stërvitjes ose në baza ditore. Monitoruesit e rrahjeve të zemrës janë të popullarizuar në mesin e atletëve, por ato janë gjithashtu një pajisje themelore në qendrat mjekësore për të njohur rrahjet e zemrës, domethënë rrahjet e zemrës ose rrahjet në minutë:

  • PR Bpm: tregon rrahjet e zemrës, domethënë rrahjet në minutë.

Në të gjitha rastet, Sensorët kapin ndryshimet në vëllimin e gjakut me çdo rrahje zemre. Ky ndryshim përkthehet në një sinjal elektrik që përpunohet për të marrë ritmin e zemrës. Disa monitorë të rrahjeve të zemrës përfshijnë gjithashtu qarqe përforcuese dhe anuluese të zhurmës për të përmirësuar saktësinë e leximeve.

Çfarë është një oksimetër? Si punon?

Un oksimetri është një pajisje mjekësore ose sportive e cila përdoret për të matur ngopjen e oksigjenit në gjak. Kjo pajisje ofron të dhëna të ngopjes së oksigjenit në gjak me vlera nga 0 në 100%. Është e zakonshme që e njëjta pajisje të përfshijë gjithashtu opsionin e rrahjeve të zemrës, duke treguar të gjithë informacionin për monitorim ose regjistrim.

Que datos que mat një oksimetër është:

  • %SpO2: i referohet përqindjes së ngopjes me oksigjen në gjak.

Oksimetri vendoset si kapëse në mënyrë të tillë që të përshtatet me morfologjinë e gishtit tonë ose mund të vendoset edhe në vende të tjera të trupit, siç është rasti me monitorin e rrahjeve të zemrës, si për shembull kyçi i dorës, si p.sh. mund të shihet në shumë byzylykë aktivitetesh. ,

Sa i përket funksionimit të tyre, oksimetrat emetojnë ndryshe gjatësi vale të lehta që kalojnë nëpër lëkurë. Ajo që vepron në këtë dritë është hemoglobina, një molekulë gjaku përgjegjëse për transportin e oksigjenit, duke thithur sasi të ndryshme drite në varësi të nivelit të oksigjenit që transporton. Procesi i detajuar është si më poshtë:

  1. emetimi i dritës- Oksimetri lëshon dy gjatësi vale drite, një e kuqe dhe një infra të kuqe, të cilat kalojnë përmes gishtit të vendosur në pajisje.
  2. Thithja e dritës: Hemoglobina, një molekulë në qelizat e kuqe të gjakut që mbart oksigjen, thith sasi të ndryshme të këtyre dritave. Hemoglobina e ngarkuar me oksigjen (oksihemoglobina) dhe hemoglobina pa oksigjen (deoksihemoglobina) kanë veti të ndryshme thithëse të dritës.
  3. Zbulimi i dritës: Një detektor në anën e kundërt të emetuesit të dritës mbledh dritën që ka kaluar nëpër gisht.
  4. Llogaritja e ngopjes me oksigjen- Pajisja llogarit raportin e oksihemoglobinës me sasinë totale të hemoglobinës së pranishme, si oksihemoglobinën ashtu edhe deoksihemoglobinën. Ky raport paraqitet si përqindje e ngopjes së gjakut me oksigjen (%SpO2). Kjo bëhet përmes një procesori të aftë për të interpretuar këto sinjale elektrike për t'i përkthyer ato në një vlerë numerike.

Çfarë është moduli MAX30102?

Sensori MAX30102, prodhuar nga Maxim Integrated, është një pajisje e integruar që kombinon funksionalitetet e një monitori të rrahjeve të zemrës dhe një oksimetri. Ky sensor mund të përdoret lehtësisht me një mikrokontrollues si Arduino. MAX30102 i përket serisë MAX3010x të sensorëve optikë të kësaj firme.

Funksionimi i tij bazohet në ndryshimin e përthithjes së dritës nga gjaku, në varësi të tij niveli i ngopjes me oksigjen dhe pulsi siç e kam përmendur në dy pjesët e mëparshme. Ky sensor është i pajisur me dy LED, një të kuqe dhe një infra të kuqe. Vendoset në lëkurë, si për shembull në gisht ose kyç, dhe zbulon dritën e reflektuar për të përcaktuar shkallën e ngopjes me oksigjen.

Komunikimi me MAX30102 është kryer me autobus I2C, duke e bërë të lehtë lidhjen me një mikrokontrollues si Arduino. MAX30102 ka nevojë për një furnizim të dyfishtë me energji elektrike: 1.8V për logjikën dhe 3.3V për LED. Gjendet në mënyrë tipike në modulet 5V që tashmë përfshijnë përputhjen e nevojshme të nivelit.

MAX30102 është një sensor që përdoret në projekte në shtëpi ose sportive, domethënë mund të mos ketë besueshmëri dhe ndjeshmëri të mjaftueshme për përdorim mjekësor profesional.

La oksimetria e pulsit optik Është një metodë joinvazive për të përcaktuar përqindjen e ngopjes me oksigjen në gjak. Siç e përmenda më parë, bazohet në ndryshimin në koeficientët e përthithjes së dritës të hemoglobinës (Hb) dhe oksihemoglobinës (HbO2) për gjatësi vale të ndryshme. Gjaku i pasur me oksigjen thith më shumë dritë infra të kuqe, ndërsa gjaku me pak oksigjen thith më shumë dritë të kuqe. Në zonat e trupit ku lëkura është mjaft e hollë dhe ka enë gjaku poshtë, ky ndryshim mund të përdoret për të përcaktuar shkallën e ngopjes me oksigjen.

Karakteristikat e modulit MAX30102 me sensorin e pulsit dhe të oksigjenit në gjak

MAX30102 përfshin:

  • 2 x LED, një e kuqe (660 nm) dhe një infra e kuqe (880 nm)
  • 2 x fotodioda për të matur dritën e reflektuar
  • Konvertuesi ADC 18-bit me një shpejtësi kampionimi prej 50 deri në 3200 mostra për sekondë.
  • Përveç kësaj, ai ka elektronikën e nevojshme për amplifikimin dhe filtrimin e sinjalit, anulimin e dritës së ambientit, refuzimin e frekuencave 50-60Hz (dritë artificiale) dhe kompensimin e temperaturës.

Konsumi i modulit mund të arrijë deri në 50 mA gjatë matjes, megjithëse intensiteti mund të rregullohet në mënyrë programore, me një modalitet me fuqi të ulët prej 0.7 µA gjatë matjeve.

Cmimi dhe ku mund te blihet

Sensorët MAX30102 për të matur pulsin dhe oksigjenin në gjak ato janë mjaft të lira. Këto module mund të jenë tuajat për vetëm disa euro në sajte si eBay, Aliexpress ose Amazon. Do të shihni se ka disa lloje dhe ne rekomandojmë sa vijon:

Lidhjet dhe shembulli me Arduino

Arduino IDE, llojet e të dhënave, programimi

Për të testuar MAX30102 me Arduino, gjëja e parë është të lidhni këtë modul me tabelën Arduino. Kjo lidhja është shumë e thjeshtë, thjesht duhet të lidhni sa vijon:

  1. Vcc e modulit duhet të lidhet me daljen 5V të tabelës Arduino.
  2. GND i modulit duhet të lidhet me folenë GND të tabelës Arduino.
  3. SCL i modulit duhet të lidhet me një nga hyrjet analoge të tabelës Arduino, si A5.
  4. SDA e modulit duhet të lidhet me një tjetër nga hyrjet analoge të tabelës Arduino, si A4.

Pasi të jenë vendosur lidhjet e duhura midis tabelës MAX30102 dhe tabelës Arduino, gjëja tjetër do të jetë të shkruani një kod burimor ose skicë për ta bërë atë të funksionojë dhe të filloni marrjen e të dhënave biometrike nga personi në fjalë. Kjo është aq e lehtë sa të shkruani kodin e mëposhtëm Arduino IDE dhe programoni bordin:

Ju gjithashtu duhet të instaloni një bibliotekë në Arduino IDE për ta përdorur atë. Biblioteka është zhvilluar nga SparkFun dhe është në dispozicion në 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);
  }
}

Sigurisht, ju mund ta modifikoni kodin sipas nevojave tuaja, ky është vetëm një shembull...


Bëhu i pari që komenton

Lini komentin tuaj

Adresa juaj e emailit nuk do të publikohet. Fusha e kërkuar janë shënuar me *

*

*

  1. Përgjegjës për të dhënat: Miguel Ángel Gatón
  2. Qëllimi i të dhënave: Kontrolloni SPAM, menaxhimin e komenteve.
  3. Legjitimimi: Pëlqimi juaj
  4. Komunikimi i të dhënave: Të dhënat nuk do t'u komunikohen palëve të treta përveç me detyrim ligjor.
  5. Ruajtja e të dhënave: Baza e të dhënave e organizuar nga Occentus Networks (BE)
  6. Të drejtat: Në çdo kohë mund të kufizoni, rikuperoni dhe fshini informacionin tuaj.