Arduino Buzzer İle Kapı Zili Uygulaması
Buzzer konusuna değinmişken ara uygulama olarak buzzer ile kapı zili uygulamasını tasarlayıp uygulayalım. Bu uygulamada butona basıldığında, buzzer’dan melodik bir ses bütünü çıkmasını sağlıyoruz. Buton‘dan el çekilse dahi tanımlanan notalar bitene kadar ses kesilmeyecektir.
Kullanılan Malzemeler
- Arduino Uno kartı,
- Buton,
- Buzzer,
- 10 kiloohm direnç ve çeşitli kablo, devre elemanları.
Tasarım
Arduino Uno kartımızın iki adet dijital girişini kullanacağız. Bunlardan biri, buton’un bağlı olduğu Dijital-12 ucu diğeri ise buzzer’ın bağlı olduğu Dijital-8 ucudur. Buton’un boşta kalan ucu enerji için kartın pozitif 5 volt beslemesi ile desteklenir. Dijital-12 ucuna giden kablo aynı zamanda 10 kiloohm değerindeki bir direnç ile toprağa bağlanmıştır. Genellikle elektronik devrelerde buton’un kullanımı direnç ile bu şekilde olmaktadır. Aynı şekilde buzzer’ın diğer ucu da topraklama ile kartın Gnd girişine bağlanmıştır.
Kodlar
Buton ile buzzer kontrolü için gerekli olan kodlar aşağıda yer almaktadır. Kodlar içerisinde ağırlıklı olarak Arduino‘nun bize sunduğu toneMelody uygulamasından yararlandık. İlk başta bizim için gerekli olan harici “pitches.h” dosyasıdır. Bu dosyada notaların isimleri ve frekansları yer almaktadır. Pitches dosyasının nasıl eklendiğinden kodların sonunda bahsettik. İkinci olarak kapı zilimizde kullanmak istediğimiz melodileri tanımladık. Daha sonra bu notaların vuruş ritimlerini ve butona basıldığında bir saniyelik zamanda hangi notanın ne miktarda çalacağını belirttik. En son olarak da tone() fonksiyonu ile melodimizi bir ses bütünü haline getirerek buzzer‘dan ses çıkışı elde etmiş olduk.
// notalarının frekanslarının yer aldığı pitches.h dosyası eklendi. #include "pitches.h" //kapı zilimizdeki notalar int melodi[] = { NOTE_C4, NOTE_G3,NOTE_G3, NOTE_A3, NOTE_G3,0, NOTE_B3, NOTE_C4}; //butonun bağlı olduğu pin numarası. int buton=12; // note ritimlerini tanımladık. // 4'lük nota bir vuruş,8'lik nota yarım vuruştur. int nota_ritimleri[] = { 4, 8, 8, 4,4,4,4,4 }; void setup() { //buton giriş aygıtı olarak kullanılacak. pinMode(buton,INPUT); } void loop() { //butonun basılı olup olmadığı kart tarafından okunuyor. int buton_durum=digitalRead(buton); //eğer basılı ise melodiler çalacak. if(buton_durum==1) { // Sekiz notamızı baştan sona çalmak için for döngüsü uyguladık. for (int nota = 0; nota < 8; nota++) { // bir saniyelik(1000ms) nota süresi hesaplanıp. // nota türlerine göre ayrılacak. // örneğin,bir vuruş 1000/4,yarım vuruş 1000/8 gibi... int not_suresi = 1000/nota_ritimleri[nota]; tone(8, melodi[nota],not_suresi); // iki nota arasında belli bir süre ayrımı yapılmalı. // en uygun süre ise + 30% bir zaman dilimidir. int iki_nota_arasi = not_suresi * 1.30; delay(iki_nota_arasi); //müziği bitir. noTone(8); } } }