Cara Memprogram Sensor Oksigen Detak Jantung MAX30102 OXIMETER Pada ESP32

Cara Memprogram Sensor Oksigen Detak Jantung MAX30102 OXIMETER Pada ESP32

Sensor Oksigen Detak Jantung MAX30102 OXIMETER adalah sensor terintegrasi yang dirancang khusus untuk mengukur detak jantung (heart rate) dan saturasi oksigen dalam darah (SpO2). Ini adalah versi perbaikan dari MAX30100, yang menawarkan peningkatan akurasi dan fitur tambahan.Berikut ini adalah code untuk memprogramnya :

#include <Arduino.h>

#include <Wire.h>
#include "MAX30105.h"

MAX30105 particle;




void setup()
{
Serial.begin(9600);
if (!particle.begin(Wire, I2C_SPEED_FAST))
{
Serial.println("Sensor tidak ditemukan. Periksa koneksi dan alamat I2C.");
while (1);
}
 
byte ledBrightness = 60;
byte sampleAverage = 4;
byte ledMode = 2;
int sampleRate = 400;
int pulseWidth = 411;
int adcRange = 16384;
particle.setup(ledBrightness, sampleAverage, ledMode, sampleRate, pulseWidth, adcRange);

}
void loop(){
if (particle.available()) 
{
float heartRate_particle = particle.getHeartRate(); // Baca detak jantung
float SpO2_particle = particle.getSpO2(); // Baca SpO2
Serial.print("Detak Jantung: ");
Serial.print(heartRate_particle);
Serial.print(" bpm	");
Serial.print("SpO2: ");
Serial.print(SpO2_particle);
Serial.println(" %");
}


}

Berikut ini adalah penjelasan dari kode di atas :

1. Inklusi Library dan Deklarasi Objek

C++

#<strong>include</strong> <Arduino.h>
#<strong>include</strong> <Wire.h>
#<strong>include</strong> "MAX30105.h"

MAX30105 particle;
  • #include <Arduino.h>: Ini adalah library standar yang dibutuhkan untuk semua program Arduino.
  • #include <Wire.h>: Library ini berfungsi untuk komunikasi I2C (Inter-Integrated Circuit). Sensor MAX30105 berkomunikasi dengan Arduino menggunakan protokol I2C.
  • #include "MAX30105.h": Ini adalah library spesifik yang menyediakan fungsi-fungsi untuk berinteraksi dengan sensor MAX30105. Library ini biasanya dikembangkan oleh SparkFun atau pihak lain yang mendukung sensor ini.
  • MAX30105 particle;: Ini membuat sebuah objek (instance) dari kelas MAX30105 yang diberi nama particle. Objek inilah yang akan kita gunakan untuk memanggil semua fungsi yang berhubungan dengan sensor.

2. Fungsi setup()

C++

void setup()
{
  Serial.begin(9600);
  if (!particle.begin(Wire, I2C_SPEED_FAST))
  {
    Serial.println("Sensor tidak ditemukan. Periksa koneksi dan alamat I2C.");
    while (1);
  }

  byte ledBrightness = 60;
  byte sampleAverage = 4;
  byte ledMode = 2;
  int sampleRate = 400;
  int pulseWidth = 411;
  int adcRange = 16384;
  particle.setup(ledBrightness, sampleAverage, ledMode, sampleRate, pulseWidth, adcRange);
}
  • Serial.begin(9600);: Menginisialisasi komunikasi serial pada baud rate 9600. Ini memungkinkan Arduino untuk mengirimkan data ke komputer Anda agar bisa dilihat di Serial Monitor.
  • if (!particle.begin(Wire, I2C_SPEED_FAST)): Baris ini mencoba untuk menginisialisasi sensor MAX30105.
    • particle.begin(Wire, I2C_SPEED_FAST): Memulai komunikasi dengan sensor melalui bus I2C. Wire adalah objek I2C standar di Arduino, dan I2C_SPEED_FAST mengatur kecepatan komunikasi I2C menjadi cepat (biasanya 400 kHz).
    • !: Operator “not”. Jadi, !particle.begin(...) berarti “jika inisialisasi sensor GAGAL”.
    • Jika sensor tidak ditemukan atau gagal diinisialisasi (misalnya, karena masalah koneksi atau alamat I2C yang salah), pesan kesalahan akan dicetak ke Serial Monitor, dan program akan masuk ke loop while(1); yang akan menghentikan eksekusi kode lebih lanjut.
  • Pengaturan Parameter Sensor: Setelah sensor berhasil diinisialisasi, beberapa parameter penting diatur menggunakan particle.setup():
    • byte ledBrightness = 60;: Menentukan kecerahan LED internal sensor. Nilai ini biasanya antara 0-255. Kecerahan yang optimal penting untuk mendapatkan sinyal yang baik tanpa menjenuhkan fotodetektor.
    • byte sampleAverage = 4;: Mengatur berapa banyak sampel yang akan dirata-ratakan. Rata-rata sampel dapat membantu mengurangi noise dan meningkatkan stabilitas pembacaan. Nilai 4 berarti setiap 4 sampel akan dirata-ratakan.
    • byte ledMode = 2;: Menentukan mode operasi LED. Nilai 2 biasanya berarti sensor akan menggunakan dua LED (Merah dan Inframerah), yang diperlukan untuk menghitung SpO2. Mode lain mungkin hanya menggunakan satu LED untuk detak jantung saja.
    • int sampleRate = 400;: Mengatur frekuensi pengambilan sampel per detik. Nilai 400 berarti sensor akan mengambil 400 sampel per detik. Tingkat sampel yang lebih tinggi dapat memberikan data yang lebih halus tetapi juga menggunakan lebih banyak daya.
    • int pulseWidth = 411;: Mengatur lebar pulsa cahaya yang dipancarkan oleh LED. Lebar pulsa yang lebih besar berarti lebih banyak cahaya dipancarkan, yang bisa membantu dalam kasus kulit gelap atau pembuluh darah yang dalam, tetapi juga meningkatkan konsumsi daya. Nilai 411 µs adalah nilai umum.
    • int adcRange = 16384;: Menentukan rentang ADC (Analog-to-Digital Converter) yang digunakan. Ini berkaitan dengan sensitivitas fotodetektor. Nilai 16384 (yang setara dengan 214) berarti resolusi 14-bit, yang dapat membantu mendeteksi perubahan kecil dalam sinyal.

3. Fungsi loop()

C++

void loop(){
  if (particle.available())
  {
    float heartRate_particle = particle.getHeartRate(); // Baca detak jantung
    float SpO2_particle = particle.getSpO2(); // Baca SpO2

    Serial.print("Detak Jantung: ");
    Serial.print(heartRate_particle);
    Serial.print(" bpm    ");
    Serial.print("SpO2: ");
    Serial.print(SpO2_particle);
    Serial.println(" %");
  }
}
  • if (particle.available()): Ini adalah kondisi penting. particle.available() akan mengembalikan true jika ada data baru yang siap dibaca dari sensor (yaitu, sensor telah mengumpulkan cukup sampel untuk melakukan perhitungan detak jantung dan SpO2). Ini memastikan bahwa kita hanya mencoba membaca data ketika data tersebut valid dan tersedia.
  • float heartRate_particle = particle.getHeartRate();: Jika data tersedia, baris ini memanggil fungsi getHeartRate() dari objek particle untuk mendapatkan nilai detak jantung yang telah dihitung oleh library. Nilainya disimpan dalam variabel heartRate_particle.
  • float SpO2_particle = particle.getSpO2();: Demikian pula, baris ini memanggil fungsi getSpO2() untuk mendapatkan nilai saturasi oksigen (SpO2) yang telah dihitung. Nilainya disimpan dalam variabel SpO2_particle.
  • Serial.print(...) dan Serial.println(...): Setelah mendapatkan nilai detak jantung dan SpO2, kode ini mencetaknya ke Serial Monitor dalam format yang mudah dibaca, seperti “Detak Jantung: XX.XX bpm SpO2: YY.YY %”.

Kesimpulan

Secara keseluruhan, kode ini menunjukkan cara dasar untuk menggunakan sensor MAX30105 dengan Arduino. Setelah inisialisasi awal dan pengaturan parameter sensor yang optimal, kode ini secara terus-menerus memeriksa ketersediaan data baru dari sensor. Ketika data baru tersedia, ia akan membaca nilai detak jantung dan SpO2 yang dihitung oleh library dan menampilkannya di Serial Monitor.

Penting untuk dicatat bahwa keakuratan pembacaan detak jantung dan SpO2 sangat bergantung pada kualitas kontak antara jari/kulit dan sensor, serta pengaturan parameter (kecerahan LED, sample rate, dll.) yang sesuai dengan kondisi pengukuran.

untuk diskusi bisa kontak dibawah ini :

Sosial media :

Apa itu ESP32?