Tutorial Belanja komponen

Tutorial › Listrik & Daya

Tegangan Baterai 18650 (Pembagi Tegangan)

ESP32-WROOM-32D23D22TX0RX0D21D19D18D5TX2RX2D4D2D15GND3V3ENVPVND34D35D32D33D25D26D27D14D12D13GNDVIN18650 3,7V+−100K100KOUTGNDBaterai 18650 + pembagi 2×100K

Ukur tegangan baterai 18650 dengan dua resistor saja, lalu tampilkan voltase dan perkiraan persen isinya di Klenik. Dasar penting untuk semua alat bertenaga baterai: kamu tahu kapan baterai harus diisi sebelum alat mati.

Baterai 18650 penuh bertegangan 4,2V, padahal pin ESP32 maksimal 3,3V. Dua resistor 100K yang disusun seri membagi tegangan itu menjadi dua: titik tengahnya hanya setengah tegangan baterai (2,1V saat penuh), aman untuk GPIO34. ESP32 membaca milivolt di titik tengah, lalu mengalikannya dengan 2.

Resistor dipilih besar (100K) supaya arus yang terbuang lewat pembagi sangat kecil (±20 µA), jadi baterai tidak terkuras oleh pengukurnya sendiri. Persen isi dihitung dari tegangan dengan dua garis lurus: 3,0-3,7V untuk 0-40% dan 3,7-4,2V untuk 40-100%, kira-kira mengikuti kurva baterai Li-ion.

Komponen

KomponenQtyHarga
ESP32 DOIT DevKit V1 30 pin1Rp75.000
18650 Flat Head Lithium Battery Real 2600mAh 3.71Rp32.175
18650 lithium battery 1 bracket socket holder pa1Rp1.000
10x Resistor 1/4 Watt 1% 100K ohm 100000 Metal fisi 10, terpakai 21Rp1.800
Breadboard mini 170 titik1Rp4.875
Kabel jumper male-female 10 cm (isi 10)isi 10, terpakai 21Rp3.500
Kabel micro USB data 30 cmopsional, kalau belum punya kabel micro USB data1Rp11.700
Total (tanpa opsional)Rp118.350
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
Baterai 18650 + pembagi 2×100K OUT→D34 GPIO34hijau
Baterai 18650 + pembagi 2×100K GND→GNDhitam

Langkah 2: Siapkan dashboard Klenik

Tegangan Bateraiichibot/budi1234/p127/volt
343.92 V
0 detik lalu
Isi Bateraiichibot/budi1234/p127/persen
0 – 10066%
0 detik lalu
Bateraiichibot/budi1234/p127/lemah
ISI ULANG!
0 detik lalu

Cara cepat: unduh p127.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 Baterai
ichibot/KODE/p127/volt2.8–4.3 V
Gauge
Isi Baterai
ichibot/KODE/p127/persen0–100 %
Indikator Boolean
Baterai
ichibot/KODE/p127/lemahON = 1 “ISI ULANG!”, OFF = 0

Langkah 3: Upload kode

Library: PubSubClient (Nick O'Leary). 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).

p127.inoUnduh .ino
// Proyek 127 - Tegangan Baterai 18650 (Pembagi Tegangan)
// Board: ESP32 DOIT DevKit V1 | Dashboard: klenik.ichibot.id
#include <WiFi.h>
#include <PubSubClient.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/p127/volt";
const char* TOPIK_PERSEN = "ichibot/budi1234/p127/persen";
const char* TOPIK_LEMAH  = "ichibot/budi1234/p127/lemah";

const char* BROKER = "mqtt.ichibot.id";
WiFiClient wifi;
PubSubClient mqtt(wifi);
const int PIN_BAT = 34;
const float KALI = 2.0;               // pembagi 100K/100K: tegangan di pin = setengah tegangan baterai
unsigned long terakhir = 0;

int persenBaterai(float v) {          // perkiraan kasar kurva Li-ion
  if (v >= 4.20) return 100;
  if (v <= 3.00) return 0;
  if (v >= 3.70) return 40 + (v - 3.70) / 0.50 * 60;   // 3,7-4,2 V = 40-100%
  return (v - 3.00) / 0.70 * 40;                       // 3,0-3,7 V = 0-40%
}

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); sambungWiFi(); mqtt.setServer(BROKER, 1883); } void loop() { if (!mqtt.connected()) sambungMQTT(); mqtt.loop(); if (millis() - terakhir >= 5000) { terakhir = millis(); long jumlah = 0; for (int i = 0; i < 20; i++) jumlah += analogReadMilliVolts(PIN_BAT); float vBat = jumlah / 20 / 1000.0 * KALI; int persen = persenBaterai(vBat); Serial.printf("Baterai %.2f V (%d%%)\n", vBat, persen); mqtt.publish(TOPIK_VOLT, String(vBat, 2).c_str()); mqtt.publish(TOPIK_PERSEN, String(persen).c_str()); mqtt.publish(TOPIK_LEMAH, vBat < 3.3 ? "1" : "0"); } }

Langkah 4: Pahami kodenya

  1. Faktor pembagi. Untuk 100K + 100K hasilnya 2. Kalau memakai 100K + 47K, faktornya (100 + 47) / 47 = 3,13.
  2. Tegangan Li-ion tidak turun lurus. Dua garis ini perkiraan yang cukup baik untuk pemakaian sehari-hari.
  3. Rata-rata 20 bacaan dalam milivolt, diubah ke volt, lalu dikali faktor pembagi.