Arduino Voltmetre & Pil Ölçer

Bu seferki projemiz arduino uno kullanarak voltmetre ve pil kapasitesini % olarak ölçmek.

İnternet üzerinde bulunan iki uygulamayı birleştirdim.
Kaynak 1: https://github.com/Robotistan/YouTube-DIY-Projeler/tree/master/Pil%20Seviye%20Olcer%20-%20Arduino
Kaynak 2: https://www.projehocam.com/arduino-lcd-voltmetre-yapimi/

Devre ile en yüksek laptop adaptör voltajını ölçtüm (19,50volt). Ölçtüğümüz piller 1,65voltun altındaysa doluluk oranını yazıyor, 1,65 voltun üzerindeyse doluluk oranı satırı görünmüyor.
Pratik olarak elimizdeki eski pillerin durumunu öğrenmek için güzel bir uygulama. Ayrıca basit bir voltmetre olarak da güzel iş görüyor. 

void pil_olcer() fonksiyonu içinde yer alan :
gerilim = analogRead(analogInput)*12;
satırındaki 12 çarpanını elimdeki pillerle deneyerek elde ettim.

Orjinal yazılımda bu 12 çarpanı yok, ama devre girişinde direnç de yok. Voltmetre ölçümü için girişe 10k ve 100k'lık gerilim bölücü dirençleri bağlayınca pillerin doluluk oranını doğru göstermesi için hesapları değiştirmeyip deneyerek 12 çarpanını elde ettim. Denemeyi orjinal pil ölçer devresini yükleyip orada elde ettiğim değerleri, birleştirilmiş kodlarda da elde etmek için karşılaştırarak elde ettim.  Burayı geliştirebilirsiniz.  

Diğer açıklamalar program içinde yer almaktadır.





Arduino Ide Kodları:

// Voltmetre + Pil Ölçer
//
// Kaynak: https://github.com/Robotistan/YouTube-DIY-Projeler/tree/master/Pil%20Seviye%20Olcer%20-%20Arduino
// Kaynak: https://www.projehocam.com/arduino-lcd-voltmetre-yapimi/
// SCL = A5 pinine , SDA = A4 pinine bağlanacak
// 20 volta kadar ölçüm yaptım
// dirençler 100k, 10k
// gnd ile A0 arasında 10k direnç var, A0 girişine 100k ile giriş yapıyoruz.
// gnd---10k-----A0-----100k--->
//  |-------------------------->
//
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C  lcd(0x27,2,1,0,4,5,6,7);

// voltmetre değişkenleri
int analogInput = 0;    // analog 0 pini giriş 
float vout = 0.0;
float vin = 0.0;
float R1 = 100000.0; // 100Kohm direnç
float R2 = 10000.0; // 10Kohm direnç
int value = 0;

// pil ölçer değişkenleri
/*
 Bu sinyalin dijital sinyale çevrilmesi için Arduino'da 10 bitlik bir saklayıcı bulunmaktadır.
 Bu saklayıcı 0 volt giriş için 0, 5 volt giriş için ise 1023 değerini almaktadır.
 Bu artış doğrusaldır yani girişteki 0,005 voltluk bir değişim saklayıcının değerini bir artırmaktadır.
 Örneğin sinyal girişimiz 3,3 volt ise okuyacağımız değer yaklaşık olarak 675'tir.
 Kısacası ADC, 0 ve 5 volt arasındaki sinyali oranlayarak 0 ve 1023 arasında sayısal bir değer döndürmektedir.
 */
//  5/1024=0,0048...volt  (yaklaşık)
// 338 max - 1.65 V     
// 246 min - 1.2 V
int min_deger = 246;
float yuzde = 0;
float deger = 0;
int gerilim = 0;

void setup(){
  Serial.begin(9600);
  lcd.begin(16, 2);
    lcd.setBacklightPin(3,POSITIVE);
  lcd.setBacklight(HIGH);
   pinMode(analogInput, INPUT);
}
void loop(){
  voltmetre();
  pil_olcer();
}

void voltmetre()
{
   value = analogRead(analogInput);
   vout = (value * 5.0) / 1024.0;
   vin = vout / (R2/(R1+R2));
   if (vin<0.09) {
   vin=0.0;
}
lcd.setCursor(0, 0);
lcd.print(vin);
delay(500);
  }

  void pil_olcer()
  {
    //okunan değer 1.65 volttan yüksek ise doluluk hesaplanmayacak
    if (vin>1.65){ 
      lcd.setCursor(0,1);
      lcd.print("               ");
   }
   else
   {
      gerilim = analogRead(analogInput)*12;    // 12 sayısını denemelerle elde ettim
   //Serial.println(gerilim);   //seri port ekranından çıktı takibi için 
  if(gerilim >= 338)
    gerilim = 338;
  if(gerilim <= 246)
    gerilim = 246;
   yuzde = gerilim - min_deger;
   deger = ((100.00/92.00) * yuzde);
   lcd.setCursor(0,1);
   lcd.print("Doluluk: %");
   lcd.print(deger);
 
   }
   delay(500);
    }
 

KULLANILAN PROGRAMLAYICI: Arduino 1.8.10

Yorumlar