Hayatımızdaki birçok olay dijitalleşti. Bunlardan biri sesler. Sesin tonu ve şiddeti elektriksel olarak işlenebilmektedir. Böylece notları elektronik olarak çıkarabiliyoruz. Müziği oluşturan en küçük ses birimine nota denir. Her notanın bir frekansı ve yoğunluğu vardır. Yazacağımız kodlar ile frekans ve yoğunluk uygulayarak hangi notanın çalınması gerektiğini ve ne kadar sürmesi gerektiğini ayarlayabiliriz.
Bu projemizde bir şarkının melodisini çalacak bir müzik sistemi hazırlayacağız. zil modülünü kullanın ve Picobricks'li potansiyometre modülü ile ritmi ayarlayın. Programlama terminolojisinde önemli bir yere sahip olan değişkenlerin kullanımını da bu projede öğreneceksiniz.
Ayrıntılar ve Algoritma
Picobricks ile notalarını bildiğimiz her şarkıyı çalabilirsiniz. kullanacağız düğme-Şarkıyı başlatmak için LED modülü, potansiyometre şarkının hızını ayarlamak için modül ve notaları çalmak için zil modülü.
Potansiyometre analog giriş modülüdür. Değişken dirençtir. İçinden geçen akım miktarı çevrildikçe, tıpkı bir musluğun açılıp kapanması gibi artar ve azalır. Bu akımı kodlarla kontrol ederek şarkının hızını ayarlayacağız. Buzzerlar üzerlerinden geçen akımın şiddetine göre ses seviyelerini, voltaj frekansına göre ise ses tonlarını değiştirirler. Microblock’lar ile buzzer modülünden istediğimiz notaları tonlarını ve sürelerini ayarlayarak kolaylıkla kodlayabiliyoruz.
Projede butona basma durumunu kontrol edeceğiz. Düğmeye basıldığında melodinin çalmaya başlamasını sağlayacağız. Melodiyi çalarken adı verilen bir değişken kullanacağız. ritim Notaların çalma sürelerini aynı oranda artırmak veya azaltmak için. Picobricks başladıktan sonra kullanıcının ayarlama yapmasını sağlayacağız. ritim Melodiyi çalarken veya çalmadan önce potansiyometreyle değiştirin. Picobricks açık olduğu sürece potansiyometre değerini (0-1023) 128'e bölüp ritim değişken. Değişkenler kullanıcı veya sensörler tarafından değiştirilebilen değerleri kodlarımızda kullanmak istediğimizde kullandığımız veri yapılarıdır. Kullanıcı şarkıyı başlatmak için butona bastığında notaların belirlenen süreye göre hesaplanan süre boyunca çalınmasını sağlayacak nota kodlarını hazırlayacağız. ritim değişken.
Bileşenler
1X PicoBrick
Bağlantı şeması
Picobricks modüllerini kablolama olmadan kodlayabilir ve çalıştırabilirsiniz. Modülleri panodan ayırarak kullanacaksanız modül bağlantılarını grove kablolarla yapmalısınız.
PicoBricks'in MicroBlock Kodları
Projenin Microblocks kodlarına görseli Microblocks Run sekmesine sürükleyerek veya butona tıklayarak ulaşabilirsiniz:
PicoBricks'in MicroPython Kodları
makine içe aktarma Pininden, PWM, ADC'den donanım picobricklerine erişmek için
utime içe aktarma uyku #time kütüphanesinden
düğme=Pin(10,Pin.IN,Pin.PULL_DOWN)
pot=ADC(Pin(26))
buzzer=PWM(Pin(20))
#giriş ve çıkış pinlerimizi belirleyin
küresel ritim
basıldı = Yanlış
tonlar ={"A3":220,"D4":294,"E4":330,"F4":349}
#tonları tanımlayın
şarkım =["A3", "E4", "E4", "E4", "E4", "E4", "E4", "F4", "E4", "D4", "F4", "E4" ]#şarkımız için gerekli olan tonları doğru sırayla bir sıraya tanımlayalım
noteTime =[1,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,1]#dizideki tonlar arasındaki bekleme sürelerini tanımlayın
def çalma tonu(frekans):
buzzer.duty_u16(6000)
buzzer.freq(frekans)
#zil sesinin frekanslarını tanımlayın
def playsong(pin):
küresel preslenmiş
basılmazsa:
basılı = Doğru
for i inrange(len(mysong)):playtone(tones[mysong[i]])sleep(noteTime[i]/ritm+1)
buzzer.duty_u16(0)
#tonları doğru bekleme süreleriyle çalın
#Son olarak pinlere ne zaman tetikleneceklerini ve bir olay tespit ettiklerinde çağrılacak fonksiyonu söylememiz gerekiyor:
Button.irq(trigger=Pin.IRQ_RISING, handler=playsong)while True:
ritim= pot.read_u16()
ritim=int(ritm/6400)+1
PicoBricks'in Arduino C Kodları
#katmak
#include "ACROBOTIC_SSD1306.h"
int buzzer =20;
int pot =26;
int butonu=10;//zil, pot ve butonu tanımlayın
int Re =294;
int Mi =330;
int Fa =349;
int La =440;//TONLARI TANIMLAYINvoidsetup(){
Wire.begin();
oled.init();
oled.clearDisplay();pinMode(buzzer,OUTPUT);pinMode(26,INPUT);pinMode(button,INPUT);//giriş ve çıkış pinlerimizi belirleyin}voidloop(){
int ritim =(analogRead(pot))/146;
String char_ritm =Dize(ritim);
oled.setTextXY(3,4);
oled.putString("Hız: ");
oled.setTextXY(3,10);
oled.putString(char_rithm);//x=3'te OLED'de "Hız:" ve hız değerini yazdırın y=4delay(10);if(digitalRead(button)==1){
oled.clearDisplay();
oled.setTextXY(3,2);
oled.putString("Şimdi oynatılıyor...");//x=3 y=4tone(buzzer, La);delay(1000/(ritm+1)); "Hız: " ve OLED üzerindeki hız değerini yazdırır; tone(zil, Mi);delay(500/(ritim+1));ton(zil, Mi);delay(500/(ritm+1));ton(zil, Mi);delay(500/(ritm+) 1));ton(zil, Mi);delay(500/(ritm+1));ton(zil, Mi);delay(500/(ritm+1));ton(zil, Mi);delay(500) /(ritm+1));ton(zil, Fa);delay(500/(ritm+1));ton(zil, Mi);delay(500/(ritm+1));ton(zil, Re) ;delay(500/(ritm+1));tone(zil, Fa);delay(500/(ritm+1));ton(zil, Mi);delay(1000/(ritm+1));// düğmeye basıldığında notaları doğru sırada ve zamanda çalın
oled.clearDisplay();//ekranı temizle}noTone(zil);//zil sesini durdur}
Proje teklifi
Projenizi daha görsel hale getirmek için çalınan notaya göre farklı renkte bir LED yakabilir, nota isimlerini ve çalma hızını ekranda gösterebilirsiniz. OLED ekran.