back to top

Arduino ile Batarya Seviye Testi

Merhaba, bu yazımızda batarya içindeki pillerin (özellikle li-ion pil olmak üzere) gerilimini ve elektrik akımını Arduino ile nasıl ölçülebileceğini anlatacağız. Bu devrede Lipo batarya seviye ölçümü de ayrıca mümkündür.

Pil ve Batarya Aynı Şey mi?

Pil ve Batarya birbirlerini tamamlar niteliktedirler. Pil ve Batarya arasındaki fark ise genellikle merak edilmektedir. Pil dediğimiz şey kimyasallardan oluşan bir hücredir, batarya ise hücrelerin birleştirilmiş halidir. Az sonra nasıl çalıştığını anlatacağımız olan Batarya seviye ölçer veya Pil seviye ölçer olarak adlandırılan devremizi oluşturarak bataryanın durumunu ölçebilecek ve bu sayede kolayca bozuk olan hücreleri (cells) farkedebileceğiz.

Arduino ile Batarya Seviye Testi Nasıl Çalışır?

Batarya içindeki hücreler iyi durumda ise MOSFET üzerinde bulunan SWITCH’e talimat verip MOSFET’i ON yaptıktan sonra pilin pozitif terminali üzerinden akım geçmesi için talimat verir ve değerler OLED Ekranın üzerinde gösterilmeye başlar. MOSFET’in görevi yük direnci ile hücre arasındaki bağlantıyı duruma göre kesip bağlamak. Tabi bu ölçüm bataryayı belli bir süre sonra deşarj eder. Ölçerin gösterdiği voltaj ve akım değerleri tam kesin olmasa bile yakın bir değere sahiptir. Arduino, gerilimi (voltage) yük dirençlerinin üzerinden ölçer ve sonrasında bulunan gerilim değeri direnç (Resistance) değeriyle bölerek akım (Current) değerini bulmuş oluruz. Akım değerini zaman ile çarptıktan sonra ise pilimizin kapasitesini yani mAh’ını (milliampere-hour) bize vermiş olur.

Arduino ile Batarya Seviye Testi
Arduino ile Batarya Seviye Testi

Bu hesaplama işlemleri basitçe OHM Kanunu ile yapılabilir:

  • Akım Hesaplaması: Akım (I) = Voltaj (V) – MOSFET üzerindeki voltaj düşüşü / Direnç (R)
  • Kapasite Hesaplaması: Depolanan Şarj (Q) = Akım (I) x Zaman (T)
Formüller
Formüller

Ölçüm yapıldığında pil yeterli güce sahip ise aşağıdaki şekilde tam ölçümü görebileceksiniz.

Pil Ölçüm Sonucu
Pil Ölçüm Sonucu

Eğer pil yetersiz ise projeyi çalıştırdığınızda aşağıdaki şekilde bile sonuçla karşılacaksınız.

Pil Yetersiz Olduğunda Karşılaşılacak Sonuç
Pil Yetersiz Olduğunda Karşılaşılacak Sonuç

Batarya testi için Gerekli Malzemeler

Arduino ile Batarya Seviye Testi Devre Şeması

Arduino ile
Arduino ile Batarya Testi Devre Şeması
Arduino ile Batarya Testi Devre Şeması -1
Arduino ile Batarya Testi Devre Şeması -1

Batarya testi için Kullanılan Kütüphanelerin Kurulumu

Arduino IDE’yi açın ve kodu çalıştırmadan önce talimatları aynı şekilde yerine getirdiğinize emin olun, aksi takdirde kodunuz çalışmayacaktır.

1.Arduino IDE’yi açın ve üst menüden Sketch’e basın.

Kütüphane Kurulumu-1
Kütüphane Kurulumu-1

2. Include library üzerinden Manage Libraries seçeneğine tıklayın.

Kütüphane Kurulumu-2
Kütüphane Kurulumu-2

3.Arama kutucuğuna U8GLIB yazın ve aşağıdaki resimdeki gözüken kütüphaneyi en son sürümü seçerek indirdikten sonra Arduino IDE’yi kapatıp tekrardan açın. Artık kodumuz Arduino üzerinde çalıştırılmak için hazır, şimdi aşağıdaki Arduino kodunu açmış olduğumuz Sketch’e yapıştırıp Arduino’ya Upload yapabiliriz.

Kütüphane Kurulumu-3
Kütüphane Kurulumu-3

Arduino ile Batarya Testi Proje Kodu

#include "U8glib.h"
#define MOSFET_Pin 2
#define Bat_Pin A0
#define Res_Pin A1
#define Buzzer_Pin 9
U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE);  // I2C / TWI  
float Capacity = 0.0; // Kapasite mAh
float Res_Value = 9.4;  // Dirençin Ohm Değeri
float Vcc = 4.64; // Arduino 5V Pin Voltajı (Multimetre ile ölçüldü)
float Current = 0.0; // Akım Amper
float mA=0;         // Akım mA
float Bat_Volt = 0.0;  // Batarya Gerilimi
float Res_Volt = 0.0;  // Dirençin alt ucundaki Voltaj Değeri
float Bat_High = 4.3; // Yüksek Batarya Voltajı
float Bat_Low = 0.9; // Düşük Batarya Voltajı
unsigned long previousMillis = 0; // ms (milli-second) Geçen Zaman
unsigned long millisPassed = 0;  // ms (milli-second) Şuanki Zaman
float sample1 =0;
float sample2= 0;
int x = 0;
int row = 0;

//************************ OLED Ekrana Yazdırma İşlevi *******************************************************
void draw(void) {
   u8g.setFont(u8g_font_fub14r); // Yazı Tipi Seçme
   if ( Bat_Volt < 0.5){
    u8g.setPrintPos(10,40);        // Pozisyon ayarlama
    u8g.println("No Battery!"); 
   }
   else if ( Bat_Volt > Bat_High){
    u8g.setPrintPos(25,40);        // Pozisyon ayarlama
    u8g.println("High-V!"); 
   }
   else if(Bat_Volt < Bat_Low){
    u8g.setPrintPos(25,40);        // Pozisyon ayarlama
    u8g.println("Low-V!"); 
   }
   else if(Bat_Volt >= Bat_Low && Bat_Volt < Bat_High  ){
      
   u8g.drawStr(0, 20, "Volt: ");   // X ve Y eksenlerinde ekrana string ekleme
   u8g.drawStr(0, 40, "Curr: ");
   u8g.drawStr(0, 60, "mAh: ");
   u8g.setPrintPos(58,20);        // Pozisyon ayarla
   u8g.print( Bat_Volt,2);  // Batarya Voltajını Volt olarak ekranda gösterme
   u8g.println("V"); 
   u8g.setPrintPos(58,40);        // Pozisyon ayarla
   u8g.print( mA,0);  // Akımı mA olarak ekranda gösterme
   u8g.println("mA"); 
   u8g.setPrintPos(58, 60);        // Pozisyon yarlama
   u8g.print( Capacity ,1);     // Kapasiteyi mAh olarak ekranda gösterme
  
}
}
//******************************Buzzer Bip Sesi İşlevi*********************************************************

  void beep(unsigned char delay_time){
  analogWrite(9, 20);      // Bip sesi oluşturmak için PWM sinyali
  delay(delay_time);          // deleayms'i bekle
  analogWrite(Buzzer_Pin, 0);  // 0 Bip sesini kapatır
  delay(delay_time);          // delayms'i bekle  

}  

//*******************************Kurulum İşlevi***************************************************************
  
  void setup() {
   Serial.begin(9600);
   pinMode(MOSFET_Pin, OUTPUT);
   pinMode(Buzzer_Pin, OUTPUT);
   digitalWrite(MOSFET_Pin, LOW);  // MOSFET Başlama Süresince Kapalı.
   Serial.println("CLEARDATA");
   Serial.println("LABEL,Time,Bat_Volt,capacity");
   
   //Serial.println("Arduino Battery Capacity Tester v1.0");
   //Serial.println("BattVolt Current mAh");
  }
  //********************************Ana Döngü İşlevi***********************************************************
  void loop() {
 // Vcc = readVcc()/1000.0; // mV'yi Volt'a dönüştür

  
  // Voltage devider Out = Bat_Volt * R2/(R1+R2 ) // R1 =10K and R2 =10K 
  
  //************ Batarya Voltajı Ölçümü ***********
  
  for(int i=0;i< 100;i++)
  {
   sample1=sample1+analogRead(Bat_Pin); //Bölücü devreden Voltajı okur
   delay (2);
  }
  sample1=sample1/100; 
  Bat_Volt = 2* sample1 *Vcc/ 1024.0; 

  // *********  Direnç Voltajı Ölçümü ***********

   for(int i=0;i< 100;i++)
  {
   sample2=sample2+analogRead(Res_Pin); //Bölücü Devre üzerinden voltajı okur
   delay (2);
  }
  sample2=sample2/100;
  Res_Volt = 2* sample2 * Vcc/ 1024.0;

  //********************* Farklı Koşulları Kontrol Etme *************
  
  if ( Bat_Volt > Bat_High){
    digitalWrite(MOSFET_Pin, LOW); // MOSFET kapatıldı // Deşarj Yok
    beep(200);
    Serial.println( "Warning High-V! ");
    delay(1000);
   }
   
   else if(Bat_Volt < Bat_Low){
      digitalWrite(MOSFET_Pin, LOW);
      beep(200);
      Serial.println( "Warning Low-V! ");
      delay(1000);
  }
  else if(Bat_Volt > Bat_Low && Bat_Volt < Bat_High  ) { // Batarya Voltajının güvenli limit içerisinde olup olmadığını kontrol etme
      digitalWrite(MOSFET_Pin, HIGH);
      millisPassed = millis() - previousMillis;
      Current = (Bat_Volt - Res_Volt) / Res_Value;
      mA = Current * 1000.0 ;
      Capacity = Capacity + mA * (millisPassed / 3600000.0); // 1 Hour = 3600000ms
      previousMillis = millis();
      Serial.print("DATA,TIME,"); Serial.print(Bat_Volt); Serial.print(","); Serial.println(Capacity);
      row++;
      x++;
      delay(4000); 
 
     }
  
   //**************************************************

  u8g.firstPage();  
  do {
    draw();
  } while( u8g.nextPage() );
  
 //*************************************************
 } 

Arduino ile Batarya Seviye Testi Proje Videosu

Arduino batarya seviye testi projemizin sonuna geldik. Projenin tüm aşamalarını gördüğümüze göre artık siz de kendi Batarya seviye ölçerinizi yapabilirsiniz. Bu projedeki ihtiyacınız olan Arduino Nano, Direnç, OLED Ekran ve batarya testi için gerekli ve diğer gerekli malzemelere web sitemizden ulaşabilirsiniz. Bir sonraki projede görüşmek üzere!

Son Çıkan Yazılar

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz