Pembuka bab Listrik & Daya: INA219 mengukur tegangan, arus, dan daya yang mengalir dari baterai ke kipas, lalu menampilkannya di Klenik setiap detik. Ini multimeter digital yang bisa dibaca dari HP.
INA219 punya resistor sangat kecil (shunt, 0,1 Ω) yang dipasang di jalur positif beban: arus mengalir masuk lewat VIN+ dan keluar lewat VIN−. Arus yang lewat membuat tegangan kecil di kedua ujung shunt, dan chip INA219 mengukurnya lalu menghitung arus dengan hukum Ohm (I = V / R). Chip itu juga mengukur tegangan di VIN− terhadap GND, lalu mengalikan keduanya menjadi daya.
Supaya pengukuran tegangan benar, − baterai harus tersambung ke GND bersama (GND INA219 dan ESP32). Kabel ini tercantum di tabel. Modul ini sanggup mengukur sampai 26V dan ±3,2A, cukup untuk hampir semua proyek baterai dan panel surya kecil.
Komponen
| Komponen | Qty | Harga |
|---|---|---|
| ESP32 DOIT DevKit V1 30 pin | 1 | Rp75.000 |
| INA219 I2C Sensor Arus Tegangan DC Power Monitor | 1 | Rp20.000 |
| Kipas blower 5V 5015 | 1 | Rp20.000 |
| Holder baterai 3×AA + kabelbaterai AA dibeli terpisah | 1 | Rp6.000 |
| Kabel jumper female-female 10 cm (isi 10)isi 10, terpakai 4 | 1 | Rp3.500 |
| Kabel micro USB data 30 cmopsional, kalau belum punya kabel micro USB data | 1 | Rp11.700 |
| Total (tanpa opsional) | Rp124.500 |
Langkah 1: Rangkai komponen
Sambungkan kabel sesuai gambar di atas. Kalau gambar dan tabel terlihat berbeda, ikuti tabel.
| Dari | Ke | Kabel | |
|---|---|---|---|
| INA219 VCC | → | 3V3 | merah |
| INA219 GND | → | GND | hitam |
| INA219 SCL | → | D22 GPIO22 | kuning |
| INA219 SDA | → | D21 GPIO21 | biru |
| Baterai 3×AA (4,5V) + | → | INA219 VIN+ | merah |
| INA219 VIN− | → | Kipas blower 5V + | merah |
| Kipas blower 5V − | → | Baterai 3×AA (4,5V) − | hitam |
| Baterai 3×AA (4,5V) − | → | INA219 GND | hitam |
Langkah 2: Siapkan dashboard Klenik
Cara cepat: unduh p121.json, ganti budi1234 dengan KODE-mu, lalu import di Klenik (menu titik tiga → Export / Import → Import → Ganti total). Langkah lengkapnya ada di Panduan Klenik.
| Widget | Topic | Setting |
|---|---|---|
| Gauge Tegangan | ichibot/KODE/p121/volt | 0–6 V |
| Gauge Arus | ichibot/KODE/p121/arus | 0–500 mA |
| Gauge Daya | ichibot/KODE/p121/daya | 0–3 W |
| Chart Grafik Arus | ichibot/KODE/p121/arus | 0–500 mA |
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).
// Proyek 121 - Monitor Tegangan & Arus DC 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_VOLT = "ichibot/budi1234/p121/volt";
const char* TOPIK_ARUS = "ichibot/budi1234/p121/arus";
const char* TOPIK_DAYA = "ichibot/budi1234/p121/daya";
const char* BROKER = "mqtt.ichibot.id";
WiFiClient wifi;
PubSubClient mqtt(wifi);
Adafruit_INA219 ina; // alamat I2C 0x40
unsigned long terakhir = 0;
void langganan() {}
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);
if (!ina.begin()) Serial.println("INA219 tidak ditemukan, cek SDA/SCL");
sambungWiFi();
mqtt.setServer(BROKER, 1883);
}
void loop() {
if (!mqtt.connected()) sambungMQTT();
mqtt.loop();
if (millis() - terakhir >= 1000) {
terakhir = millis();
float volt = ina.getBusVoltage_V() + ina.getShuntVoltage_mV() / 1000; // tegangan sumber
float mA = ina.getCurrent_mA();
float mW = ina.getPower_mW();
Serial.printf("%.2f V %.0f mA %.0f mW\n", volt, mA, mW);
mqtt.publish(TOPIK_VOLT, String(volt, 2).c_str());
mqtt.publish(TOPIK_ARUS, String(mA, 0).c_str());
mqtt.publish(TOPIK_DAYA, String(mW / 1000, 2).c_str());
}
}Langkah 4: Pahami kodenya
- Tegangan bus diukur di VIN−. Ditambah tegangan shunt (yang hilang di resistor 0,1 Ω), hasilnya tegangan baterai sebenarnya.
- Arus dalam miliampere. Angka negatif berarti VIN+ dan VIN− tertukar.
- Daya dikirim dalam watt supaya angkanya ringkas di gauge.