Tutorial Belanja komponen

Tutorial › Listrik & Daya

Monitor Baterai Panel Surya

ESP32-WROOM-32D23D22TX0RX0D21D19D18D5TX2RX2D4D2D15GND3V3ENVPVND34D35D32D33D25D26D27D14D12D13GNDVINR100VCCGNDSCLSDAVIN+VIN−INA219+−Panel surya 5,5V 1,3W18650TP4056IN+IN−TP4056 + baterai 18650

Panel surya kecil mengisi baterai 18650 lewat modul TP4056, dan INA219 di antaranya mencatat tegangan panel, arus pengisian, serta total energi yang dipanen hari ini. Grafiknya memperlihatkan bagaimana matahari pagi, siang, dan mendung memengaruhi hasil panel.

Arus dari panel lewat INA219 (VIN+ → VIN−) sebelum masuk ke pengisi baterai TP4056. Yang diukur adalah arus yang benar-benar dipanen panel. TP4056 mengatur pengisian 18650 dengan aman sampai 4,2V.

Energi adalah daya dikali waktu. Setiap 5 detik daya sesaat (mW) dikali lamanya sejak bacaan sebelumnya (dalam jam), lalu dijumlahkan ke energiHariIni dalam mWh. Saat tanggal berganti (dari jam NTP), total kemarin dikirim ke Text Log dan hitungan dimulai dari nol.

Panel 5,5V 1,3W menghasilkan paling banyak ±240 mA di bawah terik matahari. Saat mendung arusnya bisa turun ke belasan mA.

Komponen

KomponenQtyHarga
ESP32 DOIT DevKit V1 30 pin1Rp75.000
INA219 I2C Sensor Arus Tegangan DC Power Monitor1Rp20.000
1.3W 5.5V 240mA Solar Panel with Wire [147×90 mm1Rp39.000
TP4056 Charger 18650 3.7V 1A 4.2V Micro USB Lith1Rp4.500
18650 Flat Head Lithium Battery Real 2600mAh 3.71Rp32.175
18650 lithium battery 1 bracket socket holder pa1Rp1.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)Rp175.175
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
Panel surya 5,5V 1,3W +→INA219 VIN+merah
INA219 VIN−→TP4056 + baterai 18650 IN+merah
TP4056 + baterai 18650 IN−→Panel surya 5,5V 1,3W −hitam
Panel surya 5,5V 1,3W −→INA219 GNDhitam

Langkah 2: Siapkan dashboard Klenik

Tegangan Panelichibot/budi1234/p122/volt
075.12 V
0 detik lalu
Arus Pengisianichibot/budi1234/p122/arus
0 – 300164 mA
0 detik lalu
Energi Hari Iniichibot/budi1234/p122/energi
0 – 50001830 mWh
0 detik lalu
Grafik Arus Panelichibot/budi1234/p122/arus
10 mA
0.0 mA11 titik300.0 mA
0 detik lalu
Laporan Harianichibot/budi1234/p122/log
Kemarin panel menghasilkan 2410 mWh
0 detik lalu

Cara cepat: unduh p122.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
Tegangan Panel
ichibot/KODE/p122/volt0–7 V
Gauge
Arus Pengisian
ichibot/KODE/p122/arus0–300 mA
Gauge
Energi Hari Ini
ichibot/KODE/p122/energi0–5000 mWh
Chart
Grafik Arus Panel
ichibot/KODE/p122/arus0–300 mA
Text Log
Laporan Harian
ichibot/KODE/p122/logmenampilkan teks masuk

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).

p122.inoUnduh .ino
// Proyek 122 - Monitor Baterai Panel Surya
// Board: ESP32 DOIT DevKit V1 | Dashboard: klenik.ichibot.id
#include <WiFi.h>
#include <PubSubClient.h>
#include <Wire.h>
#include <Adafruit_INA219.h>
#include <time.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_LOG    = "ichibot/budi1234/p122/log";
const char* TOPIK_VOLT   = "ichibot/budi1234/p122/volt";
const char* TOPIK_ARUS   = "ichibot/budi1234/p122/arus";
const char* TOPIK_ENERGI = "ichibot/budi1234/p122/energi";

const char* BROKER = "mqtt.ichibot.id";
WiFiClient wifi;
PubSubClient mqtt(wifi);
Adafruit_INA219 ina;
float energiHariIni = 0;              // mWh yang masuk dari panel hari ini
int hariTadi = -1;
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); ina.begin(); sambungWiFi(); configTime(7 * 3600, 0, "pool.ntp.org"); mqtt.setServer(BROKER, 1883); } void loop() { if (!mqtt.connected()) sambungMQTT(); mqtt.loop(); if (millis() - terakhir < 5000) return; float jam = (millis() - terakhir) / 3600000.0; // lama sejak bacaan terakhir, dalam jam terakhir = millis(); float volt = ina.getBusVoltage_V() + ina.getShuntVoltage_mV() / 1000; float mA = max(0.0f, ina.getCurrent_mA()); float mW = volt * mA; energiHariIni += mW * jam; // energi = daya x waktu time_t t = time(nullptr); struct tm* w = localtime(&t); if (t > 1700000000 && w->tm_mday != hariTadi) { // hari baru: laporkan kemarin lalu nolkan if (hariTadi != -1) mqtt.publish(TOPIK_LOG, ("Kemarin panel menghasilkan " + String(energiHariIni, 0) + " mWh").c_str()); hariTadi = w->tm_mday; energiHariIni = 0; } mqtt.publish(TOPIK_VOLT, String(volt, 2).c_str()); mqtt.publish(TOPIK_ARUS, String(mA, 0).c_str()); mqtt.publish(TOPIK_ENERGI, String(energiHariIni, 0).c_str()); }

Langkah 4: Pahami kodenya

  1. Integrasi sederhana: setiap potongan waktu, daya × lamanya ditambahkan. Makin sering diukur, makin akurat.
  2. Arus negatif kecil saat malam (derau) dibuang supaya tidak mengurangi total energi.
  3. Pergantian hari dideteksi dari tanggal. Laporan pertama setelah ESP32 menyala dilewati karena datanya belum sehari penuh.