1. Jenis Baterai untuk IoT
Memilih baterai yang tepat adalah langkah pertama dalam merancang perangkat IoT yang hemat energi. Setiap jenis baterai memiliki karakteristik berbeda dalam hal energy density, tegangan, arus maksimum, dan siklus hidup.
- β Energy density tinggi
- β Tegangan 3.0V β 4.2V
- β Rechargeable
- β Banyak kapasitas tersedia
- β Perlu BMS untuk keamanan
- β Degradasi seiring waktu
- β Sangat aman & stabil
- β 2000+ siklus charge
- β Tahan suhu ekstrem
- β Energy density lebih rendah
- β Harga lebih mahal
- β Tegangan berbeda dari Li-Ion
- β Mudah didapat
- β Murah & praktis
- β Tanpa BMS kompleks
- β Energy density rendah
- β Alkaline tidak rechargeable
- β Self-discharge tinggi (NiMH)
Untuk proyek IoT yang membutuhkan daya tahan lama dan bisa diisi ulang, Li-Po 3.7V adalah pilihan terbaik. Untuk proyek outdoor yang butuh ketahanan suhu ekstrem, pertimbangkan LiFePO4. Untuk prototyping cepat, baterai AA NiMH cukup memadai.
2. Analisis Konsumsi Daya
Sebelum merancang sistem manajemen baterai, kita perlu memahami berapa banyak daya yang dikonsumsi perangkat IoT dalam berbagai kondisi operasi. Konsumsi daya bervariasi drastis antara mode aktif dan mode tidur.
| Mode Operasi | Konsumsi Arus (ESP32) | Keterangan |
|---|---|---|
| WiFi TX (transmisi data) | 160 β 260 mA | Saat mengirim data ke server/broker |
| WiFi RX (menerima data) | 60 β 80 mA | Saat menerima data dari WiFi |
| CPU aktif (tanpa WiFi) | 20 β 40 mA | Proses data lokal, membaca sensor |
| Light Sleep | 0.8 mA | CPU tidur, RAM & WiFi tetap aktif |
| Deep Sleep | 10 β 150 Β΅A | Hanya RTC yang aktif, RAM hilang |
| Hibernation | 2.5 Β΅A | Hanya RTC timer, paling hemat |
Konsumsi (mA) β skala logaritmik
β
260mA β€ ββββ
200mA β€ ββββ
100mA β€ ββββ
80mA β€ ββββ ββββ
40mA β€ ββββ ββββ ββββ
1mA β€ ββββ ββββ ββββ ββββ
0.1mA β€ ββββ ββββ ββββ ββββ
0.01mA β€ ββββ ββββ ββββ ββββ ββββ
ββββββββ¬βββββββ¬βββββββ¬βββββββ¬βββββββ¬ββββββ
WiFi WiFi CPU Light Deep Hiber
TX RX Aktif Sleep Sleep nation
Rumus Perhitungan Energi
Energi (mAh) = Arus (mA) Γ Waktu (jam) Contoh perhitungan siklus: - Deep Sleep selama 5 menit: 0.05 mA Γ 5/60 jam = 0.0042 mAh - Bangun & WiFi TX selama 2 detik: 200 mA Γ 2/3600 jam = 0.111 mAh - Total per siklus: 0.115 mAh Per jam (12 siklus): 0.115 Γ 12 = 1.38 mAh/jam Per hari: 1.38 Γ 24 = 33.1 mAh/hari Dengan baterai 1000 mAh: Umur = 1000 / 33.1 = ~30 hari
Jangan lupa memperhitungkan self-discharge baterai (5-10% per bulan untuk Li-Po), efisiensi regulator tegangan (85-95%), dan suhu lingkungan yang mempengaruhi kapasitas baterai.
3. Deep Sleep Mode ESP32
Deep sleep adalah teknik paling efektif untuk menghemat energi pada ESP32. Dalam mode ini, hampir semua komponen dimatikan β hanya RTC (Real-Time Clock) controller yang tetap aktif. RAM hilang, jadi setelah bangun, program berjalan dari awal seperti di-reset.
Cara Kerja Deep Sleep
βββββββββββββββ ββββββββββββββββ βββββββββββββββ
β BOOT / β β AKTIF β β DEEP SLEEP β
β RESET ββββββΊβ (bekerja) ββββββΊβ (tidur) β
β β β β β β
β β’ Inisialisasiβ β β’ Baca sensorβ β β’ RTC only β
β β’ Setup WiFi β β β’ Kirim data β β β’ ~10 Β΅A β
β β’ Setup GPIO β β β’ Proses dataβ β β’ Timer aktifβ
βββββββββββββββ ββββββββββββββββ ββββββββ¬βββββββ
β² β
β Wake-up Timer / β
β External Interrupt β
βββββββββββββββββββββββββββββββββββββββββββ-β
Contoh Program Deep Sleep
// Deep Sleep ESP32 - Battery Management
// BeebaneLabs
#define uS_TO_S 1000000
#define SLEEP_TIME 300 // tidur 5 menit (300 detik)
// RTC_DATA_ATTR: variabel tetap tersimpan selama deep sleep
RTC_DATA_ATTR int bootCount = 0;
void setup() {
Serial.begin(115200);
bootCount++;
Serial.println("Boot #" + String(bootCount));
// === Tahap 1: Baca sensor ===
bacaSensor();
// === Tahap 2: Kirim data via WiFi ===
kirimData();
// === Tahap 3: Konfigurasi & masuk deep sleep ===
esp_sleep_enable_timer_wakeup(SLEEP_TIME * uS_TO_S);
Serial.println("Masuk deep sleep selama " + String(SLEEP_TIME) + " detik...");
esp_deep_sleep_start();
// Program tidak pernah sampai ke loop()
}
void loop() {
// Tidak akan pernah dieksekusi
}
void bacaSensor() {
// Simulasi pembacaan sensor
float suhu = 25.5;
float kelembaban = 65.0;
Serial.println("Suhu: " + String(suhu) + " Β°C");
Serial.println("Kelembaban: " + String(kelembaban) + " %");
}
void kirimData() {
// Hubungkan WiFi, kirim data, putus koneksi
WiFi.begin("SSID", "PASSWORD");
// ... kirim data ke server/MQTT
WiFi.disconnect(true);
WiFi.mode(WIFI_OFF);
}
Variabel biasa (global/static) akan hilang saat deep sleep. Gunakan RTC_DATA_ATTR untuk menyimpan data yang perlu bertahan selama deep sleep. Namun, RTC RAM sangat terbatas (~8 KB).
Wake-up Sources
| Metode Wake-up | Fungsi ESP-IDF | Penggunaan |
|---|---|---|
| Timer | esp_sleep_enable_timer_wakeup() | Bangun secara periodik |
| External GPIO | esp_sleep_enable_ext0_wakeup() | Tombol atau sensor interrupt |
| Touch Pad | esp_sleep_enable_touchpad_wakeup() | Interaksi sentuhan |
| ULP Co-processor | esp_sleep_enable_ulp_wakeup() | Monitoring tanpa CPU utama |
4. Sirkuit Monitoring Baterai
Untuk mengelola baterai dengan baik, kita perlu memantau tegangan baterai secara real-time. ESP32 memiliki ADC 12-bit yang bisa digunakan untuk membaca tegangan, namun tegangan baterai Li-Ion (3.0-4.2V) melebihi batas input ADC ESP32 (0-3.3V), sehingga diperlukan voltage divider.
Baterai Li-Ion (3.0-4.2V)
ββββ(+)βββββββββββββββββββββββ
β β
β βββββββββ€
β β R1 β
β β 100kΞ© β
β βββββ¬ββββ€
β β β
β GPIO 34 (ADC)
β β β
β βββββ΄ββββ€
β β R2 β
β β 100kΞ© β
β βββββ¬ββββ€
β β
ββββ(-)βββββββββββββββββββ
GND
Vout = Vin Γ R2 / (R1 + R2)
Vout = 4.2V Γ 100k / 200k = 2.1V (aman untuk ADC)
Vout = 3.0V Γ 100k / 200k = 1.5V (bacaan minimum)
Kode Monitoring Baterai
// Monitor Tegangan Baterai - ESP32
// BeebaneLabs
#define BATTERY_PIN 34 // Pin ADC untuk baca baterai
#define R1 100000.0 // Resistor atas 100kΞ©
#define R2 100000.0 // Resistor bawah 100kΞ©
#define VOLTAGE_DIVIDER_RATIO ((R1 + R2) / R2)
#define ADC_RESOLUTION 4095.0 // 12-bit ADC
#define ADC_VREF 3.3 // Tegangan referensi ADC
float bacaTeganganBaterai() {
// Baca beberapa kali untuk akurasi
long total = 0;
for (int i = 0; i < 10; i++) {
total += analogRead(BATTERY_PIN);
delay(10);
}
int adcRaw = total / 10; // Rata-rata
// Konversi ADC ke tegangan aktual
float voltage = (adcRaw / ADC_RESOLUTION) * ADC_VREF;
float batteryVoltage = voltage * VOLTAGE_DIVIDER_RATIO;
return batteryVoltage;
}
int hitungPersentase(float voltage) {
if (voltage >= 4.2) return 100;
if (voltage <= 3.0) return 0;
// Linear approximation
return (int)((voltage - 3.0) / 1.2 * 100);
}
void setup() {
Serial.begin(115200);
analogReadResolution(12);
}
void loop() {
float voltage = bacaTeganganBaterai();
int percentage = hitungPersentase(voltage);
Serial.printf("Tegangan Baterai: %.2fV (%d%%)\n", voltage, percentage);
if (percentage < 10) {
Serial.println("WARNING: Baterai hampir habis!");
// Masuk deep sleep lebih lama untuk hemat daya
}
delay(5000); // Cek setiap 5 detik
}
5. Solar Charging untuk IoT
Solar charging memungkinkan perangkat IoT beroperasi tanpa batas waktu tanpa perlu mengganti baterai. Kombinasi panel surya + baterai Li-Ion + charge controller adalah solusi ideal untuk proyek IoT outdoor.
Komponen yang Dibutuhkan
- Panel Surya: 5V-6V, 1-2W (untuk node IoT kecil)
- Charge Controller: IC TP4056 (murah) atau CN3791 (lebih bagus)
- Baterai Li-Ion: 18650 (3.7V, 2000-3500mAh) atau Li-Po
- Boost Converter: Jika perlu tegangan 5V atau 3.3V stabil
βοΈ Sinar Matahari
β
βΌ
βββββββββββββββ ββββββββββββββββ βββββββββββββββ
β Panel Suryaβ β TP4056 β β Baterai β
β 5V 1W βββββΊβ Charge βββββΊβ Li-Ion β
β β β Controller β β 18650 β
βββββββββββββββ ββββββββββββββββ ββββββββ¬βββββββ
β
βΌ
βββββββββββββββ
β Boost/ Buck β
β Converter β
β 3.3V stable β
ββββββββ¬βββββββ
β
βΌ
βββββββββββββββ
β ESP32 β
β DevKit β
βββββββββββββββ
Pilih panel surya yang tegangannya 1.5-2x tegangan baterai untuk efisiensi charging optimal. Di Indonesia (khatulistiwa), 1W panel bisa menghasilkan ~4-5 Wh/hari, cukup untuk node IoT yang mengonsumsi ~50mAh/hari.
6. Battery Management System (BMS)
BMS adalah sirkuit pelindung yang wajib ada pada setiap sistem baterai Li-Ion/Li-Po. BMS melindungi baterai dari kondisi berbahaya yang bisa menyebabkan kebakaran atau ledakan.
Fungsi Utama BMS
| Proteksi | Ambang Batas | Akibat Jika Tidak Ada |
|---|---|---|
| Over-Charge Protection | 4.25V per sel | Baterai mengembung, risiko kebakaran |
| Over-Discharge Protection | 2.5-3.0V per sel | Baterai rusak permanen |
| Over-Current Protection | Tergantung BMS | Korsleting, panas berlebih |
| Short Circuit Protection | Instant cutoff | Kebakaran |
| Cell Balancing | Selisih <50mV | Umur baterai berkurang drastis |
JANGAN PERNAH menggunakan baterai Li-Ion/Li-Po tanpa BMS! Risiko kebakaran sangat nyata. Selalu gunakan BMS yang sesuai dengan konfigurasi sel baterai Anda (1S, 2S, 3S, dll).
Rekomendasi BMS untuk Proyek IoT
- 1S (single cell): Modul BMS 3.7V 1A β murah (~Rp 5.000) dan mudah didapat
- Dengan charging: Modul TP4056 + DW01 β gabungan charge controller dan BMS
- Multi-cell: BMS 2S atau 3S untuk kapasitas lebih besar
7. Estimasi Kapasitas & Umur Baterai
Mengetahui berapa lama baterai akan bertahan sangat penting untuk perencanaan proyek. Berikut adalah metode perhitungan yang bisa Anda gunakan.
Rumus Umur Baterai
Umur (hari) = Kapasitas Baterai (mAh) Γ Efisiensi Regulator
βββββββββββββββββββββββββββββββββββββββββββββββ
Rata-rata Konsumsi per Hari (mAh)
Contoh:
Kapasitas: 2000 mAh (baterai 18650)
Efisiensi: 0.90 (90% untuk buck converter)
Konsumsi: Deep sleep 99.5% + Wake 0.5%
= (0.05mA Γ 24h Γ 0.995) + (200mA Γ 24h Γ 0.005)
= 1.194 + 24.0 = 25.2 mAh/hari
Umur = 2000 Γ 0.90 / 25.2 = ~71 hari (~2.3 bulan)
Tips menambah umur baterai:
β
Perpanjang interval deep sleep (30 menit vs 5 menit)
β
Minimalkan waktu WiFi TX (kompres data)
β
Matikan sensor saat tidak dibaca
β
Gunakan WiFi power save mode
β
Kurangi power transmit WiFi
| Interval Wake-up | Konsumsi/Hari | Umur 2000mAh | Umur 3400mAh |
|---|---|---|---|
| Setiap 1 menit | ~120 mAh | ~15 hari | ~25 hari |
| Setiap 5 menit | ~25 mAh | ~72 hari | ~122 hari |
| Setiap 15 menit | ~10 mAh | ~180 hari | ~306 hari |
| Setiap 1 jam | ~4 mAh | ~450 hari | ~765 hari |
| Setiap 6 jam | ~2 mAh | ~900 hari | ~1530 hari |
8. Best Practices Hemat Energi
Berikut adalah kumpulan best practices yang telah terbukti efektif untuk meminimalkan konsumsi energi pada perangkat IoT:
Teknik Hardware
- Gunakan regulator switching (buck converter) β efisiensi 85-95% vs regulator linear (LDO) yang hanya ~50% jika tegangan input jauh lebih tinggi
- Putuskan power sensor β gunakan MOSFET sebagai saklar untuk mematikan sensor saat tidak digunakan
- Matikan LED onboard β LED bisa mengonsumsi 3-5 mA, cukup signifikan
- Pilih sensor hemat daya β BME280 lebih hemat dari DHT22; gunakan SPI daripada I2C untuk data burst
Teknik Software
// Teknik Power Optimization - ESP32
// BeebaneLabs
void setup() {
// 1. Kurangi frekuensi CPU (hemat daya signifikan)
setCpuFrequencyMhz(80); // Turunkan dari 240MHz ke 80MHz
// 2. Matikan Bluetooth jika tidak digunakan
btStop();
// 3. WiFi power management
WiFi.mode(WIFI_STA);
WiFi.setSleep(WIFI_PS_MAX_MODEM); // Power save mode
// 4. Matikan ADC saat tidak digunakan
adc_power_off();
// 5. Gunakan ULP co-processor untuk tugas ringan
// (baca sensor tanpa menyalakan CPU utama)
}
void loop() {
// Strategi: Wake β Baca β Kirim β Sleep
// Semua operasi dalam satu burst, lalu langsung tidur
}
Checklist Hemat Energi
- β Deep sleep diaktifkan saat idle
- β WiFi hanya aktif saat mengirim data
- β Bluetooth dimatikan jika tidak dipakai
- β CPU frequency diturunkan jika tidak butuh komputasi berat
- β Sensor dimatikan (power cut) saat tidak dibaca
- β Data dikompres sebelum dikirim
- β BMS terpasang untuk proteksi baterai
- β Monitoring tegangan baterai aktif
9. Quiz: Uji Pemahamanmu!
Setelah membaca tutorial di atas, jawablah 5 pertanyaan berikut untuk menguji pemahamanmu tentang battery management untuk IoT: