ESP8266 ile Akıllı 12V Akü Şarj Kontrol

👤 Yazar: ozcan 📅 Tarih: 24.05.2026 14:38 👁️ Görüntüleme: 118

ESP8266 ile Akıllı 12V Akü Şarj Kontrol Devresi Yapımı

Araba, motosiklet veya UPS sistemlerinde kullandığımız 12V kurşun-asit akülerin uzun ömürlü olması için doğru voltajda şarj edilmeleri ve dolduklarında şarj akımının kesilmesi şarttır. Sürekli yüksek voltaja maruz kalan aküler "kaynama" yapar ve sülfatlaşarak hızlıca bozulur.

Bu projede, harici hiçbir hosting veya internet ağına muhtaç kalmadan, ESP8266'nın kendi lokal web arayüzü üzerinden akü voltajını anlık izleyecek ve akü 14.4V'a ulaştığında şarjı otomatik kesen bir sistem kuracağız.

1. Donanım Mantığı ve Gerilim Bölücü Hesabı

ESP8266’nın analog giriş pini (A0) en fazla 3.3V ölçebilir. Bizim akümüz ise şarj sırasında 15V seviyelerine kadar çıkabilir. Bu yüksek voltajı ESP8266'nın güvenle okuyabileceği 0-3.3V aralığına düşürmek için Gerilim Bölücü (Voltage Divider) devre mantığını kullanacağız.

Gerekli Malzemeler:

Matematiksel Mantık: Aküden 15V gelse bile, bu iki direnç voltajı tam olarak oranlar:

V_out = 15V × (22k / (100k + 22k)) ≈ 2.70V Yani maksimum voltajda bile ESP8266'nın 3.3V sınırının altında, tamamen güvende kalırız.

2. Devre Bağlantı Şeması

Voltaj Ölçüm Bağlantısı:

Röle Bağlantısı:

3. Akıllı Akü Şarj ve Takip Kodu

Aşağıdaki kod, akünün voltajını saniyede bir ölçer. Akü 14.4V'a ulaştığında (Tam Dolum) şarjı keser, akü voltajı 12.4V'a düştüğünde ise şarjı otomatik olarak yeniden başlatır.

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>

const char* ssid = "WIFI_ADINIZ";
const char* password = "WIFI_SIFRENIZ";

ESP8266WebServer server(80);

const int rolePin = 4;      // Röle D2 (GPIO4) pininde
const int analogPin = A0;   // Voltaj okuma pini

float akuVoltaj = 0.0;
int akuYuzde = 0;
bool sarjDurumu = true;

void setup() {
  Serial.begin(115200);
  pinMode(rolePin, OUTPUT);
  digitalWrite(rolePin, HIGH); // Başlangıçta şarjı başlat (Röle çekili)

  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("\nWi-Fi Bağlandı. IP:");
  Serial.println(WiFi.localIP());

  // Web arayüzü tasarımı
  server.on("/", []() {
    String html = "<!DOCTYPE html><html><head><meta charset='UTF-8'><meta name='viewport' content='width=device-width, initial-scale=1'>";
    html += "<style>html{font-family:Arial; text-align:center; margin-top:50px; background:#f4f6f7;} .card{background:white; padding:30px; display:inline-block; border-radius:10px; box-shadow:0 4px 8px rgba(0,0,0,0.1);} h1{color:#2c3e50;} .status{font-size:22px; margin:15px; color:#34495e;}</style></head>";
    html += "<body><div class='card'><h1>12V Akü Şarj İstasyonu</h1>";
    html += "<p class='status'><b>Akü Voltajı:</b> " + String(akuVoltaj, 2) + " V</p>";
    html += "<p class='status'><b>Tahmini Doluluk:</b> %" + String(akuYuzde) + "</p>";
    html += "<p class='status'><b>Şarj Modu:</b> " + String(sarjDurumu ? "<span style='color:green;font-weight:bold;'>ŞARJ EDİLİYOR</span>" : "<span style='color:red;font-weight:bold;'>ŞARJ KESİLDİ (DOLU)</span>") + "</p>";
    html += "</div><script>setInterval(function(){ location.reload(); }, 3000);</script></body></html>";
    server.send(200, "text/html", html);
  });

  server.begin();
}

void loop() {
  server.handleClient();

  // 1. ADIM: Analog değeri oku
  int rawAnalog = analogRead(analogPin);

  // 2. ADIM: Voltajı Hesapla
  // 100k ve 22k direnç bölücü çarpanı: (100 + 22) / 22 = 5.545
  float vOut = (rawAnalog * 3.3) / 1023.0;
  akuVoltaj = vOut * 5.545; 

  // 3. ADIM: Akü Yüzde Hesabı (Deşarj sınırı 10.5V, Tam dolu şarj kesim sonrası dinlenmiş akü 12.7V)
  akuYuzde = map(constrain(akuVoltaj * 10, 105, 127), 105, 127, 0, 100);

  // 4. ADIM: Şarj Kontrol Algoritması (Histerezisli Döngü)
  if (akuVoltaj >= 14.40 && sarjDurumu) {
    digitalWrite(rolePin, LOW); // Röleyi bırak, şarjı akımı kes
    sarjDurumu = false;
    Serial.println("Akü 14.4V'a ulaştı. Şarj güvenli bir şekilde kesildi.");
  }
  
  if (akuVoltaj <= 12.40 && !sarjDurumu) {
    digitalWrite(rolePin, HIGH); // Akü deşarj oldu, şarjı tekrar başlat
    sarjDurumu = true;
    Serial.println("Akü voltajı düştü. Şarj yeniden başlatılıyor...");
  }

  delay(1000);
}

Devre Şeması:

esp8266 şarj akü kontrol
ESP8266'yi usb veya dc-dc konvertörden beslenebilir. Önerim dc-dc konvertörden beslemek ek besleme kaynağı gerekmeden aküden beslenebilir.

💬 Yorumlar

rumeysa 24.05.2026 20:55

videolu anlatım gelir mi

🛡️ Yönetici Yanıtı:

İlerleyen zamanda gelir.

Bir Yorum Bırakın

Güvenlik Kontrolü:

Yenidir.com
Sayfa Başı
Yenidir CMS V0.1