Potansiyometre ile LED ve Buzzer Kontrolü
Potansiyometreden analog değer okuyarak LED parlaklığını PWM ile ayarlayacağız. Ardından aynı analog değeri kullanarak pasif buzzer frekansını tone() ile değiştireceğiz. Bu etkinlikte analogRead(), analogWrite(), map(), Serial Monitor ve tone() kullanımını birlikte öğreneceğiz.
Gerekli Malzemeler
İki küçük uygulama için temel parçalar.
- 1 adet Arduino Uno R3 veya uyumlu kart
- 1 adet breadboard
- 1 adet 10 kΩ potansiyometre
- 1 adet LED
- 1 adet 220 Ω veya 330 Ω direnç
- 1 adet pasif buzzer
- Jumper kablolar
- USB veri kablosu
Öneri: İlk kez uyguluyorsanız önce yalnızca potansiyometre + LED devresini tamamlayın. LED kısmı çalıştıktan sonra pasif buzzer örneğine geçmek konuyu daha kolay anlamanızı sağlar.
Potansiyometre Nasıl Çalışır?
Bu devrede gerilim bölücü olarak kullanacağız.
Potansiyometre üç bacaklı ayarlanabilir bir elemandır. Arduino uygulamalarında çoğunlukla gerilim bölücü olarak kullanılır. Bir dış bacak 5V'a, diğer dış bacak GND'ye bağlanır; ortadaki hareketli uçtan alınan gerilim ise potansiyometrenin konumuna göre değişir.
Ortadaki bacağı A0 analog girişine bağladığımızda Arduino Uno R3 bu gerilimi klasik kullanımda 0 ile 1023 arasında sayısal bir değere dönüştürür.
PWM ve Analog Çıkış Mantığı
LED parlaklığını nasıl değiştireceğiz?
Arduino Uno R3 üzerinde D3, D5, D6, D9, D10 ve D11 pinleri PWM desteklidir. Bu pinlerde analogWrite() ile 0–255 arasında bir değer kullanarak LED parlaklığı gibi çıkışları kontrol edebiliriz.
PWM gerçek bir analog gerilim değildir. Pin çok hızlı biçimde HIGH ve LOW arasında anahtarlanır. HIGH kalma süresinin oranı değiştirilerek LED'in ortalama parlaklığı değişiyormuş gibi görünür.
Kart farklarına dikkat: Bu dersteki 0–1023 analog giriş ve 0–255 PWM değerleri klasik Arduino Uno R3 için anlatılmıştır. Daha yeni Arduino kartlarında ADC veya PWM çözünürlüğü farklı olabilir.
Devre Bağlantısı
Potansiyometreyi A0'a, LED'i D3'e bağlayalım.
Potansiyometrenin dış bacaklarından birini 5V, diğerini GND hattına bağlayın. Orta bacağı A0 pinine bağlayın. Dış bacakların yerini değiştirirseniz yalnızca çevirdiğiniz yön ile değerin artış yönü tersine döner.
LED'in anot (uzun) bacağını 220 Ω veya 330 Ω seri direnç üzerinden D3 pinine, katot (kısa) bacağını ise GND'ye bağlayın.
Dikkat: LED'i seri direnç olmadan doğrudan Arduino pinine bağlamayın. Arduino Uno Rev3'te dijital I/O pini için önerilen akım 20 mA'dır.
Serial Monitor ile Değer Okuma
Önce sensör değerini gözlemleyelim.
Potansiyometreyi çevirdiğimizde A0 pininden okunan değerin değiştiğini önce Serial Monitor'de görelim. Böylece devre bağlantımızın doğru olup olmadığını da kolayca kontrol edebiliriz.
const byte potPin = A0;
void setup() {
Serial.begin(9600);
}
void loop() {
int potValue = analogRead(potPin);
Serial.println(potValue);
delay(100);
}
Analog giriş için ayrıca pinMode(A0, INPUT) yazmak gerekmez. Arduino IDE 2'de Serial Monitor'ü açtığınızda potansiyometreyi çevirdikçe değerin yaklaşık 0–1023 arasında değiştiğini görebilirsiniz.
Potansiyometre ile LED Parlaklığı
0–1023 değerini 0–255 PWM aralığına çevirelim.
Potansiyometreden okunan değer 0–1023 aralığındadır. LED için kullanacağımız PWM değeri ise 0–255 aralığındadır. Bu iki aralık arasında dönüşüm yapmak için map() fonksiyonunu kullanabiliriz.
const byte potPin = A0;
const byte ledPin = 3;
void setup() {
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
int potValue = analogRead(potPin);
int brightness = map(potValue, 0, 1023, 0, 255);
analogWrite(ledPin, brightness);
Serial.print("Pot: ");
Serial.print(potValue);
Serial.print(" PWM: ");
Serial.println(brightness);
delay(20);
}
Önemli: map() değeri otomatik olarak sınırlandırmaz. Bu devrede potansiyometre beklenen 0–1023 aralığında çalıştığı için sorun olmaz; başka uygulamalarda gerekirse sonucu constrain() ile sınırlandırabilirsiniz.
Pasif Buzzer Frekans Kontrolü
Potansiyometre ile ses perdesini değiştirelim.
Pasif buzzer kullanıyorsanız potansiyometre değerini doğrudan PWM parlaklığı gibi düşünmek yerine frekans değerine dönüştürmek daha doğru bir yaklaşımdır. Bunun için Arduino'nun tone() fonksiyonunu kullanabiliriz.
Buzzer'ın sinyal ucunu örneğin D8 pinine bağlayın. tone() kullanmak için pinin PWM işaretli olması gerekmez.
const byte potPin = A0;
const byte buzzerPin = 8;
void setup() {
Serial.begin(9600);
}
void loop() {
int potValue = analogRead(potPin);
int frequency = map(potValue, 0, 1023, 200, 2000);
tone(buzzerPin, frequency);
Serial.print("Pot: ");
Serial.print(potValue);
Serial.print(" Frekans: ");
Serial.println(frequency);
delay(20);
}
Aktif ve pasif buzzer aynı değildir. Aktif buzzer kendi osilatörünü içerdiği için sabit gerilimle ses verebilir. Frekansı programla değiştirmek istediğiniz uygulamalarda pasif buzzer daha uygundur.
Kodu Nasıl Okumalıyız?
Dersin temel komutlarını özetleyelim.
Sık Yapılan Hatalar
Devre çalışmıyorsa önce bunları kontrol edin.
- Potansiyometrenin orta bacağını A0 yerine yanlış pine bağlamak
- 5V ve GND bağlantılarını karıştırmak
- LED'i seri direnç olmadan kullanmak
- LED'i PWM desteklemeyen bir pine bağlayıp parlaklık kontrolü beklemek
- Aktif buzzer ile pasif buzzer davranışını aynı sanmak
- Serial Monitor baud hızını kodla eşleştirmemek
- Koddaki pinlerle devredeki pinlerin farklı olması
- Başka kartlarda Uno R3'ün ADC/PWM aralıklarını aynen varsaymak
Mini Görevler
Öğrendiğin kodu değiştirerek dene.
- Potansiyometre arttıkça LED'in sönmesini sağlayacak şekilde değeri ters çevir.
- LED'in PWM aralığını 50–200 ile sınırlandır.
- Serial Monitor'e potansiyometre değerini yüzde olarak yazdır.
- Pasif buzzer frekansını 262–1047 Hz aralığına ölçekle.
- LED parlaklığı ve buzzer frekansını aynı potansiyometre ile birlikte kontrol et.
- İkinci bir LED ekleyip birinin parlaklığı artarken diğerinin azalmasını sağla.
Resmî Kaynaklar
Konuyu daha ileri taşımak için.