Pillerin üzerindeki mAh değerleri zamanla kimyasal aşınma nedeniyle düşer. Bu projede, Arduino kullanarak bir pilin gerçek sağlığını (SoH) ve kapasitesini nasıl ölçeceğimizi öğreneceğiz.
Sistem, pili sabit bir yük direnci üzerinden deşarj eder. Arduino, 10-bit ADC birimi ile pil voltajını her saniye ölçer. Akım miktarı, pil voltajının dirence bölünmesiyle bulunur (Ohm Kanunu). Toplam kapasite ise bu akım değerlerinin zamanla çarpılıp toplanmasıyla hesaplanır.
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET -1
Adafruit_SSD1306 display(128, 64, &Wire, OLED_RESET);
const int pilPin = A0;
const int mosfetPin = 2;
const float direnc = 10.0;
const float kesmeVoltaji = 3.0;
float toplamMAH = 0;
unsigned long eskiZaman = 0;
void setup() {
pinMode(mosfetPin, OUTPUT);
digitalWrite(mosfetPin, HIGH); // Testi başlat
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextColor(WHITE);
}
void loop() {
float voltaj = analogRead(pilPin) * (5.0 / 1023.0);
if (voltaj <= kesmeVoltaji) {
digitalWrite(mosfetPin, LOW); // Deşarjı durdur
display.setCursor(0, 45);
display.print("TEST TAMAMLANDI!");
} else {
unsigned long suankiZaman = millis();
float saniye = (suankiZaman - eskiZaman) / 1000.0;
float akim = voltaj / direnc;
toplamMAH += (akim * 1000.0) * (saniye / 3600.0);
eskiZaman = suankiZaman;
}
display.clearDisplay();
display.setCursor(0,0);
display.setTextSize(1);
display.print("Voltaj: "); display.print(voltaj); display.println(" V");
display.print("Kapasite: "); display.print(toplamMAH); display.println(" mAh");
display.display();
delay(1000);
}

Daha hassas ölçümler için Arduino'nun besleme voltajını multimetre ile ölçüp koddaki 5.0 değerini gerçek değerle (örneğin 4.95) güncelleyebilirsiniz. Ayrıca, Li-ion piller için kesme voltajını 3.0V'un altına düşürmemeniz pil ömrü için kritiktir.
Henüz yorum yapılmamış. İlk yorumu siz yapın!