Arduino AC Frekansmetre Yapımı

Arduino AC Frekansmetre Yapımı

Arduino AC frekansmetre projesi sayesinde; evlerimizde ve endüstride kullanılan 110V, 220V veya 380V gibi yüksek gerilimli alternatif akım (AC) hatlarının frekans (Hz) ve periyot (ms) değerlerini son derece güvenli ve hassas bir şekilde ölçebilirsiniz. Eğer ses sinyalleri veya maksimum 5Vpp genliğindeki düşük voltajlı dijital kare dalgaları ölçen bir frekansmetre projesi arıyorsanız, Arduino Frekansmetre Yapımı (0-1 MHz) başlıklı rehberimizi incelemenizi tavsiye ederiz.

Bu çalışmamızda, elde ettiğimiz şebeke frekansı ve periyot değerlerini anlık olarak 16×2 karakter LCD ekranda görüntüleyeceğiz. Alternatif olarak, elinizde bir ekran bulunmuyorsa verileri doğrudan Arduino IDE Seri Monitörü üzerinden de takip edebilirsiniz.

HAYATİ UYARI: Bu proje 220V/380V gibi yüksek şebeke gerilimi barındırmaktadır. Şebeke gerilimiyle çalışırken elektrik çarpması, yangın ve kalıcı fiziksel yaralanma riskleri mevcuttur. Eğer yüksek gerilim tecrübeniz yoksa, bu devreyi kesinlikle kurmayın! Bu projede verilen tüm şemalar eğitim amaçlıdır ve oluşabilecek her türlü risk kullanıcının kendi sorumluluğundadır.

Teorik Altyapı (Frekans ve Periyot İlişkisi):
Frekans (f), bir sinyalin 1 saniye içerisindeki tam döngü (salınım) sayısıdır ve temel birimi Hertz’dir (Hz). Periyot (T) ise, bu salınımın 1 tam döngüyü tamamlaması için geçen süredir ve temel birimi saniyedir (s). İkili arasındaki matematiksel ilişki f = 1/T şeklindedir.

Türkiye dahil dünyanın birçok ülkesinde evsel elektrik şebekesinin standart frekansı 50 Hz‘dir (bazı ülkelerde ise 60 Hz). 50 Hz frekansa sahip bir sinüs dalgasının periyodu tam 20 milisaniye (ms) sürerken, 60 Hz şebekenin periyodu yaklaşık 16.67 ms olarak hesaplanır.

Gerekli Malzemeler

  • Arduino UNO Geliştirme Kartı
  • 16×2 Karakter LCD Ekran
  • 120 kΩ 2W (Yüksek Güçlü) Direnç (Akım sınırlama için)
  • Dirençler: 1x 220 Ω, 1x 10 kΩ
  • 10 kΩ Potansiyometre (LCD Kontrast ayarı için)
  • PC817 Optokuplör (Galvanik izolasyon için)
  • 1N4007 Silikon Diyot (Ters gerilim koruması için)
  • Breadboard ve Jumper Kablolar

Devre Bağlantı Şeması

Arduino AC Frekansmetre Yapımı
Arduino AC Frekansmetre Yapımı

Devre Çalışma Mantığı ve Galvanik İzolasyon:
Şebeke gerilimini Arduino ile doğrudan ölçmek son derece tehlikelidir. Bu nedenle projede **PC817 optokuplör** kullanarak yüksek gerilim tarafı ile Arduino’nun alçak gerilim tarafını fiziksel olarak tamamen birbirinden yalıtıyoruz (galvanik izolasyon). Optokuplörün içindeki kızılötesi LED yandığında, çıkıştaki foto-transistör iletime geçer.

PC817 entegresinin içindeki LED’in maksimum ters dayanım voltajı (reverse voltage) sadece 6V’tur. AC şebeke ise sürekli kutup değiştirir. LED’in ters gerilim altında yanmasını önlemek için AC girişe paralel olarak 1N4007 diyot yerleştirilerek negatif alternanslar tamamen bloke edilir. Akımı güvenli sınırlara indirmek için 120 kΩ direnç eklenmiştir:

    \[\text{Peak Voltaj (220V AC için)} = 220 \times \sqrt{2} \approx 311 \text{ V}\]

    \[\text{Peak Akım (I)} = \frac{311 \text{ V}}{120\text{k}\Omega} \approx 2.59 \text{ mA}\]

Yarım dalga doğrultma yapıldığı için şebekeden çekilen RMS akımı yaklaşık 1.3 mA seviyelerindedir ve bu akım optokuplörün güvenle tetiklenmesi için fazlasıyla yeterlidir.

Optokuplörün çıkış tarafı (transistör kollektör ucu) Arduino’nun **Dijital 2 (D2)** pinine bağlanır. Bu pin, Arduino Uno’nun donanımsal Dış Kesme 0 (External Interrupt 0) bacağıdır. Pin, 10kΩ pull-up direnci ile +5V hattına çekilir. Şebekede pozitif alternans varken optokuplör iletime geçer ve D2 pini lojik-0 (GND) olur; negatif alternansta ise kesime giderek lojik-1 (+5V) seviyesine yükselir. Bu sayede 50 Hz şebeke sinyali Arduino pininde 50 Hz’lik kare dalga sinyaline dönüştürülür.

Arduino AC Frekansmetre Program Kodu

Yazılımın Çalışma Mantığı ve Matematiksel Hesaplama

Bu projede optokuplörün lojik durumunun yüksekten düşüğe (falling edge) geçiş anını anlık yakalamak için Arduino’nun donanımsal dış kesmesini (Interrupt) kullanıyoruz. Kesme, setup() fonksiyonu altında şu şekilde başlatılır:

Her lojik düşme olayı gerçekleştiğinde Arduino ana döngüyü askıya alır ve anında timer1_get() ISR (Interrupt Service Routine) fonksiyonunu çalıştırır. İki ardışık kesme arasında geçen süreyi mikrosaniye çözünürlüğünde ölçmek için 16-bitlik donanımsal Timer1 sayıcısı kullanılır.

Timer1 sayıcı bölücü değeri (prescaler) 8 olarak ayarlanmıştır. Bu durumda sayıcının çalışma frekansı:

    \[\text{Timer1 Frekansı} = \frac{16 \text{ MHz}}{8} = 2 \text{ MHz}\]

Yani Timer1’in her 1 artışı tam olarak **0.5 mikrosaniyeye** (0.5 \mu s) karşılık gelir. 16-bitlik Timer1 maksimum 65535 değerine ulaşabilir. Bu donanımsal yapılandırma ile Arduino’nun ölçebileceği en düşük şebeke frekansı limit değeri yaklaşık 30.5 Hz‘dir (Timer1 taşma sınırı):

Periyot Hesaplama Formülü

    \[\text{Periyot (ms)} = \frac{\text{Timer1 Değeri}}{\text{Timer1 Frekansı}} = \frac{\text{Timer1 Değeri}}{2000000 \text{ Hz}} \times 1000 = \frac{\text{Timer1 Değeri}}{2000}\]

Frekans Hesaplama Formülü

    \[\text{Frekans (Hz)} = \frac{1}{\text{Periyot}} = \frac{2000000}{\text{Timer1 Değeri}}\]

Yorum yapma özelliği, forum tarafından gelen istek sebebiyle kapatılmıştır. Lütfen tartışmalar ve sorularınız için topluluk forumumuza katılın.