MAX30102: monitor detak jantung dan modul oksimeter untuk Arduino

MAX30102

Selama ini, kami telah menunjukkan banyak sekali Komponen elektronik cocok dengan papan seperti Arduino atau yang kompatibel, serta untuk banyak pekerjaan pembuat atau DIY lainnya. Sekarang kami akan memperkenalkan Anda pada modul MAX30102, yang mencakup sensor untuk mengukur denyut nadi dan oksigen darah.

Dengan cara ini, Anda juga dapat membuat perangkat yang dapat dikenakan seperti gelang atau perangkat keras aktivitas buatan sendiri memantau status kesehatan seseorang, memberikan data biometrik atau telemetri orang tersebut berkat integrasi monitor detak jantung dan oksimeter di perangkat ini...

Apa itu monitor detak jantung? Bagaimana cara kerjanya?

Un sensor pulsa atau monitor detak jantung Ini adalah perangkat elektronik yang digunakan untuk mengukur detak jantung seseorang secara real time. Hal ini terutama digunakan di bidang olahraga untuk memantau kinerja dan upaya selama pelatihan atau setiap hari. Monitor detak jantung sangat populer di kalangan atlet, namun juga merupakan perangkat mendasar di pusat kesehatan untuk mengetahui detak jantung, yaitu detak jantung atau detak per menit:

  • PR Bpm: menunjukkan detak jantung, yaitu detak per menit.

Dalam semua kasus, Sensor menangkap variasi volume darah pada setiap detak jantung. Variasi ini diterjemahkan menjadi sinyal listrik yang diproses untuk mendapatkan detak jantung. Beberapa monitor detak jantung juga menyertakan sirkuit amplifikasi dan peredam bising untuk meningkatkan akurasi pembacaan.

Apa itu oksimeter? Bagaimana cara kerjanya?

Un oksimeter adalah alat kesehatan atau olah raga yang digunakan untuk mengukur saturasi oksigen dalam darah. Perangkat ini menawarkan data saturasi oksigen darah dengan nilai 0 hingga 100%. Biasanya perangkat yang sama juga menyertakan opsi detak jantung, yang menunjukkan semua informasi untuk pemantauan atau perekaman.

Data itu mengukur oksimeter adalah:

  • %SpO2: mengacu pada persentase saturasi oksigen dalam darah.

Oksimeter ditempatkan seperti penjepit sedemikian rupa sehingga disesuaikan dengan morfologi jari kita atau bisa juga ditempatkan di tempat lain pada tubuh, seperti halnya monitor detak jantung, seperti pergelangan tangan, sebagai dapat dilihat di banyak gelang aktivitas. ,

Mengenai cara kerjanya, oksimeter mengeluarkan emisi yang berbeda panjang gelombang cahaya yang melewati kulit. Yang bekerja pada cahaya ini adalah hemoglobin, molekul darah yang bertanggung jawab untuk mengangkut oksigen, menyerap jumlah cahaya yang berbeda-beda tergantung pada tingkat oksigen yang diangkutnya. Proses detailnya adalah sebagai berikut:

  1. emisi cahaya- Oksimeter memancarkan dua panjang gelombang cahaya, satu merah dan satu inframerah, yang melewati jari yang diletakkan pada perangkat.
  2. Penyerapan cahaya: Hemoglobin, molekul dalam sel darah merah yang membawa oksigen, menyerap jumlah cahaya yang berbeda-beda. Hemoglobin yang mengandung oksigen (oksihemoglobin) dan hemoglobin bebas oksigen (deoksihemoglobin) memiliki sifat penyerapan cahaya yang berbeda.
  3. Deteksi cahaya: Detektor di sisi berlawanan dari pemancar cahaya mengumpulkan cahaya yang melewati jari.
  4. Perhitungan saturasi oksigen- Alat menghitung rasio oksihemoglobin dengan jumlah total hemoglobin yang ada, baik oksihemoglobin maupun deoksihemoglobin. Proporsi ini disajikan sebagai persentase saturasi oksigen darah (%SpO2). Hal ini dilakukan melalui prosesor yang mampu menafsirkan sinyal-sinyal listrik untuk menerjemahkannya menjadi nilai numerik.

Apa itu modul MAX30102?

Sensornya MAX30102, diproduksi oleh Maxim Terintegrasi, adalah perangkat terintegrasi yang menggabungkan fungsi monitor detak jantung dan oksimeter. Sensor ini dapat dengan mudah digunakan dengan mikrokontroler seperti Arduino. MAX30102 termasuk dalam sensor optik seri MAX3010x dari perusahaan ini.

Cara kerjanya didasarkan pada variasi penyerapan cahaya oleh darah, tergantung pada jenisnya tingkat saturasi oksigen, dan denyut nadi seperti yang telah saya sebutkan pada dua bagian sebelumnya. Sensor ini dilengkapi dengan dua buah LED, satu berwarna merah dan satu lagi inframerah. Itu ditempatkan di kulit, seperti di jari atau pergelangan tangan, dan mendeteksi cahaya yang dipantulkan untuk menentukan tingkat saturasi oksigen.

Komunikasi dengan MAX30102 dilakukan melalui bus I2C, sehingga memudahkan untuk terhubung ke mikrokontroler seperti Arduino. MAX30102 membutuhkan catu daya ganda: 1.8V untuk logika dan 3.3V untuk LED. Biasanya ditemukan pada modul 5V yang sudah menyertakan pencocokan level yang diperlukan.

MAX30102 adalah sensor yang digunakan di proyek rumah atau olahraga, sehingga mungkin tidak memiliki keandalan dan sensitivitas yang memadai untuk penggunaan medis profesional.

La oksimetri pulsa optik Ini adalah metode non-invasif untuk menentukan persentase saturasi oksigen dalam darah. Seperti yang saya sebutkan sebelumnya, hal ini didasarkan pada perbedaan koefisien penyerapan cahaya hemoglobin (Hb) dan oksihemoglobin (HbO2) untuk panjang gelombang yang berbeda. Darah kaya oksigen menyerap lebih banyak cahaya inframerah, sedangkan darah rendah oksigen menyerap lebih banyak cahaya merah. Pada area tubuh yang kulitnya cukup tipis dan terdapat pembuluh darah di bawahnya, perbedaan ini dapat digunakan untuk menentukan derajat saturasi oksigen.

Fitur modul MAX30102 dengan sensor denyut nadi dan oksigen darah

MAX30102 meliputi:

  • 2x LED, satu merah (660nm) dan satu inframerah (880nm)
  • 2x fotodioda untuk mengukur cahaya yang dipantulkan
  • Konverter ADC 18-bit dengan laju pengambilan sampel 50 hingga 3200 sampel per detik.
  • Selain itu, ia memiliki perangkat elektronik yang diperlukan untuk penguatan dan penyaringan sinyal, pembatalan cahaya sekitar, penolakan frekuensi 50-60Hz (cahaya buatan) dan kompensasi suhu.

Konsumsi modul dapat mencapai hingga 50mA selama pengukuran, meskipun intensitasnya dapat disesuaikan secara terprogram, dengan mode daya rendah 0.7µA selama pengukuran.

Perusahaan precio y dónde

Sensor MAX30102 untuk mengukur denyut nadi dan oksigen darah mereka cukup murah. Modul ini dapat menjadi milik Anda hanya dengan beberapa euro di situs seperti eBay, Aliexpress, atau Amazon. Anda akan melihat ada beberapa jenis, dan kami merekomendasikan yang berikut ini:

Koneksi dan contoh dengan Arduino

Arduino IDE, tipe data, pemrograman

Untuk menguji MAX30102 dengan Arduino, hal pertama yang harus dilakukan adalah menghubungkan modul ini ke papan Arduino. Ini koneksi sangat sederhana, Anda hanya perlu menghubungkan yang berikut ini:

  1. Vcc modul harus dihubungkan ke output 5V papan Arduino.
  2. GND modul harus terhubung ke soket GND papan Arduino.
  3. SCL modul harus dihubungkan ke salah satu input analog papan Arduino, seperti A5.
  4. SDA modul harus dihubungkan ke input analog lain dari papan Arduino, seperti A4.

Setelah koneksi yang sesuai dibuat antara papan MAX30102 dan papan Arduino, hal berikutnya adalah menulis kode sumber atau sketsa agar berfungsi dan mulai menerima data biometrik dari orang yang bersangkutan. Ini semudah menulis kode berikut IDE Arduino dan memprogram papan:

Anda juga perlu menginstal perpustakaan di Arduino IDE untuk menggunakannya. Perpustakaan telah dikembangkan oleh SparkFun, dan tersedia di 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);
  }
}

Tentu saja Anda dapat memodifikasi kodenya sesuai kebutuhan Anda, ini hanya contoh...


Jadilah yang pertama mengomentari

tinggalkan Komentar Anda

Alamat email Anda tidak akan dipublikasikan. Bidang yang harus diisi ditandai dengan *

*

*

  1. Penanggung jawab data: Miguel Ángel Gatón
  2. Tujuan data: Mengontrol SPAM, manajemen komentar.
  3. Legitimasi: Persetujuan Anda
  4. Komunikasi data: Data tidak akan dikomunikasikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Basis data dihosting oleh Occentus Networks (UE)
  6. Hak: Anda dapat membatasi, memulihkan, dan menghapus informasi Anda kapan saja.