Menghemat setiap mikroampere: memahami low power modes MCU, menghitung duty cycle dan umur baterai, mengoptimasi konsumsi saat tidur, serta merancang perangkat yang bertahan berbulan-bulan dari satu baterai, ditutup praktik mengukur dan menurunkan arus idle

Perangkat IoT yang kalian hubungkan di episode 12 sekarang hidup dari baterai — dan baterai harus bertahan berbulan-bulan, bukan berhari-hari. Ini mengubah cara pandang: konsumsi daya bukan lagi properti "nice to have", melainkan batasan desain yang menentukan produk bisa eksis atau tidak.
Mengapa power management penting? Lihat angkanya: sensor kebakaran di gedung, tag pelacak di gudang, atau weather station di sawah — tidak ada yang bisa dicabut tiap minggu untuk ganti baterai. Episode ini membangun kemampuan menghitung umur baterai, memanfaatkan low power modes, dan merancang siklus hidup daya perangkat. Ini bukan sekadar menekan tombol "sleep" — ini arsitektur energi.
Satuan arus di embedded tidak dibicarakan dalam ampere, melainkan mikroampere (µA) dan miliampere (mA). Konsumsi MCU membentang dari puluhan miliampere saat aktif penuh, sampai mikroampere saat deep sleep:
| Mode | Konsumsi (STM32L4 tipikal) | Penggunaan |
|---|---|---|
| Active, clock penuh | ~6 mA | Komputasi, sensor, komunikasi |
| Sleep (CPU stop, RAM hidup) | ~10 µA | Menunggu singkat, interrupt cepat |
| Stop / Deep sleep | ~1-2 µA | Hampir semua waktu idle |
| Shutdown | ~30 nA | Daya benar-benar diputus |
Perhatikan perbandingannya: perangkat aktif 6 mA selalu akan habis dalam hitungan hari, tapi perangkat yang tidur di 2 µA dan bangun sesaat bisa bertahan bertahun-tahun dari baterai yang sama. Rahasianya bukan MCU hemat, melainkan jarang bangun.
Formula dasar umur baterai:
Kapasitas baterai (mAh) / Konsumsi rata-rata (mA) = Umur (jam)
Konsumsi rata-rata = (waktu aktif x arus aktif + waktu tidur x arus tidur)
/ total waktu siklusContoh nyata: sensor mengirim data tiap 10 menit, bangun 100 ms dengan arus 20 mA, lalu deep sleep 2 µA. Baterai 1000 mAh:
Satu siklus 600 detik:
- aktif: 0,1 detik x 20 mA = 2 mA·s
- tidur: 599,9 detik x 0,002 mA = 1,2 mA·s
Konsumsi rata-rata ≈ 3,2 mA·s / 600 s ≈ 0,0053 mA
Umur baterai ≈ 1000 mAh / 0,0053 mA ≈ 188.000 jam ≈ 21 tahunPerhatikan kesimpulan mengejutkan: durasi bangun 100 ms dan arus aktif 20 mA hampir tidak berpengaruh — karena ia hanya 0,02% dari waktu. Yang menentukan umur baterai adalah arus idle. Optimasi power yang benar dimulai dari menekan arus saat tidur, bukan mempercepat komputasi.
Setiap MCU modern punya beberapa mode hemat daya, dan pola penggunaannya selalu sama: tidur dalam, bangun cepat, selesaikan, tidur lagi. Kunci pemilihannya:
Contoh pola dengan STM32L4 dan RTC alarm:
void enter_deep_sleep(void) {
/* Siapkan RTC alarm bangun 1 jam lagi */
RTC_AlarmConfig(...);
/* Matikan peripheral yang tidak dipakai */
HAL_SuspendTick();
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
/* Bangun: clock aktif kembali, lanjutkan di sini */
SystemClock_Config();
HAL_ResumeTick();
}Detail yang sering luput:
MCU sering bukan biang keladi — sensor dan radio-lah yang rakus:
| Komponen | Arus saat aktif | Strategi |
|---|---|---|
| MCU | µA - mA | Sleep/deep sleep, matikan clock |
| Sensor (SHT30, MPU6050) | 300 µA - 1 mA | Power off pin, sleep mode sensor |
| Radio WiFi (ESP32) | 80-240 mA saat TX | Kirim sesingkat mungkin, sleep radio |
| Radio LoRa | 20-120 mA saat TX | Duty cycle kecil, jam terbatas (regulasi) |
| LED | 1-20 mA per LED | Hindari selalu menyala; pakai blink singkat |
Aturan praktis: radio adalah musuh nomor satu baterai. WiFi mengirim sesaat dengan puluhan mA — sehingga kebijakan "kirim cepat lalu mati" (duty cycling) jauh lebih penting daripada mempercepat prosesor. Desain jaringan di episode 12 (MQTT, QoS 0) harus mendukung pola ini: kirim sekali, tidur panjang.
Tip
Sebelum mengoptimasi, ukur dulu — jangan menebak. Alatnya: multimeter dalam mode uA (untuk idle) dan energy monitor seperti Nordic Power Profiler Kit atau Joulescope untuk melihat profil arus sepanjang waktu. Satu sesi pengukuran 10 menit sering menemukan pemborosan yang tidak terlihat dari datasheet (misal regulator board yang menarik 100 µA terus-menerus).
loop() kosong — catat baseline.Inti yang harus dibawa pulang:
Di episode 14 selanjutnya kita masuk ke ranah yang membedakan embedded dari semua disiplin lain: real-time constraints — deadline, jitter, dan perilaku deterministik. Kemampuan menjamin "selalu selesai tepat waktu" adalah yang membuat embedded engineer dipercaya untuk sistem yang menggerakkan mesin dan menyelamatkan nyawa. Sampai jumpa di episode 14!