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.
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 |
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);
}
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!
Henüz yorum yapılmamış. İlk yorumu siz yapın!