Arduino İle Melodi Çalmak

Robotik ve Arduino Kodlama ve Proje Geliştirme

Arduino İle Melodi Çalma

Arduino İle Melodi Çalmak

Bu dersimizde Beethoven ın 9 nolu senfonisi  (Kardeş Olun Ey İnsanlar – Neşeye Şarkı ) olarak bilinen eserini Arduino ile çalmayı öğreneceğiz.

Arduino programlama konuları içinde ele alacağımız çalışmamız oldukça kolay uygulanabilen bir yapıya sahiptir. Öncelikle devremizde bulunması gereken parçaları listeleyelim.

  • Arduino Uno
  • Pasif Buzzer
  • Breadboard
  • 100 Ohm Direnç
  • Jumper kabloları (Erkek-Erkek)

Arduino İle Melodi Çalma

 

Aktif Buzzer ve Pasif Buzzer Arasındaki Fark Nedir?

Arduino ile Melodi çalmak için pasif buzzer kullanılabilir. Pasif buzzerlar ses üretebilmek için Arduino’ya bağlanmak zorundadır. Diğer bir tür buzzer da Aktif Buzzer’dır. Aktif Buzzerlar kendi içlerinde frekans üreteçlerine sahiptir. Bu nedenle de girişlerine 5V’luk gerilim uygulandığında doğrudan ses çıkışı verebilirler. Pasif Buzzer için ise Arduino dan frekans üretilmek zorundadır. Arduino’dan üretilen farklı frekanslarda Pasif buzzer bile farklı tonlarda sesler üretebilmektedir. Bu sayede de melodiler oluşturmak mümkün olmaktadır.

Üst Görünüşleri aynı olsa da alt görünüşlerine bakarak aktif ve pasif buzzerlar kolaylıkla belirlenebilir. Pasif buzzerlarda bağlantı pinlerinin bulunduğu baskı devre plaketi görünebilecek şekildedir ve oldukça basit bir görüntüsü bulunmaktadır. Aktif Buzzerda ise al kısmında koruyucu bir reçine bulunmaktadır. Ses üreteç devresi Buzzer içinde olduğundan daha korunaklı bir yapıya sahiptir. Aktif Buzzer bu nedenle Pasif Buzzerlara göre daha iyi ses vermektedir.

Arduino Buzzer Devresi Nasıl Yapılır?

Melodi Devresi incelendiğinde Buzzer a seri bağlı 100 Ohmluk bir direnç olduğu görünmektedir.  Bu direnç 5V’luk çıkış geriliminin Buzzer a zarar vermesini engellemektedir. Ayrıca Buzzer’ın çekeceği yüksek akımın arduino çıkışına zarar vermesi de engellenmektedir. Doğrudan bağlanması durumunda devre çalışabilir ancak tavsiye edilmez.

Arduino İle Melodi Çalma Kodları Nasıl Yazılır?

Pasif Buzzerlarda ses elde edebilmek için arduino da tone komutu kullanılmaktadır.

tone(buzzer pin numarası, nota değeri);

şeklinde kullanılan tone komutu ile elde edilen sesleri durdurmak için ise

noTone(buzzer pin);

komutu kullanılır.

Komutlardan sonra delay  bekleme komutu ile çalma süreleri ayarlanarak melodi oluşturulmaktadır.

Melodi oluşturabilmek için Notaların frekans değerlerini bilmek  gerekmektedir.

Arduino ile Melodi Oluşturma Nota Frekansları

do 261
re 294
mi 329
fa 349
sol 392
la 440
si 493
DO 523

Yukarıda verilen frekans değerleri standart notalar içindir.  Daha detaylı örnek için Arduino Resmi Sitesi  ziyaret edilebilir.

Arduino İle Melodi Çalma Kodları

Beethoven ın 9 nolu senfonisi  (Kardeş Olun Ey İnsanlar – Neşeye Şarkı ) eserini arduino çalma kodları aşağıdaki gibidir.

#define buzzerPin 11
#define do_ 261
#define re 294
#define mi 329
#define fa 349
#define sol 392
#define la 440
#define si 493
#define DO_ 523

int sarki[] = {mi,mi,fa,sol,sol,fa,mi,re,do_,do_,re,mi,mi,re,re,mi,mi,fa,sol,sol,fa, mi, re, do_, do_, re, mi, re, do_, do_, re, re, mi, do_, re, mi, fa, mi, do_, re, mi, fa, mi, re, do_ , re, sol, mi, mi, mi, fa, sol, sol, fa, mi, re, do_, do_, re, mi, re, do_, do_};

void setup() {
pinMode(buzzerPin, OUTPUT);

}
void loop() {
for (int i = 0; i < sizeof(sarki)/sizeof(int); i++) {
tone(buzzerPin, sarki[i]);
delay(350);

}
noTone(buzzerPin);
delay(500);
}


Buzzer ı 11 nolu Dijital porta bağladığımız programımızda define komutu ile notaların değerleri tanımlanmaktadır.

int sarki[] ifadesi ile bir dizi (array) oluşturulmuştur. Dizi içinde Kardeş Olun Ey İnsanlar – Neşeye Şarkı Notaları yazılmıştır.

pinMode(buzzerPin, OUTPUT); satırında buzzerPin olarak tanımlanan 11 nolu dijital port çıkış olarak ayarlanmaktadır.

loop fonksiyonunda ise for döngüsü kullanarak sarkı dizisindeki elemanlar sıra ile çağırılmaktadır. sizeof(sarki) ifadesi dizinin boyotunu vermektedir.

Ancak dizideki tüm elemanların boyutunu byte olarak vermesi nedeniyle dizi elemanlarının sayısını bulabilmek için / sizeof(int) kullanılmaktadır. Dizideki her eleman int tipinde veriler olduğu için böylece dizideki eleman sayısı bulunabilmektedir.

tone(buzzerPin, sarki[i]);  Satırı ile melodi çalınmaktadır.

delay(350);   ifadesi ile ise 350 milisaniyelik bekleme yapılmaktadır. Her nota 350 milisaniye boyunda çalar.

Döngüden çıkıldıktan sonra ise noTone ise ses durdurulmaktadır.

Program sürekli olarak aynı melodiyi çalacak şekilde programlanmıştır.