Arduino tabanlı DIY lityum pil kapasitesi ölçer

guclusat

Tanınmış Üye
Süper Moderatör
1610497180_arduino1.jpg
Bu cihaz çok basittir ve sadece birkaç bileşenden oluşur: bir Arduino Nano mikrodenetleyici, bir LCD ekran, küçük bir 5V röle, bir 5W direnç, iki küçük direnç ve bir düğme.

Start butonuna bastığımızda test bataryası 4 ohm'luk direnç ile paralel bağlanarak içinden deşarj oluyor. Voltaj mikrodenetleyici tarafından her yarım saniyede bir okunarak bir saatte 7200 ölçüm elde edilmektedir. Ohm yasasını kullanarak yüke verilen akımı öğrenebilirsiniz. Ardından, 7200 saatte 1'i mevcut değerle çarparız ve pil 3V'un altına boşalana kadar elde edilen sayıları toplarız ve ardından ekran sonucu saat başına mA olarak gösterir.

İlk önce tam şarjlı bir pili bağlamamız gerekiyor. Ekran mevcut akü voltajını gösterir. Başlat düğmesine basar basmaz pil testi başlıyor. Aşağıdaki bilgiler ekranda görüntülenecektir: alınan ölçüm sayısı, pil voltajı ve saat başına miliamper cinsinden zaman içindeki güç. Test, voltaj 3 volta ulaştığında sona erer ve pil boşalmış kabul edilir. Bu, pilin kapasitesine bağlı olarak biraz zaman alabilir.

Pil voltajı 3 volta düştüğünde ölçüm sona erer ve ekranda gerçek pil kapasitesi ve alınan ölçüm sayısı gösterilir. Pil kapasite ölçerin bileşenlerinin bağlantı şeması aşağıdaki resimde gösterilmektedir.
1610497205_arduino2.jpg
Bu pil test cihazının program kodu aşağıdaki gibidir:
Kod:
#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int buttonPin = 9;
int sensorPin = A0;
int sensorValue = 0; 
const int relay= 10;
int buttonState = 0;
float mah = 0.0;
long timestart  ;

void setup() {
  lcd.begin(16, 2);
  lcd.print("Batt life tester");
  pinMode(relay, OUTPUT);
pinMode(buttonPin, INPUT);
}

void loop() {
  digitalWrite(relay, 0 );
 
  while (buttonState == LOW ) {
  sensorValue = analogRead(sensorPin);
 
  buttonState = digitalRead(buttonPin);

  lcd.setCursor(0, 1);
  lcd.print((sensorValue*4.98)/1023);
  lcd.print(" Volts");
  delay(500);
  }
  digitalWrite(relay, 1 );
  lcd.setCursor(0, 0);
  lcd.print("Testing              ");
  lcd.setCursor(0, 1);
  lcd.print("                         ");
  mah = 0.0;
  timestart = millis( );
  while ( ((sensorValue*4.98)/1023) > 3.00 ) {
     lcd.setCursor(0, 1);   
     lcd.print((sensorValue*4.98)/1023);
     lcd.print(" V ");
     sensorValue = analogRead(sensorPin);
     mah = mah + (((sensorValue*4.98)/1023)/4 )/7.2;
     lcd.print(mah);
     lcd.print(" mAh ");
     delay ( 500 ) ;
     lcd.setCursor(8,0);
     lcd.print((millis( )- timestart)/1000);
  }
    digitalWrite(relay, 0 );
 
   lcd.setCursor(0, 0);
   lcd.print(mah);
   lcd.print(" mAH ");
   lcd.print((millis( )- timestart)/1000);
   lcd.print(" S ");
   buttonState = digitalRead(buttonPin);
 
}
 
Geri
Yukarı