Komponen · 13 mnt baca

Panduan Pengkabelan TP4056: Modul Charger 18650, Proteksi, dan ESP32

Cara menyambungkan charger TP4056: pin B+/B- dan OUT+/OUT-, versi DW01 dengan proteksi, arti LED, mengatur arus dengan Rprog, 5 V lewat MT3608, dan membaca baterai dengan ESP32.

Pengkabelan TP4056 adalah cara termurah untuk mengisi baterai 18650 atau LiPo satu sel dengan aman dari USB, lalu menjalankan proyek Arduino, ESP32, atau Raspberry Pi Pico dari baterai yang sama: kabel USB masuk ke input modul, baterai ke B+ dan B-, dan pada modul berproteksi rangkaianmu ke OUT+ dan OUT-. Modul ini mengisi baterai sampai 4,2 V dengan metode arus konstan/tegangan konstan, berhenti sendiri ketika baterai penuh, dan menunjukkan statusnya lewat dua LED. Board seukuran kuku jari ini adalah jantung proyek yang bekerja jauh dari stopkontak, seperti stasiun cuaca portabel, robot, lampu isi ulang, dan sensor nirkabel.

Tapi modul murah ini punya beberapa jebakan: versi dengan proteksi dan tanpa proteksi disambung dengan cara berbeda, arus pengisian bawaan 1 A terlalu besar untuk baterai kecil, memberi daya ke rangkaian selama pengisian bisa membuat pengisian tidak pernah selesai, dan dua sel yang dirangkai seri sama sekali tidak bisa diisi dengan modul ini. Di panduan ini kamu akan mempelajari langkah demi langkah fungsi tiap pin, arti LED-nya, cara mengatur arus pengisian dengan resistor Rprog, cara menambahkan modul boost MT3608 untuk board yang butuh 5 V, serta cara mengukur tegangan baterai dengan ESP32 dan mengubahnya menjadi persentase.

Modul charger 18650 TP4056 dengan proteksi dan input USB-C
Modul TP4056 dengan proteksi: input USB-C dan pad IN+/IN- di kiri, pad B+/B- (baterai) dan OUT+/OUT- (output) di kanan. Chip besar di tengah adalah TP4056; chip kecil di sebelahnya adalah IC proteksi DW01A dan dual MOSFET 8205A.

Apa itu TP4056 dan bagaimana cara kerjanya?

TP4056 adalah IC charger linear yang dibuat untuk baterai lithium-ion (Li-ion) dan lithium-polymer (LiPo) satu sel. Baterai lithium tidak bisa diisi dengan sembarang adaptor; baterai ini butuh profil pengisian tertentu, dan TP4056 menjalankannya sendiri. Jika baterai di bawah 2,9 V, chip ini lebih dulu mengisi pelan-pelan dalam fase pre-charge (trickle) dengan sekitar sepersepuluh arus yang diatur, kira-kira 130 mA pada pengaturan 1 A. Begitu tegangan melewati 2,9 V, chip pindah ke fase arus konstan (CC) dan memberikan arus penuh sesuai pengaturan. Ketika baterai mencapai 4,2 V, fase tegangan konstan (CV) dimulai: tegangan ditahan di 4,2 V dan arusnya turun perlahan. Pengisian selesai ketika arus turun sampai sepersepuluh nilai yang diatur (100 mA pada pengaturan 1 A). Jika nanti baterai turun ke sekitar 4,05 V, modul otomatis mulai mengisi lagi. Jika chip menjadi sangat panas, chip ini menurunkan arus pengisian dengan sendirinya, jadi wajar kalau modul terasa hangat selama pengisian.

FiturNilai
Tegangan input4,0–8 V (disarankan 5 V; micro USB atau USB-C)
Tegangan akhir pengisian4,2 V (±1,5%)
Arus pengisianMaksimal 1 A; bawaan modul 1 A (Rprog = 1,2 kΩ)
Pre-chargeSekitar 1/10 arus yang diatur di bawah 2,9 V
Akhir pengisianKetika arus turun ke 1/10 nilai yang diatur (C/10)
Pengisian ulangOtomatis ketika baterai turun ke sekitar 4,05 V
Output statusLED CHRG (sedang mengisi) dan STDBY (penuh)
Baterai yang cocokHanya Li-ion dan LiPo satu sel (1S) 3,7 V; bukan LiFePO4

Modul TP4056 dengan proteksi (DW01) vs tanpa proteksi

Ada dua board berbeda yang dijual dengan nama yang sama. Modul tanpa proteksi hanya punya chip TP4056 dan empat titik sambungan: IN+/IN- dan BAT+/BAT-. Modul ini mengisi baterai, tapi tidak mengawasi apa pun ketika baterai sedang dipakai. Modul dengan proteksi menambahkan IC proteksi DW01A dan dual MOSFET 8205A, dan punya enam pad: IN+/IN-, B+/B-, dan OUT+/OUT-. Rangkaian proteksi ini dipasang seperti saklar di antara kutub negatif baterai dan kutub negatif rangkaianmu (OUT-). Ketika baterai terlalu kosong atau terlalu penuh, ketika rangkaian menarik arus terlalu besar, atau ketika output korsleting, saklar ini dibuka dan baterai diputus dari rangkaian.

FiturModul tanpa proteksiModul dengan proteksi (DW01A + 8205A)
PadIN+, IN-, BAT+, BAT-IN+, IN-, B+, B-, OUT+, OUT-
Proteksi overchargeHanya batas 4,2 V dari TP4056Juga memutus di sekitar 4,25–4,3 V
Proteksi over-dischargeTidak adaMemutus di sekitar 2,4 V, menyambung lagi di sekitar 3,0 V
Arus berlebih dan korsletingTidak adaMemutus di sekitar 3 A dan ketika korsleting
Kapan dipilihJika baterainya sudah punya rangkaian proteksi sendiriDengan sel polos tanpa proteksi, artinya hampir di semua proyek
Mudah mengetahui mana yang kamu punya: kalau kamu melihat enam pad di sisi baterai (B+, B-, OUT+, OUT-) dan dua chip kecil lagi di sebelah TP4056, modul itu berproteksi. Kalau tulisannya hanya BAT+ dan BAT-, modul itu tanpa proteksi. Selisih harganya sangat kecil, jadi selalu pilih versi dengan proteksi.

Baterai 18650: tegangan yang perlu kamu tahu

Nama 18650 berasal dari ukuran selnya: diameter 18 mm dan panjang 65 mm. Tegangan nominalnya 3,6–3,7 V, tapi itu nilai rata-rata; sel yang penuh ada di 4,2 V dan sel yang kosong di sekitar 3,0 V. Kapasitas aslinya berkisar 2000 sampai 3500 mAh; sel berlabel 6800 atau 9900 mAh adalah palsu dan sering kali bahkan tidak sampai 1000 mAh. 18650 berproteksi yang punya rangkaian proteksi sendiri beberapa milimeter lebih panjang dan mungkin tidak muat di semua tempat baterai. Kamu bisa menghitung berapa lama proyekmu bertahan dengan satu baterai memakai kalkulator umur baterai, dan membaca tentang satuan kapasitas di Apa Arti mAh?.

KondisiTeganganCatatan
Terisi penuh4,20 VTP4056 mengakhiri pengisian di sini
Nominal (rata-rata)3,6–3,7 VNilai di label, tegangan kerja rata-rata
Dianggap kosong3,0–3,3 VMenghentikan proyekmu di sini memperpanjang umur baterai
Batas putus proteksi2,4–2,5 VDW01A mematikan output; usahakan jangan sampai serendah ini
Zona bahayaDi bawah 2,0 VJangan mengisi sel yang lama dibiarkan serendah ini; ganti saja
Baterai Li-ion 18650
Baterai Li-ion 18650: diameter 18 mm, panjang 65 mm, dan nominal 3,7 V. Sambungkan dengan tempat baterai atau strip nikel yang dilas titik (spot weld).
Jangan pernah menyolder langsung ke sel 18650 dengan solder; panasnya merusak bagian dalam sel dan berbahaya. Pakai tempat baterai atau strip nikel yang dilas titik. Jangan memakai sel yang penyok, menggembung, atau pembungkusnya robek, isi baterai di permukaan yang tidak mudah terbakar, dan jangan pernah mengisi di bawah 0 °C. Pada modul siap pakai, pin TEMP disambung ke GND, jadi suhu baterai tidak dipantau; sesekali pegang selnya selama pengisian untuk memastikan sel tidak memanas.

Pengkabelan TP4056: pin IN, B+/B-, dan OUT+/OUT-

PadDisambung keCatatan
Input USBAdaptor 5 V atau komputerMicro USB atau USB-C; cara paling mudah
IN+ / IN-Plus dan minus sumber 5 V eksternalUntuk daya yang disolder sebagai ganti USB; jangan pakai keduanya bersamaan
B+ / B-Plus dan minus baterai 18650Hanya baterai yang disambung di sini
OUT+ / OUT-Plus dan minus rangkaianmu (beban)Pada modul berproteksi, beban selalu disambung di sini
BAT+ / BAT- (tanpa proteksi)Baterai dan beban bersama-samaTanpa proteksi; beban dipasang paralel dengan baterai
  1. Solder kabel merah tempat baterai ke B+ dan kabel hitamnya ke B-. Jangan pasang baterainya dulu.
  2. Solder kabel catu positif rangkaianmu ke OUT+ dan kabel negatifnya (GND) ke OUT-. Kalau kamu memberi daya ke board yang butuh 5 V, modul boost MT3608 dipasang di antaranya.
  3. Periksa sambungan solder dan pakai multimeter untuk memastikan tidak ada korsleting antara B+ dan B-.
  4. Pasang baterai dengan memperhatikan polaritasnya. Pada beberapa modul berproteksi, output-nya mungkin mati di awal; mencolokkan USB sekali akan mereset proteksi dan menyalakan output.
  5. Colokkan kabel USB: jika LED merah menyala, pengisian sudah dimulai. Ketika baterai penuh, LED merah padam dan LED biru atau hijau menyala.
  6. Begitu multimeter menunjukkan tegangan baterai (3,0–4,2 V) di antara OUT+ dan OUT-, kamu bisa menyalakan rangkaianmu.
Kesalahan paling umum adalah menyambungkan rangkaian ke B+ dan B- pada modul berproteksi. Kalau disambung seperti itu, rangkaian tetap bekerja, tapi proteksi DW01A dilewati: baterai bisa terkuras sampai di bawah 2 V dan ketika korsleting arusnya tidak terbatas. Memasang baterai dengan polaritas terbalik langsung merusak modul; TP4056 tidak punya proteksi polaritas terbalik.

Apa arti LED pada TP4056?

LED merah (CHRG)LED biru atau hijau (STDBY)Arti
MenyalaMatiSedang mengisi
MatiMenyalaPengisian selesai (4,2 V)
Berkedip atau berkelipMenyalaTidak ada baterai terpasang atau kontaknya buruk
MatiMatiInput di bawah 4 V atau tidak ada daya USB
Menyala berjam-jamMatiBeban menghalangi akhir pengisian, atau baterainya sudah aus

Ketika tidak ada baterai terpasang, wajar kalau LED biru menyala dan LED merah berkelip: modul terus mengisi dan mengosongkan kapasitor di terminal baterai yang kosong. Kamu bisa memperkirakan waktu pengisian secara kasar dengan kapasitas / arus × 1,2. Sel 2600 mAh terisi dalam sekitar 3 jam pada 1 A; karena arusnya turun perlahan di tahap akhir, waktunya sedikit lebih lama daripada hasil pembagian sederhana.

Mengatur arus pengisian: resistor Rprog

Arus pengisian diatur oleh satu resistor di antara pin PROG TP4056 (pin 2) dan GND. Pada kebanyakan modul, resistor ini bertanda R3 dan bertuliskan kode 122, artinya 1,2 kΩ, yang menghasilkan 1 A. Untuk membaca tanda seperti ini kamu bisa memakai dekoder kode SMD. Rumusnya kira-kira I (mA) = 1200 / Rprog (kΩ). Untuk mengubah arus, lepaskan resistor SMD itu dengan solder lalu pasang nilai yang kamu mau; kalau tidak menemukan resistor SMD dengan ukuran yang pas, kamu juga bisa menyolder resistor kaki (through-hole) kecil di antara kedua pad.

RprogArus pengisianBaterai yang cocok
10 kΩ130 mALiPo kecil 200–300 mAh
5 kΩ250 mALiPo 300–500 mAh
4 kΩ300 mALiPo 500–600 mAh
3 kΩ400 mASekitar 800 mAh
2 kΩ580 mA1000–1200 mAh
1,5 kΩ780 mA1500 mAh ke atas
1,2 kΩ1000 mA18650 dengan 2000 mAh ke atas (bawaan modul)

Aturan umumnya, jaga arus pengisian di sekitar setengah kapasitas baterai (0,5C): 250 mA cocok untuk LiPo 500 mAh dan 1 A cocok untuk 18650 2600 mAh. Perhitungkan juga panasnya: karena TP4056 bekerja secara linear, selisih tegangan antara input dan baterai berubah menjadi panas. Ketika mengisi sel 3,6 V dengan 1 A dari input 5 V, chip membuang (5 − 3,6) × 1 = 1,4 W; itulah sebabnya modul menjadi sangat panas dan bisa menurunkan arusnya sendiri. Hitungan daya seperti ini juga bisa kamu lakukan dengan kalkulator hukum Ohm. Port USB 2.0 komputer hanya memberi 500 mA, jadi kalau kamu sering mengisi dari komputer, masuk akal untuk menurunkan arusnya ke sekitar 500 mA.

Memberi daya ke rangkaian selama pengisian (load sharing)

Kalau kamu ingin proyekmu tetap berjalan selama USB tercolok, cara paling sederhana adalah membiarkan rangkaian tersambung ke OUT+ dan OUT-; TP4056 lalu mengisi baterai sekaligus memberi daya ke rangkaian. Tapi chip ini tidak bisa membedakan arus yang masuk ke baterai dan arus yang menuju rangkaian. Jika rangkaianmu terus-menerus menarik lebih dari 100 mA, arus totalnya tidak pernah turun di bawah ambang akhir pengisian, pengisian tidak pernah selesai, dan baterai ditahan di 4,2 V selama berjam-jam, yang memperpendek umurnya. Jika rangkaianmu menarik hampir 1 A, baterainya bahkan tidak akan penuh. Dengan ESP32 dalam deep sleep atau rangkaian kecil yang menarik beberapa mA, sambungan langsung praktis tidak menimbulkan masalah; untuk proyek Wi-Fi yang selalu menyala, motor, dan LED strip, buat rangkaian load sharing (berbagi beban).

KomponenSambunganFungsi
Dioda Schottky (1N5817, SS14)Anoda ke USB 5 V (IN+), katoda ke input positif rangkaianMemberi daya langsung ke rangkaian ketika ada USB
MOSFET kanal P (AO3401, DMG2305)Drain ke baterai (OUT+), source ke input positif rangkaianMenyambungkan baterai ke rangkaian ketika tidak ada USB
Sambungan gate MOSFETLangsung ke USB 5 V (IN+)Ketika USB tercolok, MOSFET tetap mati dan baterai hanya diisi
Resistor 100 kΩDi antara gate MOSFET dan GNDMenarik gate ke 0 V ketika USB dicabut, sehingga MOSFET menyala
Dengan rangkaian ini, selama USB tercolok, rangkaianmu berjalan di sekitar 4,7 V lewat dioda dan TP4056 hanya mengisi baterai, jadi pengisian selesai pada waktu yang tepat. Ketika USB dicabut, MOSFET menyala dengan sangat cepat dan rangkaian terus berjalan dari baterai nyaris tanpa jeda. Cara kerja MOSFET bisa kamu baca di Memakai MOSFET dengan Arduino dan cara memilih dioda di Apa Itu Dioda?.

Butuh 5 V? Menambahkan modul boost MT3608

Tegangan sel 18650 berubah-ubah antara 3,0 dan 4,2 V; itu tidak cukup untuk Arduino Uno, modul relay, motor servo, atau LED WS2812B yang butuh 5 V. Solusinya adalah konverter boost (step-up) yang menaikkan tegangan. Yang paling umum adalah modul MT3608: modul ini memberi output yang bisa diatur sampai 28 V dari input 2–24 V, bekerja di frekuensi switching 1,2 MHz, dan saklar internalnya punya batas arus 4 A. Dalam praktiknya kamu bisa menarik sekitar 0,5–1 A pada 5 V dengan aman dari satu 18650; lebih dari itu modul memanas dan efisiensinya turun. Kalau kamu justru perlu menurunkan tegangan, kamu memakai buck converter LM2596, yang bekerja kebalikannya.

  1. Sambungkan input VIN+ dan VIN- MT3608 ke OUT+ dan OUT- TP4056.
  2. Tanpa menyambungkan apa pun ke output dulu, pasang multimeter di antara VOUT+ dan VOUT-.
  3. Putar trimpot biru dengan obeng kecil untuk mengatur output ke 5,0–5,1 V. Trimpot ini multi-putaran, jadi tegangannya mungkin baru mulai berubah setelah beberapa kali putaran; terus putar dengan sabar.
  4. Setelah diatur, sambungkan pin 5V board-mu ke VOUT+ dan pin GND-nya ke VOUT-.
  5. Ukur tegangannya lagi ketika rangkaian berjalan; jika turun di bawah 4,8 V di bawah beban, perpendek kabelnya atau kurangi arus yang ditarik.
BoardCara memberi daya dari satu 18650Catatan
Arduino Uno / Nano5,0 V dari MT3608 → pin 5VPin 5V melewati regulator; jangan pernah lebih dari 5,5 V
Arduino Pro Mini 3,3 V (8 MHz)OUT+ langsung ke pin RAWRegulator low-dropout-nya bisa bekerja dari tegangan baterai
ESP32 DevKit5 V dari MT3608 → pin VIN (5V)AMS1117 di board menurunkan sekitar 1 V; jangan sambungkan baterai langsung
Raspberry Pi PicoOUT+ → dioda Schottky → VSYS (pin 39)VSYS menerima 1,8–5,5 V; tidak perlu boost
Modul GSM SIM800LOUT+ dan OUT- langsungButuh 3,4–4,4 V; ideal untuk Li-ion
Jangan pernah menyambungkan MT3608 ke board-mu sebelum mengaturnya: modul dikirim dengan output yang tidak diketahui, sering jauh di atas 5 V, dan itu bisa langsung merusak Arduino atau ESP32. Selain itu, konverter boost tidak punya pemutus output; bahkan ketika modul tidak sedang switching, tegangan baterai tetap lewat ke output melalui induktor dan dioda. Untuk benar-benar mematikan proyekmu, pasang saklar di antara baterai dan modul.

Kalau kamu mencolokkan board ke USB untuk meng-upload kode sementara output boost masih tersambung, kamu sedang menyatukan dua sumber daya. Cara paling aman adalah melepas output boost selama upload. Pin mana yang memberi daya ke Arduino, dan bagaimana caranya, dibahas lengkap di Cara Memberi Daya ke Arduino.

Sel seri tidak bisa diisi dengan TP4056

TP4056 hanya mengisi satu sel (1S) sampai 4,2 V. Paket dua sel 18650 seri (2S), yang umum di mobil robot, bertegangan nominal 7,4 V dan 8,4 V ketika penuh; sambungkan ke satu TP4056 dan paket itu tidak akan terisi, bahkan modul dan selnya bisa rusak. Memasang TP4056 terpisah untuk tiap sel juga tidak berhasil: input negatif kedua modul bertemu di catu USB yang sama, dan karena negatif modul atas duduk di positif sel bawah, sel bawah jadi korsleting. Karena tegangan akhirnya tetap di 4,2 V, TP4056 juga tidak dipakai untuk sel LiFePO4, yang pengisiannya harus berhenti di 3,6 V.

  • Sambung paralel (1S2P): Dengan dua sel paralel, tegangannya tetap 3,7 V, kapasitasnya jadi dua kali lipat, dan kamu bisa mengisinya dengan TP4056. Pastikan tegangan kedua sel sama sebelum menyatukannya.
  • Naikkan dengan boost: Jika kamu butuh 7–12 V, naikkan output sel paralel dengan MT3608.
  • Pakai rangkaian pengisian 2S: Paket seri butuh charger CC/CV 8,4 V dan board BMS 2S dengan balancing.
  • Keluarkan sel untuk diisi: Kamu bisa melepas sel-sel paket seri dari tempat baterainya dan mengisinya satu per satu di charger 18650 terpisah.

Mengukur tegangan baterai: pengkabelan pembagi tegangan

Untuk tahu seberapa penuh baterai, cukup ukur tegangannya. Tapi baterai 4,2 V tidak bisa langsung masuk ke pin analog ESP32 atau Pico, karena input ADC-nya maksimal hanya 3,3 V. Solusinya adalah pembagi tegangan dari dua resistor yang sama: 100 kΩ + 100 kΩ menurunkan 4,2 V menjadi 2,1 V dan hanya menarik 21 µA dari baterai. Nilainya bisa kamu hitung dengan kalkulator pembagi tegangan dan cara kerja rangkaiannya bisa kamu baca di rangkaian pembagi tegangan. Menambahkan kapasitor 100 nF di antara titik ukur dan GND membuat pembacaan lewat resistor bernilai besar jauh lebih stabil.

SambunganArduino UnoESP32Raspberry Pi Pico
Resistor atas (100 kΩ)OUT+ → titik tengahOUT+ → titik tengahOUT+ → titik tengah
Resistor bawah (100 kΩ)Titik tengah → GNDTitik tengah → GNDTitik tengah → GND
Titik tengah (pengukuran)A0GPIO 34 (ADC1)GP26 (ADC0)
Kapasitor 100 nFOpsionalTitik tengah → GNDTitik tengah → GND
TP4056 OUT-GNDGNDGND
Rentang ADC0–5 V, 10-bitSekitar 0–3,1 V, 12-bit0–3,3 V, 12-bit
Pada ESP32, pakai hanya pin ADC1 (GPIO 32–39) untuk mengukur baterai. Pin ADC2 tidak bisa dibaca ketika Wi-Fi menyala dan memberi nilai yang salah. GPIO 34–39 adalah pin khusus input dan sangat cocok untuk tugas ini.

ADC Arduino Uno memakai referensi 5 V; berkat pembagi tegangan, baterai 4,2 V terbaca sebagai 2,1 V di A0 dan pembacaan 10-bit memberi nilai antara 0 dan 1023. Ketika board diberi daya dari USB atau modul boost, pin 5V mungkin tidak tepat 5,00 V; ukur dengan multimeter lalu masukkan sebagai VREF di kode, dan akurasinya akan naik dengan jelas.

C++ (Arduino IDE)
1// Arduino Uno: 18650 pil voltajı, A0'da 100k + 100k bölücü / battery voltage, 100k + 100k divider on A0
2const float VREF = 5.0;      // 5V pinini multimetreyle ölçüp yaz / measure the 5V pin and enter it
3const float DIVIDER = 2.0;   // bölücü oranı / divider ratio
4
5void setup() {
6  Serial.begin(9600);
7}
8
9void loop() {
10  long sum = 0;
11  for (int i = 0; i < 16; i++) {      // 16 ölçümün ortalaması / average of 16 readings
12    sum += analogRead(A0);            // 0-1023
13    delay(2);
14  }
15  float v = (sum / 16.0) * VREF / 1024.0 * DIVIDER;
16  Serial.print(F("Pil / Battery: "));
17  Serial.print(v, 2);
18  Serial.println(F(" V"));
19  if (v < 3.3) Serial.println(F("Pil zayif / Battery low"));
20  delay(1000);
21}

Mengukur tegangan baterai dan menampilkan persentase dengan ESP32

ADC ESP32 tidak sepenuhnya linear dan berbeda dari satu board ke board lain. Karena itu, daripada analogRead mentah, lebih akurat memakai analogReadMilliVolts, yang menerapkan kalibrasi pabrik chip dan langsung mengembalikan milivolt. Kode di bawah ini mengambil rata-rata 16 pembacaan, mengalikannya dengan rasio pembagi untuk mendapatkan tegangan baterai, mengubahnya menjadi persentase memakai tabel, dan jika baterai turun di bawah 3,3 V, mengirim ESP32 ke deep sleep selama 10 menit.

C++ (Arduino IDE)
1// TP4056 + 18650: ESP32 ile pil voltajı ve yüzdesi / battery voltage and percentage with ESP32
2const int BAT_PIN = 34;          // ADC1 pini, Wi-Fi açıkken de çalışır / ADC1 pin, works with Wi-Fi on
3const float DIVIDER = 2.0;       // 100k + 100k bölücü: pil / 2 / 100k + 100k divider: battery / 2
4const float LOW_BAT = 3.30;      // bu değerin altında uykuya geç / go to sleep below this voltage
5
6// Yaklaşık gerilim-yüzde tablosu (dinlenen pil) / approximate voltage-percent table (resting cell)
7const float volts[]   = {3.30, 3.60, 3.70, 3.80, 3.85, 3.90, 4.00, 4.10, 4.20};
8const int   percent[] = {   0,    5,   12,   40,   55,   63,   78,   89,  100};
9const int POINTS = 9;
10
11float readBattery() {
12  uint32_t sum = 0;
13  for (int i = 0; i < 16; i++) {           // 16 ölçümün ortalaması / average of 16 readings
14    sum += analogReadMilliVolts(BAT_PIN);  // kalibre edilmiş mV / calibrated millivolts
15    delay(2);
16  }
17  return (sum / 16.0) * DIVIDER / 1000.0;  // pil gerilimi (V) / battery voltage (V)
18}
19
20int toPercent(float v) {
21  if (v <= volts[0]) return 0;
22  if (v >= volts[POINTS - 1]) return 100;
23  for (int i = 1; i < POINTS; i++) {
24    if (v < volts[i]) {                    // iki nokta arasında doğrusal / linear between two points
25      float k = (v - volts[i - 1]) / (volts[i] - volts[i - 1]);
26      return (int)(percent[i - 1] + k * (percent[i] - percent[i - 1]));
27    }
28  }
29  return 100;
30}
31
32void setup() {
33  Serial.begin(115200);
34  analogReadResolution(12);                // 0-4095 aralığı / 0-4095 range
35}
36
37void loop() {
38  float v = readBattery();
39  Serial.printf("Pil / Battery: %.2f V  %%%d\n", v, toPercent(v));
40
41  if (v < LOW_BAT) {                       // yazılımla derin deşarj koruması / software deep-discharge guard
42    Serial.println("Pil zayif, uyku / Battery low, sleeping");
43    esp_sleep_enable_timer_wakeup(10ULL * 60 * 1000000);  // 10 dakika sonra tekrar bak / check again in 10 min
44    esp_deep_sleep_start();
45  }
46  delay(5000);
47}
Tegangan bateraiPerkiraan isi
4,20 V100%
4,10 V89%
4,00 V78%
3,90 V63%
3,80 V40%
3,70 V12%
3,60 V5%
3,30 V0% (hentikan proyek)

Nilai-nilai ini berlaku untuk sel yang sedang istirahat. Ketika ESP32 menarik lonjakan arus besar selama mengirim lewat Wi-Fi, tegangan baterai sedikit turun, dan selama pengisian TP4056 mendorongnya naik secara semu; jadi pembacaan paling akurat kamu dapat sebelum menyalakan Wi-Fi dan ketika charger tidak tercolok. Untuk umur baterai yang panjang, ambil pembacaan setiap beberapa menit dan pakai deep sleep ESP32 di antaranya. Ingat juga bahwa board DevKit dengan chip USB-serial dan LED power tetap menarik beberapa mA bahkan ketika tidur; untuk proyek yang harus berjalan dengan baterai selama berbulan-bulan, board berdaya rendah adalah pilihan yang lebih baik.

Mengukur baterai dengan Raspberry Pi Pico (MicroPython)

Pico beruntung di sini: pin VSYS-nya terhubung ke regulator buck-boost di board yang menerima 1,8–5,5 V, jadi Pico bisa berjalan dari satu 18650 tanpa modul boost. Sambungkan OUT+ TP4056 ke VSYS (pin 39) melalui dioda Schottky (1N5817) dan OUT- ke GND (pin 38); dioda ini mencegah 5 V dari Pico mengalir balik ke baterai ketika USB tercolok. Tegangan baterai bisa kamu ukur dengan pembagi 100k + 100k di GP26. Pada Pico standar, GP29 sudah mengukur sepertiga VSYS, tapi nilainya terbaca lebih rendah sebesar drop dioda; pada Pico W pin ini dipakai bersama chip Wi-Fi, jadi pembagi eksternal adalah jalan yang lebih aman.

MicroPython
1from machine import ADC
2import time
3
4adc = ADC(26)                  # GP26 = ADC0, 100k + 100k bölücü / divider
5CONV = 3.3 / 65535             # read_u16 değerini volta çevirir / converts read_u16 to volts
6DIVIDER = 2                    # bölücü oranı / divider ratio
7
8while True:
9    total = 0
10    for _ in range(16):        # 16 ölçümün ortalaması / average of 16 readings
11        total += adc.read_u16()
12        time.sleep_ms(2)
13    v = total / 16 * CONV * DIVIDER
14    print("Pil / Battery: {:.2f} V".format(v))
15    if v < 3.3:
16        print("Pil zayif / Battery low")   # projeyi durdur / stop the project
17    time.sleep(2)

read_u16 mengembalikan nilai dari 0 sampai 65535; mengalikannya dengan 3.3 / 65535 memberi tegangan di pin, dan mengalikannya dengan rasio pembagi 2 memberi tegangan baterai. Kalau kamu baru mengenal Pico, Apa Itu Raspberry Pi Pico? memandumu menginstal MicroPython langkah demi langkah.

Ide proyek dengan TP4056 dan 18650

  • Stasiun cuaca portabel: Jalankan ESP32, sensor suhu, dan layar OLED dari satu 18650, lalu tampilkan persentase baterai di pojok layar.
  • Sensor tenaga surya: Sambungkan panel surya kecil 6 V yang tegangan open-circuit-nya tetap di bawah 8 V ke IN+/IN-, dan biarkan ESP32 berjalan berhari-hari dengan deep sleep.
  • Kotak alarm SMS: SIM800L butuh 3,4–4,4 V, jadi modul ini bisa langsung berjalan dari 18650 dan mengirim SMS ketika mendeteksi gerakan.
  • Lampu tidur isi ulang: Buat lampu yang menyala dalam gelap dengan LDR dan diisi lewat USB-C.
  • Mobil robot: Isi dua 18650 paralel dengan TP4056 dan naikkan tegangan untuk motor dengan modul boost; detailnya ada di Cara Membuat Mobil Robot Arduino.
  • Peringatan baterai lemah di ponselmu: Ketika baterai turun di bawah 20%, biarkan ESP32 mengirim pesan kepadamu lewat bot Telegram.

Kesalahan umum dan cara mengatasinya

MasalahKemungkinan penyebabSolusi
Tidak ada tegangan antara OUT+ dan OUT-Rangkaian proteksi terkunci (over-discharge atau baterai baru pertama kali dipasang)Colokkan USB selama beberapa detik; proteksinya akan reset
LED merah tetap menyala berjam-jamBeban menarik lebih dari 100 mA atau baterainya sudah ausBuat rangkaian load sharing dan uji baterainya sendiri
Kedua LED matiInput kurang dari 4 V: kabel rusak atau adaptor lemahCoba kabel lain dan adaptor minimal 1 A
Tidak mau mengisi dengan kabel USB-C ke USB-CBeberapa modul murah tidak punya resistor CCPakai kabel USB-A ke USB-C
Modul menjadi sangat panasRugi daya normal dari pengisian linear pada 1 A (sekitar 1,4 W)Turunkan arus dengan Rprog yang lebih besar dan beri board aliran udara
ESP32 terus restartBaterai lemah atau brownout karena drop AMS1117Beri 5 V lewat boost dan periksa tegangan baterai
Tegangan terukur berbeda dari multimeterRasio pembagi atau tegangan referensi salahBandingkan dengan multimeter dan koreksi faktornya di kode
Mengukur setiap titik dengan multimeter sebelum menyalakan rangkaian mencegah sebagian besar kesalahan: baterai harus terbaca 3–4,2 V, terminal OUT menunjukkan tegangan baterai, dan output MT3608 5,0 V. Kalau kamu baru memakai multimeter, Cara Memakai Multimeter akan membantu; dan kalau ESP32-mu terus restart ketika baterai lemah, lihat brownout dan Guru Meditation ESP32.

Kalau disambung dengan benar, TP4056 adalah komponen murah dan andal yang membebaskan proyekmu dari kabel: sambungkan baterai ke B+ dan B-, rangkaian ke OUT+ dan OUT-, atur arus sesuai baterai, tambahkan boost untuk 5 V, dan pantau tegangan baterai lewat software. Di aplikasi BlueGrays kamu bisa menjelajahi proyek yang ramah baterai, seperti hemat baterai dengan deep sleep ESP32, voltmeter digital dengan layar LCD, dan pencatat data suhu, langkah demi langkah lengkap dengan skema rangkaian dan kode siap pakai.

Pertanyaan umum

Apa bedanya B+ dan OUT+ pada modul TP4056?

B+ dan B- hanya tempat baterai disambung; OUT+ dan OUT- adalah output yang melewati rangkaian proteksi, dan di situlah rangkaianmu disambung. Pada modul berproteksi, OUT+ sebenarnya titik yang sama dengan B+. Perbedaannya ada di sisi negatif, karena MOSFET yang memutus baterai ketika diperlukan berada di antara OUT- dan B-.

Berapa lama TP4056 mengisi 18650?

Dengan arus bawaan 1 A, 18650 2500–3000 mAh terisi dalam sekitar 3–3,5 jam. Karena arusnya turun perlahan di tahap akhir, waktunya sekitar 20 persen lebih lama daripada kapasitas dibagi arus. Kalau kamu menurunkan arusnya, waktunya bertambah dengan rasio yang sama.

Bisakah TP4056 memberi daya ke rangkaian selama mengisi?

Bisa, rangkaian yang tersambung ke terminal OUT tetap berjalan selama pengisian. Tapi jika rangkaian itu terus-menerus menarik lebih dari 100 mA, pengisian mungkin tidak pernah selesai dan baterai ditahan di 4,2 V sepanjang waktu. Untuk beban yang lebih besar, lebih baik membuat rangkaian load sharing dengan dioda Schottky dan MOSFET kanal P.

Bisakah TP4056 mengisi dua baterai 18650?

Dua sel paralel (3,7 V) bisa diisi tanpa masalah; hanya butuh waktu lebih lama. Dua sel seri (7,4 V) tidak bisa diisi dengan TP4056, karena modul ini berhenti di 4,2 V untuk satu sel. Paket seri butuh charger 2S 8,4 V dan board BMS dengan balancing.

Apa arti LED merah dan biru pada TP4056?

LED merah menunjukkan baterai sedang diisi, dan LED biru atau hijau menunjukkan pengisian sudah selesai. Ketika tidak ada baterai terpasang, LED biru menyala dan LED merah berkelip. Jika keduanya mati, modul tidak mendapat tegangan input yang cukup.

Bisakah ESP32 berjalan langsung dari baterai 18650?

Chip ESP32 bekerja di 3,3 V, jadi baterai 4,2 V tidak bisa langsung masuk ke chip. Regulator AMS1117 di board DevKit menurunkan sekitar 1 V, jadi begitu baterai turun ke 3,7 V, tegangannya tidak cukup lagi. Cara paling mudah adalah membuat 5 V dengan MT3608 dan memberikannya ke pin VIN, atau memakai regulator 3,3 V low-dropout.

Lihat semua proyek
LED Berkedip dengan ESP32
#103Pemula

LED Berkedip dengan ESP32

Mengajarkan penggunaan output GPIO dasar dengan ESP32. Kita membuat efek berkedip dengan menyalakan dan mematikan LED dari pin digital. Versi ESP32 dari proyek blink klasik di Arduino UNO; perintah blink dasar di lingkungan Arduino sama, tetapi susunan pin ESP32 dan level GPIO 3,3 V-nya berbeda dengan Arduino UNO.

4.7(37)
99
Membaca Intensitas Cahaya dengan Modul LDR ESP32
#113Pemula

Membaca Intensitas Cahaya dengan Modul LDR ESP32

Memantau secara real-time di Serial Monitor nilai ADC mentah modul LDR dan persentase cahaya relatif yang dihitung dari nilai acuan gelap dan terang. Persentase ini bukan pengukuran lux. Mengajarkan logika kalibrasi modul. Ideal dikerjakan sebelum Proyek 10, karena dipakai untuk menentukan nilai ambang.

4.6(36)
55
Deep Sleep ESP32: Hemat Baterai (OLED + Penghitung RTC RAM)
#135Mahir
Premium

Deep Sleep ESP32: Hemat Baterai (OLED + Penghitung RTC RAM)

Mode Deep Sleep ESP32 menurunkan konsumsi arus hingga ~10 µA dengan mematikan CPU dan sebagian besar periferal, sehingga sangat penting untuk perangkat IoT bertenaga baterai. Di proyek ini, kita memakai tiga sumber bangun yang berbeda: timer (15 detik), pin eksternal (EXT0, tombol GPIO 33), dan sentuhan (T0/GPIO 4). Variabel yang ditandai RTC_DATA_ATTR dipertahankan selama deep sleep; penghitung boot, penghitung bangun karena timer, dan penghitung bangun karena tombol terus dilacak.

4.3(10)
16
Voltmeter Digital dengan Layar LCD
#56Menengah
Premium

Voltmeter Digital dengan Layar LCD

Cari tahu berapa tegangan yang diberikan baterai atau adaptor daya dengan alat ukur buatanmu sendiri. Pembagi dari dua resistor menurunkan tegangan tinggi ke tingkat yang bisa dibaca board, dan Arduin

4.5(27)
36
Pencatat Data Suhu ESP32 (DHT22 + RTC DS1307 + microSD + OLED)
#144Mahir
Premium

Pencatat Data Suhu ESP32 (DHT22 + RTC DS1307 + microSD + OLED)

Buat pencatat suhu bercap waktu dengan ESP32! Baca suhu/kelembapan DHT22 setiap menit, ambil waktu sebenarnya dari RTC DS1307, dan catat ke kartu microSD sebagai CSV. OLED menampilkan suhu langsung (font besar), kelembapan, cap waktu, dan penghitung catatan. File /temp_log.csv bisa dibuka di Excel, Google Sheets, atau Python pandas; cocok untuk rumah kaca, suhu kamar, data laboratorium, penyimpanan makanan, atau sarang lebah.

4.7(7)
12
HTTPClient + API Cuaca ESP32 (dengan Layar OLED SSD1306)
#134Mahir
Premium

HTTPClient + API Cuaca ESP32 (dengan Layar OLED SSD1306)

Di proyek ini, kita memakai ESP32 untuk melakukan panggilan REST API ke API cuaca (wttr.in) lewat internet dengan HTTPClient.h. Berbeda dengan versi LCD I2C sebelumnya, di sini kita memakai layar OLED SSD1306 (128×64), yang memungkinkan font besar, ikon vektor, dan tampilan visual yang kaya di satu layar. Tujuh ikon vektor untuk kondisi cuaca (cerah, berawan sebagian, berawan, hujan, salju, badai, berkabut) digambar ketika program berjalan (tanpa file bitmap).

4.3(10)
19
Sistem Alarm Gerakan ESP32 (PIR + Buzzer + LED + Telegram)
#145Mahir
Premium

Sistem Alarm Gerakan ESP32 (PIR + Buzzer + LED + Telegram)

Sistem alarm keamanan pintar yang menyalakan buzzer dan LED ketika sensor PIR mendeteksi gerakan, sekaligus mengirim notifikasi instan ke pemilik lewat Telegram. Cooldown 30 detik membatasi seberapa sering alarm berulang; mekanisme ini tidak memvalidasi deteksi PIR atau menghilangkan pemicu palsu. Cocok untuk rumah, garasi, gudang, atau ruang kerja. Dengan ESP32-CAM bisa ditambahkan notifikasi berfoto; dengan ESP32 DevKit V1 klasik, notifikasinya berupa teks.

0.0(0)
9
Mobil Kendali Bluetooth dengan L298N
#80Mahir
Premium

Mobil Kendali Bluetooth dengan L298N

Jadikan ponselmu remote dan kendarai mobil robotmu sendiri. Arduino menerima perintah dari aplikasi remote control di ponselmu lewat modul Bluetooth dan memutar roda dengan driver motor; mobil maju, m

5.0(38)
65