Yazılardaki ürünleri komponentci.net'te inceleyebilir, hemen sipariş verebilirsiniz.komponentci.net →
KomponentciBlog Mağaza
Blog  ›  Projeler

Elektronik Piyano Projesi: Arduino, Buton ve Buzzer

Elektronik Piyano Projesi: Arduino, Buton ve Buzzer
Kısa cevap

Elektronik piyano projesi, Arduino Uno, 8 buton ve bir pasif buzzer ile yapılır. Her buton bir notaya karşılık gelir; butona basınca Arduino tone() komutuyla buzzer'dan o notanın frekansında ses çıkarır. Do (C4) yaklaşık 262 Hz, La (A4) 440 Hz, bir üst Do (C5) ise 523 Hz'dir.

Müzik dersi ile fen dersini birleştiren bir proje arıyorsanız elektronik piyano iyi bir seçimdir. Bu yazıda Arduino Uno, 8 buton ve bir pasif buzzer ile do-re-mi çalan küçük bir piyano yapıyoruz. Nota frekanslarını, tone() komutunu ve butonların neden pull-up ile bağlandığını anlatıyoruz. Proje ortaokul, lise ve meslek lisesi öğrencileri için uygundur.

Elektronik piyano nedir?

Elektronik piyano, tuşlara basıldığında sesi telle değil, elektronik bir devreyle üreten bir çalgıdır. Bizim projemizde tuşlar 8 butondur. Arduino hangi butona basıldığını okur ve buzzer'a o notanın frekansında bir sinyal gönderir.

Ses, havadaki titreşimdir. Buzzer'ın içindeki ince plaka saniyede yüzlerce kez titreşir. Saniyedeki titreşim sayısına frekans denir ve birimi hertz'tir (Hz). Frekans arttıkça ses incelir, azaldıkça kalınlaşır.

Hangi malzemeler gerekir?

Elektronik piyano için bir Arduino Uno, bir pasif buzzer, 8 buton, bir breadboard ve jumper kablolar yeterlidir. Direnç gerekmez, çünkü butonlar Arduino'nun iç pull-up direnciyle çalışır.

Malzeme listesi

MalzemeAdetNe işe yarar?
Arduino UNO R31Butonları okur, notayı çalar
Pasif buzzer 23 mm1Gönderilen frekansta ses çıkarır
6x6 mm tact buton8Piyanonun tuşlarıdır
830 pin breadboard1Lehimsiz bağlantı yapılır
Erkek-erkek jumper kablo12-15Butonları ve buzzer'ı karta bağlar
KY-006 pasif buzzer modülü1 (isteğe bağlı)Pinli hazır modül, takması kolay

Buzzer seçerken dikkat edin: pasif buzzer kullanmalısınız. Aktif buzzer içindeki devre yüzünden hep aynı sesi çıkarır, nota çalamaz. Farkı aktif ve pasif buzzer farkı yazısında anlattık.

Notaların frekansları nedir?

Piyanodaki orta Do (C4) yaklaşık 262 Hz, La (A4) tam 440 Hz, bir üst Do (C5) ise yaklaşık 523 Hz'dir. La 440 Hz, dünyada akort için kullanılan ortak referanstır. Diğer notalar bu değerden hesaplanır.

TuşNotaFrekansArduino pini
1Do (C4)262 HzD2
2Re (D4)294 HzD3
3Mi (E4)330 HzD4
4Fa (F4)349 HzD5
5Sol (G4)392 HzD6
6La (A4)440 HzD7
7Si (B4)494 HzD8
8Do (C5)523 HzD9

Tablodaki ilginç kural şudur: bir oktav yukarıdaki aynı nota, tam iki katı frekanstadır. 262 × 2 = 524 Hz, yani C5 ile neredeyse aynıdır. Batı müziğinde bir oktav 12 yarım sese bölünür. Her yarım ses bir öncekinden yaklaşık 1,0595 kat (2'nin 12. dereceden kökü) daha yüksektir. Frekanslar tam sayıya yuvarlanmıştır; kulak bu küçük farkı duymaz.

Devre nasıl kurulur?

Her butonun bir bacağı D2-D9 pinlerinden birine, diğer bacağı GND'ye bağlanır; buzzer'ın artı ucu D12'ye, eksi ucu GND'ye gider. Bağlantıyı yaparken USB kablosu takılı olmasın.

  1. Butonları breadboard'un ortasındaki boşluğun üzerine, aralarında birer sütun boşluk kalacak şekilde yan yana dizin.
  2. Breadboard'un mavi (−) hattını bir kabloyla Arduino'nun GND pinine bağlayın.
  3. Her butonun bir bacağını mavi hatta, yani GND'ye bağlayın.
  4. Her butonun çapraz karşısındaki bacağını sırasıyla D2, D3, D4, D5, D6, D7, D8 ve D9 pinlerine bağlayın. İlk buton Do, sonuncusu üst Do olur.
  5. Pasif buzzer'ın artı (+) ucunu D12'ye, eksi ucunu GND hattına bağlayın.
  6. USB kablosunu takın ve aşağıdaki kodu yükleyin.
Elektronik piyano bağlantı şeması: sekiz tact buton piyano tuşu olarak dizili; Do (C4) 262 Hz D2, Re 294 Hz D3, Mi 330 Hz D4, Fa 349 Hz D5, Sol 392 Hz D6, La 440 Hz D7, Si 494 Hz D8, üst Do (C5) 523 Hz D9 pinine bağlı; butonların diğer bacakları ortak GND hattında; pasif buzzerın artı ucu D12 pinine, eksi ucu GND'ye bağlı; Arduino Uno USB ile besleniyor
Butonlar D2-D9 ile GND arasına, pasif buzzer D12'ye bağlanır; basılan tuşun frekansı tone() ile çalınır.

Tact butonun dört bacağı vardır; karşılıklı iki bacak içeriden zaten birleşiktir. Bu yüzden butonun çapraz bacaklarını kullanmak en güvenli yoldur. Breadboard'daki hatların nasıl birleştiğini breadboard nasıl kullanılır yazısında bulabilirsiniz.

Elektronik piyano kodu nasıl çalışır?

Kod, 8 butonu sırayla okur; basılı bir buton bulursa tone() ile o notayı çalar, hiçbir buton basılı değilse noTone() ile sesi keser.

const byte BUTON[8] = {2, 3, 4, 5, 6, 7, 8, 9};
const int NOTA[8] = {262, 294, 330, 349, 392, 440, 494, 523};
const byte BUZZER = 12;
int sonFrekans = 0;

void setup() {
  for (byte i = 0; i < 8; i++) pinMode(BUTON[i], INPUT_PULLUP);
}

void loop() {
  int frekans = 0;
  for (byte i = 0; i < 8; i++) {
    if (digitalRead(BUTON[i]) == LOW) {  // basılı buton LOW okunur
      frekans = NOTA[i];
      break;                             // ilk basılı tuşu çal
    }
  }
  if (frekans != sonFrekans) {           // yalnızca nota değişince
    if (frekans > 0) tone(BUZZER, frekans);
    else noTone(BUZZER);
    sonFrekans = frekans;
  }
}

tone(pin, frekans), pine o frekansta bir kare dalga gönderir. Örneğin 440 Hz için pin saniyede 440 kez açılıp kapanır. sonFrekans değişkeni, aynı notanın her döngüde yeniden başlatılmasını önler; böylece ses titremez. Aynı anda iki tuşa basarsanız yalnızca listede önce gelen çalar, çünkü tone() tek pinde tek ses üretir.

Butonlar neden pull-up ile bağlanır?

Butonlar pull-up ile bağlanır, çünkü bir pine hiçbir şey bağlı değilken pin "havada" kalır ve rastgele HIGH ya da LOW okunur. INPUT_PULLUP ayarı, pini Arduino'nun içindeki yaklaşık 20-50 kΩ'luk bir dirençle 5V'a bağlar. Böylece buton bırakıkken pin kesin olarak HIGH okunur.

Butona basınca pin doğrudan GND'ye bağlanır ve LOW okunur. Koddaki == LOW koşulu bu yüzden "basıldı" demektir. Bu yöntem dışarıdan direnç takma ihtiyacını ortadan kaldırır. Buton türlerini buton çeşitleri yazısında karşılaştırdık.

Hangi güvenlik kurallarına dikkat edilmeli?

Proje USB'den 5 V ile çalıştığı için güvenlidir; yine de şu kurallara uyun:

  • Devreyi yalnızca bilgisayarın USB çıkışından ya da bir USB powerbank'tan besleyin. 220V şebeke elektriğine hiçbir şey bağlamayın.
  • Projeyi bir öğretmen ya da yetişkin gözetiminde kurun.
  • Kablo değiştirirken USB kablosunu çıkarın. 5V ile GND pinlerini doğrudan birleştirmeyin; bu kısa devredir.
  • Buzzer'ı kulağınıza yaklaştırmayın. Uzun süre yüksek sesle denemek kulağı yorar.
  • Butonların bacaklarını kesmek gerekirse yan keskiyi yetişkin yardımıyla kullanın.

Ödevinizi nasıl sunarsınız?

Ödevinizi, piyanoyla basit bir şarkı çalıp frekans ile ses yüksekliği arasındaki ilişkiyi göstererek sunabilirsiniz.

  • Soru: "Bir sesin ince ya da kalın olmasını ne belirler?"
  • Hipotez: "Frekans arttıkça ses incelir."
  • Deney: Do ile üst Do'yu art arda çalın. Dinleyicilere iki sesin "aynı nota" gibi duyulduğunu, frekansın ise iki katı olduğunu gösterin.
  • Uygulama: "Daha Dün Annemizin" gibi beş notalık basit bir şarkının notalarını tuş numaralarıyla kâğıda yazın ve çalın.
  • Ek deney: NOTA dizisindeki değerleri bir oktav düşürmek için ikiye bölün ve sesin nasıl kalınlaştığını anlatın.

Sunumda butonların üzerine renkli kartondan tuşlar ve nota adları yapıştırın. Telefondaki bir akort uygulamasıyla buzzer'ın frekansını ölçmek, sunuma bilimsel bir kanıt ekler. Farklı ses verenler için buzzer kategorisine bakabilirsiniz.

Sık sorulan sorular

Aktif buzzer ile piyano yapılabilir mi?

Hayır, aktif buzzer ile nota çalınamaz. Aktif buzzer'ın içinde kendi titreşim devresi vardır; gerilim verildiğinde hep aynı frekansta öter. tone() komutu onu yalnızca açıp kapatır, sesin perdesini değiştiremez. Piyano için pasif buzzer ya da küçük bir hoparlör kullanın. İki türü ayırmanın kolay yolu: pile bağlandığında sürekli öten buzzer aktiftir, yalnızca tık sesi çıkaran pasiftir.

Ses neden çok kısık çıkıyor?

Ses genellikle buzzer'ın küçük olmasından ya da yanlış bağlanmasından kısık çıkar. Pasif buzzer'ların her frekansta aynı yüksekliğe ulaşmadığını da unutmayın; bazı notalar diğerlerinden yüksek duyulabilir. Daha büyük bir pasif buzzer seçin ve ağzının önünü kapatmayın. Daha güçlü ses için küçük bir hoparlör ve amfi modülü kullanılabilir, ama hoparlörü doğrudan Arduino pinine bağlamayın.

Aynı anda iki nota çalınabilir mi?

Bu devreyle aynı anda iki nota çalınamaz. Arduino Uno'daki tone() komutu bir zamanlayıcı kullanır ve aynı anda yalnızca bir pinde bir ses üretir. Akor çalmak için birden çok ses üretebilen bir ses modülü ya da özel kütüphaneler gerekir. Öğrenci projesi için tek sesli melodi çalmak yeterlidir ve frekans konusunu anlatmak için daha anlaşılırdır.

Butona basmadığım hâlde ses çıkıyorsa ne yapmalıyım?

Bu sorun çoğunlukla bir butonun yanlış bacaklarının kullanılmasından kaynaklanır. Butonun içeriden birleşik iki bacağını pine ve GND'ye bağlarsanız buton hep basılı görünür. Butonu 90 derece çevirip yeniden deneyin ya da çapraz bacakları kullanın. Kodda INPUT_PULLUP yazdığından ve GND kablosunun takılı olduğundan da emin olun.

Daha fazla tuş eklenebilir mi?

Evet, Arduino Uno'da boş pin kaldıkça tuş eklenebilir. A0-A5 analog pinleri de dijital giriş olarak kullanılabilir; böylece tuş sayısını 8'in üstüne çıkarabilirsiniz. Diyez notalar (Do diyez 277 Hz gibi) için yeni bir buton ve NOTA dizisine yeni bir değer eklemeniz yeterlidir. Dizilerin boyutunu ve döngüdeki 8 sayısını da güncellemeyi unutmayın.

Özet

  • Elektronik piyano, butona basınca notanın frekansında ses üreten bir devredir.
  • Do (C4) yaklaşık 262 Hz, La (A4) 440 Hz, üst Do (C5) 523 Hz'dir; bir oktav frekansı iki katına çıkarır.
  • Butonlar D2-D9'a ve GND'ye, pasif buzzer D12'ye bağlanır.
  • INPUT_PULLUP dış direnç gerektirmez; basılı buton LOW okunur.
  • Aktif buzzer nota çalamaz, pasif buzzer kullanın.
  • Devreyi yalnızca USB ile, yetişkin gözetiminde çalıştırın.

Bu yazıdaki ürünler

Diğer yazılar