MAX30102: монитор за пулс и оксиметър за Arduino

MAX30102

През цялото това време показахме голям брой Електронни компоненти съвместим с платки като Arduino или съвместими, както и за много други работни места като майстори или DIY. Сега ще ви запознаем с модула MAX30102, който включва сензор за измерване на пулса и кислорода в кръвта.

По този начин можете също да създавате носими, като например собственоръчно изработени гривни за активност или хардуер за следете здравословното състояние на лице, предоставяйки биометрични данни или телеметрия на това лице благодарение на интегрирането на монитора за сърдечен ритъм и оксиметъра в това устройство...

Какво е пулсомер? Как работи?

Un сензор за пулс или пулсомер Това е електронно устройство, използвано за измерване на сърдечната честота на човек в реално време. Използва се главно в спортната сфера за наблюдение на представянето и усилията по време на тренировка или ежедневно. Мониторите за сърдечен ритъм са популярни сред спортистите, но те също са основно устройство в медицинските центрове за познаване на сърдечната честота, тоест сърдечната честота или ударите в минута:

  • PR Bpm: показва сърдечната честота, тоест ударите в минута.

Във всички случаи, Сензорите улавят промените в обема на кръвта с всеки удар на сърцето. Тази вариация се преобразува в електрически сигнал, който се обработва, за да се получи сърдечната честота. Някои монитори за сърдечен ритъм също включват схеми за усилване и шумопотискане за подобряване на точността на показанията.

Какво е оксиметър? Как работи?

Un оксиметърът е медицинско или спортно устройство който се използва за измерване на насищането с кислород в кръвта. Това устройство предлага данни за насищане на кръвта с кислород със стойности от 0 до 100%. Обичайно е същото устройство да включва и опция за сърдечен ритъм, показваща цялата информация за наблюдение или запис.

Данните, които измерва оксиметър е:

  • %SpO2: отнася се до процента на насищане с кислород в кръвта.

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

По отношение на работата си оксиметрите излъчват различни дължини на светлинните вълни които преминават през кожата. Това, което действа върху тази светлина, е хемоглобинът, кръвна молекула, отговорна за транспортирането на кислород, абсорбираща различни количества светлина в зависимост от нивото на кислорода, който транспортира. Подробният процес е както следва:

  1. излъчване на светлина- Оксиметърът излъчва две дължини на вълната на светлината, една червена и една инфрачервена, които преминават през пръста, поставен върху устройството.
  2. Поглъщане на светлина: Хемоглобинът, молекула в червените кръвни клетки, която пренася кислород, абсорбира различни количества от тези светлини. Натовареният с кислород хемоглобин (оксихемоглобин) и свободният от кислород хемоглобин (дезоксихемоглобин) имат различни свойства на абсорбция на светлина.
  3. Откриване на светлина: Детектор от противоположната страна на излъчвателя на светлина събира светлината, преминала през пръста.
  4. Изчисляване на насищането с кислород- Устройството изчислява съотношението на оксихемоглобина към общото количество наличен хемоглобин, както оксихемоглобин, така и дезоксихемоглобин. Тази пропорция е представена като процент на насищане на кръвта с кислород (%SpO2). Това се прави чрез процесор, способен да интерпретира тези електрически сигнали, за да ги преведе в числена стойност.

Какво представлява модулът MAX30102?

Сензорът MAX30102, произведен от Maxim Integrated, е интегрирано устройство, което съчетава функциите на пулсомер и оксиметър. Този сензор може лесно да се използва с микроконтролер като Arduino. MAX30102 принадлежи към серията оптични сензори MAX3010x на тази фирма.

Неговото действие се основава на промяната на абсорбцията на светлина от кръвта в зависимост от нейната ниво на насищане с кислород и пулс както споменах в предишните два раздела. Този сензор е оборудван с два светодиода, един червен и един инфрачервен. Поставя се върху кожата, например на пръста или китката, и отчита отразената светлина, за да определи степента на насищане с кислород.

Осъществява се комуникация с MAX30102 чрез I2C шина, което улеснява свързването към микроконтролер като Arduino. MAX30102 се нуждае от двойно захранване: 1.8 V за логиката и 3.3 V за светодиодите. Обикновено се намира на 5V модули, които вече включват необходимото ниво на съответствие.

MAX30102 е сензор, използван в домашни или спортни проекти, тоест може да няма достатъчна надеждност и чувствителност за професионална медицинска употреба.

La оптична пулсова оксиметрия Това е неинвазивен метод за определяне на процента на насищане на кръвта с кислород. Както споменах преди, той се основава на разликата в коефициентите на поглъщане на светлина на хемоглобина (Hb) и оксихемоглобина (HbO2) за различни дължини на вълната. Кръвта, богата на кислород, абсорбира повече инфрачервена светлина, докато кръвта с ниско съдържание на кислород абсорбира повече червена светлина. В областите на тялото, където кожата е достатъчно тънка и отдолу има кръвоносни съдове, тази разлика може да се използва за определяне на степента на насищане с кислород.

Характеристики на модул MAX30102 с пулс и сензор за кислород в кръвта

MAX30102 включва:

  • 2x LED, един червен (660nm) и един инфрачервен (880nm)
  • 2x фотодиода за измерване на отразена светлина
  • 18-битов ADC преобразувател с честота на дискретизация от 50 до 3200 проби в секунда.
  • Освен това има необходимата електроника за усилване и филтриране на сигнала, премахване на околната светлина, отхвърляне на честоти от 50-60Hz (изкуствена светлина) и температурна компенсация.

Модулна консумация може да достигне до 50mA по време на измерване, въпреки че интензитетът може да се регулира програмно, с режим на ниска мощност от 0.7µA по време на измервания.

Цена и къде да купя

Сензорите MAX30102 за измерване на пулса и кислорода в кръвта те са доста евтини. Тези модули могат да бъдат ваши само за няколко евро в сайтове като eBay, Aliexpress или Amazon. Ще видите, че има няколко вида и ние препоръчваме следното:

Връзки и пример с Arduino

Arduino IDE, типове данни, програмиране

За да тествате MAX30102 с Arduino, първото нещо е да свържете този модул към платката Arduino. Това връзката е много проста, просто трябва да свържете следното:

  1. Vcc на модула трябва да бъде свързан към 5V изхода на платката Arduino.
  2. GND на модула трябва да бъде свързан към GND гнездото на платката Arduino.
  3. SCL на модула трябва да бъде свързан към един от аналоговите входове на платката Arduino, като A5.
  4. SDA на модула трябва да бъде свързан към друг от аналоговите входове на платката Arduino, като A4.

След като бъдат установени подходящите връзки между платката MAX30102 и платката Arduino, следващото нещо ще бъде да напишете изходен код или скица, за да работи и да започнете да получавате биометрични данни от въпросното лице. Това е толкова лесно, колкото да напишете следния код Arduino IDE и програмирайте платката:

Трябва също да инсталирате библиотека в Arduino IDE, за да я използвате. Библиотеката е разработена от SparkFun и е достъпна на 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. Съхранение на данни: База данни, хоствана от Occentus Networks (ЕС)
  6. Права: По всяко време можете да ограничите, възстановите и изтриете информацията си.