ESP32 ile akıllı akü şarj sistemi-WiFi

👤 Yazar: ozcan 📅 Tarih: 25.06.2026 21:35 👁️ Görüntüleme: 29

ESP32 ve INA3221 ile Akıllı Akü Şarj ve Wi-Fi İzleme Sistemi

Geleneksel akü şarj cihazları aküyü doldurur ancak şarj akımını, anlık voltaj durumunu veya şarjın hangi aşamada olduğunu izlememize izin vermez. Bu yazımızda, ESP32 ve 3 kanallı yüksek hassasiyetli INA3221 sensörünü kullanarak, 12V normal kurşun-asit aküler için hem güvenli bir şarj kontrolü sağlıyoruz hem de tüm verileri Wi-Fi üzerinden anlık olarak izleyebileceğimiz bir web arayüzü oluşturuyoruz.

Projenin Öne Çıkan Özellikleri

  • Çok Kanallı Takip: INA3221 sayesinde hem şarj kaynağının giriş voltajını hem de akünün anlık voltaj ve çekilen akım değerlerini bağımsız kanallardan izleme imkanı.
  • 12V Akü Koruma Protokolü: Akü tam doluma ulaştığında (14.4V şarj kesme eşiği) röle üzerinden akımı otomatik kesme mantığı.
  • Dinamik Web Arayüzü: Tarayıcı üzerinden sayfa yenilenmeden akü durumunu canlı izleme.

Gerekli Donanımlar

  • ESP32 Geliştirme Kartı
  • INA3221 3-Kanal Şönt Akım/Voltaj Sensörü
  • 12V Şarj Kaynağı (Trafo veya SMPS)
  • 5V veya 12V Röle Modülü (Şarj akımını kesmek için)
  • 12V Kurşun-Asit Akü (Sulu, Jel veya AGM)

Bağlantı Şeması

INA3221 I2C protokolü ile haberleştiği için ESP32'nin standart I2C pinlerine bağlanır. Röle ise şarj hattının artı (+) kutbunu kesecek şekilde konumlandırılır.

Bileşen / Pin ESP32 Pini Açıklama
INA3221 SDA GPIO 21 I2C Veri Hattı
INA3221 SCL GPIO 22 I2C Saat Hattı
Röle Sinyal (IN) GPIO 5 Şarj Kesme Kontrolü
VCC / GND 3.3V / GND Sensör Beslemesi

ESP32 Yazılımı

Aşağıdaki kod, INA3221'in 1. kanalını akü voltajı ve akımını ölçmek için kullanır. Akü gerilimi 14.4V seviyesine ulaştığında röleyi tetikler ve şarjı güvenli bir şekilde sonlandırır. Beast Devices kütüphanesini kendi adresinden veya yenidir.com üzerinden   Arduino-INA3221-main.zip indirip Arduino'ya eklemeyi unutmayın. 

#include <WiFi.h>
#include <ESPAsyncWebServer.h>
#include <Wire.h>
#include <Beastdevices_INA3221.h> 

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

Beastdevices_INA3221 ina3221(INA3221_ADDR40_GND);
AsyncWebServer server(80);

#define RELE_PIN 5
const float AKU_MAX_VOLTAJ = 14.4; // 12V Akü için şarj kesme gerilimi
bool sarj_devam_ediyor = true;

float aku_voltaj = 0.0;
float sarj_akimi = 0.0;

void setup() {
  Serial.begin(115200);
  pinMode(RELE_PIN, OUTPUT);
  digitalWrite(RELE_PIN, HIGH); // Şarjı aktif et

  Wire.begin(21, 22);
  ina3221.begin();

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

  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
    String html = "<html><head><meta charset='UTF-8'><title>12V Akıllı Şarj İstasyonu</title>";
    html += "<style>body{background:#1a202c; color:#edf2f7; font-family:sans-serif; text-align:center; padding-top:50px;}";
    html += ".container{max-width:600px; margin:0 auto;}";
    html += ".card{background:#2d3748; padding:20px; border-radius:8px; margin:15px; box-shadow:0 4px 6px rgba(0,0,0,0.1);}";
    html += "h1{color:#3182ce;} .status{font-weight:bold; color:#48bb78;}</style></head><body>";
    html += "<div class='container'><h1>12V Akü Şarj Takip Sistemi</h1>";
    html += "<div class='card'><h3>Akü Gerilimi</h3><h2>" + String(aku_voltaj, 2) + " V</h2></div>";
    html += "<div class='card'><h3>Şarj Akımı</h3><h2>" + String(sarj_akimi, 2) + " A</h2></div>";
    html += "<div class='card'><h3>Sistem Durumu</h3><p class='status'>" + String(sarj_devam_ediyor ? "ŞARJ EDİLİYOR" : "TAMAMLANDI - KESİLDİ") + "</p></div>";
    html += "</div></body></html>";
    request->send(200, "text/html", html);
  });

  server.begin();
}

void loop() {
  // INA3221 Kanal 1 Ölçümleri (Aküye bağlı kanal)
  aku_voltaj = ina3221.getVoltage(INA3221_CH1);
  sarj_akimi = ina3221.getCurrent(INA3221_CH1); // Amper cinsinden

  // Güvenlik ve Dolum Kontrolü
  if (aku_voltaj >= AKU_MAX_VOLTAJ && sarj_devam_ediyor) {
    digitalWrite(RELE_PIN, LOW); // Şarjı güvenli bir şekilde kes
    sarj_devam_ediyor = false;
    Serial.println("Akü tam doluma ulaştı, şarj kesildi.");
  }

  delay(2000);
}

Önemli Teknik İpuçları

  • Çok Kanallı Yapılandırma: INA3221 üzerinde 3 adet bağımsız hat bulunur. Eğer isterseniz Kanal 2'yi güç kaynağınızın çıkışını, Kanal 1'i ise doğrudan akü kutuplarını ölçecek şekilde bağlayıp arodaki hat kayıplarını ve besleme kaynağının yük altındaki davranışını da izleyebilirsiniz.
  • Eşik Gerilimi Seçimi: Standart sulu ve jel aküler için şarj kesme (Cycle) voltajı genel olarak 14.4V'tur. Eğer akü sürekli şarjda kalacaksa (Float şarj) kod içerisindeki limiti 13.8V seviyelerine çekmeniz akü sağlığı açısından daha kararlı olacaktır.
  • Gelişmiş Model: Buradaki kod basit bir tasarımdır daha gelişmiş kodu buradan   esp32_ina_sarj_kontrol.zip indirebilirsiniz.

Proje ile ilgili sorularınızı ve modifikasyon taleplerinizi alt kısımda yer alan yorumlar bölümünden bana iletebilirsiniz. İyi çalışmalar!

💬 Yorumlar

Henüz yorum yapılmamış. İlk yorumu siz yapın!

Bir Yorum Bırakın

Güvenlik Kontrolü:

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