Tutorial Belanja komponen

Tutorial › Listrik & Daya

Pemakaian Energi Lampu USB (INA219)

ESP32-WROOM-32D23D22TX0RX0D21D19D18D5TX2RX2D4D2D15GND3V3ENVPVND34D35D32D33D25D26D27D14D12D13GNDVINR100VCCGNDSCLSDAVIN+VIN−INA219+−Baterai 3×AA (4,5V)USBVCCGNDSoket USB + lampu USB

Seberapa lama baterai bisa menyalakan lampu USB? INA219 menghitung muatan yang sudah terpakai (mAh) dan energinya (mWh), lalu memperkirakan sisa baterai dalam persen. Teknik yang sama dipakai power bank dan HP untuk menghitung persen baterai.

Arus sesaat saja tidak cukup untuk mengetahui sisa baterai. Yang dibutuhkan adalah jumlah total arus yang sudah keluar, disebut coulomb counting. Setiap 0,2 detik arus (mA) dikali lama waktunya (jam) lalu dijumlahkan: hasilnya mAh, satuan yang sama dengan yang tertulis di baterai dan power bank. Arus dikali tegangan dikali waktu memberi energi dalam mWh.

Sisa baterai diperkirakan dari mAh terpakai dibanding kapasitas baterai. Tiga AA alkaline berisi ±2000 mAh. Saat memasang baterai baru, tekan switch Baterai baru supaya hitungan dimulai dari nol.

Komponen

KomponenQtyHarga
ESP32 DOIT DevKit V1 30 pin1Rp75.000
INA219 I2C Sensor Arus Tegangan DC Power Monitor1Rp20.000
Holder baterai 3×AA + kabelbaterai AA dibeli terpisah1Rp6.000
Kabel jumper female-female 10 cm (isi 10)isi 10, terpakai 41Rp3.500
Kabel micro USB data 30 cmopsional, kalau belum punya kabel micro USB data1Rp11.700
Total (tanpa opsional)Rp104.500
Daftar komponen proyek ini otomatis masuk ke pesan. Hapus yang sudah kamu punya sebelum dikirim.

Langkah 1: Rangkai komponen

Sambungkan kabel sesuai gambar di atas. Kalau gambar dan tabel terlihat berbeda, ikuti tabel.

DariKeKabel
INA219 VCC→3V3merah
INA219 GND→GNDhitam
INA219 SCL→D22 GPIO22kuning
INA219 SDA→D21 GPIO21biru
Baterai 3×AA (4,5V) +→INA219 VIN+merah
INA219 VIN−→Soket USB + lampu USB VCCmerah
Soket USB + lampu USB GND→Baterai 3×AA (4,5V) −hitam
Baterai 3×AA (4,5V) −→INA219 GNDhitam

Langkah 2: Siapkan dashboard Klenik

Sisa Baterai (perkiraan)ichibot/budi1234/p129/sisa
0 – 10083%
0 detik lalu
Arus Lampuichibot/budi1234/p129/arus
0500210 mA
0 detik lalu
Muatan Terpakaiichibot/budi1234/p129/mah
0 – 2000340.5 mAh
0 detik lalu
Energi Terpakaiichibot/budi1234/p129/mwh
0 – 90001480 mWh
0 detik lalu
Baterai Baruichibot/budi1234/p129/ulang
Ulang
0 detik lalu

Cara cepat: unduh p129.json, ganti budi1234 dengan KODE-mu, lalu import di Klenik (menu titik tiga → Export / Import → Import → Ganti total). Langkah lengkapnya ada di Panduan Klenik.

WidgetTopicSetting
Gauge
Sisa Baterai (perkiraan)
ichibot/KODE/p129/sisa0–100 %
Gauge
Arus Lampu
ichibot/KODE/p129/arus0–500 mA
Gauge
Muatan Terpakai
ichibot/KODE/p129/mah0–2000 mAh
Gauge
Energi Terpakai
ichibot/KODE/p129/mwh0–9000 mWh
Switch
Baterai Baru
ichibot/KODE/p129/ulangpayload ON / OFF

Langkah 3: Upload kode

Library: PubSubClient (Nick O'Leary), Adafruit INA219. Board di Arduino IDE: ESP32 Dev Module. Isi dulu nama WiFi dan password di bagian ISI DULU, lalu ganti budi1234 di baris topic dengan KODE-mu, lalu upload dan buka Serial Monitor (115200).

p129.inoUnduh .ino
// Proyek 129 - Pemakaian Energi Lampu USB (INA219)
// Board: ESP32 DOIT DevKit V1 | Dashboard: klenik.ichibot.id
#include <WiFi.h>
#include <PubSubClient.h>
#include <Wire.h>
#include <Adafruit_INA219.h>

// ===== ISI DULU =====
const char* WIFI_NAMA = "nama-wifi-kamu";
const char* WIFI_PASS = "password-wifi-kamu";

// topic MQTT: ganti budi1234 dengan KODE-mu (sama dengan di dashboard Klenik)
const char* TOPIK_ULANG = "ichibot/budi1234/p129/ulang";
const char* TOPIK_ARUS  = "ichibot/budi1234/p129/arus";
const char* TOPIK_MAH   = "ichibot/budi1234/p129/mah";
const char* TOPIK_MWH   = "ichibot/budi1234/p129/mwh";
const char* TOPIK_SISA  = "ichibot/budi1234/p129/sisa";
const float KAPASITAS_MAH = 2000;     // perkiraan isi 3 baterai AA alkaline

const char* BROKER = "mqtt.ichibot.id";
WiFiClient wifi;
PubSubClient mqtt(wifi);
Adafruit_INA219 ina;
double mAh = 0, mWh = 0;
unsigned long terakhir = 0, kirimTerakhir = 0;

void pesanMasuk(char* t, byte* isi, unsigned int panjang) {
  mAh = 0; mWh = 0;                   // baterai baru: hitung dari nol
  mqtt.publish(TOPIK_ULANG, "OFF");
}

void langganan() {
  mqtt.subscribe(TOPIK_ULANG);
}

sambungWiFi() dan sambungMQTT(): sama di semua proyek (klik untuk lihat)void sambungWiFi() { WiFi.begin(WIFI_NAMA, WIFI_PASS); Serial.print("WiFi"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(" OK, IP " + WiFi.localIP().toString()); } void sambungMQTT() { while (!mqtt.connected()) { if (mqtt.connect(WiFi.macAddress().c_str())) { Serial.println("Terhubung ke Klenik"); langganan(); } else { Serial.println("Broker gagal, coba lagi 3 detik"); delay(3000); } } }
void setup() { Serial.begin(115200); ina.begin(); sambungWiFi(); mqtt.setServer(BROKER, 1883); mqtt.setCallback(pesanMasuk); terakhir = millis(); } void loop() { if (!mqtt.connected()) sambungMQTT(); mqtt.loop(); if (millis() - terakhir >= 200) { // ukur 5x per detik supaya penjumlahan teliti double jam = (millis() - terakhir) / 3600000.0; terakhir = millis(); float mA = max(0.0f, ina.getCurrent_mA()); float volt = ina.getBusVoltage_V(); mAh += mA * jam; mWh += mA * volt * jam; } if (millis() - kirimTerakhir >= 5000) { kirimTerakhir = millis(); float sisa = constrain(100 - mAh / KAPASITAS_MAH * 100, 0, 100); mqtt.publish(TOPIK_ARUS, String(ina.getCurrent_mA(), 0).c_str()); mqtt.publish(TOPIK_MAH, String(mAh, 1).c_str()); mqtt.publish(TOPIK_MWH, String(mWh, 0).c_str()); mqtt.publish(TOPIK_SISA, String(sisa, 0).c_str()); } }

Langkah 4: Pahami kodenya

  1. Coulomb counting: menjumlahkan arus × waktu. Tipe double dipakai karena angka kecil terus ditambahkan ribuan kali.
  2. Kapasitas baterai. AA isi ulang NiMH biasanya 1800-2500 mAh, sedangkan AA biasa (karbon) jauh lebih kecil.