Arduino kullanarak Kapasite (kapasitans) Ölçümü

Bu, bilinmeyen kapasitans değerini ölçebilen Arduino kartına dayanan bir projedir. Değeri ölçülmesi gereken kapasitör, Kapasitör sayacının ekmek tahtasına takıldığında, 16 * 2 LCD, kapasitans değerini gösterir. Proje, bu Kapasite ölçüm cihazını geliştirmek için ADC özelliği RC şarj devresi konsepti ile birlikte kullanılan bir Arduino pro mini kart kullanmaktadır .

Şekil 1: Arduino Bazlı Kapasite Ölçüm Cihazının Prototipi

Açıklama

Tüm proje üç temel bloğa ayrılabilir;

  1. Kapasite Sensörü Ünitesi
  2. İşlemci Birimi
  3. Ekran Birimi
Şekil 2:  Arduino Bazlı Kapasite Ölçerin Blok Şeması

Kondansatör Sensörü Ünitesi, bir giriş kapasitörünün içinden şarj veya deşarj olmasına izin verir. Şarj veya deşarj olurken kapasitördeki voltaj, Sensör Ünitesinin çıkışı olarak görünür.

İşlemci Ünitesi, 0 ila 5V aralığında giriş gerilimi alabilir. Bu ünite, Sensör ünitesinin kondansatörü şarj etmesini veya deşarj etmesini sağlayabilir. Bu ünite Sensör Ünitesinin çıkışını giriş voltajı olarak alır ve bu voltajı okumak için ADC’yi kullanır. Kapasite değerini hesaplamak için bir Algoritma uygulanır. Ünite daha sonra kapasitans değerini görüntülemek için Ekran Ünitesine 4bit veri gönderir.

Ekran Ünitesi, 4bit veriyi İşlemci Ünitesinden alır ve kapasitansın değeri için 16 * 2 ekran üretir.


1) Kapasitans Sensörü

Bu projedeki Kapasitans sensörü, bilinmeyen kapasitörün bilinen bir dirençten boşaltıldığı bir RC boşaltma devresidir. Bir RC boşaltma devresi, bir kapasitör ve bir rezistörün paralel bağlandığı bir devredir. Bir RC boşaltma devresinde, boşalmaya başlamadan önce kapasitörün direnç boyunca voltajın yarısına kadar boşalması için geçen süre, direnç ve kapasitans değerlerine bağlıdır.

Şekil 3:  Kapasitans Sensörünün Devre Şeması

Bir RC devresindeki ‘C’ kondansatörünü bir ‘Rc’ rezistörü üzerinden şarj edip boşaltır ve boşaltma sırasında ‘T’ kondansatörün gerilimi boşalmaya başlamadan önce gerilimin yarısına düşürmesi için geçen süre olsun. ‘C’ kapasitansı aşağıdaki denklem kullanılarak hesaplanabilir;

C = T / (0,693 * Rc)

Bu projedeki kapasitörün bir süre şarj olmasına, üzerindeki voltajı ölçmesine ve daha sonra bilinen ‘Rc’ rezistörü üzerinden deşarj olmasına izin verilir. Üzerindeki gerilimin yarısına düşene kadar geçen süre boyunca ‘T’ geçen zaman not edilir ve bundan kapasitans değerini hesaplayabiliriz.

Rc değerinin seçilmesi;

T = 10 s deşarj süresiyle ölçülebilen maksimum kapasiteyi C = 100 uF olarak kabul edelim, daha sonra deşarj direnci Rc,

Rc = T / (0,693xC)

Rc = 1 / (0.693 * 100 uF) = 144300 ohm, 100K standart direnç seçelim


1)  İşlemci Birimi

Bu projedeki işlemci birimi Arduino kartıdır ve ADC modülünü Sensör Ünitesinden çıkış gerilimini okumak için kullanır. İşlemci birimi, önce bir süre 5V uygulayarak kapasitörü sensör biriminde şarj eder ve sonra aniden bu şarj voltajını giderir. Bu andan itibaren, kondansatör rezistör Rc’den boşalmaya başlar. İşlemci ünitesindeki algoritma, ADC kullanarak Sensör Ünitesinden gelen Vc voltajını sürekli olarak okur ve Vc deşarj başlamadan önce kapasitör boyunca mevcut olan voltajın yarısına gelinceye kadar, ‘T’ zamanındaki farkı boşaltmaya başlar.

Arduino kartında referans voltajı pimi 5 V’a bağlı olan 8 kanallı, 10 bitlik bir ADC kullanıyoruz. ADC, Vc voltajını okur ve ADC kaydında eşdeğer bir ‘Değer ADC ‘ değeri üretir . Bu değerden algoritma [H1] değerlerini   Vc voltajını hesaplar , ‘T’ boşalma zamanını ve sonra Kapasitansı ölçer.

Boşalma süresi ‘T’ değeri elde edildiğinde, Kapasite değeri, denklem yardımıyla Rc = 100K’nın bilinen değerleri kullanılarak hesaplanır;

C = T / (0,693 * Rc)


Aşağıdaki kod parçası ‘T’ boşalma zamanını ölçer ve Kapasitansı hesaplar.

discharge_time_T0 = micros();
discharge_voltage_V1 = discharge_voltage_V0 / 2;
while ( discharge_voltage_V1 <analogRead(A4) );
discharge_time_T1 = micros();
capacitance = (discharge_time_T1 – discharge_time_T0) / 0.693;
capacitance = capacitance / resistance_Cr;

2) 16 * 2 LCD modülü

Bu, Arduino’nun kapasitans değerini gösterdiği standart 16 * 2 LCD’dir. Kullanılacak Arduino kartının çıkış pinlerinin sayısını azaltmak için LCD dört bit modunda kablolanmıştır .

Şekil 4:  Karakter LCD’sinin Tipik Görüntüsü

Devre açıklaması

Şekil 5:  Arduino Bazlı Kapasite Ölçer Devre Şeması

Kod Açıklaması

Şekil 6:  
Kapasitans ölçümü için Arduino Kodunun Akış Şeması

od, önce kondansatörü bir çıkış pimi 18 üzerinden şarj eder ve daha sonra bu şarj voltajını giderir.Kondansatör boşalmaya başlar ve kod o anda sistem zamanını kopyalar. Aynı pin18, kapasitördeki voltajı izlemek için ADC kanalı olarak seçilecektir, ilk voltajın yarısına düştüğünde kod tekrar geçen süreyi hesaplar. Bu zaman değerini kullanarak kod kapasitans değerini hesaplar.

Arduino’da çalışan kod , sistem süresini mikrosaniye cinsinden almak için kütüphane işlev mikrosunu ()kullanır . Kapasite değeri daha sonra 16 * 2 LCD’de gösterilir. Arduino’da çalışan kod , ADC değerlerini elde etmek için analogRead () ve 16 * 2 LCD’yi görüntülemek için lcd.print () işlevini kullanır .


Proje Kaynak Kodu

###
// include the library code:
#include 
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int adc_value = 0;
int voltage_peak_value = 0;
int discharge_voltage_V0 = 0;
int discharge_voltage_V1 = 0;

float voltage_average_value = 0;
float dc_voltage_V0 = 0;
float ac_voltage_V0 = 0;
float dc_voltage_V1 = 0;
float dc_voltage_V2 = 0;
float ac_voltage_V1 = 0;
float dc_current_I0 = 0;
float dc_current_I1 = 0;
float ac_current_I0 = 0;
float dc_power = 0;
float ac_power = 0;
float npn_pnp_hfe = 0;
float capacitance = 0;

unsigned long resistance;
unsigned long sample_count = 0;
unsigned long discharge_time_T0 = 0;
unsigned long discharge_time_T1 = 0;

void setup()
{
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.print("    EG LABS    ");
  pinMode(13, OUTPUT);
}

void loop()
{

 //=============================== CAPACITANCE =====================================

  pinMode(18, OUTPUT);
  digitalWrite(18, HIGH);  
  delay(1000);            
  pinMode(18, INPUT);
  discharge_voltage_V0 = analogRead(A4);
  discharge_time_T0 = micros();
  discharge_voltage_V1 = discharge_voltage_V0 / 2;
  while ( discharge_voltage_V1 < analogRead(A4) ); 
  discharge_time_T1 = micros(); 
  capacitance = (discharge_time_T1 - discharge_time_T0) / 0.693;
  capacitance = capacitance / 100000;
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print(capacitance);
  lcd.print(" uF");
  //=================================================================================
  delay(1000);   
}
###

 
Video

Bu makale buradan çevrilmiştir.