10/30/2020

Arduino ile Amper, Volt ve Watt Metre Nasıl Yapılır?

Arduino Nano ile amper ve volt ölçebilen ve watt hesabı yapabilen kullanışlı bir ölçüm devresi yapımı …

Akım ölçümü için ACS714 20A akım sensörü, gerilim ölçümü için ise 2 dirençten oluşan bölücü devre ve 0.96 inc Oled ekran kullanıyoruz.

Not: Bu projede 1306 oled ekran kullanılmıştır. Ekranınız SH1106 ise kodda kullandığımız kütüphane ile düzgün çalışmayacaktır. Bu durumda U8glib kütüphanesini kullanabilirsiniz. (Ekrana yzdırma komutlarında değişiklik gerekecektir). SH1106 ekran kullandığımız farklı bir uygulama Sıcaklık sensörleri yazımızda mevcuttur.

Gerekli Malzemeler:

Arduino Nano
0.96 inc Oled Ekran
5×5 cm delikli plaket
ACS714 20A Akım Sensörü
UF4007 Diyot
R1 direnci 10K
R2 direnci 1.5K
78M05 Regulator
0.1uF Kondansatör
0.33uF Kondansatör

Arduino Volt, Amper, Watt Ölçer Devre Şeması


Yük bağlantısı
  (Motor, Ampul vs bağlantısı) bölümünde bir adet diyot kullanıyoruz. Bu diyotun görevi motor gibi bobin içeren cihazlarda besleme kesildiğinde geri dönen ters voltajın engellenmesidir. Motorların bobinleri çalışma esnasında elektrik biriktrebilir ve motor durdurulduğunda biriken bu elektrik geri döner. Bu durum devredeki entegre gibi elemanları bozabilir veya parazite sebep olabilir.
Diyotun katot tarafı + kutup yönünde olacak şekilde lehimlenir. Motorun normal çalışması esnasında pozitif gerilim Katot yönünden Anot tarafına geçemeyeceği için normal çalışma gerçekleşir. Motor durduğunda geri dönen akım ters kutuplar olarak döner ve pozitif akım anot kısmından girer, devreye dönüş yapamadan diyot üzerinde ve bir kısmıda motora geri dönerek kendi içerisinde sönümlenir.

Devreyi bağımsız olarak kullanabilmek için 7805 regülatör entegresi ile Arduino Nanoya 5V besleme sağlıyoruz. 7805 regulatörü yaklaşık 2V kayıp voltaj değerine sahip olduğu için besleme kaynağının gerilimi minumum 7 volt olmalı.

Alt şemada gösterilen bölücü devreyi kullanmamızın sebebi Arduino nun giriş pinlerine en fazla 5 volt verebiliyor olmamız. Yaptığımız devre ise 24V a kadar kullanılabilir. Bu durumda bölücü devre sayesinde gerilimi 5 voltun altına düşürdükten sonra Arduino nun analog girişine gönderebiliyoruz. Aksi halde Arduino zarar görecektir.

Bölücü devre giriş voltajını orantılı olarak düşürür. Bu yüzden Maksimum giriş voltajı olan 24 voltu dikkate alarak bölücü devreyi oluşturan dirençler seçilir. Bu devrede R1 direnci olarak 10K ve R2 direnci olarak 1.5K değerinde direnç kullanıyoruz.

 

 


ARDUINO KOD:

#include <Adafruit_GFX.h> //Ekran kütüphanelerini ekleme
#include <Adafruit_SSD1306.h>
Adafruit_SSD1306 display; 

const int currentSensor = A0;
const int voltageSensor = A1;
float vOUT = 0.0;
float vIN = 0.0;
float R1 = 10000.0;
float R2 = 1980.0;
float Vdata = 0;
float V,I,I1;
float Cdata;
float value;

void setup(){ 

  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(1);
  display.display();

}
void loop(){

//float vIN = 0.0;

   for(int i = 0; i < 300; i++) // daha kararlı ortalama bir sonuç almak için 300 kez okuma yapma
   {
     Cdata = Cdata + analogRead(currentSensor);
     Vdata = Vdata + analogRead(voltageSensor);
     delay(1);
   }

 Cdata=Cdata/300;           
 V=(Cdata/1024.0)*5000;                       
 I=((V - 2500)/ 96);

 Vdata=Vdata/300;
 vOUT = (Vdata * 5.0) / 1024.0;
 vIN = (vOUT / (R2/(R1+R2)));

// OLED Ekrana Yazma
  display.setTextColor(WHITE);
  
  // Watt hesaplama ve ekrana yazdırma
  display.setTextSize(1);
  display.setCursor(58,8);
  display.print(" Watt");
  display.setCursor(0,0);
  display.setTextSize(2);
  value=(I * vIN);
  if (value<0){display.println("0.0");} else {display.println(value);} 
  
  // Amper değerini ekrana yazdırma
  display.setTextSize(1);
  display.setCursor(58,23);
  display.print(" Amper");
  display.setCursor(0,16);
  display.setTextSize(2);
  if (I<0) {display.println("0.0");} else {display.println(I);}
  
  // Voltaj değerini ekrana yazsırma
  display.setTextSize(1);
  display.setCursor(58,39);
  display.print(" Volt");
  display.setCursor(0,32);
  display.setTextSize(2);
  display.println(vIN);
  
display.display();
display.clearDisplay();

// Değerleri sıfırlama
  Cdata=0;
  I=0;
  V=0;
  Vdata=0;
  vIN=0;
  value;
}

OLED Ekran için kod içerisinde kullanılan SSD1306 kütüphane linki. Bu linkten indirdiğiniz kütüphane dosyasını alt resimde olduğu gibi Belgeler/Arduino/Libraries klasörüne yine klasör olarak kopyalamalısınız. Kodun üst kısmındaki #include komutu ile ilgili kütüphane koda dahil edilir.


Gerilim (Voltaj) Kalibrasyonu:

Kod içerisindeki R1 ve R2 değişkenlerine devrede kullandığımız dirençlerin değerleri atanır. Yani bu kod da R1 (10K) 10000 ve R2 (1.5K) 1500 değerlerini almalıdır. Ama pratikte bu değerler doğru voltaj ölçümünü yansıtmaz. Bu yüzden bu değerlerde kalibrasyon amaçlı değişiklik yaparak doğru voltaj değerini elde ederiz. Devreyi beslediğimiz gerilimi bir multimetre ile ölçeriz ve bu voltaj değerine eşit veya çok yakın bir değer elde edene kadar R2 değişkeninin değerini  artı veya eksi yönde değiştirerek doğru sonucu bulabiliriz.
Benim yaptığım devre için kod bölümünde R2 değerini 1980 (1.98K) yaptığımda mükemmele yakın bir sonuç elde ettim. Video da iki farklı voltaj yani 2S ve 3S Lipo batarya ile test yaptım ama video dışında ayarlı bir regülatör ile çok farklı voltaj değerlerini de test ettim. Ve her seferinde multimetre den yaklaşık +- 0.02 volt gibi yok sayılabilecek bir fark haricinde eşit değerler aldım.

Akım (Amper) Kalibrasyonu:
Bu devrede ACS714 akım sensörü kullanıyoruz. Bu sensörün 5A / 20A /30A versiyonları mevcut. 20A yani maks 20 ampere kadar ölçüm yapabilen verisyonu kullanıyoruz ve bunun çıkış hassasiyeti 100 mV/A dir. Bu değeri 38. satırdaki I (akım) formülünde bölen olarak kullanıyoruz. Bu değerler teorik değerlerdir. Üretimden çıkan ürün bire bir bu değerleri vermeyebiliyor. Bundan dolayı bu kod da kalibrasyon için 100 yerine 96 olarak kullandım.

Not: 5 Amperlik versiyonu için 185mV/A ve 30Amperlik versiyonu için 66 mV/A

Son olarak daha kararlı sonuçlar için Gerilim ve Akım değerleri 300 kez okunup bu değerlerin ortalaması alınarak ekrana yansıtılır. Ayrıca Volt ve Amper değerleri çarpılarak (P=I*V)  watt olarak güç değeri elde edilir.

Not: Döngüdeki 300 kez okunma benim tercihim. Daha az veya daha fazlası da olabilir. 250-300 gibi bir değerin kararlı sonucu almak için yeterli olduğuna yaptığım testler sonucu karar verdim.

ÖNEMLİ: Kalibrasyon denemeleri için Arduino USB den bilgisayara bağlı iken harici besleme yapılmamalıdır. Çünkü regülatör üzerinden giden 5V Arduinonun Vin girişini besler ve iki yönden gelen gerilim Arduinoun veya Bilgisayarınızın bozulmasına sebeb olabilir.

Bu tip devreleri yapmak temel pratik beceri ve dikkat gerektirir. Yaşanabilecek sorunlar kişinin kendi kontrolündedir. Arıza veya yaralanma gibi istenmeyen sonuçların tüm sorumluluğu size aittir.