МАКС30102: монитор откуцаја срца и модул оксиметра за Ардуино

МАКСКСНУМКС

За све ово време показали смо велики број Електронске компоненте Компатибилно са плоче као што су Ардуино или компатибилне, као и за многе друге послове произвођача или уради сам. Сада ћемо вас упознати са модулом МАКСКСНУМКС, који укључује сензор за мерење пулса и кисеоника у крви.

На овај начин можете креирати и носиве предмете као што су наруквице за активности које сте сами направили или хардвер за пратити здравствено стање особе, пружајући биометријске податке или телеметрију поменуте особе захваљујући интеграцији монитора откуцаја срца и оксиметра у овај уређај...

Шта је монитор откуцаја срца? Како то функционише?

Un сензор пулса или монитор откуцаја срца То је електронски уређај који се користи за мерење пулса особе у реалном времену. Углавном се користи у спортском пољу за праћење перформанси и напора током тренинга или на дневној бази. Монитори откуцаја срца су популарни међу спортистима, али су такође и основни уређај у медицинским центрима за откривање откуцаја срца, односно откуцаја срца или откуцаја у минути:

  • ПР Бпм: приказује број откуцаја срца, односно откуцаје у минути.

У свим случајевима, Сензори хватају варијације у запремини крви са сваким откуцајем срца. Ова варијација се преводи у електрични сигнал који се обрађује да би се добио пулс. Неки монитори откуцаја срца такође укључују кола за појачавање и поништавање буке како би се побољшала тачност очитавања.

Шта је оксиметар? Како то функционише?

Un оксиметар је медицински или спортски уређај који се користи за мерење засићености кисеоником у крви. Овај уређај нуди податке о засићености крви кисеоником са вредностима од 0 до 100%. Уобичајено је да исти уређај укључује и опцију откуцаја срца, што указује на све информације за праћење или снимање.

Лос датос куе мери оксиметар је:

  • %СпО2: односи се на проценат засићења кисеоником у крви.

Оксиметар је постављен као стезаљка на начин да је прилагођен морфологији нашег прста или се може поставити и на друга места на телу, као што је случај са монитором откуцаја срца, као што је ручни зглоб. може се видети на многим наруквицама за активности.,

Што се тиче њиховог рада, оксиметри емитују другачије таласне дужине светлости који пролазе кроз кожу. Оно што делује на ово светло је хемоглобин, молекул крви одговоран за транспорт кисеоника, апсорбујући различите количине светлости у зависности од нивоа кисеоника који преноси. Детаљан процес је следећи:

  1. емисија светлости- Оксиметар емитује две таласне дужине светлости, једну црвену и једну инфрацрвену, које пролазе кроз прст постављен на апарат.
  2. Апсорпција светлости: Хемоглобин, молекул у црвеним крвним зрнцима који преноси кисеоник, апсорбује различите количине ових светла. Хемоглобин оптерећен кисеоником (оксихемоглобин) и хемоглобин без кисеоника (деоксихемоглобин) имају различита својства апсорпције светлости.
  3. Детекција светлости: Детектор на супротној страни емитера светлости прикупља светлост која је прошла кроз прст.
  4. Прорачун засићења кисеоником- Уређај израчунава однос оксихемоглобина према укупној количини присутног хемоглобина, и оксихемоглобина и деоксихемоглобина. Ова пропорција је представљена као проценат засићења крви кисеоником (%СпО2). Ово се ради преко процесора способног да тумачи ове електричне сигнале да их преведе у нумеричку вредност.

Шта је МАКС30102 модул?

Сензор МАКС30102, произвођача Маким Интегратед, је интегрисани уређај који комбинује функције монитора откуцаја срца и оксиметра. Овај сензор се лако може користити са микроконтролером као што је Ардуино. МАКС30102 припада серији МАКС3010к оптичких сензора ове фирме.

Његов рад се заснива на варијацији апсорпције светлости у крви, у зависности од тога ниво засићености кисеоником и пулс као што сам споменуо у претходна два одељка. Овај сензор је опремљен са две ЛЕД диоде, једном црвеном и једном инфрацрвеном. Поставља се на кожу, на пример на прст или зглоб, и детектује рефлектовану светлост да би одредио степен засићености кисеоником.

Комуникација са МАКС30102 се обавља преко И2Ц магистрале, што олакшава повезивање са микроконтролером као што је Ардуино. МАКС30102 треба двоструко напајање: 1.8 В за логику и 3.3 В за ЛЕД диоде. Обично се налази на 5В модулима који већ укључују неопходно усклађивање нивоа.

МАКС30102 је сензор који се користи у кућним или спортским пројектима, односно можда нема довољно поузданости и осетљивости за професионалну медицинску употребу.

La оптичка пулсна оксиметрија То је неинвазивна метода за одређивање процента засићености кисеоником у крви. Као што сам раније поменуо, заснива се на разлици у коефицијентима апсорпције светлости хемоглобина (Хб) и оксихемоглобина (ХбО2) за различите таласне дужине. Крв богата кисеоником апсорбује више инфрацрвене светлости, док крв са мало кисеоника апсорбује више црвене светлости. У деловима тела где је кожа довољно танка, а испод се налазе крвни судови, ова разлика се може користити за одређивање степена засићености кисеоником.

Карактеристике МАКС30102 модула са сензором за пулс и кисеоник у крви

МАКС30102 укључује:

  • 2к ЛЕД диода, једна црвена (660нм) и једна инфрацрвена (880нм)
  • 2к фотодиоде за мерење рефлектоване светлости
  • 18-битни АДЦ конвертор са брзином узорковања од 50 до 3200 узорака у секунди.
  • Поред тога, поседује неопходну електронику за појачавање и филтрирање сигнала, поништавање амбијенталног светла, одбијање фреквенција од 50-60Хз (вештачко светло) и температурну компензацију.

Потрошња модула може досећи до 50мА током мерења, иако се интензитет може програмски подешавати, са режимом мале снаге од 0.7µА током мерења.

Цена и где купити

МАКС30102 сензори за мерење пулса и кисеоника у крви прилично су јефтини. Ови модули могу бити ваши за само неколико евра на сајтовима као што су еБаи, Алиекпресс или Амазон. Видећете да постоји неколико типова, а ми препоручујемо следеће:

Везе и пример са Ардуином

Ардуино ИДЕ, типови података, програмирање

Да бисте тестирали МАКС30102 са Ардуином, прва ствар је да повежете овај модул на Ардуино плочу. Ово веза је врло једноставна, само треба да повежете следеће:

  1. Вцц модула мора бити повезан на 5В излаз Ардуино плоче.
  2. ГНД модула мора бити повезан на ГНД утичницу Ардуино плоче.
  3. СЦЛ модула мора бити повезан на један од аналогних улаза Ардуино плоче, као што је А5.
  4. СДА модула мора бити повезан на други аналогни улаз Ардуино плоче, као што је А4.

Када се успоставе одговарајуће везе између МАКС30102 плоче и Ардуино плоче, следећа ствар ће бити да напишете изворни код или скицу да би то функционисало и да почне да прима биометријске податке од особе у питању. Ово је лако као писање следећег кода Ардуино ИДЕ и програмирајте плочу:

Такође морате да инсталирате библиотеку у Ардуино ИДЕ да бисте је користили. Библиотеку је развио СпаркФун и доступна је на адреси 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);
  }
}

Наравно, можете модификовати код према вашим потребама, ово је само пример...


Будите први који ће коментарисати

Оставите свој коментар

Ваша емаил адреса неће бити објављена. Обавезна поља су означена са *

*

*

  1. За податке одговоран: Мигуел Ангел Гатон
  2. Сврха података: Контрола нежељене поште, управљање коментарима.
  3. Легитимација: Ваш пристанак
  4. Комуникација података: Подаци се неће преносити трећим лицима, осим по законској обавези.
  5. Похрана података: База података коју хостује Оццентус Нетворкс (ЕУ)
  6. Права: У било ком тренутку можете ограничити, опоравити и избрисати своје податке.