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
| Malzeme | Adet | Ne işe yarar? |
|---|---|---|
| Arduino UNO R3 | 1 | Butonları okur, notayı çalar |
| Pasif buzzer 23 mm | 1 | Gönderilen frekansta ses çıkarır |
| 6x6 mm tact buton | 8 | Piyanonun tuşlarıdır |
| 830 pin breadboard | 1 | Lehimsiz bağlantı yapılır |
| Erkek-erkek jumper kablo | 12-15 | Butonları 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ş | Nota | Frekans | Arduino pini |
|---|---|---|---|
| 1 | Do (C4) | 262 Hz | D2 |
| 2 | Re (D4) | 294 Hz | D3 |
| 3 | Mi (E4) | 330 Hz | D4 |
| 4 | Fa (F4) | 349 Hz | D5 |
| 5 | Sol (G4) | 392 Hz | D6 |
| 6 | La (A4) | 440 Hz | D7 |
| 7 | Si (B4) | 494 Hz | D8 |
| 8 | Do (C5) | 523 Hz | D9 |
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.
- Butonları breadboard'un ortasındaki boşluğun üzerine, aralarında birer sütun boşluk kalacak şekilde yan yana dizin.
- Breadboard'un mavi (−) hattını bir kabloyla Arduino'nun GND pinine bağlayın.
- Her butonun bir bacağını mavi hatta, yani GND'ye bağlayın.
- 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.
- Pasif buzzer'ın artı (+) ucunu D12'ye, eksi ucunu GND hattına bağlayın.
- USB kablosunu takın ve aşağıdaki kodu yükleyin.
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_PULLUPdış 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.
