- Gerekli Donanım:
- Arduino'nun Tone () işlevini anlama :
- Pitches.h başlık dosyası:
- Arduino'da Müzik Notaları Çalma:
- Şematik ve Donanım:
- Arduino Program Açıklaması:
- Bu Melody Player Arduino Devresinin Çalışması:
Arduino, neredeyse her şeyi basitleştiren geliştiriciler topluluğu sayesinde mikrodenetleyici projelerinizi basitleştirmenin ve hızlandırmanın mükemmel bir yoludur. Denemeniz ve eğlenmeniz için burada birçok Arduino Projesi var. Projelerinizden bazıları, bir şey hakkında bildirimde bulunmak veya sadece izleyicileri etkilemek için bazı ses eylemlerine ihtiyaç duyabilir. Ya size piyanoda çalınabilecek hemen hemen tüm tema şarkılarının basit bir program ve ucuz bir Piezo hoparlör yardımıyla Arduino'nuzda taklit edilebileceğini söyleseydim?
Bu eğitimde Arduino tonu () işlevini kullanarak Piezo Buzzer veya Hoparlörde Melodi Çalmanın ne kadar basit ve kolay olduğunu öğreneceğiz. Bu eğitimin sonunda, Pirates of Caribbean, Crazy Frog, Super Mario ve Titanic'in bazı ünlü tonlarını çalabileceksiniz. Ayrıca Arduino ile herhangi bir piyano müziğinin nasıl çalınacağını da öğreneceksiniz. Sonunda Videoyu kontrol edin.
Gerekli Donanım:
- Arduino (herhangi bir sürüm - burada UNO kullanılır)
- Piezo Hoparlör / Buzzer veya başka herhangi bir 8ohm hoparlör.
- Breadboard
- Kabloların Bağlanması
- Basma düğmeleri
- 1k direnç (isteğe bağlı)
Arduino'nun Tone () işlevini anlama:
Bir tonun () nasıl çalıştığını anlamadan önce, bir Piezo zilinin nasıl çalıştığını bilmeliyiz. Okulumuzda Piezo kristalleri hakkında bir şeyler öğrenmiş olabiliriz, mekanik titreşimleri elektriğe dönüştüren bir kristalden başka bir şey değildir veya tersi. Burada kristalin titreştiği ve böylece ses üreten değişken bir akım (frekans) uyguluyoruz. Bu nedenle, Piezo zilinin biraz gürültü yapmasını sağlamak için Piezo elektrik kristalini titreştirmek zorundayız, ses perdesi ve tonu kristalin ne kadar hızlı titreştiğine bağlıdır. Bu nedenle ton ve perde, akımın frekansını değiştirerek kontrol edilebilir.
Tamam, peki Arduino'dan değişken frekansı nasıl elde ederiz ? Tone () işlevinin devreye girdiği yer burasıdır. Tone (), belirli bir pim üzerinde belirli bir frekans oluşturabilir. Zaman süresi de gerekirse belirtilebilir. Sözdizimi tonu () olduğunu
Sözdizimi tonu (pin, frekans) ton (pin, frekans, süre) Parametreler pin: ton frekansının üretileceği pin: tonun hertz cinsinden frekansı - işaretsiz int süresi: milisaniye cinsinden ton süresi (isteğe bağlı) - imzasız uzun
Pin değerleri dijital pininizden herhangi biri olabilir. Burada 8 numaralı pini kullandım. Üretilebilecek frekans, Arduino kartınızdaki zamanlayıcının boyutuna bağlıdır. UNO ve diğer birçok yaygın kartlar için üretilebilecek minimum frekans 31Hz ve üretilebilecek maksimum frekans 65535Hz'dir. Ancak biz insanlar sadece 2000 Hz ile 5000 Hz arasındaki frekansları duyabiliyoruz.
Pitches.h başlık dosyası:
Artık arduino Tone () işlevini kullanarak nasıl biraz gürültü üreteceğimizi biliyoruz. Ancak, her frekans için ne tür bir ton üretileceğini nasıl bileceğiz?
Arduino bize her frekansı belirli bir müzik notası türüne eşitleyen bir not tablosu verdi. Bu not tablosu orijinal olarak Tone () komutunun temel aldığı Brett Hagman tarafından yazılmıştır. Temalarımızı oynamak için bu not tablosunu kullanacağız. Notalar hakkında bilgi sahibi biriyseniz, bu tabloyu biraz anlamalısınız, benim gibi diğerleri için bunlar sadece başka bir kod bloğu.
#define NOTE_B0 31 #define NOTE_C1 33 #define NOTE_CS1 35 #define NOTE_D1 37 #define NOTE_DS1 39 #define NOTE_E1 41 #define NOTE_F1 44 #define NOTE_E1 46 #define NOTE_G1 49 #define NOTE_GS1 52 #define NOTE_A1 55 NOTE_B1 62 #define NOTE_C2 65 #define NOTE_CS2 69 #define NOTE_D2 73 #define NOTE_DS2 78 #define NOTE_E2 82 #define NOTE_F2 87 #define NOTE_FS2 93 #define NOTE_G2 98 #define NOTE_GS2 104 #define NOTE_A2 110 #define NOTE_A2 110 #define #define NOTE_C3 131 #define NOTE_CS3 139 #define NOTE_D3 147 #define NOTE_DS3 156 #define NOTE_E3 165 #define NOTE_F3 175 #define NOTE_FS3 185 #define NOTE_G3 196 #define NOTE_GS3 208 #define NOTE_A3 220 # 237define NOTE_AS3 NOTE_C4 262 #define NOTE_CS4 277 #define NOTE_D4 294 #define NOTE_DS4 311 #define NOTE_E4 330 #define NOTE_F4 349#define NOTE_FS4 370 #define NOTE_G4 392 #define NOTE_GS4 415 #define NOTE_A4 440 #define NOTE_AS4 466 #define NOTE_B4 494 #define NOTE_C5 523 #define NOTE_CS5 554 #define NOTE_D5 587 #define NOTE_DS5 698 #define NOTE_DS5 69 NOTE_FS5 740 #define NOTE_G5 784 #define NOTE_GS5 831 #define NOTE_A5 880 #define NOTE_AS5 932 #define NOTE_B5 988 #define NOTE_C6 1047 #define NOTE_CS6 1109 #define NOTE_D6 1175 #define NOTE_DSEFS6 1245 #define NOTE_DS6 1245 #define #define NOTE_G6 1568 #define NOTE_GS6 1661 #define NOTE_A6 1760 #define NOTE_AS6 1865 #define NOTE_B6 1976 #define NOTE_C7 2093 #define NOTE_CS7 2217 #define NOTE_D7 2349 #define NOTE_DS7 2489 #define DEFine NOTE7_Fine NOTE_G7 3136 #define NOTE_GS7 3322 #define NOTE_A7 3520 #define NOTE_AS73729 #define NOTE_B7 3951 #define NOTE_C8 4186 #define NOTE_CS8 4435 #define NOTE_D8 4699 #define NOTE_DS8 4978
Kod, bu zip dosyası pitches.h başlık dosyasında verilir şeyden , sadece indirmek gerekir ve sonunda bu öğretici verilen veya posta dosyasında verilen kodu kullanabilirsiniz bizim Arduino kodunda bu dosyayı içerir.
Arduino'da Müzik Notaları Çalma:
Arduino'yu kullanarak düzgün bir melodi çalmak için bu melodileri neyin oluşturduğunu bilmeliyiz. Bir temayı oynamak için gereken üç ana faktör şunlardır:
- Not değeri
- Not Süresi
- Tempo
Herhangi bir nota değerini çalmak için pitches.h başlık dosyamız var, şimdi onu çalmak için belirli nota süresini bulmalıyız. Tempo, melodinin ne kadar hızlı çalınması gerektiğinden başka bir şey değildir. Nota değerini ve Not süresini öğrendikten sonra, bunları ton () ile kullanabilirsiniz.
ton (pinName, Not Değeri, Not Süresi);
Bu eğitimde çalınan tonlar için, projelerinizde çalabileceğiniz "temalar.h" başlık dosyasında size nota Değer ve Not süresini verdim. Ama madende belirli bir ton varsa ve bunu projende çalmak istiyorsan okumaya devam et…. Aksi takdirde bu konuyu atla ve bir sonrakine geç.
Herhangi bir belirli tonu çalmak için, o müziğin notalarını almanız ve nota değerini ve nota süresini okuyarak notaları Arduino taslağına dönüştürmeniz gerekir. Müzik öğrencisiyseniz bu sizin için çocuk oyuncağı olur, yoksa biraz zaman geçirip benim yaptığım gibi kafanı kırar. Ancak günün sonunda, ses tonunuz Piezo zilinde çaldığında, çabanızın buna değer olduğunu göreceksiniz.
Not değerine ve not süresine sahip olduğunuzda, bunları aşağıda gösterildiği gibi "temalar.h" başlık dosyasındaki programa yükleyin.
// ############## ** "O BİR KORSAN" Karayip Korsanları'nın tema şarkısı ** ############## // int Pirates_note = {NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_D4, NOTED4, NOTE_D4, NOTE_D4, NOTE_D4, NOTED4, NOTE_D4, NOTE_D4 NOTE_A3, NOTE_C4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_G4, NOTE_E4, NOTE_E4, NOTE_D4, NOTE_C4, NOTE_C4, NOTE_D4, 0, NOTE_A3, NOTE_C4, NOTE_B3, NOTE_D4, NOTE_A_F NOTE_C4, NOTE_C4, NOTE_C4, NOTE_C4, NOTE_D4, NOTE_C4, NOTE_D4, 0, 0, NOTE_A3, NOTE_C4, NOTE_D4, NOTE_D4, NOTE_D4, NOTE_F4, NOTE_G4, NOTE_G4, NOTE_G4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_A4, NOTE_G4, NOTE_G4, NOTE_G4, NOTE_G4 0, NOTE_D4, NOTE_E3, NOTE_F4, NOTE_F4, NOTE_G4, NOTE_A4, NOTE_D4, 0, NOTE_D4, NOTE_F4,NOTE_E4, NOTE_E4, NOTE_F4, NOTE_D4}; int Pirates_duration = {4,8,4,8,4,8,8,8,8,8,4,8,4,8,4,8,8,8,8,4,8,4,8, 4, 8,8,8,8,4,4,8,8,4,4,8,8,4,4,8,8, 8,4,8,8,8,4,4,8,8, 4,4,8,8,4,4,8,4, 4,8,8,8,8,4,4,8,8,4,4,8,8,4,4,8,8, 8,4,8,8,8,4,4,4,8,4,8,8,8,4,4,8,8}; // ########### End of He is a Korsan şarkısı ############ //
Yukarıdaki kod bloğu, Karayip Korsanları filminden “O bir Korsan” temasının nota değerini ve nota süresini göstermektedir. Temanızı buna benzer şekilde ekleyebilirsiniz.
Şematik ve Donanım:
Bu Arduino Tone Generator Project projesinin şeması aşağıdaki şekilde gösterilmektedir:
Bağlantı oldukça basittir, 1K direnç üzerinden Arduino'nun 8 numaralı pinine ve Topraklamasına bağlanan bir Piezo hoparlörümüz var. Bu 1k direnç, akımı güvenli sınırlar içinde tutmak için kullanılan bir akım sınırlayıcı dirençtir. Ayrıca gerekli melodiyi seçmek için dört anahtarımız var. Anahtarın bir ucu toprağa bağlanır ve diğer ucu sırasıyla pim 2, 3, 4 ve 5'e bağlanır. Anahtarlar, yazılım kullanılarak dahili olarak etkinleştirilen çekme dirençlerine sahip olacaktır. Devre oldukça basit olduğundan, aşağıda gösterildiği gibi bir ekmek tahtası kullanılarak bağlanabilir:
Arduino Program Açıklaması:
Konsepti anladıktan sonra, Arduino programı oldukça basittir. Kodun tamamı eğitimin sonunda verilmiştir. Başlık dosyalarını eklemeye aşina değilseniz, kodu buradan ZIP dosyası olarak indirebilir ve doğrudan Arduino'nuza yükleyebilirsiniz.
Yukarıdaki ikisi eklenmesi gereken başlık dosyalarıdır. "Pitches.h" , her müzik notasını belirli bir frekansa eşitlemek için kullanılır ve "temalar.h" , dört tonun tamamının nota değerini ve nota süresini içerir.
#include "pitches.h" #include "temalar.h"
Gerektiğinde her tonu çalmak için bir işlev oluşturulur. Burada Play_Pirates () işlevi çağrıldığında "O bir Korsan" sesi çalınacaktır. Bu işlev, 8 numaralı pimdeki frekansı üreten ton işlevinden oluşur. Müziği çalındıktan sonra durdurmak için noTone (8) çağrılır. Kendi tonunuzu çalmak istiyorsanız, Pirates_note ve Pirates_duration'ı "temalar.h" değerine kaydettiğiniz yeni nota ve süre değerlerine değiştirin.
void Play_Pirates () {for (int thisNote = 0; thisNote <(sizeof (Pirates_note) / sizeof (int)); thisNote ++) {int noteDuration = 1000 / Pirates_duration; // süreyi zaman gecikme tonuna dönüştür (8, Pirates_note, noteDuration); int pauseBetweenNotes = noteDuration * 1.05; // Burada 1.05 tempo, daha yavaş oynatmak için artırın delay (pauseBetweenNotes); noTone (8); }}
Pim 2, 3, 4 ve 5 çalınacak belirli tonu seçmek için kullanılır. Bu pinler, yukarıdaki kod satırı kullanılarak dahili çekme dirençleri kullanılarak varsayılan olarak yüksek tutulur. Düğmeye basıldığında yere çekilir.
pinMode (2, INPUT_PULLUP); pinMode (3, INPUT_PULLUP); pinMode (4, INPUT_PULLUP); pinMode (5, INPUT_PULLUP);
Aşağıdaki kod bloğu, bir düğmeye basıldığında şarkıyı çalmak için kullanılır. Her düğmenin dijital değerini okur ve düştüğünde (sıfır) düğmeye basıldığını varsayar ve gerekli işlevi çağırarak ilgili tonu çalar.
if (digitalRead (2) == 0) {Serial.println ("Seçildi -> 'O bir Korsan'"); Play_Pirates (); } if (digitalRead (3) == 0) {Serial.println ("Seçili -> 'Çılgın Kurbağa'"); Play_CrazyFrog (); } if (digitalRead (4) == 0) {Serial.println ("Seçili -> 'Mario UnderWorld'"); Play_MarioUW (); } if (digitalRead (5) == 0) {Serial.println ("Seçildi -> 'O bir Korsan'"); Play_Pirates (); }
Bu Melody Player Arduino Devresinin Çalışması:
Kodunuz ve Donanımınız hazır olduğunda, programı Arduino'nuza yazdırmanız yeterlidir ve sadece düğmelere basarak tonu çalabilmelisiniz. Herhangi bir sorun yaşarsanız, hata ayıklama için seri monitörünüze bir göz atın veya sorunu bildirmek için yorum bölümünü kullanın, size yardımcı olmaktan memnuniyet duyarım.
Projenin tam çalışması aşağıdaki videoda gösterilmektedir. Umarım projeyi beğenmişsinizdir ve projenizin bazılarında kullanırsınız veya projeniz için yeni bir ton yaratırsınız. Cevabınız evet ise, çalışmalarınızı yorum bölümünde paylaşmaktan çekinmeyin.