TinkerCAD ile Buzzer Uygulaması
Arduino’nun kullanışlı fonksiyonlarından biri tone() fonksiyonudur. 3 parametre alan bu fonksiyon, bir çıkış pinini belirli bir frekansta çalıştırabilir. Böylece buzzer ya da speakerlar için ideal sesler elde edilebilir.
Merhabalar,
Bu uygulamamızda Buzzer ile tone() fonksiyonunu incelemeye çalışacağız. Buzzer -Piezzo-Düdük ya da Spekear saniyede yüzlerce kez gerilim uygulandığında ses çıkarabilen bir devre elemanıdır. Bu sesler belirli frekanslarda çalınırsa herkes kendi müziğini yapabilir diyebiliriz.
Buzzer Nedir?
Buzzer tek başına bir orkestra değildir. Uyarıcı ikaz edici sesler çıkarabilen, belirli frekans aralığında çalıştırıldığında düzenli sesler diyebileceğimiz notalar çıkarabilen bir devre elemanıdır. Günlük hayatta modern megafonlarda güçlendirilmiş buzzerlar kullanılmaktadır.
2 bacaklı yapıda olan Buzzer’ın 1 bacağı GND pinine diğer bacağı ise dijital pine bağlanır.

Modül buzzerlarda bir de 5V bacağı vardır. Bu modüllerin çıkardığı sesler daha kalitelidir.
TinkerCAD ile Buzzer Uygulama Kodları:
Arduino’nun resmi web sitesinde fonksiyonların kullanımıyla ilgili faydalı bir kaynak mevcut.
http://arduino.cc/en/Reference
Uygulamamızı bu kaynakta yer alan tone() fonksiyonunu dikkate alarak geliştirmeye çalıştık.
Bu referans kaynakta tone() fonksiyonunun kullanımını incelemek için tıklayınız.
Arduino’da kendimize ait fonksiyonları da yazmak mümkündür. Örneğin aşağıdaki fonksiyon 2 sayıyı parametre olarak alıp toplayan ve sonucu döndüren bir fonksiyon örneğidir.
int topla(int parametre1, int parametre2)
{
int toplam;
toplam = parametre1 + parametre2;
return (toplam);
}
Fonksiyonlar bir değeri alabilir ve bu değeri başka bir değere dönüştürebilir. Bu değere parametre adı verilir. Parametreler fonksiyon adından sonra açılan parantezler içine yazılır.
Fonksiyonlar parametre almak zorunda değildir.
Eğer fonksiyondan bir değer gelecekse değer tipi fonksiyon isminin önüne yazılmalıdır. Fonksiyondan gelen değerler return() ile döndürülür. Eğer değer döndürülmeyecekse fonksiyon adının önüne “void” yazılır. setup() ve loop() fonksiyonları değer döndürmeyen fonksiyonlara örnektir.
Program kodlarının düzenli ve kullanımı kolay olması için fonksiyon-metot-işlev kullanımı son derece önemlidir.
tone(pin, frequency, duration);
Arduino’nun kullanışlı fonksiyonlarından biri tone() fonksiyonudur. 3 parametre alan bu fonksiyon, bir çıkış pinini belirli bir frekansta çalıştırabilir. Böylece buzzer ya da speakerlar için ideal sesler elde edilebilir. Eğer milisaniye cinsinden belirli bir süre tanımlanırsa, o süre zarfında ses oluşturulur ve ardından ses kesilir. Eğer süre belirtilmezse sonsuza kadar ses üretebilir bu fonksiyon.
NOTE: noTone() komutu kullanarak tone() fonksiyonu durdurulabilir.
TinkerCAD ile Buzzer Uygulama Devre Şeması:

TinkerCAD ile Buzzer Uygulama Devre Kodları:
/*BlogKod.com - TinkerCAD ile Buzzer Uygulaması*/
/*
Bu uygulamada buzzer ile bir şarkı çalacağız.
Buzzer'ın müzik notalarını çalabilmesi için belirli
bir frekans aralığında çalışması gerekmektedir.
Müzik notalarının harf ve frekans karşılığı tablosu şöyledir.
Nota Çalışma Frekansı
c (DO) 262 Hz
d (RE) 294 Hz
e (Mİ) 330 Hz
f (FA) 349 Hz
g (SOL) 392 Hz
a (LA) 440 Hz
b (Sİ) 494 Hz
C (İNCE DO) 523 Hz
Çalacağımız şarkının notaları şöyle:
“Daha Dün Annemizin Kollarında Yaşarken” Çocuk Şarkısı Notaları:
Da-ha-dün-an-ne-mi-zin
Do-do-sol-sol-la-la-sol
c-c-g-g-a-a-g
Kol-la-rın-da-ya-şar-ken
Fa-fa-mi-mi-re-re-do
f-f-e-e-d-d-c
Çi-çek-li-bah-çe-mi-zin
Do-do-sol-sol-la-la-sol
c-c-g-g-a-a-g
Yol-la-rın-da-ko-şar-ken
Fa-fa-mi-mi-re-re-do
f-f-e-e-d-d-c
Şim-di-o-kul-lu-ol-duk
Sol-sol-fa-fa-mi-mi-re
g-g-f-f-e-e-d
Sı-nıf-la-rı-dol-dur-duk
Sol-sol-fa-fa-mi-mi-re
g-g-f-f-e-e-d
Se-vinç-li-yiz-he-pi-miz
Do-do-sol-sol-la-la-sol
c-c-g-g-a-a-g
Ya-şa-sın-o-ku-lu-muz
Fa-fa-mi-mi-re-re-do
f-f-e-e-d-d-c
*/
// Buzzer dijital 9 numaralı pine bağlı
const int buzzerPini = 9;
//Şarkımızın es'lerle birlikte nota sayısı 64'tür.
const int sarkiUzunlugu = 64;
//Şarkımıza ait notaları es'lerle(boşluklar) diziye atıyoruz.
char sarkinotalari[] = "ccggaag ffeeddc ccggaag ffeeddc ggffeed ggffeed ccggaag ffeeddc ";
//Boşluklar bir es'i ifade eder
//Şarkımıza ait her nota 2 vuruş çalsın.
int vurusSayisi = 2;
//Notalar arası beklemeyi belirlemek için tempo isimli bir değişken tanımladık.
int tempo = 300;
void setup()
{
//Buzzer pini çıkış olarak ayarlandı
pinMode(buzzerPini, OUTPUT);
}
void loop()
{
int i, durak;
for (i = 0; i < sarkiUzunlugu; i++) // Şarkımıza notaları atamak için döngüyü çalıştırıyoruz.
{
durak = vurusSayisi * tempo; // Nota ya da es'lerin uzunluğunu durak olarak belirliyoruz.
if (sarkinotalari[i] == ' ') // Notalar arasında es mi var? Boşluk yani...
{
delay(durak); // durak değişkeni kadar bekle
}
else // es yoksa notaları çal...
{
tone(buzzerPini, frekans(sarkinotalari[i]), durak);
delay(durak); // durak kadar bekleme yap
}
delay(tempo / 10); // Notalar arası 30 ms bekle...
}
while (1); // Şarkıyı 1 kez çalmak için burada döngüyü durdurduk.
//Sürekli çalsın istiyorsanız bu döngüyü kaldırabilirsiniz.
}
int frekans(char nota)
{
// Bu frekans fonksiyonu notaları harflendirir ve
// tone() fonksiyonu için nota karşılığı olan frekansı
// hz (hertz) cinsinden döndürür
int i;
const int notaSayisi = 8; // DO'dan İNCE DO'ya 8 notamız var...
char notaHarfleri[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
int notaFrekanslari[] = {262, 294, 330, 349, 392, 440, 494, 523};
//Bu döngüde harflere frekans karşılığını atamış olacağız.
//Böylece frekans değeri yerine belirlediğimiz harfleri ya da sembolleri kullanabiliriz.
for (i = 0; i < notaSayisi; i++) // Step through the notes
{
if (notaHarfleri[i] == nota) //Nota var mı?
{
return (notaFrekanslari[i]); // Varsa frekans karşılığını döndür...
}
}
//Hiçbir nota yoksa bile null değer döndürmemiz gerekiyor.
// Çünkü frekans fonksiyonumuz değer döndürmesi gereken bir fonksiyon...
return (0);
}
TinkerCAD ile Buzzer Uygulama Devre Simülasyonu:
https://www.tinkercad.com/embed/kaWvY5iKW8Z?editbtn=1
Bir sonraki uygulamamızda görüşmek üzere…