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

MAX30102

За все это время мы показали большое количество Электронные компоненты совместим с платы, такие как Arduino или совместимые, а также для многих других работ по изготовлению или изготовлению своими руками. Сейчас мы познакомим вас с модулем MAX30102, который включает в себя датчик для измерения пульса и кислорода в крови.

Таким образом, вы также можете создавать носимые устройства, такие как самодельные браслеты для занятий спортом или аксессуары для занятий спортом. следить за состоянием здоровья человека, предоставляющего биометрические данные или телеметрию указанного человека благодаря интеграции в это устройство пульсометра и оксиметра...

Что такое пульсометр? Как это работает?

Un датчик пульса или пульсометр Это электронное устройство, используемое для измерения частоты сердечных сокращений человека в режиме реального времени. В основном он используется в спортивной сфере для мониторинга производительности и усилий во время тренировок или ежедневно. Пульсометры популярны среди спортсменов, но они также являются фундаментальным устройством в медицинских центрах, позволяющим узнать частоту сердечных сокращений, то есть частоту сердечных сокращений или ударов в минуту:

  • PR ударов в минуту: показывает частоту сердечных сокращений, то есть количество ударов в минуту.

Во всех случаях Датчики фиксируют изменение объема крови при каждом ударе сердца.. Это изменение преобразуется в электрический сигнал, который обрабатывается для определения частоты сердечных сокращений. Некоторые мониторы сердечного ритма также включают схемы усиления и шумоподавления для повышения точности показаний.

Что такое оксиметр? Как это работает?

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

Los Datos Que измеряет оксиметр это:

  • % 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 нм)
  • 2 фотодиода для измерения отраженного света
  • 18-битный АЦП преобразователь с частотой дискретизации от 50 до 3200 выборок в секунду.
  • Кроме того, он имеет необходимую электронику для усиления и фильтрации сигнала, подавления внешней засветки, подавления частот 50-60Гц (искусственный свет) и температурной компенсации.

Потребление модуля может достигать до 50 мА во время измерения, хотя интенсивность можно регулировать программно, в режиме низкого энергопотребления 0.7 мкА во время измерений.

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

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

Подключения и пример с Arduino

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

Чтобы протестировать MAX30102 с Arduino, первым делом необходимо подключить этот модуль к плате Arduino. Этот подключение очень простое, вам просто нужно подключить следующее:

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