Rabu, 11 November 2026

SISTEM MONITORING TANDA VITAL (DETAK JANTUNG, OKSIGEN DARAH, DAN SUHU TUBUH) BERBASIS ESP32 DAN BLYNK

SISTEM MONITORING TANDA VITAL

(DETAK JANTUNG, OKSIGEN DARAH, DAN SUHU TUBUH)

BERBASIS ESP32 DAN BLYNK

Disusun Oleh:

Muhamad Aditya Pratama (26051204241)

Muhammad Guntur Cahyadi Putra (26051204087)

Alfian Nurrokhim (26051204240)

Albar Ghani Aziz (26051204133)

 

BAB I
PENDAHULUAN

1.1       Latar Belakang

  Perkembangan teknologi Internet of Things (IoT) telah membawa perubahan besar dalam bidang kesehatan, salah satunya memungkinkan pemantauan tanda vital pasien secara real-time dari jarak jauh (telemedicine). Detak jantung (heart rate), saturasi oksigen darah (SpO2), dan suhu tubuh merupakan indikator dasar yang menggambarkan kondisi fisiologis seseorang.

  Mikrokontroler ESP32 dipilih sebagai pusat kendali karena memiliki modul Wi-Fi bawaan yang andal serta daya pemrosesan yang cukup untuk menjalankan algoritma pemrosesan sinyal. Sensor MAX30102 digunakan untuk mendeteksi detak jantung dan SpO2 dengan prinsip photoplethysmography (PPG), sedangkan sensor DS18B20 digunakan untuk mengukur suhu secara digital. Platform Blynk IoT dimanfaatkan sebagai dashboard sehingga data sensor dapat divisualisasikan secara grafis dan dipantau dari mana saja.

 

1.2       Rumusan Masalah

Rumusan masalah pada laporan ini adalah sebagai berikut.

1.       Bagaimana cara mengintegrasikan sensor MAX30102 dan DS18B20 dengan mikrokontroler ESP32?

2.       Bagaimana menerapkan algoritma pendeteksian puncak gelombang (peak detection) untuk menghitung BPM dan rasio cahaya untuk memperkirakan SpO2?

3.       Bagaimana cara mengirimkan dan memvisualisasikan data tanda vital secara real-time ke dashboard Blynk IoT?


1.3       Tujuan Laporan

Tujuan dari laporan ini adalah sebagai berikut.

1.       Memahami prinsip kerja sensor MAX30102 (PPG) dan DS18B20 serta cara interfacing-nya dengan ESP32 melalui protokol I2C dan 1-Wire.

2.       Menerapkan algoritma pemrosesan sinyal digital untuk mengekstrak nilai BPM dan SpO2 tanpa mengganggu kinerja utama sistem (non-blocking).

3.       Merancang dan mengimplementasikan sistem IoT untuk memonitor detak jantung, oksigen darah, dan suhu tubuh melalui platform Blynk.

1.4       Manfaat Penulisan

Manfaat dari penulisan laporan ini adalah sebagai berikut.

1.       Menambah pemahaman penulis mengenai konsep sistem embedded dan IoT, khususnya akuisisi data biomedis dan komunikasi cloud.

2.       Memberikan purwarupa (prototype) sistem monitoring kesehatan sederhana yang dapat dikembangkan menjadi alat yang lebih kompleks.

3.       Menjadi bahan referensi bagi pembaca yang ingin mempelajari integrasi sensor MAX30102, DS18B20, dan ESP32 dengan Blynk.


 

BAB II
TINJAUAN PUSTAKA

2.1       Dasar Teori

1.       Internet of Things (IoT)

IoT adalah konsep yang menghubungkan perangkat fisik dengan jaringan internet agar dapat saling bertukar data. Pada proyek ini, ESP32 berperan sebagai node yang mengumpulkan data fisiologis dan mengirimkannya ke server cloud (Blynk) untuk dipantau melalui aplikasi seluler maupun peramban web.

2.       Mikrokontroler ESP32

ESP32 adalah mikrokontroler berbiaya rendah dan hemat daya yang dikembangkan oleh Espressif Systems. Modul ini telah terintegrasi dengan Wi-Fi dan Bluetooth serta memiliki dua inti prosesor (dual-core) sehingga tugas dapat dieksekusi secara paralel, yang sangat sesuai untuk pemrosesan data sensor yang menuntut ketepatan waktu (Espressif Systems, n.d.).

3.       Sensor MAX30102

MAX30102 adalah sensor terintegrasi untuk pemantauan detak jantung dan oksimetri denyut (pulse oximetry). Sensor ini menggunakan dua LED (merah dan inframerah) serta fotodetektor untuk mengukur perubahan volume darah pada kapiler berdasarkan prinsip PPG (SparkFun Electronics, n.d.). Komunikasi dengan mikrokontroler dilakukan melalui protokol I2C.

4.       Sensor DS18B20

DS18B20 adalah sensor suhu digital yang berkomunikasi melalui protokol 1-Wire dan memberikan pembacaan dalam derajat Celsius dengan resolusi yang dapat diatur 9 hingga 12 bit (Maxim Integrated, n.d.). Konversi suhu pada resolusi tertinggi memerlukan waktu sekitar 750 ms, sehingga pembacaan dapat dikonfigurasi secara non-blocking agar tidak menghambat proses utama mikrokontroler.

5.       Blynk IoT

Blynk adalah platform IoT berbasis cloud yang menyediakan antarmuka drag-and-drop untuk membuat dashboard. Data dikirim dari perangkat menggunakan Virtual Pin (V0, V1, dan seterusnya) dan ditampilkan pada widget seperti Gauge atau Value Display (Blynk Inc., n.d.).

2.2       Komponen

Komponen yang digunakan dalam sistem ini ditunjukkan pada Tabel 1.

No.

Komponen

Fungsi

1

ESP32 DevKit

Pusat pengendali yang terhubung ke Wi-Fi, memproses data sensor, dan mengirim data ke server Blynk.

2

MAX30102

Mengukur detak jantung (BPM) dan saturasi oksigen darah (SpO2) melalui jari.

3

DS18B20

Mengukur suhu tubuh pengguna secara digital.

4

Resistor 4,7 kΩ

Pull-up pada jalur data (1-Wire) sensor DS18B20.

5

Platform Blynk

Dashboard pemantauan jarak jauh untuk menampilkan data V0, V1, dan V2.

Tabel 1. Komponen yang digunakan


BAB III
PEMBAHASAN

3.1       Penjelasan Rangkaian

Rangkaian dibangun dengan menghubungkan kedua sensor ke ESP32. Arsitektur sistem secara keseluruhan ditunjukkan pada Gambar 1, sedangkan pemetaan pin rangkaian ditunjukkan pada Tabel 2 dan skema rangkaian pada Gambar 2.

Gambar 1. Diagram blok sistem monitoring tanda vital

 

Tabel 2. Pemetaan pin rangkaian

Komponen

Pin Komponen

Pin ESP32

MAX30102

VIN

3.3V

GND

GND

SDA

GPIO 21

SCL

GPIO 22

DS18B20

VDD

3.3V

GND

GND

DATA

GPIO 4 (dengan resistor 4,7 kΩ ke VDD)


Gambar 2. Skema rangkaian sistem monitoring tanda vital

3.2       Konfigurasi Dashboard Blynk

Dashboard dikonfigurasi melalui Blynk Console (blynk.cloud) Menggunakan akun Blynk yang terdaftar. Konfigurasi dilakukan dengan urutan template, datastream, web dashboard, lalu perangkat (device). Langkah-langkahnya adalah sebagai berikut.

1.     Masuk ke Blynk Console. Buka blynk.cloud, buat akun baru atau masuk dengan akun yang sudah ada.

2.     Membuat template. Buka menu Developer Zone, pilih My Templates, lalu klik + New Template. Isi Name dengan “Health Monitoring” (boleh berbeda), Hardware dengan ESP32, dan Connection Type dengan WiFi, kemudian klik Done. Nama template harus sama dengan nilai BLYNK_TEMPLATE_NAME pada kode program.

3.     Membuat datastream. Pada template, buka tab Datastream, klik + New Datastream, lalu pilih Virtual Pin. Buat tiga datastream dengan pengaturan seperti pada Tabel 3, kemudian klik Create untuk masing-masing. Nomor Virtual Pin harus sama dengan yang dipakai pada kode (V0, V1, dan V2).

4.     Menyusun web dashboard. Buka tab Web Dashboard, klik Edit, lalu seret widget ke area dashboard sesuai Tabel 4. Klik ikon pengaturan (settings) pada setiap widget, beri judul, lalu pilih datastream yang sesuai pada kolom datastream.

5.     Menyimpan template, Klik Save di pojok kanan atas. Perubahan yang belum disimpan akan hilang saat halaman ditutup.

6.     Menambahkan perangkat. Buka menu Devices, klik + New Device, pilih From template, pilih template “Health Monitoring”, isi Device Name, lalu klik Create.

7.     Menyalin kredensial. Pada halaman Device Info, salin bagian Firmware Configuration yang berisi BLYNK_TEMPLATE_ID, BLYNK_TEMPLATE_NAME, dan BLYNK_AUTH_TOKEN, lalu tempelkan ke bagian atas kode program. Isi juga nama dan kata sandi Wi-Fi 2,4 GHz.

8.     Menjalankan sistem. Unggah kode ke ESP32 melalui Arduino IDE, Setelah terhubung, status perangkat pada Blynk Console berubah menjadi Online, dan nilai BPM, SpO2, serta suhu muncul pada dashboard ketika jari ditempelkan ke sensor.

                                             Tabel 3. Konfigurasi datastream pada Blynk

Nama

Pin

Tipe

Data

Satuan

Min

Maks

Keterangan

Heart Rate

V0

Integer

bpm

0

220

Detak Jantung

SpO2

V1

Integer

%

0

100

Saturasi oksigen

Body Temp

V2

Double

°C

0

50

Suhu (1 desimal)

Widget yang digunakan pada web dashboard ditunjukkan pada Tabel 4, dan tampilan dashboard ditunjukkan pada Gambar 3.

Tabel 4. Widget pada dashboard Blynk

Widget

Virtual Pin

Fungsi

Value Display / Gauge “Heart Rate”

V0

Menampilkan nilai detak jantung (BPM).

Value Display / Gauge “SpO2”

V1

Menampilkan persentase saturasi oksigen darah (%).

Value Display “Body Temp”

V2

Menampilkan suhu tubuh dalam derajat Celsius (°C).


 

Gambar 3. Tampilan dashboard Blynk

3.3       Kode Program

Berikut adalah kode program utama yang digunakan:

#define BLYNK_TEMPLATE_ID "TMPL6by6ezymw"

#define BLYNK_TEMPLATE_NAME "Health Monitoring"

#define BLYNK_AUTH_TOKEN "ISI_AUTH_TOKEN_ANDA"

 

#include <WiFi.h>

#include <BlynkSimpleEsp32.h>

#include <Wire.h>

#include "MAX30105.h"

#include "heartRate.h"

#include <OneWire.h>

#include <DallasTemperature.h>

 

char ssid[] = "NAMA_WIFI";

char pass[] = "PASSWORD_WIFI";

 

MAX30105 particleSensor;

#define ONE_WIRE_BUS 4

OneWire oneWire(ONE_WIRE_BUS);

DallasTemperature bodyTempSensor(&oneWire);

BlynkTimer timer;

 

// Variabel BPM

const byte RATE_SIZE = 4;

byte rates[RATE_SIZE];

byte rateSpot = 0;

byte validBeats = 0;

long lastBeat = 0;

float beatsPerMinute = 0;

int averageBPM = 0;

 

// Variabel SpO2 & Suhu

float spO2 = 0;

unsigned long lastSpO2Calc = 0;

float bodyTemp = 0;

unsigned long lastTempRead = 0;

bool tempRequestSent = false;

 

void readBodyTemp() {

  if (!tempRequestSent) {

    bodyTempSensor.requestTemperatures();

    tempRequestSent = true;

    lastTempRead = millis();

    return;

  }

  if (tempRequestSent && (millis() - lastTempRead > 750)) {

    float tempC = bodyTempSensor.getTempCByIndex(0);

    if (tempC != DEVICE_DISCONNECTED_C && tempC > 0 && tempC < 50) {

      bodyTemp = tempC;

      Blynk.virtualWrite(V2, bodyTemp);

    }

    tempRequestSent = false;

  }

}

 

void sendVitalSigns() {

  if (averageBPM > 0) {

    Blynk.virtualWrite(V0, averageBPM);

    Blynk.virtualWrite(V1, (int)spO2);

  }

}

 

void setup() {

  Serial.begin(115200);

  Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);

 

  bodyTempSensor.begin();

 

  if (!particleSensor.begin(Wire, I2C_SPEED_FAST)) {

    while (1);

  }

  particleSensor.setup(0x1F, 4, 2, 100, 411, 4096);

  particleSensor.setPulseAmplitudeRed(0x1F);

  particleSensor.setPulseAmplitudeIR(0x1F);

  particleSensor.setPulseAmplitudeGreen(0);

 

  timer.setInterval(3000L, readBodyTemp);

  timer.setInterval(1000L, sendVitalSigns);

}

 

void loop() {

  Blynk.run();

  timer.run();

 

  long irValue = particleSensor.getIR();

 

  if (irValue < 50000) {

    averageBPM = 0; validBeats = 0; rateSpot = 0; spO2 = 0;

  } else {

    if (checkForBeat(irValue)) {

      long delta = millis() - lastBeat;

      lastBeat = millis();

      beatsPerMinute = 60.0 / (delta / 1000.0);

      if (beatsPerMinute > 40 && beatsPerMinute < 200) {

        rates[rateSpot++] = (byte)beatsPerMinute;

        rateSpot %= RATE_SIZE;

        if (validBeats < RATE_SIZE) validBeats++;

      }

    }

    if (validBeats >= RATE_SIZE) {

      int sum = 0;

      for (byte i = 0; i < RATE_SIZE; i++) sum += rates[i];

      averageBPM = sum / RATE_SIZE;

    }

 

    if (millis() - lastSpO2Calc > 2000) {

      lastSpO2Calc = millis();

      long redValue = particleSensor.getRed();

      if (irValue > 0 && redValue > 0) {

        float ratio = (float)irValue / (float)redValue;

        spO2 = 105.0 - (ratio * 5.0);

        if (spO2 > 100) spO2 = 100;

        if (spO2 < 70) spO2 = 0;

      }

    }

  }

}

 

Penjelasan Alur Kerja Program:

1.       Inisialisasi. ESP32 terhubung ke Wi-Fi dan Blynk. Sensor MAX30102 dikonfigurasi dengan daya LED 0x1F dan resolusi ADC 18 bit agar sinyal AC (denyut) terbaca jelas.

2.       Pemrosesan BPM. Fungsi checkForBeat() mendeteksi puncak gelombang dari nilai inframerah. Selisih waktu antarpuncak dihitung untuk memperoleh BPM, lalu dirata-ratakan menggunakan circular buffer (RATE_SIZE = 4) agar keluaran lebih stabil.

3.       Pemrosesan SpO2. Setiap 2 detik, sistem menghitung rasio nilai IR terhadap nilai merah untuk memperkirakan persentase SpO2 menggunakan rumus empiris sederhana.

4.       Pemrosesan suhu. DS18B20 dipicu untuk mengukur suhu, dan ESP32 mengambil hasilnya.

5.       Transmisi data. BlynkTimer mengirimkan data BPM dan SpO2 setiap 1 detik serta data suhu setiap 3 detik ke Virtual Pin yang sesuai.


 

3.4       Hasil Pengujian

  Pengujian dilakukan dengan menempelkan jari pada sensor dan membandingkan hasilnya dengan kondisi fisiologis yang diharapkan. Hasil pengujian disajikan pada Tabel 5.

Tabel 5. Hasil pengujian sistem

Skenario Pengujian

Keluaran (Serial Monitor / Blynk)

Analisis

Sensor kosong (tidak ada jari)

HR: 0 bpm | SpO2: 0% | Temp: 36,5 °C

Sistem mendeteksi tidak adanya jari (irValue < 50000) dan mereset memori agar data tidak tertahan pada nilai lama.

Jari ditempelkan (kondisi istirahat)

HR: ±72–78 bpm | SpO2: ±96–99% | Temp: 36,5 °C

Algoritma mendeteksi puncak gelombang. Nilai BPM stabil berkat rata-rata bergerak (moving average), dan SpO2 berada pada rentang normal.

Napas dalam (inspirasi dan ekspirasi lambat)

HR: menurun bertahap (misalnya 75 ke 68 bpm)

Perubahan BPM mengikuti pola yang diharapkan pada napas dalam (respiratory sinus arrhythmia), menandakan pembacaan responsif terhadap perubahan fisiologis.

3.5       Analisis dan Keterbatasan

  Hasil pengujian menunjukkan bahwa sistem mampu membaca dan mengirim ketiga parameter ke Blynk secara berkelanjutan. Penggunaan ambang irValue < 50000 efektif membedakan kondisi ada atau tidaknya jari, sedangkan circular buffer empat sampel meredam fluktuasi sesaat pada BPM.

  Meskipun demikian, terdapat beberapa keterbatasan yang perlu diperhatikan. Pertama, nilai SpO2 dihitung dari rasio IR terhadap merah dengan persamaan empiris sederhana yang belum dikalibrasi. Metode standar oksimetri memakai rasio komponen AC dan DC dari kedua panjang gelombang, sehingga nilai SpO2 pada laporan ini hanya berfungsi sebagai indikator awal dan belum dapat dianggap akurat. Kedua, pengujian belum dibandingkan dengan alat ukur komersial sebagai pembanding. Ketiga, sensor DS18B20 mengukur suhu permukaan yang bersinggungan dengannya, yang dapat berbeda dari suhu inti tubuh. Oleh karena itu, sistem ini merupakan purwarupa pembelajaran dan bukan alat medis.


 

BAB IV
PENUTUP

4.1       Kesimpulan

  Berdasarkan perancangan dan pengujian yang telah dilakukan, dapat disimpulkan bahwa:

1.       ESP32 berhasil berkomunikasi dengan sensor MAX30102 melalui I2C dan dengan DS18B20 melalui 1-Wire.

2.       Penerapan algoritma peak detection dengan circular buffer berhasil menstabilkan pembacaan BPM, sementara pendekatan non-blocking pada DS18B20 mencegah konflik timing yang sebelumnya menyebabkan kegagalan pembacaan.

3.       Sistem berhasil mengirimkan data detak jantung (V0), saturasi oksigen (V1), dan suhu (V2) ke platform Blynk IoT secara real-time, dengan catatan nilai SpO2 masih berupa perkiraan yang belum dikalibrasi.

4.2       Saran

  Sistem ini memiliki potensi pengembangan lebih lanjut, antara lain:

1.       Menambahkan kalibrasi algoritma SpO2 menggunakan rasio AC/DC dan alat medis standar (pulse oximeter komersial) sebagai pembanding untuk meningkatkan akurasi.

2.       Menambahkan modul penyimpanan data (SD Card) atau fitur data logging di Blynk untuk merekam riwayat kesehatan pengguna dalam jangka panjang.

3.       Membuat enclosure (casing) hasil cetak 3D yang ergonomis untuk menstabilkan posisi jari dan menghalangi cahaya sekitar, sehingga mengurangi motion artifact.

4.       Menjaga kerahasiaan auth token dan kredensial Wi-Fi, misalnya dengan memisahkannya ke berkas konfigurasi yang tidak dibagikan.





 

DAFTAR PUSTAKA

Blynk Inc. (n.d.). Blynk IoT platform documentation. https://docs.blynk.io

SparkFun Electronics. (n.d.). MAX30102 pulse oximeter and heart rate sensor hookup guide. https://learn.sparkfun.com

Aslam Hossain. (n.d.). IoT based patient health monitor system using Blynk and ESP32 | MAX30100 [Video]. YouTube. https://youtu.be/cKIs-TssoTE

Santos, R., & Santos, S. (n.d.). ESP32 with DS18B20 temperature sensor (Arduino IDE). Random Nerd Tutorials. https://randomnerdtutorials.com/esp32-ds18b20-temperature-arduino-ide/

Santos, R., & Santos, S. (n.d.). ESP32 with MAX30102 pulse oximeter and heart rate sensor. Random Nerd Tutorials. https://randomnerdtutorials.com/esp32-max30102-oximeter-heart-rate-sensor/ 


LAMPIRAN



Tidak ada komentar:

Posting Komentar