Arduino Frekans ölçümü ve 555 frekans üretici

Arduino ile frekans ölçümü farklı şekillerde yapılabilir.  Bu proje için pulseIn() komutu kullanacağız. Bu şekilde sinyalin HIGH seviyesi ve LOW seviyesi ölçülmesi gerekir. Frekansın HIGH ve LOW zamanları farklı olsa bile toplam zaman frekansı belirleyecektir.
Frekansı da F=1/T kuralıyla hesaplamış oluruz. Programda, frequency=1000000/pulseTotal; komut ile hesaplanmıştır. PulseIn komutu hakkında detaylı bilgi buradadır.

Bu arada frekans üreteci ile anlatıma başlamak lazım. 555 entegresi osilatör ( dediğimiz kare dalga frekans üreteci olarak kullanılmaktadır.
555 entegresinin çalışması hakkında bilgi buradadır.

Devrede RV2 ve RV3 potansiyometreleri üretilecek frekansı belirler. C1 kondansatörü ise devrede 100nF tır. Siz bunu değiştirerek, ayarlanabilir frekans değerini değiştirebilirsiniz. Ayrıca C2 kondansatörünü de 10nF olarak değiştirip sonuçları ve stabiliteyi gözlemleyebilirsiniz.
Şemada görülen PCF8574 ve LCD ikilisi sizin kullanacağınız I2C LCD modülü temsil etmektedir. Programda bu tip modüllerin I2C adresleri belirtilir. Benim kullandığım modülün adresi 0x27 dir. Bu değer 0x20 değeri de olabilmektedir. Ayrıca modülde kullanılan entegreye göre de değişmektedir. Modülünüzde PCF8574A entegresi kullanılıyorsa adres 0x38 den başlar 0x3F aralığına kadar verilebilir. Bundan dolayı modülünüzün adresini bilmeniz gerekir.
Bu adresi program başındaki şu komuta yerleştirmeniz gerekir. LiquidCrystal_I2C lcd(0x27, 16, 2);
Bu komut da ayrıca LCD nin sütun ve satır sayısını da belirtmeniz gerekir.
Şemada en üst sağda görülen kutu ise, Arduino programlayıcısındaki seri monitörü temsil etmektedir.

Burada unutulmaması gereken durum ise Arduinonun 5V tan fazla gerilimlerde zarar görebileceğidir. Bundan dolayı üretilecek frekansın genliği 5V tan büyük olmamalıdır. 

 

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);


const int pulsePin = 13;
int pulseHigh; // Integer variable to capture High time of the incoming pulse
int pulseLow; // Integer variable to capture Low time of the incoming pulse
float pulseTotal; // Float variable to capture Total time of the incoming pulse
float frequency; // Calculated Frequency
void setup(){
Serial.begin(9600);
    pinMode(pulsePin,INPUT);
     lcd.begin();
  
     lcd.print("test");

}

void loop(){  
    pulseHigh = pulseIn(pulsePin,HIGH);
    pulseLow = pulseIn(pulsePin,LOW); 

    pulseTotal = pulseHigh + pulseLow; // Time period of the pulse in microseconds

    frequency=1000000/pulseTotal; // Frequency in Hertz (Hz)
    Serial.println(frequency);

   Serial.println(" Hz");
    lcd.clear();
   lcd.print(frequency);
    lcd.print("    Hz");
    
  
    delay(200);
}

Büyük frekansları ölçmek isterseniz, frekans bölücü devreler kullanabilirsiniz. Arduino belli frekansları ölçebilir. Fakat bu frekanstan daha büyük frekanslarınız varsa, bunları da ölçmenize yardımcı olacaktır. Frekans bölücüler sayesinde.
Frekansmetre ve frekans bölücüler hakkında, daha önce sitemizde yazılan konuya ve yorumlarına da bakmanızı tavsiye ederim.

Gerekli bütün dosyalar buradadır.

Bu dosyalar içerisinde 2 adet Kütüphane bulunmaktadır. Bazen modülünüze uygun kütüphane bulmak da sorun yaşayabilirsiniz. Bunları kullanmanızı tavsiye ederim. 

Proteus üzerinde çalışma ve Gerçek devre üzerinde çalışma videoları.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.