Parçalar · 11 dk okuma

TP4056 Bağlantısı: 18650 Pil Şarj Modülü Kullanımı ve ESP32

TP4056 şarj modülü nasıl bağlanır? B+/B- ve OUT+/OUT- pinleri, korumalı DW01 farkı, LED anlamları, Rprog ile akım ayarı, MT3608 ile 5 V ve ESP32 pil ölçümü.

TP4056 bağlantısı, tek hücreli bir 18650 ya da Li-Po pili USB'den güvenle şarj edip aynı pille Arduino, ESP32 veya Raspberry Pi Pico projesini beslemenin en ucuz yoludur: USB kablosu modülün girişine, pil B+ ve B- uçlarına, devren ise korumalı modüllerde OUT+ ve OUT- uçlarına bağlanır. Modül pili 4,2 V'a kadar sabit akım ve sabit gerilim yöntemiyle doldurur, pil dolunca şarjı kendisi keser ve durumu iki LED ile gösterir. Tırnak büyüklüğündeki bu kart; taşınabilir hava istasyonları, robotlar, şarjlı lambalar ve kablosuz sensörler gibi prizden bağımsız çalışan projelerin kalbidir.

Ama bu ucuz modülün birkaç tuzağı var: korumalı ve korumasız sürümler farklı bağlanır, varsayılan 1 A şarj akımı küçük piller için fazladır, şarj olurken devreyi beslemek şarjın bitmesini engelleyebilir ve seri bağlı iki pil bu modülle asla şarj edilmez. Bu yazıda pinleri tek tek, LED'lerin anlamını, şarj akımını Rprog direnciyle ayarlamayı, 5 V isteyen kartlar için MT3608 boost modülü eklemeyi ve ESP32 ile pil voltajını ölçüp yüzdeye çevirmeyi adım adım öğreneceksin.

USB-C girişli korumalı TP4056 18650 şarj modülü
Korumalı TP4056 modülü: solda USB-C girişi ve IN+/IN- pedleri, sağda B+/B- (pil) ve OUT+/OUT- (çıkış) pedleri. Ortadaki büyük yonga TP4056, yanındaki küçük yongalar DW01A koruma entegresi ve 8205A çift MOSFET'tir.

TP4056 nedir, nasıl çalışır?

TP4056, tek hücreli lityum iyon (Li-ion) ve lityum polimer (Li-Po) piller için yapılmış doğrusal (lineer) bir şarj entegresidir. Lityum piller rastgele bir adaptörle doldurulamaz; belirli bir şarj profili ister ve TP4056 bu profili tek başına uygular. Pil 2,9 V'un altındaysa önce ön şarj (trickle) evresinde ayarlı akımın yaklaşık onda biriyle, yani 1 A ayarında 130 mA civarında nazikçe doldurur. Gerilim 2,9 V'u geçince sabit akım (CC) evresine geçer ve ayarlı akımın tamamını verir. Pil 4,2 V'a ulaşınca sabit gerilim (CV) evresi başlar: gerilim 4,2 V'ta tutulur, akım yavaş yavaş azalır. Akım ayarlı değerin onda birine (1 A ayarında 100 mA) inince şarj biter. Pil sonradan yaklaşık 4,05 V'a düşerse modül şarjı kendiliğinden yeniden başlatır. Yonga çok ısınırsa şarj akımını kendi kendine kısar; bu yüzden şarj sırasında modülün sıcak olması normaldir.

ÖzellikDeğer
Giriş gerilimi4,0–8 V (önerilen 5 V; micro USB ya da USB-C)
Şarj bitiş gerilimi4,2 V (±%1,5)
Şarj akımıEn fazla 1 A; modüllerde varsayılan 1 A (Rprog = 1,2 kΩ)
Ön şarj2,9 V altında ayarlı akımın yaklaşık 1/10'u
Şarj bitişiAkım ayarlı değerin 1/10'una düşünce (C/10)
Yeniden şarjPil yaklaşık 4,05 V'a düşünce otomatik
Durum çıkışlarıCHRG (şarj oluyor) ve STDBY (doldu) LED'leri
Uygun pillerYalnız tek hücre (1S) 3,7 V Li-ion ve Li-Po; LiFePO4 değil

Korumalı (DW01) ve korumasız TP4056 modül farkı

Piyasada aynı adla iki farklı kart satılır. Korumasız modülde yalnızca TP4056 yongası vardır ve dört bağlantı noktası bulunur: IN+/IN- ve BAT+/BAT-. Bu kart pili doldurur ama pil boşalırken hiçbir şeyi denetlemez. Korumalı modülde ise ek olarak DW01A koruma entegresi ile 8205A çift MOSFET bulunur ve altı ped vardır: IN+/IN-, B+/B- ve OUT+/OUT-. Koruma devresi, pilin eksi ucu ile devrenin eksi ucu (OUT-) arasına bir anahtar gibi girer. Pil aşırı boşalınca, aşırı dolunca, devre çok fazla akım çekince ya da çıkış kısa devre olunca bu anahtarı açar ve pili devreden ayırır.

ÖzellikKorumasız modülKorumalı modül (DW01A + 8205A)
PedlerIN+, IN-, BAT+, BAT-IN+, IN-, B+, B-, OUT+, OUT-
Aşırı şarj korumasıYalnız TP4056'nın 4,2 V sınırıEk olarak yaklaşık 4,25–4,3 V'ta keser
Aşırı deşarj korumasıYokYaklaşık 2,4 V'ta keser, 3,0 V civarında bırakır
Aşırı akım ve kısa devreYokYaklaşık 3 A'de ve kısa devrede keser
Ne zaman seçilir?Pilin kendi koruma devresi varsaKorumasız çıplak hücrelerde, yani hemen her projede
Hangisine sahip olduğunu anlamak kolay: kartın pil tarafında altı ped (B+, B-, OUT+, OUT-) ve TP4056'nın yanında iki küçük yonga daha görüyorsan modül korumalıdır. Yalnızca BAT+ ve BAT- yazıyorsa korumasızdır. Fiyat farkı çok küçük olduğu için her zaman korumalı sürümü tercih et.

18650 pil: bilmen gereken gerilim değerleri

18650 adı pilin ölçüsünden gelir: 18 mm çap, 65 mm uzunluk. Anma gerilimi 3,6–3,7 V'tur, ama bu bir ortalamadır; dolu pil 4,2 V, boşalmış pil ise 3,0 V civarındadır. Gerçek kapasiteler 2000–3500 mAh arasındadır; üzerinde 6800 ya da 9900 mAh yazan piller sahtedir ve çoğu zaman 1000 mAh bile vermez. Kendi koruma devresi olan (korumalı) 18650'ler birkaç milimetre daha uzundur ve her pil yuvasına sığmayabilir. Projenin bir pille ne kadar çalışacağını Pil Ömrü Hesaplama aracıyla bulabilir, kapasite birimlerini mAh ve Wh yazısında okuyabilirsin.

DurumGerilimAçıklama
Tam dolu4,20 VTP4056 şarjı burada bitirir
Anma (nominal)3,6–3,7 VEtiketteki değer, ortalama çalışma gerilimi
Boşalmış sayılır3,0–3,3 VProjeyi burada durdurmak pil ömrünü uzatır
Koruma kesimi2,4–2,5 VDW01A çıkışı kapatır; bu kadar boşaltmamaya çalış
Tehlikeli bölge2,0 V altıUzun süre böyle kalmış pili şarj etme, değiştir
18650 Li-ion pil
18650 Li-ion pil: 18 mm çap, 65 mm boy ve 3,7 V anma gerilimi. Bağlantı için pil yuvası ya da punta kaynaklı nikel şerit kullanılır.
18650 pile asla doğrudan havyayla lehim yapma; ısı pilin içine zarar verir ve tehlikelidir. Pil yuvası ya da punta kaynaklı nikel şerit kullan. Ezilmiş, şişmiş ya da kılıfı yırtılmış pili kullanma, şarjı yanıcı olmayan bir yüzeyde yap ve 0 °C'nin altında şarj etme. Hazır modüllerde TEMP pini GND'ye bağlı olduğundan pil sıcaklığı takip edilmez; şarj sırasında pilin ısınıp ısınmadığını arada bir eline alarak kontrol et.

TP4056 bağlantısı: IN, B+/B- ve OUT+/OUT- pinleri

PedNereye bağlanır?Not
USB girişi5 V adaptör ya da bilgisayarMicro USB ya da USB-C; en kolay yol
IN+ / IN-Harici 5 V kaynağın artı ve eksisiUSB yerine lehimle besleme için; ikisini aynı anda kullanma
B+ / B-18650 pilin artı ve eksisiBuraya yalnızca pil bağlanır
OUT+ / OUT-Devrenin (yükün) artı ve eksisiKorumalı modülde yük her zaman buraya
BAT+ / BAT- (korumasız)Pil ve yük birlikteKoruma yok; yük pile paralel bağlanır
  1. Pil yuvasının kırmızı kablosunu B+, siyah kablosunu B- pedine lehimle. Pili henüz yuvaya takma.
  2. Devrenin artı besleme kablosunu OUT+, eksi (GND) kablosunu OUT- pedine lehimle. 5 V isteyen bir kart besleyeceksen araya MT3608 boost modülü gelecek.
  3. Lehimleri kontrol et ve multimetreyle B+ ile B- arasında kısa devre olmadığından emin ol.
  4. Pili kutuplarına dikkat ederek yuvaya tak. Bazı korumalı modüllerde çıkış ilk anda kapalı olabilir; USB'yi bir kez takmak korumayı sıfırlar ve çıkışı açar.
  5. USB kablosunu tak: kırmızı LED yanıyorsa şarj başlamıştır. Pil dolunca kırmızı söner, mavi ya da yeşil LED yanar.
  6. Multimetreyle OUT+ ile OUT- arasında pil gerilimini (3,0–4,2 V) gördüğünde devreni çalıştırabilirsin.
En sık yapılan hata, korumalı modülde devreyi B+ ve B- uçlarına bağlamaktır. Böyle bağlarsan devre çalışır ama DW01A koruması devre dışı kalır: pil 2 V'un altına kadar boşalabilir ve kısa devrede akım sınırsız akar. Pili ters bağlamak ise modülü anında yakar; TP4056'da ters kutup koruması yoktur.

TP4056 LED'leri ne anlatır?

Kırmızı LED (CHRG)Mavi ya da yeşil LED (STDBY)Anlamı
YanıyorSönükŞarj oluyor
SönükYanıyorŞarj tamamlandı (4,2 V)
Yanıp sönüyor ya da titriyorYanıyorPil takılı değil ya da temas yok
SönükSönükGiriş gerilimi 4 V'un altında ya da USB beslemesi yok
Saatlerce yanıyorSönükYük şarjın bitmesini engelliyor ya da pil yorgun

Pil takılı değilken mavi LED'in yanması ve kırmızının titremesi normaldir: modül boş kalan pil ucundaki kondansatörü sürekli doldurup boşaltır. Şarj süresini kabaca kapasite / akım × 1,2 ile tahmin edebilirsin. 2600 mAh bir pil 1 A ile yaklaşık 3 saatte dolar; son bölümde akım giderek azaldığı için süre, basit bölmenin verdiğinden biraz uzundur.

Şarj akımını ayarlamak: Rprog direnci

Şarj akımını, TP4056'nın 2 numaralı PROG pini ile GND arasına bağlı tek bir direnç belirler. Modüllerin çoğunda bu direnç R3 olarak işaretlidir ve üzerinde 1,2 kΩ anlamına gelen 122 kodu yazar; bu da 1 A demektir. Kodları çözmek için SMD Kod Çözücü aracını kullanabilirsin. Formül yaklaşık olarak I (mA) = 1200 / Rprog (kΩ) şeklindedir. Akımı değiştirmek için SMD direnci havyayla söküp yerine istediğin değeri lehimlersin; uygun boyda SMD direnç bulamazsan küçük bir bacaklı direnci de iki pede lehimleyebilirsin.

RprogŞarj akımıUygun pil
10 kΩ130 mA200–300 mAh küçük Li-Po
5 kΩ250 mA300–500 mAh Li-Po
4 kΩ300 mA500–600 mAh Li-Po
3 kΩ400 mA800 mAh civarı
2 kΩ580 mA1000–1200 mAh
1,5 kΩ780 mA1500 mAh ve üzeri
1,2 kΩ1000 mA2000 mAh ve üzeri 18650 (modül varsayılanı)

Genel kural, şarj akımını pil kapasitesinin yarısı (0,5C) civarında tutmaktır: 500 mAh bir Li-Po için 250 mA, 2600 mAh bir 18650 için 1 A uygundur. Isıyı da hesaba kat: TP4056 doğrusal çalıştığı için giriş ile pil arasındaki gerilim farkı ısıya dönüşür. 5 V girişte 3,6 V'luk bir pili 1 A ile doldururken yonga (5 − 3,6) × 1 = 1,4 W ısı üretir; bu yüzden modül çok ısınır ve akımı kendisi kısabilir. Bu tür güç hesaplarını Ohm Kanunu aracıyla da yapabilirsin. Bilgisayarın USB 2.0 portu yalnızca 500 mA verdiği için pili sık sık bilgisayardan şarj edeceksen akımı 500 mA civarına düşürmek mantıklıdır.

Şarj olurken devreyi beslemek (yük paylaşımı)

USB takılıyken projenin çalışmaya devam etmesini istiyorsan en basit yol devreyi OUT+ ve OUT- uçlarına bağlı bırakmaktır; TP4056 bu durumda hem pili doldurur hem de devreyi besler. Ama yonga, pile giden akımla devreye giden akımı birbirinden ayıramaz. Devren sürekli 100 mA'den fazla çekiyorsa toplam akım hiçbir zaman bitiş eşiğinin altına inmez, şarj hiç bitmez ve pil saatlerce 4,2 V'ta bekletilir; bu da pilin ömrünü kısaltır. Devren 1 A'e yakın çekiyorsa pil hiç dolmaz bile. Derin uykudaki bir ESP32 ya da birkaç mA çeken küçük devrelerde doğrudan bağlantı pratikte sorun çıkarmaz; sürekli çalışan Wi-Fi projeleri, motorlar ve LED şeritler için ise bir yük paylaşımı (load sharing) devresi kur.

ParçaBağlantıGörevi
Schottky diyot (1N5817, SS14)Anot USB 5 V'a (IN+), katot devrenin artı girişineUSB varken devreyi doğrudan besler
P kanallı MOSFET (AO3401, DMG2305)Drain pile (OUT+), source devrenin artı girişineUSB yokken pili devreye bağlar
MOSFET gate bağlantısıDoğrudan USB 5 V'a (IN+)USB takılıyken MOSFET kesimde kalır, pil yalnızca şarj olur
100 kΩ dirençMOSFET gate'i ile GND arasınaUSB çekilince gate'i 0 V'a indirir, MOSFET iletime geçer
Bu devrede USB takılıyken devren diyot üzerinden yaklaşık 4,7 V ile beslenir, pil ise TP4056 tarafından yalnızca şarj edilir; böylece şarj doğru zamanda biter. Fiş çekildiğinde MOSFET çok kısa sürede iletime geçer ve devre neredeyse kesintisiz olarak pille çalışmaya devam eder. MOSFET'in nasıl çalıştığını MOSFET Kullanımı, diyot seçimini Diyot Nedir? yazısında bulabilirsin.

5 V gerekiyorsa: MT3608 boost modülü eklemek

18650 pilin gerilimi 3,0 ile 4,2 V arasında gezer; 5 V isteyen Arduino Uno, röle modülleri, servo motorlar ya da WS2812B LED'ler için bu yetmez. Çözüm, gerilimi yükselten bir boost (step-up) dönüştürücüdür. En yaygını MT3608 modülüdür: 2–24 V girişten 28 V'a kadar ayarlanabilir çıkış verir, 1,2 MHz'de çalışır ve içindeki anahtarın akım sınırı 4 A'dir. Tek bir 18650'den 5 V'ta pratikte 0,5–1 A civarı güvenle çekebilirsin; daha fazlasında modül ısınır ve verim düşer. Gerilimi düşürmen gereken durumlarda ise tam tersini yapan LM2596 buck modülünü kullanırsın.

  1. MT3608'in VIN+ ve VIN- girişlerini TP4056'nın OUT+ ve OUT- uçlarına bağla.
  2. Çıkışa henüz hiçbir şey bağlamadan multimetreyi VOUT+ ile VOUT- arasına bağla.
  3. Mavi trimpotu küçük bir tornavidayla çevirerek çıkışı 5,0–5,1 V'a ayarla. Trimpot çok turlu olduğu için gerilim ancak birkaç tur sonra değişmeye başlayabilir; sabırla çevir.
  4. Ayar bitince kartının 5V pinini VOUT+ ucuna, GND pinini VOUT- ucuna bağla.
  5. Devre çalışırken gerilimi bir kez daha ölç; yük altında 4,8 V'un altına düşüyorsa kabloları kısalt ya da çekilen akımı azalt.
KartTek 18650 ile nasıl beslenir?Not
Arduino Uno / NanoMT3608 ile 5,0 V → 5V pini5V pini regülatörü atlar; 5,5 V'u asla geçme
Arduino Pro Mini 3,3 V (8 MHz)OUT+ doğrudan RAW pinineDüşük kayıplı regülatörü pil gerilimiyle çalışabilir
ESP32 DevKitMT3608 ile 5 V → VIN (5V) piniKarttaki AMS1117 yaklaşık 1 V düşürür; pili doğrudan bağlama
Raspberry Pi PicoOUT+ → Schottky diyot → VSYS (pin 39)VSYS 1,8–5,5 V kabul eder; boost gerekmez
SIM800L GSM modülüOUT+ ve OUT- doğrudan3,4–4,4 V ister; Li-ion için idealdir
MT3608'i ayarlamadan önce asla karta bağlama: modüller fabrikadan bilinmeyen, çoğu zaman 5 V'tan çok daha yüksek bir çıkışla gelir ve bu gerilim Arduino'yu ya da ESP32'yi anında yakabilir. Ayrıca boost dönüştürücülerin çıkışında kesme anahtarı yoktur; modül çalışmasa bile pil gerilimi bobin ve diyot üzerinden çıkışa geçer. Projeyi gerçekten kapatmak için pil ile modül arasına bir anahtar koy.

Kartı kod yüklemek için USB'ye takarken boost çıkışı da bağlıysa iki besleme kaynağı birbirine bağlanmış olur. En güvenli yol, kod yüklerken boost çıkışını ayırmaktır. Arduino'nun hangi pinden nasıl beslendiğini Arduino Nasıl Beslenir? yazısında ayrıntılı olarak bulabilirsin.

Seri bağlı piller TP4056 ile şarj edilmez

TP4056 yalnızca tek hücreyi (1S) 4,2 V'a kadar doldurur. Robot arabalarda sık kullanılan iki seri 18650'lik paket (2S) 7,4 V anma ve 8,4 V dolu gerilimdedir; bu paketi tek bir TP4056'ya bağlarsan şarj olmaz, üstelik modül ve piller zarar görebilir. Her pile ayrı bir TP4056 takmak da işe yaramaz: modüllerin eksi girişleri aynı USB kaynağında birleşir; üstteki modülün eksisi alttaki pilin artısına bağlı olduğu için alttaki pil kısa devre olur. Bitiş gerilimi 4,2 V'a sabit olduğu için TP4056, şarjı 3,6 V'ta bitmesi gereken LiFePO4 pillerle de kullanılmaz.

  • Paralel bağla (1S2P): İki pili paralel bağlarsan gerilim 3,7 V kalır, kapasite iki katına çıkar ve TP4056 ile şarj edebilirsin. Birleştirmeden önce pillerin gerilimlerinin eşit olduğundan emin ol.
  • Boost ile yükselt: 7–12 V gerekiyorsa paralel pillerin çıkışını MT3608 ile yükselt.
  • 2S şarj devresi kullan: Seri paket için 8,4 V'luk CC/CV şarj cihazı ve hücreleri dengeleyen (balanslı) bir 2S BMS kartı gerekir.
  • Pilleri çıkarıp şarj et: Seri paketteki hücreleri yuvasından çıkarıp ayrı bir 18650 şarj cihazında tek tek doldurabilirsin.

Pil voltajını ölçmek: gerilim bölücü bağlantısı

Pilin ne kadar dolu olduğunu bilmek için gerilimini ölçmen yeterlidir. Ancak 4,2 V'luk pil doğrudan ESP32'nin ya da Pico'nun analog pinine bağlanamaz, çünkü bu kartların ADC girişi en fazla 3,3 V kaldırır. Çözüm, iki eşit dirençten oluşan bir gerilim bölücüdür: 100 kΩ + 100 kΩ, 4,2 V'u 2,1 V'a indirir ve pilden yalnızca 21 µA çeker. Değerleri Gerilim Bölücü aracıyla hesaplayabilir, devrenin mantığını Gerilim Bölücü Devresi yazısında okuyabilirsin. Ölçüm noktası ile GND arasına 100 nF bir kondansatör eklemek, yüksek değerli dirençlerle yapılan okumayı belirgin şekilde sakinleştirir.

BağlantıArduino UnoESP32Raspberry Pi Pico
Üst direnç (100 kΩ)OUT+ → orta noktaOUT+ → orta noktaOUT+ → orta nokta
Alt direnç (100 kΩ)Orta nokta → GNDOrta nokta → GNDOrta nokta → GND
Orta nokta (ölçüm)A0GPIO 34 (ADC1)GP26 (ADC0)
100 nF kondansatörİsteğe bağlıOrta nokta → GNDOrta nokta → GND
TP4056 OUT-GNDGNDGND
ADC aralığı0–5 V, 10 bitYaklaşık 0–3,1 V, 12 bit0–3,3 V, 12 bit
ESP32'de pil ölçümü için yalnızca ADC1 pinlerini (GPIO 32–39) kullan. ADC2 pinleri Wi-Fi açıkken okunamaz ve hatalı değer döndürür. GPIO 34–39 yalnız giriş olarak çalışan pinlerdir ve tam da bu iş için uygundur.

Arduino Uno'nun ADC'si 5 V referansla çalışır; bölücü sayesinde 4,2 V'luk pil A0'da 2,1 V olarak görünür ve 10 bitlik okuma 0–1023 arasında bir değer verir. Kart USB'den ya da boost modülünden beslendiğinde 5V pini tam 5,00 V olmayabilir; bu gerilimi multimetreyle ölçüp koddaki VREF değerine yazarsan doğruluk belirgin şekilde artar.

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}

ESP32 ile pil voltajı ölçme ve yüzde gösterme

ESP32'nin ADC'si tam doğrusal değildir ve kartlar arasında farklılık gösterir. Bu yüzden ham analogRead yerine, yongadaki fabrika kalibrasyonunu kullanıp doğrudan milivolt döndüren analogReadMilliVolts fonksiyonunu kullanmak daha doğrudur. Aşağıdaki kod 16 ölçümün ortalamasını alır, bölücü oranıyla çarpıp pil gerilimini bulur, tablodan yüzdeye çevirir ve pil 3,3 V'un altına düşerse ESP32'yi 10 dakikalığına derin uykuya gönderir.

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}
Pil gerilimiYaklaşık doluluk
4,20 V%100
4,10 V%89
4,00 V%78
3,90 V%63
3,80 V%40
3,70 V%12
3,60 V%5
3,30 V%0 (projeyi durdur)

Bu değerler dinlenen pil için geçerlidir. Wi-Fi yayını sırasında ESP32 anlık olarak yüksek akım çektiğinde pil gerilimi bir miktar düşer, şarj sırasında ise TP4056 onu yapay olarak yükseltir; bu yüzden en doğru ölçümü Wi-Fi'yi açmadan önce ve şarj takılı değilken alırsın. Uzun pil ömrü için okumayı birkaç dakikada bir yapıp arada ESP32 derin uyku modunu kullan. Şunu da unutma: USB-seri yongası ve güç LED'i bulunan DevKit kartları uykuda bile birkaç mA harcar; aylarca pille çalışacak projelerde düşük tüketimli kartlar tercih edilir.

Raspberry Pi Pico ile pil ölçümü (MicroPython)

Pico bu konuda şanslıdır: VSYS pini 1,8–5,5 V kabul eden dahili bir buck-boost regülatöre bağlıdır, yani tek bir 18650 ile boost modülü olmadan çalışır. TP4056'nın OUT+ ucunu bir Schottky diyot (1N5817) üzerinden VSYS'e (pin 39), OUT- ucunu GND'ye (pin 38) bağla; diyot, USB takılıyken Pico'nun 5 V'unun pile geri akmasını engeller. Pil gerilimini GP26'ya bağlı 100k + 100k bölücüyle ölçebilirsin. Normal Pico'da GP29 pini VSYS'in üçte birini zaten ölçer, ama bu değer diyot düşümü kadar düşük çıkar; Pico W'de ise bu pin Wi-Fi yongasıyla paylaşıldığı için harici bölücü daha güvenli bir yoldur.

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 değeri 0–65535 aralığındadır; 3,3 / 65535 ile çarpınca pindeki gerilimi, bölücü oranı olan 2 ile çarpınca da pil gerilimini bulursun. Pico'yu ilk kez kullanıyorsan Raspberry Pi Pico Nedir? yazısı MicroPython kurulumunu adım adım anlatır.

TP4056 ve 18650 ile proje fikirleri

  • Taşınabilir hava istasyonu: ESP32, sıcaklık sensörü ve OLED ekranı tek 18650 ile çalıştır, pil yüzdesini ekranın köşesinde göster.
  • Güneş enerjili sensör: Açık devre gerilimi 8 V'u geçmeyen küçük bir 6 V güneş panelini IN+/IN- uçlarına bağla, ESP32'yi derin uykuyla günlerce çalıştır.
  • SMS alarm kutusu: SIM800L 3,4–4,4 V istediği için doğrudan 18650 ile beslenir; hareket algılayınca SMS gönderir.
  • Şarjlı gece lambası: LDR ile karanlıkta yanan ve USB-C'den şarj olan bir lamba yap.
  • Robot araba: Paralel bağlı iki 18650'yi TP4056 ile şarj et, motorlar için gerilimi boost modülüyle yükselt; ayrıntılar Arduino Robot Araba Yapımı yazısında.
  • Telefona pil uyarısı: Pil %20'nin altına inince ESP32 bir Telegram botu üzerinden sana mesaj göndersin.

Sık yapılan hatalar ve çözümleri

SorunOlası sebepÇözüm
OUT+ ile OUT- arasında gerilim yokKoruma devresi kilitlendi (aşırı deşarj ya da pilin ilk takılışı)USB'yi birkaç saniye tak; koruma sıfırlanır
Kırmızı LED saatlerce sönmüyorYük 100 mA'den fazla çekiyor ya da pil yorgunYük paylaşımı devresi kur, pili ayrı test et
İki LED de sönükGirişte 4 V'tan az var: bozuk kablo ya da zayıf adaptörBaşka kablo ve en az 1 A'lik adaptör dene
USB-C kabloyla şarj olmuyorBazı ucuz modüllerde CC dirençleri eksikUSB-A'dan USB-C'ye kablo kullan
Modül çok ısınıyor1 A'de doğrusal çalışmanın normal kaybı (yaklaşık 1,4 W)Rprog'u büyüterek akımı düşür, kartı havalandır
ESP32 sürekli yeniden başlıyorPil zayıf ya da AMS1117 düşümü nedeniyle brownoutBoost ile 5 V ver, pil gerilimini kontrol et
Ölçülen voltaj multimetreden farklıBölücü oranı ya da referans gerilimi yanlışMultimetreyle karşılaştırıp koddaki katsayıyı düzelt
Devreyi çalıştırmadan önce multimetreyle her noktayı ölçmek hataların çoğunu önler: pil 3–4,2 V, OUT uçları pil gerilimini, MT3608 çıkışı 5,0 V göstermelidir. Multimetre kullanımına yeniysen Multimetre Nasıl Kullanılır? yazısı işini kolaylaştırır; ESP32'nin pil zayıfken sürekli yeniden başlaması için de ESP32 Brownout Hatası yazısına bakabilirsin.

TP4056, doğru bağlandığında projelerini kablodan kurtaran güvenilir ve ucuz bir parçadır: pili B+ ve B- uçlarına, devreyi OUT+ ve OUT- uçlarına bağla, akımı pile göre ayarla, 5 V için boost ekle ve pil voltajını yazılımla izle. BlueGrays uygulamasında ESP32 derin uyku ile pil tasarrufu, LCD'li dijital voltmetre ve sıcaklık kaydedici gibi pille çalışmaya uygun projeleri devre şemaları ve hazır kodlarıyla adım adım inceleyebilirsin.

Sıkça sorulan sorular

TP4056 modülünde B+ ile OUT+ arasındaki fark nedir?

B+ ve B- yalnızca pilin bağlandığı uçlardır; OUT+ ve OUT- ise koruma devresinden geçen çıkıştır ve devren buraya bağlanır. Korumalı modülde OUT+ aslında B+ ile aynı noktadır. Fark eksi taraftadır, çünkü OUT- ile B- arasında pili gerektiğinde ayıran MOSFET'ler bulunur.

TP4056 ile 18650 pil kaç saatte dolar?

Varsayılan 1 A akımla 2500–3000 mAh bir 18650 yaklaşık 3–3,5 saatte dolar. Son evrede akım giderek azaldığı için süre, kapasitenin akıma bölünmesiyle bulunan değerden yaklaşık yüzde 20 daha uzundur. Akımı düşürdüysen süre de aynı oranda uzar.

TP4056 şarj olurken aynı anda devreyi besler mi?

Evet, OUT uçlarına bağlı devre şarj sırasında da beslenir. Ancak devre sürekli 100 mA'den fazla çekerse şarj hiç bitmeyebilir ve pil sürekli 4,2 V'ta tutulur. Büyük yüklerde bir Schottky diyot ve P kanallı MOSFET ile yük paylaşımı devresi kurmak daha doğrudur.

TP4056 ile iki 18650 pil şarj edilebilir mi?

Paralel bağlı iki pil (3,7 V) sorunsuz şarj edilir, yalnızca süre uzar. Seri bağlı iki pil (7,4 V) ise TP4056 ile şarj edilemez, çünkü modül tek hücre için 4,2 V'ta durur. Seri paketler için 8,4 V'luk 2S şarj cihazı ve dengeleme yapan bir BMS kartı gerekir.

TP4056'da kırmızı ve mavi LED ne anlama gelir?

Kırmızı LED pilin şarj olduğunu, mavi ya da yeşil LED şarjın tamamlandığını gösterir. Pil takılı değilken mavi LED yanar ve kırmızı titrer. İkisi de sönükse modüle yeterli giriş gerilimi gelmiyordur.

ESP32 18650 pil ile doğrudan beslenebilir mi?

ESP32 yongası 3,3 V ile çalışır; 4,2 V'luk pil yongaya doğrudan bağlanmaz. DevKit kartlardaki AMS1117 regülatörü yaklaşık 1 V düşürdüğü için pil 3,7 V'a inince gerilim yetersiz kalır. En kolay yol MT3608 ile 5 V üretip VIN pinine vermek ya da düşük kayıplı bir 3,3 V regülatör kullanmaktır.

Tüm projeleri gör
ESP32 ile LED Yakma
#103Başlangıç

ESP32 ile LED Yakma

ESP32 ile temel GPIO çıkışı kullanımını öğretir. Bir LED'i dijital pinden açıp kapatarak yanıp sönme efekti elde ederiz. Arduino UNO'daki klasik blink projesinin ESP32 versiyonu; Arduino ortamındaki temel blink komutları aynıdır, ancak ESP32'nin pin yerleşimi ve 3,3 V GPIO seviyeleri Arduino UNO'dan farklıdır.

4.7(37)
99
ESP32 LDR Modülü ile Işık Şiddeti Okuma
#113Başlangıç

ESP32 LDR Modülü ile Işık Şiddeti Okuma

LDR modülünün ham ADC değerini ve karanlık/aydınlık referanslarına göre hesaplanan göreli ışık yüzdesini Serial Monitor'da gerçek zamanlı izleme. Bu yüzde lux ölçümü değildir. Modülün kalibrasyon mantığını öğretir. Proje 10'un öncesinde yapılması ideal; çünkü eşik değerini belirlemek için kullanılır.

4.6(36)
55
ESP32 Deep Sleep — Pil Tasarrufu (OLED + RTC RAM Sayaç)
#135İleri
Premium

ESP32 Deep Sleep — Pil Tasarrufu (OLED + RTC RAM Sayaç)

ESP32'nin Deep Sleep modu, CPU ve çoğu çevre birimini kapatarak akım tüketimini ~10µA seviyesine düşürür ve pille çalışan IoT cihazları için kritik öneme sahiptir. Bu projede üç farklı uyandırma kaynağını kullanıyoruz: zamanlayıcı (timer, 15sn), harici pin (EXT0 — buton GPIO 33) ve touch (T0/GPIO 4). RTC_DATA_ATTR ile işaretlenen değişkenler deep sleep boyunca korunur — boot sayacı, timer wake sayacı ve buton wake sayacı kalıcı olarak izlenir. SSD1306 OLED ekranda her uyanışta wake reason, say

4.3(10)
16
LCD Ekran ile Dijital Voltmetre
#56Orta
Premium

LCD Ekran ile Dijital Voltmetre

Pilin ya da adaptörün ne kadar gerilim verdiğini kendi yaptığın ölçü aletiyle öğren. İki dirençten oluşan bir bölücü yüksek gerilimi kartın okuyabileceği seviyeye indirir, Arduino da gerçek değeri hes

4.5(27)
36
ESP32 Sıcaklık Loglayıcı (DHT22 + DS1307 RTC + microSD + OLED)
#144İleri
Premium

ESP32 Sıcaklık Loglayıcı (DHT22 + DS1307 RTC + microSD + OLED)

ESP32 ile zamanlı sıcaklık ve nem kayıt sistemi kur! Bu projede DHT22 sensörü ile dakikada bir sıcaklık/nem okuyup DS1307 RTC modülünden aldığın gerçek zaman etiketiyle microSD karta CSV formatında kaydediyoruz. OLED ekranda büyük font ile son sıcaklık değeri, nem yüzdesi, timestamp ve toplam kayıt sayısı canlı gösterilir. SD kart üzerindeki /temp_log.csv dosyası Excel/Google Sheets/Python pandas ile açılıp analiz edilebilir — sera monitörü, ev/oda sıcaklık takibi, laboratuvar veri toplama,

4.7(7)
12
ESP32 HTTPClient + Hava Durumu API (SSD1306 OLED Ekranlı)
#134İleri
Premium

ESP32 HTTPClient + Hava Durumu API (SSD1306 OLED Ekranlı)

Bu projede ESP32 ile internet üzerinden hava durumu API'sine (wttr.in) HTTPClient.h kullanarak REST API çağrısı yapıyoruz. Bir önceki I2C LCD versiyonundan farklı olarak burada SSD1306 OLED (128×64) ekran kullanıyoruz — büyük font, vector ikonlar ve tek ekranda zengin görsel sunum mümkün oluyor. Hava durumu için 7 farklı vector ikon (güneşli, parçalı bulutlu, bulutlu, yağmurlu, karlı, fırtınalı, sisli) runtime'da çiziliyor (bitmap dosyası gerektirmez). Sıcaklık 3x büyük fontla ortada, hava dur

4.3(10)
19
ESP32 Hareket Alarm Sistemi (PIR + Buzzer + LED + Telegram)
#145İleri
Premium

ESP32 Hareket Alarm Sistemi (PIR + Buzzer + LED + Telegram)

PIR sensörü hareket algıladığında buzzer ve LED'i aktif eden, aynı anda Telegram üzerinden sahibine anlık bildirim gönderen akıllı bir güvenlik alarm sistemidir. Tekrarlayan alarmların sıklığını sınırlamak için 30 saniyelik cooldown (bekleme süresi) mekanizması vardır; bu mekanizma PIR sensörünün yanlış algılamalarını doğrulamaz veya ortadan kaldırmaz. Ev güvenliği, garaj izleme, depo veya çalışma odası gibi alanlarda kullanılabilir. Telegram entegrasyonu sayesinde nerede olursanız olun anında h

0.0(0)
9
L298N ile Bluetooth Kontrollü Araba
#80İleri
Premium

L298N ile Bluetooth Kontrollü Araba

Telefonunu kumandaya çevirip kendi robot arabanı sür. Arduino, Bluetooth modülü üzerinden telefondaki bir kumanda uygulamasından gelen komutları alır ve motor sürücüyle tekerlekleri döndürür; araba il

5.0(38)
65