MAX30102: moduł czujnika tętna i pulsoksymetru dla Arduino

MAX30102

Przez cały ten czas pokazaliśmy dużą liczbę Części elektroniczne kompatybilny z płyty takie jak Arduino lub kompatybilne, a także do wielu innych prac związanych z tworzeniem lub majsterkowaniem. Teraz przedstawimy Ci moduł MAX30102, który zawiera czujnik do pomiaru tętna i poziomu tlenu we krwi.

W ten sposób możesz także tworzyć przedmioty do noszenia, takie jak samodzielnie wykonane bransoletki sportowe lub sprzęt do nich monitorować stan zdrowia osoby, udostępnienie danych biometrycznych lub telemetrycznych tej osoby dzięki integracji w tym urządzeniu pulsometru i pulsoksymetru...

Co to jest czujnik tętna? Jak to działa?

Un czujnik tętna lub czujnik tętna Jest to urządzenie elektroniczne służące do pomiaru tętna człowieka w czasie rzeczywistym. Stosowany jest głównie w sporcie do monitorowania wydajności i wysiłku podczas treningu lub na co dzień. Pulsometry są popularne wśród sportowców, ale są także podstawowym urządzeniem w ośrodkach medycznych, pozwalającym poznać tętno, czyli tętno lub liczbę uderzeń na minutę:

  • PR Bpm: pokazuje tętno, czyli liczbę uderzeń na minutę.

We wszystkich przypadkach Czujniki rejestrują zmianę objętości krwi przy każdym uderzeniu serca. Ta zmiana jest przekładana na sygnał elektryczny, który jest przetwarzany w celu uzyskania tętna. Niektóre czujniki tętna zawierają również obwody wzmacniające i eliminujące szumy, aby poprawić dokładność odczytów.

Co to jest pulsoksymetr? Jak to działa?

Un Pulsoksymetr jest urządzeniem medycznym lub sportowym który służy do pomiaru nasycenia krwi tlenem. Urządzenie to oferuje dane dotyczące nasycenia krwi tlenem o wartościach od 0 do 100%. Często to samo urządzenie zawiera również opcję pomiaru tętna, wskazującą wszystkie informacje do monitorowania lub rejestrowania.

Dane, które mierzy pulsoksymetrem jest:

  • %SpO2: odnosi się do procentu nasycenia tlenem krwi.

Pulsoksymetr umieszcza się na zasadzie cęgów w taki sposób, aby dopasować się do morfologii naszego palca lub można go także umieścić w innym miejscu ciała, jak ma to miejsce w przypadku pulsometru, np. nadgarstka, jak np. można zobaczyć w wielu bransoletkach aktywności. ,

Jeśli chodzi o działanie, pulsoksymetry emitują inną energię długości fal świetlnych które przechodzą przez skórę. Na to światło oddziałuje hemoglobina, cząsteczka krwi odpowiedzialna za transport tlenu, pochłaniająca różną ilość światła w zależności od poziomu transportowanego przez nią tlenu. Szczegółowy proces wygląda następująco:

  1. emisja światła- Pulsoksymetr emituje światło o dwóch długościach fal, czerwoną i podczerwoną, które przechodzi przez palec umieszczony na urządzeniu.
  2. Absorpcja światła: Hemoglobina, cząsteczka znajdująca się w czerwonych krwinkach przenosząca tlen, pochłania różne ilości tego światła. Hemoglobina obciążona tlenem (oksyhemoglobina) i hemoglobina beztlenowa (deoksyhemoglobina) mają różne właściwości pochłaniania światła.
  3. detekcja światła: Detektor po przeciwnej stronie emitera światła zbiera światło, które przeszło przez palec.
  4. Obliczanie nasycenia tlenem- Urządzenie oblicza stosunek oksyhemoglobiny do całkowitej ilości obecnej hemoglobiny, zarówno oksyhemoglobiny, jak i deoksyhemoglobiny. Proporcję tę przedstawia się jako procent nasycenia krwi tlenem (%SpO2). Odbywa się to za pośrednictwem procesora zdolnego do interpretacji tych sygnałów elektrycznych i przełożenia ich na wartość liczbową.

Co to jest moduł MAX30102?

Czujnik MAX30102, wyprodukowany przez Maxim Integrated, to zintegrowane urządzenie, które łączy w sobie funkcjonalność czujnika tętna i pulsoksymetru. Czujnik ten można łatwo zastosować z mikrokontrolerem takim jak Arduino. MAX30102 należy do serii czujników optycznych MAX3010x tej firmy.

Jego działanie opiera się na zmienności absorpcji światła przez krew, w zależności od jej natężenia poziom nasycenia tlenem i puls jak wspomniałem w dwóch poprzednich sekcjach. Czujnik ten jest wyposażony w dwie diody LED, jedną czerwoną i jedną podczerwoną. Umieszcza się go na skórze, na przykład na palcu lub nadgarstku, i wykrywa odbite światło, aby określić stopień nasycenia tlenem.

Następuje komunikacja z MAX30102 poprzez magistralę I2C, co ułatwia podłączenie do mikrokontrolera, takiego jak Arduino. MAX30102 potrzebuje podwójnego zasilania: 1.8 V dla logiki i 3.3 V dla diod LED. Zwykle spotykane w modułach 5 V, które zawierają już niezbędne dopasowanie poziomu.

MAX30102 to czujnik stosowany w projektach domowych lub sportowych, co oznacza, że ​​może nie mieć wystarczającej niezawodności i czułości do profesjonalnych zastosowań medycznych.

La Pulsoksymetria optyczna Jest to nieinwazyjna metoda oznaczania procentowego nasycenia krwi tlenem. Jak wspomniałem wcześniej, opiera się on na różnicy współczynników absorpcji światła przez hemoglobinę (Hb) i oksyhemoglobinę (HbO2) dla różnych długości fal. Krew bogata w tlen pochłania więcej światła podczerwonego, podczas gdy krew o niskiej zawartości tlenu pochłania więcej światła czerwonego. W obszarach ciała, w których skóra jest wystarczająco cienka i znajdują się pod nią naczynia krwionośne, różnicę tę można wykorzystać do określenia stopnia nasycenia tlenem.

Cechy modułu MAX30102 z czujnikiem tętna i natlenienia krwi

MAX30102 zawiera:

  • 2x diody LED, jedna czerwona (660nm) i jedna podczerwień (880nm)
  • 2x fotodiody do pomiaru światła odbitego
  • 18-bitowy przetwornik ADC o częstotliwości próbkowania od 50 do 3200 próbek na sekundę.
  • Ponadto posiada niezbędną elektronikę do wzmacniania i filtrowania sygnału, eliminacji światła otoczenia, tłumienia częstotliwości 50-60 Hz (sztuczne światło) i kompensacji temperatury.

Zużycie modułu może osiągnąć nawet 50 mA podczas pomiaru, chociaż natężenie można regulować programowo, w trybie niskiego poboru mocy 0.7 µA podczas pomiarów.

Precio y dónde compressar

Czujniki MAX30102 do pomiaru tętna i poziomu tlenu we krwi są dość tanie. Moduły te mogą być Twoje za zaledwie kilka euro w serwisach takich jak eBay, Aliexpress czy Amazon. Zobaczysz, że istnieje kilka typów i zalecamy następujące:

Połączenia i przykład z Arduino

Arduino IDE, typy danych, programowanie

Aby przetestować MAX30102 z Arduino, pierwszą rzeczą jest podłączenie tego modułu do płytki Arduino. Ten połączenie jest bardzo proste, wystarczy podłączyć:

  1. Vcc modułu należy podłączyć do wyjścia 5V płytki Arduino.
  2. GND modułu należy podłączyć do gniazda GND płytki Arduino.
  3. SCL modułu należy podłączyć do jednego z wejść analogowych płytki Arduino, np. A5.
  4. SDA modułu należy podłączyć do innego z wejść analogowych płytki Arduino, np. A4.

Po ustanowieniu odpowiednich połączeń między płytką MAX30102 a płytką Arduino następną rzeczą będzie napisanie kodu źródłowego lub szkicu, aby działał i rozpoczęcie otrzymywania danych biometrycznych od danej osoby. Jest to tak proste, jak wpisanie następującego kodu IDE Arduino i zaprogramuj płytkę:

Aby z niej korzystać, musisz także zainstalować bibliotekę w Arduino IDE. Biblioteka została opracowana przez firmę SparkFun i jest dostępna pod adresem 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);
  }
}

Oczywiście możesz zmodyfikować kod według swoich potrzeb, to tylko przykład...


Bądź pierwszym który skomentuje

Zostaw swój komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

*

*

  1. Odpowiedzialny za dane: Miguel Ángel Gatón
  2. Cel danych: kontrola spamu, zarządzanie komentarzami.
  3. Legitymacja: Twoja zgoda
  4. Przekazywanie danych: Dane nie będą przekazywane stronom trzecim, z wyjątkiem obowiązku prawnego.
  5. Przechowywanie danych: baza danych hostowana przez Occentus Networks (UE)
  6. Prawa: w dowolnym momencie możesz ograniczyć, odzyskać i usunąć swoje dane.