Arduino ve LCD ile kondansatör ölçümü

Kondansatörlerin ölçümünde çok yüksek maliyetli cihazlar almaktansa kendi yapacağınız bu proje ile ölçme yapabilirsiniz. Eğer elektroniği seviyor ve hobi devreleri yada projeleri yapıyorsanız , elinizde onlarca model kondansatör mevcuttur.Kondan satör var olmasına var ama özellikle mercimek tipi olanların üzerinde herhangi bir yazı olmayabiliyor . Bu şekilde olanların değerinin tesbit edemediğinizden dolayı büyük ihtimak çöp tenekesine gidiyordur.

kapasitemetre2

Bu projemizde kondansatör değer 0-1000mikroF olan kondansatör değerleriniz çok rahatlıkla ölçebilirsiniz.  Sadece dikkat etmeniz gereken ARTI ve EKSİ uçlarını doğru bağlamanız . Tabiki bu mercimek tipi kondansatörleri polariteleri olmadığından dolayı herhangi ucunu bağlayabilirsiniz .

Projemizin bağlantı şeması

kapasitemetre

Projemizin Programı


//Digital Capacitance Meter
//Measuring from 0.000pF to 1000uF

#include <LiquidCrystal.h>
LiquidCrystal lcd(11, 9, 5, 4, 3, 2);
const int OUT_PIN = A4;
const int IN_PIN = A0;
const float IN_STRAY_CAP_TO_GND = 24.48;
const float IN_CAP_TO_GND  = IN_STRAY_CAP_TO_GND;
const float R_PULLUP = 34.8;  
const int MAX_ADC_VALUE = 1023;

void setup()
{
  pinMode(OUT_PIN, OUTPUT);
  pinMode(IN_PIN, OUTPUT);
  lcd.begin(16, 2);
  }

void loop()
{
    pinMode(IN_PIN, INPUT);
    digitalWrite(OUT_PIN, HIGH);
    int val = analogRead(IN_PIN);
    digitalWrite(OUT_PIN, LOW);

    if (val < 1000) { pinMode(IN_PIN, OUTPUT); float capacitance = (float)val * IN_CAP_TO_GND / (float)(MAX_ADC_VALUE - val); lcd.setCursor(0,0); lcd.print("Capacitance = "); lcd.setCursor(0,1); lcd.print(" "); lcd.setCursor(0,1); lcd.print(capacitance, 3);// for the best precision lcd.print("pF "); } else { pinMode(IN_PIN, OUTPUT); delay(1); pinMode(OUT_PIN, INPUT_PULLUP); unsigned long u1 = micros(); unsigned long t; int digVal; do { digVal = digitalRead(OUT_PIN); unsigned long u2 = micros(); t = u2 > u1 ? u2 - u1 : u1 - u2;
      } 
      
      while ((digVal < 1) && (t < 400000L)); pinMode(OUT_PIN, INPUT); val = analogRead(OUT_PIN); digitalWrite(IN_PIN, HIGH); int dischargeTime = (int)(t / 1000L) * 5; delay(dischargeTime); pinMode(OUT_PIN, OUTPUT); digitalWrite(OUT_PIN, LOW); digitalWrite(IN_PIN, LOW); float capacitance = -(float)t / R_PULLUP / log(1.0 - (float)val / (float)MAX_ADC_VALUE); lcd.setCursor(0,0); lcd.print("Capacitance = "); if (capacitance > 1000.0)
      {
        lcd.setCursor(0,1);
        lcd.print("                ");
        lcd.setCursor(0,1);
        lcd.print(capacitance / 1000.0, 2);
        lcd.print("uF ");
   
      }
        
      else
      {
        lcd.setCursor(0,1);
        lcd.print("                ");
        lcd.setCursor(0,1);
        lcd.print(capacitance, 2);
        lcd.print("nF ");

      } 
      
    while (millis() % 1000 != 0);
}
    }

Alıntıdır.

Bir Cevap Yazın

Time limit is exhausted. Please reload CAPTCHA.