Cara Memprogram Sensor Oksigen Detak Jantung MAX30100 OXIMETER Pada ESP32

Cara Memprogram Sensor Oksigen Detak Jantung MAX30100 OXIMETER Pada ESP32

Sensor Oksigen Detak Jantung MAX30100 OXIMETER adalah sensor terintegrasi yang dirancang untuk mengukur detak jantung dan saturasi oksigen dalam darah (SpO2). Ini adalah solusi lengkap dalam satu paket kecil yang sangat cocok untuk perangkat wearable dan aplikasi kesehatan.Berikut ini adalah code untuk memprogram nya :

#include <Arduino.h>

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

#define rp_ms_oximeter 1000
PulseOximeter oximeter;


void on_oximeter()
{
Serial.println("Detak Jantung Terdeteksi!");
}
float baca_detak_oximeter() {
return oximeter.getHeartRate();
}
 
float baca_sp02_oximeter() {
return oximeter.getSpO2();
}


void setup()
{
Serial.begin(9600);
if (!oximeter.begin())
{
Serial.println("Tidak dapat menginisialisasi sensor MAX30100. Periksa koneksi dan alamat I2C.");
while (1);
}
oximeter.setOnBeatDetectedCallback(on_oximeter);

}
void loop(){
oximeter.update();
if (millis() - oximeter.getLastBeat() > rp_ms_oximeter)
{
float detak_oximeter = baca_detak_oximeter();
float sp02_oximeter = baca_sp02_oximeter();
 
Serial.print("Detak Jantung: ");
Serial.print(detak_oximeter);
Serial.print(" bpm ");
Serial.print("SpO2: ");
Serial.print(sp02_oximeter);
Serial.println(" %");
oximeter.clearLastBeat();
}


}

Berikut ini adalah penjelasan dari kode di atas :.

Penjelasan Kode Sensor MAX30100

1. Inklusi Library

#include <Arduino.h>
#include <Wire.h>
#include "MAX30100_PulseOximeter.h"
  • #include <Arduino.h>: Ini adalah library standar untuk semua program Arduino.
  • #include <Wire.h>: Library ini diperlukan untuk komunikasi I2C (Inter-Integrated Circuit). Sensor MAX30100 berkomunikasi dengan mikrokontroler Arduino melalui protokol I2C.
  • #include "MAX30100_PulseOximeter.h": Ini adalah library khusus yang mempermudah interaksi dengan sensor MAX30100. Library ini menyediakan fungsi-fungsi bawaan untuk membaca detak jantung dan SpO2 tanpa perlu menulis kode yang rumit.

2. Definisi dan Inisialisasi Global

#<strong>define</strong> rp_ms_oximeter 1000
PulseOximeter oximeter;
  • #define rp_ms_oximeter 1000: Ini mendefinisikan konstanta bernama rp_ms_oximeter dengan nilai 1000. Nilai ini dalam milidetik dan digunakan untuk mengatur interval waktu kapan data detak jantung dan SpO2 akan dicetak ke Serial Monitor (setiap 1000 ms = 1 detik).
  • PulseOximeter oximeter;: Ini membuat sebuah objek (instance) dari kelas PulseOximeter yang dinamakan oximeter. Objek inilah yang akan kita gunakan untuk berinteraksi dengan sensor MAX30100.

3. Fungsi Callback (Event Handler)

void on_oximeter()
{
  Serial.println("Detak Jantung Terdeteksi!");
}
  • void on_oximeter(): Ini adalah fungsi callback. Artinya, fungsi ini akan dipanggil secara otomatis oleh library MAX30100_PulseOximeter setiap kali sensor mendeteksi denyut jantung yang valid. Ketika detak jantung terdeteksi, pesan “Detak Jantung Terdeteksi!” akan dicetak ke Serial Monitor.

4. Fungsi Pembacaan Data

float baca_detak_oximeter() {
  return oximeter.getHeartRate();
}

float baca_sp02_oximeter() {
  return oximeter.getSpO2();
}
  • float baca_detak_oximeter(): Fungsi ini berfungsi untuk mendapatkan nilai detak jantung dari sensor. Ia memanggil metode getHeartRate() dari objek oximeter dan mengembalikan nilainya dalam format floating-point.
  • float baca_sp02_oximeter(): Mirip dengan di atas, fungsi ini mendapatkan nilai saturasi oksigen (SpO2) dari sensor dengan memanggil metode getSpO2() dan mengembalikan nilainya dalam format floating-point.

5. Fungsi setup()

void setup()
{
  Serial.begin(9600);
  if (!oximeter.begin())
  {
    Serial.println("Tidak dapat menginisialisasi sensor MAX30100. Periksa koneksi dan alamat I2C.");
    while (1);
  }
  oximeter.setOnBeatDetectedCallback(on_oximeter);
}
  • Serial.begin(9600);: Menginisialisasi komunikasi serial pada baud rate 9600. Ini memungkinkan Arduino untuk mengirimkan data ke komputer Anda melalui Serial Monitor.
  • if (!oximeter.begin()): Ini adalah bagian penting untuk inisialisasi sensor.
    • oximeter.begin(): Mencoba untuk memulai komunikasi dengan sensor MAX30100. Jika sensor berhasil diinisialisasi, fungsi ini akan mengembalikan true.
    • !: Operator “not” (bukan). Jadi, !oximeter.begin() berarti “jika inisialisasi sensor GAGAL”.
    • Jika inisialisasi gagal (misalnya, sensor tidak terhubung dengan benar atau ada masalah pada alamat I2C), pesan kesalahan akan dicetak ke Serial Monitor, dan program akan masuk ke loop while(1); yang berarti program akan berhenti di situ selamanya sampai di-reset.
  • oximeter.setOnBeatDetectedCallback(on_oximeter);: Ini mendaftarkan fungsi on_oximeter sebagai callback yang akan dipanggil setiap kali detak jantung terdeteksi oleh sensor.

6. Fungsi loop()

void loop(){
  oximeter.update();
  if (millis() - oximeter.getLastBeat() > rp_ms_oximeter)
  {
    float detak_oximeter = baca_detak_oximeter();
    float sp02_oximeter = baca_sp02_oximeter();

    Serial.print("Detak Jantung: ");
    Serial.print(detak_oximeter);
    Serial.print(" bpm ");
    Serial.print("SpO2: ");
    Serial.print(sp02_oximeter);
    Serial.println(" %");
    oximeter.clearLastBeat();
  }
}
  • oximeter.update();: Ini adalah fungsi yang harus dipanggil secara teratur di dalam loop(). Fungsi ini bertanggung jawab untuk membaca data mentah dari sensor, memprosesnya, dan memperbarui nilai detak jantung serta SpO2. Tanpa oximeter.update(), sensor tidak akan berfungsi.
  • if (millis() - oximeter.getLastBeat() > rp_ms_oximeter): Ini adalah kondisi untuk mencetak data ke Serial Monitor setiap interval waktu tertentu.
    • millis(): Mengembalikan jumlah milidetik sejak program Arduino mulai berjalan.
    • oximeter.getLastBeat(): Mengembalikan waktu (dalam milidetik) terakhir kali detak jantung terdeteksi.
    • millis() - oximeter.getLastBeat(): Menghitung berapa lama waktu berlalu sejak detak jantung terakhir terdeteksi.
    • > rp_ms_oximeter: Membandingkan waktu yang berlalu dengan rp_ms_oximeter (yaitu 1000 ms atau 1 detik). Jadi, jika sudah lebih dari 1 detik sejak detak jantung terakhir, blok kode di dalamnya akan dieksekusi.
  • float detak_oximeter = baca_detak_oximeter();: Memanggil fungsi baca_detak_oximeter() untuk mendapatkan nilai detak jantung saat ini dan menyimpannya di variabel detak_oximeter.
  • float sp02_oximeter = baca_sp02_oximeter();: Memanggil fungsi baca_sp02_oximeter() untuk mendapatkan nilai SpO2 saat ini dan menyimpannya di variabel sp02_oximeter.
  • Serial.print(...) dan Serial.println(...): Mencetak nilai detak jantung dan SpO2 ke Serial Monitor dalam format yang mudah dibaca.
  • oximeter.clearLastBeat();: Ini adalah bagian penting. Setelah mencetak data, kita “mengatur ulang” waktu detak jantung terakhir yang terdeteksi. Ini memastikan bahwa perhitungan interval waktu untuk pencetakan dimulai kembali, sehingga data tidak terus dicetak tanpa jeda. Tanpa baris ini, data akan dicetak hanya sekali setelah detak pertama, lalu tidak akan dicetak lagi sampai detak jantung baru terdeteksi.

Kesimpulan

Secara keseluruhan, kode ini menyediakan kerangka dasar untuk menggunakan sensor MAX30100 dengan Arduino. Ini secara terus-menerus membaca data dari sensor, mengidentifikasi detak jantung, dan mencetak nilai detak jantung dan SpO2 ke Serial Monitor setiap 1 detik atau lebih (tergantung kapan detak jantung terakhir terdeteksi dan melewati ambang batas waktu).

Pastikan Anda telah menginstal library MAX30100_PulseOximeter dengan benar di Arduino IDE Anda agar kode ini dapat dikompilasi dan berjalan tanpa masalah.

untuk diskusi bisa kontak dibawah ini :

Sosial media :

Apa itu ESP32?