Cara Memprogram Sensor Detak jantung & oksigen darah MAX30102

Cara Memprogram Sensor Detak jantung & oksigen darah MAX30102

Sensor MAX30102 adalah modul sensor optik yang digunakan untuk mengukur detak jantung (heart rate) dan oksigen dalam darah (SpO₂). Sensor ini sangat populer dalam aplikasi kesehatan portabel seperti smartwatch, gelang kebugaran, dan alat pemantau kesehatan pribadi.Berikut ini adalah code untuk memprogramnya :

#include <Arduino.h>

#include <Wire.h>
#include <SparkFun_APDS9960.h>

#define APDS9960_INT 15
SparkFun_APDS9960 apds = SparkFun_APDS9960();
volatile int isr_flag = 0;

 
void interruptRoutine() {
isr_flag = 1;
}
 
void handleGesture() {
if ( apds.isGestureAvailable() ) {
switch ( apds.readGesture() ) {
case DIR_UP:
Serial.println("UP");
break;
case DIR_DOWN:
Serial.println("DOWN");
break;
case DIR_LEFT:
Serial.println("LEFT");
break;
case DIR_RIGHT:
Serial.println("RIGHT");
break;
case DIR_NEAR:
Serial.println("NEAR");
break;
case DIR_FAR:
Serial.println("FAR");
break;
default:
Serial.println("NONE");
}
}
}
 



void setup()
{
Serial.begin(9600);
pinMode(APDS9960_INT, INPUT);
Serial.println();
Serial.println(F("--------------------------------"));
Serial.println(F("SparkFun APDS-9960 - GestureTest"));
Serial.println(F("--------------------------------"));
attachInterrupt(digitalPinToInterrupt(APDS9960_INT), interruptRoutine, FALLING);
if ( apds.init() ) {
Serial.println(F("APDS-9960 initialization complete"));
} else {
Serial.println(F("Something went wrong during APDS-9960 init!"));
}
if ( apds.enableGestureSensor(true) ) {
Serial.println(F("Gesture sensor is now running"));
} else {
Serial.println(F("Something went wrong during gesture sensor init!"));
}

}
void loop(){
if( isr_flag == 1 ) {
detachInterrupt(APDS9960_INT);
handleGesture();
isr_flag = 0;
attachInterrupt(digitalPinToInterrupt(APDS9960_INT), interruptRoutine, FALLING);
}


}

Berikut ini adalah penjelasan dari kode di atas :

Tujuan Utama Program

Menggunakan sensor APDS-9960 untuk membaca gesture tangan dan menampilkan hasilnya di Serial Monitor.

Header dan Inisialisasi

#include <Arduino.h>
#include <Wire.h>
#include <SparkFun_APDS9960.h>
  • Arduino.h adalah pustaka inti Arduino.
  • Wire.h untuk komunikasi I2C.
  • SparkFun_APDS9960.h adalah library khusus dari SparkFun untuk mengontrol sensor APDS-9960.

Deklarasi Pin dan Objek

#define APDS9960_INT 15
SparkFun_APDS9960 apds = SparkFun_APDS9960();
volatile int isr_flag = 0;
  • APDS9960_INT adalah pin digital yang terhubung ke pin interrupt dari sensor.
  • apds adalah objek sensor.
  • isr_flag adalah flag untuk menandai kalau ada gesture terdeteksi (dipicu oleh interrupt).

Interrupt Service Routine (ISR)

void interruptRoutine() {
  isr_flag = 1;
}
  • Fungsi ini dijalankan saat interrupt terjadi (pin INT jatuh/rendah).
  • Menandai bahwa gesture baru tersedia.

Handle Gesture

void handleGesture() {
  if ( apds.isGestureAvailable() ) {
    switch ( apds.readGesture() ) {
      case DIR_UP: Serial.println("UP"); break;
      case DIR_DOWN: Serial.println("DOWN"); break;
      case DIR_LEFT: Serial.println("LEFT"); break;
      case DIR_RIGHT: Serial.println("RIGHT"); break;
      case DIR_NEAR: Serial.println("NEAR"); break;
      case DIR_FAR: Serial.println("FAR"); break;
      default: Serial.println("NONE");
    }
  }
}
  • Mengecek apakah gesture tersedia.
  • Jika ya, membaca dan mencetak arah gesture ke Serial Monitor.

⚙️ Setup

void setup() {
  Serial.begin(9600);
  pinMode(APDS9960_INT, INPUT);
  
  // Info awal
  Serial.println(F("--------------------------------"));
  Serial.println(F("SparkFun APDS-9960 - GestureTest"));
  Serial.println(F("--------------------------------"));

  // Atur interrupt
  attachInterrupt(digitalPinToInterrupt(APDS9960_INT), interruptRoutine, FALLING);

  // Inisialisasi sensor
  if ( apds.init() ) {
    Serial.println(F("APDS-9960 initialization complete"));
  } else {
    Serial.println(F("Something went wrong during APDS-9960 init!"));
  }

  // Aktifkan sensor gesture
  if ( apds.enableGestureSensor(true) ) {
    Serial.println(F("Gesture sensor is now running"));
  } else {
    Serial.println(F("Something went wrong during gesture sensor init!"));
  }
}
  • Inisialisasi komunikasi serial, sensor, dan interrupt.
  • Jika inisialisasi gagal, akan mencetak pesan error.

🔁 Loop

void loop() {
  if ( isr_flag == 1 ) {
    detachInterrupt(APDS9960_INT);       // Nonaktifkan sementara interrupt
    handleGesture();                     // Proses gesture
    isr_flag = 0;                        // Reset flag
    attachInterrupt(digitalPinToInterrupt(APDS9960_INT), interruptRoutine, FALLING); // Aktifkan lagi interrupt
  }
}
  • Jika interrupt terjadi (isr_flag == 1), proses gesture.
  • Interrupt sementara dinonaktifkan agar tidak terjadi gangguan saat membaca gesture.

Kesimpulan Singkat

Sensor APDS-9960 mendeteksi gesture tangan dan mengirim sinyal melalui interrupt pin. Program menggunakan interrupt untuk merespons gesture secara efisien tanpa terus-menerus polling. Gesture yang terdeteksi akan dicetak di Serial Monitor.

untuk diskusi bisa kontak dibawah ini :

Sosial media :

Apa itu ESP32?