Buzzer kullanımının temelini öğrendikten sonra, şimdi sistemi tamamen interaktif bir müzik ve alarm kutusuna dönüştürüyoruz! Bu rehberde, tam 4 adet buton kullanarak buzzer'ı uzaktan yöneteceğiz. Butonlarımızdan biri sesi açacak, biri kapatacak, diğer ikisi ise sesin kalınlığını ve inceliğini (frekansını) anlık olarak 50 Hz basamaklarla değiştirmemizi sağlayacak. Bu sayede buton kontrolü ve hafıza mantığını çok iyi kavrayacaksınız.
Bu projede çok sayıda buton kullandığımız için bağlantıların karışmaması oldukça önemlidir. Butonların bir bacağına 5V veriyoruz, diğer bacağını ise hem 10k Ohm direnç ile GND'ye (Pull-down) bağlıyoruz hem de Arduino'nun ilgili dijital pinine sinyal olarak gönderiyoruz.
| Bileşen | Arduino Uno Pini |
|---|---|
| Buzzer (Artı Ucu) | Pin 8 |
| 1. Buton (Açma Butonu) | Pin 5 |
| 2. Buton (Kapatma Butonu) | Pin 4 |
| 3. Buton (Frekans Artırma / Ekle) | Pin 3 |
| 4. Buton (Frekans Azaltma) | Pin 2 |

Aşağıdaki güncel ve gelişmiş kodu doğrudan kopyalayıp Arduino kartınıza yükleyebilirsiniz. Kod bloğunun içindeki açıklamalar algoritmanın çalışma mantığını anlamanıza yardımcı olacaktır.
int BuzzerPin = 8;
int b_ac = 5; // Buton Aç
int b_kapat = 4; // Buton Kapat
int b_ekle = 3; // Buton Frekans Ekle
int b_azalt = 2; // Buton Frekans Azalt
int Frekans = 300; // Başlangıç frekansını 300 Hz olarak belirledik
int durum = 0; // Buzzer Durumu => Başlangıçta Kapalı (0)
void setup() {
pinMode(b_ac, INPUT);
pinMode(b_kapat, INPUT);
pinMode(b_ekle, INPUT);
pinMode(b_azalt, INPUT);
}
void loop() {
// Açma butonuna basıldıysa durumu 1 yap
if(digitalRead(b_ac))
durum = 1; // Açık
// Kapatma butonuna basıldıysa durumu 0 yap
if(digitalRead(b_kapat))
durum = 0; // Kapalı
// Frekans ekle butonuna basıldıysa sesi 50 Hz incelt
if(digitalRead(b_ekle)){
Frekans = Frekans + 50;
delay(100); // Buton arkını (kırpışmayı) önlemek için kısa bekleme
}
// Frekans azalt butonuna basıldıysa sesi 50 Hz kalınlaştır
if(digitalRead(b_azalt)){
Frekans = Frekans - 50;
delay(100);
}
// Eğer durum 1 ise (yani açıldıysa) belirlenen frekansta çal
if(durum == 1)
tone(BuzzerPin, Frekans); // Zaten çalıyorsa ve frekans değiştiyse yeni değerle devam eder
else // Kapalıysa veya kapatma butonuna basıldıysa sustur
noTone(BuzzerPin);
}
Bu projenin en güzel yanı, hafıza (durum kontrolü) mantığıyla çalışmasıdır. Açma butonuna bir kez basıp elinizi çektiğinizde bile Arduino durum = 1 bilgisini hafızasında tutar ve siz kapatma butonuna basana kadar buzzer çalmaya devam eder. Buzzer çalarken frekans ekleme veya azaltma butonlarına bastığınızda, tone() fonksiyonu durdurulmaya gerek kalmadan anlık olarak yeni frekans değeriyle güncellenir. Bu da pürüzsüz bir ton geçişi sağlar.
Çözüm: Bu durum tamamen "Floating (Boşta Kalan) Pin" sorunundan kaynaklanır. Arduino butonun basılmadığı anlarda pinin 0 mı yoksa 1 mi olduğunu anlayamaz. Bunu çözmek için butonların Arduino pinine giden bacaklarına mutlaka 10k Ohm değerinde Pull-down direnci bağlayıp direncin diğer ucunu GND'ye vermelisiniz.
Çözüm: İnsan kulağı belirli bir frekansın altını (örneğin 20 Hz altı) duyamaz ve tone() fonksiyonu eksi (-) değerlere düştüğünde hata verebilir. Kodunuza bir güvenlik sınırı eklemek isterseniz, azaltma kısmını if(digitalRead(b_azalt) && Frekans > 100) şeklinde güncelleyerek frekansın 100 Hz'in altına düşmesini engelleyebilirsiniz.
Henüz yorum yapılmamış. İlk yorumu siz yapın!