MAX30102: пульсометр і модуль оксиметра для Arduino

MAX30102

За весь цей час ми показали велику кількість Електронні компоненти сумісний з плати, такі як Arduino або сумісні, а також для багатьох інших майстрів або робіт своїми руками. Зараз ми познайомимо вас з модулем 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 В для логіки та 3.3 В для світлодіодів. Зазвичай зустрічається на модулях 5 В, які вже містять необхідну відповідність рівня.

MAX30102 — це датчик, який використовується в домашніх або спортивних проектах, тобто він може не мати достатньої надійності та чутливості для професійного медичного використання.

La оптична пульсоксиметрія Це неінвазивний метод визначення відсотка насичення крові киснем. Як я вже згадував раніше, він заснований на різниці в коефіцієнтах поглинання світла гемоглобіну (Hb) і оксигемоглобіну (HbO2) для різних довжин хвиль. Кров, багата киснем, поглинає більше інфрачервоного світла, тоді як кров з низьким вмістом кисню поглинає більше червоного світла. На ділянках тіла, де шкіра досить тонка і під нею є кровоносні судини, за цією різницею можна визначити ступінь насичення киснем.

Особливості модуля MAX30102 з датчиком пульсу і кисню в крові

MAX30102 включає:

  • 2 світлодіоди, один червоний (660 нм) і один інфрачервоний (880 нм)
  • 2x фотодіоди для вимірювання відбитого світла
  • 18-розрядний АЦП з частотою дискретизації від 50 до 3200 вибірок в секунду.
  • Крім того, він має необхідну електроніку для посилення та фільтрації сигналу, придушення навколишнього світла, відхилення частот 50-60 Гц (штучне освітлення) і температурної компенсації.

Споживання модуля може досягати до 50 мА під час вимірювання, хоча інтенсивність можна регулювати програмно, з режимом низької потужності 0.7 мкА під час вимірювань.

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

Датчики MAX30102 для вимірювання пульсу та кисню в крові вони досить дешеві. Ці модулі можуть бути вашими всього за кілька євро на таких сайтах, як eBay, Aliexpress або Amazon. Ви побачите, що існує кілька типів, і ми рекомендуємо наступне:

Підключення та приклад з Arduino

Arduino IDE, типи даних, програмування

Щоб перевірити MAX30102 за допомогою Arduino, перше, що потрібно, це підключити цей модуль до плати Arduino. Це підключення дуже просте, вам просто потрібно підключити наступне:

  1. Vcc модуля необхідно підключити до виходу 5 В плати 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. Права: Ви можете будь-коли обмежити, відновити та видалити свою інформацію.