MAX30100 adalah sensor biometrik berbasis I2C dari Analog Devices yang mengukur oksigen darah (SpO2) dan detak jantung (HR). Sensor ini menggabungkan LED, fotodetektor, dan pemrosesan sinyal rendah-noise. Modul ini butuh dua tegangan (1,8V untuk IC dan 3,3V untuk LED) dan sudah dilengkapi regulator. Komunikasi dengan mikrokontroler menggunakan I2C dengan alamat tetap. Sensor ini juga memiliki buffer FIFO untuk menyimpan hingga 16 sampel, membantu menghemat daya sistem.

MAX30100 Module Pinout

Gambar 1. Max30100 Module Pinout

  • VIN adalah pin daya. Anda dapat menghubungkannya ke output 3.3V atau 5V dari Arduino Anda.
  • SCL adalah pin clock I2C, hubungkan ke jalur clock I2C pada Microcontroller/Arduino Anda.
  • SDA adalah pin data I2C, hubungkan ke jalur data I2C pada Microcontroller/Arduino Anda.
  • INT adalah pin interrupt. MAX30100 dapat diprogram untuk menghasilkan interrupt pada setiap detak nadi. Jalur ini bertipe open-drain dan ditarik HIGH oleh resistor onboard. Saat terjadi interrupt, pin INT akan menjadi LOW dan tetap LOW sampai interrupt dihapus.
  • IRD adalah pin untuk mengontrol LED inframerah (IR) secara manual. Jika Anda tidak ingin mengontrol LED IR sendiri, biarkan pin ini tidak terhubung.
  • RD mirip dengan pin IRD, namun digunakan untuk mengontrol LED merah. Jika Anda tidak ingin mengontrol LED merah secara manual, biarkan pin ini tidak terhubung.
  • GND adalah pin ground.

Permasalahan

Chip MAX30100 memerlukan dua tegangan suplai yang berbeda: 1,8V untuk IC dan 3,3V untuk LED MERAH dan IR. Oleh karena itu, modul ini dilengkapi dengan dua regulator tegangan linear – U1 dan U2. Regulator pertama mengubah 5V menjadi 3.3V. Regulator kedua terhubung ke output regulator pertama dan menghasilkan 1.8V.

Jika kita perhatikan lebih dekat, terdapat resistor pull-up 4,7kΩ (R1, R2, dan R3) untuk jalur sinyal SCL, SDA, dan INT. Yang menjadi masalah, resistor-resistor ini terhubung ke suplai 1.8V (Perhatikan garis merah tebal pada gambar rangkaian berikut)!

Gambar 2. Rangkaian Modul Max30100

Pada gambar layout PCBnya, kedua regulator (U1 dan U2) serta jalur yang menghubungkan resistor pull-up 4.7kΩ ke suplai 1.8V dapat dilihat pada jalur yg ditandai warna merah berikut.

Gambar 3. Layout PCB Modul Max30100

Masalah yang Muncul adalah Jika kita menghubungkan modul ini ke Arduino dengan logika 5V, modul tidak akan terdeteksi di bus I2C. Ini karena level logikanya terlalu rendah (Arduino 5V menganggap sinyal HIGH jika tegangannya di atas 3.0V, sedangkan untuk board 3.3V di atas 2.0V). Bahkan jika menggunakan board dengan logika 3.3V, modul tetap tidak akan berfungsi.

Solusi 1:

  1. Putuskan jalur pada bagian yang ditandai dengan garis merah. Ini akan memutus hubungan semua resistor pull-up 4,7kΩ dari suplai tegangan 1.8V.
  2. Buat sambungan baru seperti yang ditunjukkan oleh garis kuning. Sambungan ini akan menarik semua resistor 4,7kΩ ke tegangan 3.3V.

Berikut tampilan sebelum dan sesudah dimodifikasi:

Gambar 4. Solusi 1 - Tampilan sebelum dan sesudah modifikasi (perhatikan bagian yg ditandai warna kuning dan merah)

Rangkaian Modul Max30100 dengan Arduino Uno - Solusi 1:

Gambar 5. Solusi 1 - Rangkaian Modul Max30100 dengan Arduino Uno (note untuk pin INT tidak wajib, karena tergantung logika koding yg digunakan)

Solusi 2:

  1. Solusi kedua adalah melepaskan semua resistor pull-up 4,7kΩ dari papan modul.
  2. Gunakan resistor pull-up eksternal pada jalur sinyal SCL, SDA, dan INT.

Berikut tampilan sebelum dan sesudah resistor dilepas:

Gambar 6. Solusi 2 - Tampilan sebelum dan sesudah modifikasi (perhatikan bagian yg ditandai warna kuning)

Rangkaian Modul Max30100 dengan Arduino Uno - Solusi 2:

Gambar 7. Solusi 2 - Rangkaian Modul Max30100 dengan Arduino Uno (note untuk pin INT tidak wajib, karena tergantung logika koding yg digunakan)

Solusi 3:

  1. Putuskan jalur pada bagian yang ditandai dengan garis merah. Ini akan memutus hubungan semua resistor pull-up 4,7kΩ dari suplai tegangan 1.8V.
  2. Gunakan resistor pull-up eksternal pada jalur sinyal SCL, SDA, dan INT.

Berikut tampilan sebelum dan sesudah dimodifikasi:

Gambar 8. Solusi 3 - Tampilan sebelum dan sesudah modifikasi (perhatikan bagian yg ditandai warna merah) - ilustrasi

Rangkaian Modul Max30100 dengan Arduino Uno - Solusi 3:

Gambar 9. Solusi 3 - Rangkaian Modul Max30100 dengan Arduino Uno (note untuk pin INT tidak wajib, karena tergantung logika koding yg digunakan)

Notes:

  1. Sebenernya solusi 3 ini adalah gabungan dari solusi 1 dan 2 sebelumnya. Solusi 3 ini karena Saya malas berurusan dengan solder. Sehingga setelah dipikirkan maka ketika jalur 1,8v ke Resistor 4,7KΩ diputus maka posisi resistor tersebut akan floating sehigga bisa langsung menggunakan resistor tambahan (eksternal) seperti pada Gambar 7 atau 9. Dan solusi 3 ini sudah berhasil diuji coba. (tanpa perlu solder hehe)
  2. Untuk library Arduino dapat menggunakan library pada link berikut: https://github.com/oxullo/Arduino-MAX30100

Keywords: Sensor, Max30100, Heart Rate Sensor, SpO2 Sensor, Max30100 Problem, Arduino, ESP32

SDG: 9 “Industry, Innovation and Infrastructure”

Referensi:

  1. https://lastminuteengineers.com/max30100-pulse-oximeter-heart-rate-sensor-arduino-tutorial/
  2. https://github.com/oxullo/Arduino-MAX30100