İçindekiler:
- Adım 1: NunChuck'ınızı Takma
- 2. Adım: Mozzi'yi Tanımak
- 3. Adım: Hepsini Bir Araya Getirmek
- 4. Adım: Son Dokunuşlar
Video: Wii Nunchuck Sentezleyici: 4 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:17
Wii Müzik Dünyası:
Sonunda müziğe olan sevgimi, son birkaç yılda kazandığım biraz programlama deneyimiyle birleştirmeye karar verdim. Okulumda Tod Machover'ın bir konuşmasını gördüğümden beri kendime ait bir enstrüman yaratmakla ilgileniyorum. Çalışmalarına aşina değilseniz, ona bir Google verin, çünkü birkaç yıldır müziğin, teknolojinin ve bunların kesiştiğinin sınırlarını zorluyor (MIT medya laboratuvarları, Rock Band, Guitar Hero vb…).
Nunchuck'ımı, her ikisinin de çevrimiçi olarak iyi belgelenmiş kullanımı nedeniyle Mozzi ses sentezi kitaplığında çalışan bir Arduino Uno'ya bağladım. Kolaylık sağlamak için, doğrudan Arduino'ya takılan bir WiiChuck devre tahtası adaptörü kullanıyorum. Bu nispeten basit proje, Nunchuck'ın ivmeölçerinden ölçülen Pitch'e (YZ-Plane) bağlı olarak bir dizi perde oynar. Joystick'in Y değeri, perdeyi daha yüksek veya daha yumuşak yapmak için kazançla eşleştirilir. Ayrıca Z-Butonuna bağlı olarak akorları değiştirir ve C-Butonuna basıldığında bir faz modülasyon zarfını açar. Zarfın frekansı daha sonra Nunchuck'tan ölçülen Rulo ile değiştirilir (bir topuzu çeviren resim).
Kaynaklar:
- 1 x Arduino Uno
- 1 x Wii Nunchuck
- 1 x WiiChuck Adaptörü
- 1 x breadboard uyumlu 3,5 mm dişi stereo jak
- 1 x 3.5mm ses kablosu
- 1 x bir tür hoparlör (Test etmek için önce bir zil takabilirsiniz
- 4-5 farklı renkte tel
İsteğe bağlı ancak önerilir:
- 1 x 330 Ohm direnç
- 1 x.1 uF kapasitör
Adım 1: NunChuck'ınızı Takma
Arduino Playground'dan WiiChuck sınıfını kopyalayın/yapıştırın. PWR ve GND pinlerinin bildirildiği sürüme ihtiyacımız olacak. WiiChuck.h olarak kaydedin ve projenizle aynı dizinde saklayın.
Şimdi aşağıdakileri Arduino IDE'ye kopyalayın/yapıştırın ve yükleyin.
#include "Wire.h"//#include "WiiChuckClass.h" //büyük olasılıkla geri kalanımız için WiiChuck.h. #include "WiiChuck.h" WiiChuck chuck = WiiChuck();
geçersiz kurulum() {
//nunchuck_init(); Seri.başla(115200); chuck.begin(); chuck.update(); //chuck.calibrateJoy(); }
boşluk döngüsü () {
gecikme(20); chuck.update();
Seri.print(chuck.readPitch());
Seri.print(", "); Serial.print(chuck.readRoll()); Seri.print(", ");
Serial.print(chuck.readJoyX());
Seri.print(", "); Seri.print(chuck.readJoyY()); Seri.print(", ");
if (chuck.buttonZ) {
Seri.print("Z"); } else { Serial.print("-"); }
Seri.print(", ");
//işlev değil// if (chuck.buttonC()) {
if (chuck.buttonC) { Serial.print("C"); } else { Serial.print("-"); }
Seri.println();
}
Arduino'nuzu güçten ayırın ve WiiChuck adaptörünüzü Arduino'nuzdaki Analog Pins 2-5'e bağlayın.
Tekrar güce bağlanın ve Nunchuck'ın değerlerinin Arduino'nuza gönderildiğinden ve Seri Monitöre yazdırıldığından emin olun. Rakamlarda herhangi bir değişiklik görmüyorsanız, bağlantılarınızın iyi olduğundan ve Nunchuck'ın çalıştığından emin olun. Nunchuck'ımın telinin dahili olarak koptuğunu fark etmeden önce birkaç gün yazılımı düzeltmeye çalıştım!
Ardından, her şeyi Mozzi'ye bağlayacağız…
2. Adım: Mozzi'yi Tanımak
Öncelikle Mozzi'nin en son sürümünü indirmeniz gerekecek. Bağışlarla besleniyorlar, bu yüzden kendinizi çok istekli hissediyorsanız bağış yapın ve kütüphaneyi indirin. Arduino IDE'den Sketch > Libraries > Add. ZIP Library…'yi seçerek kütüphanelerinize kolayca ekleyebilirsiniz.
Şimdi 3.5mm kulaklık jakını breadboard'a ve Arduino'ya bağlayacağız, böylece daha sonra kolayca bağlayabiliriz (şimdilik Nunchuck ve adaptörün fişini çekebilirsiniz).
- Geri kalanına yer açmak için Jack'inizi tahtanın sağ alt köşesine takın. Jak 5 pin genişliğinde olmalıdır.
- Orta sırayı bir aktarma kablosuyla toprağa bağlayın.
- Krikonun en üst sırasını yukarıdaki boş bir sıraya bağlayın (resimde 10. sıra). Bu, ses sinyalini taşıyan teldir.
- Dijital Pin ~9'u da 10. sıraya bağlayın.
- Arduino'nuzdaki Ground'u breadboard üzerindeki toprak rayına bağlayın.
- Henüz direnç ve kapasitör kullanmanıza gerek yok, ancak kullanmazsanız yüksek perdeli bir gıcırtı fark edebilirsiniz. ~ 15 kHz üzerindeki frekansları ortadan kaldırmak için düşük geçiş filtresi görevi görür.
Arduino IDE'de Dosya > Örnekler > Mozzi > Temeller > Sinewave'i seçerek Mozzi'nin Sinewave taslağını açın. Bu aslında Mozzi'nin "Merhaba Dünya" eşdeğeridir.
Krokiyi yükleyin ve devre tahtasına bir hoparlör takın. Breadboard'u henüz ses jakına bağlamadıysanız, bir zil de kullanabilirsiniz.
Hoparlörünüzden sürekli bir A4 (440Hz) gelmiyorsa, tüm bağlantılarınızın iyi olduğundan emin olun ve tekrar deneyin.
Ardından Nunchuck'ı Arduino'ya bağlayacağız!
3. Adım: Hepsini Bir Araya Getirmek
Şimdi bir Sinüs dalgasının frekansını değiştirmek için Nunchuck'tan alınan yuvarlama değerini kullanacağız.
Arduino IDE'den Dosya > Örnekler > Mozzi > Sensörler > Piezo Frekansı'nı seçin
Nunchuck ile çalışmasını sağlamak için bu koda birkaç satır eklememiz gerekecek. WiiChuck kitaplığına bir içerme ekleyin ve chuck adlı bir WiiChuck nesnesini somutlaştırın. Ayrıca PIEZO_PIN bildirimini yorumlayabilir veya kullanmayacağımız için silebilirsiniz.
#include "WiiChuck. H"
WiiChuck aynası = WiiChuck(); //const int PIEZO_PIN = 3; // piezo için analog giriş pinini ayarla
Şimdi kurulumda, aşağıdakileri eklememiz gerekecek:
chuck.begin();chuck.update();
ve son olarak updateControl() içinde birkaç şeyi değiştirmemiz gerekecek:
geçersiz updateControl(){
chuck.update(); // en son nunchuck verilerini al // piezoyu oku //int piezo_value = mozziAnalogRead(PIEZO_PIN); // değer 0-1023 int piezo_value = map(Piezo_value değerini belirleyen satırı yorumlayın ve altına aşağıdakini ekleyin:
void updateControl(){ chuck.update(); // en son nunchuck verilerini al // piezoyu oku //int piezo_value = mozziAnalogRead(PIEZO_PIN); // değer 0-1023 // Yukarıdaki satıra ihtiyacımız yok ama neden ruloyu aynı aralığa eşlemiyoruz? int piezo_value = map(chuck.readRoll(), -180, 180, 0 1023);
Kodu yükleyin ve frekans Nunchuck's Roll'unuza karşılık gelmelidir. Farklı frekans aralıklarıyla eşleştirmeyi deneyin. Aşağıdaki çizimde daha fazla fark etmediyseniz, sensörden gelen değer 3 ile çarpılır, bu nedenle şu anda 0 Hz'den yaklaşık 3000 Hz'e kadar tonlar çalıyoruz.
4. Adım: Son Dokunuşlar
Şimdi, önceki adımdan bir araya getirdiğim kodun son sürümünü ve Mozzi'nin birkaç örneğini (tam olarak Phase_Mod_Envelope ve Control_Gain) yüklemeye hazırsınız. Hayatımı kolaylaştırmak için, tanıdık nota adlarıyla (örneğin, NOTE_A4) frekans değerlerini basitçe tanımlayan pitches.h adlı bir dosya da ekledim.
Nunchuck kodu hariç, kodun çoğu doğrudan örneklerden olduğu için Mozzi belgelerini okumanızı öneririm.
İşte Git depoma bir bağlantı. Güncel olması için web sitelerinden almanız gereken Mozzi kitaplığı dışındaki tüm önemli dosyalar dahil edilmiştir. WiiMusic.ino'yu indirin ve kulağa nasıl geldiğini duymak için cihazınıza yükleyin. Değiştirdiğim parametrelerle oynamanızı öneririm (harita aralıklarını değiştirin, sayıları bölme/çarpma vb.) çünkü aradığım belirli sesi bu şekilde buldum.
Refleks
Tamamen bitmiş gibi hissetmiyorum. Bu, projeden veya çıkardığı sesten memnun olmadığım anlamına gelmiyor, ancak keşfetmeye devam etmek istediğim yeni bir dünyaya ayak parmaklarımı daldırmış gibi hissediyorum, bu yüzden devam ettikçe bu projeden yeni bir dal ekleyeceğim. çalışmak.
Yine de, bunun mikrodenetleyiciler dünyasına ilk gerçek yolculuğum olduğu söyleniyor, bu yüzden öğrenme deneyimi için çok minnettarım. Üzerinde çalıştığım yaklaşık yirmi saat bana kendim ve neredeyse ailemin her üyesi için Noel fikirleri verdi. Yol boyunca pek çok tavsiye ve rehberlik kullanmış olabileceğim için bu projede başka biriyle çalışmadığım için biraz pişmanım. Ancak, hiçbir zaman orada olmayan bir yazılım sorununu (Nunnchuck'taki dahili bir kablo kopmuştu) hatalarını ayıklamaya çalışırken üç gün saçımı yolmak da dahil olmak üzere, denemelerimde kişisel olarak çok şey öğrendim.
Hala ileriye dönük bir dizi olasılık var. Örneğin, MIDI notunun parametrelerini değiştirmek için bir MIDI denetleyicisi ile kulaklık çıkışı arasında bir MIDI arabirimi türü olarak Arduino'yu kullanmayı çok isterim çünkü aralarından seçim yapabileceğiniz çok şey var (hacim, kesme, zarf frekansı, perde bükülmesi), modülasyon, vibrato, adını siz koyun). Bu, düğmelerle parametrelerin değiştirilmesi ve bir C++ dizisine kodlanmamış bir akorun çalınması dahil olmak üzere çok daha fazla esneklik sağlar.
Önerilen:
Arpej Sentezleyici (Sivrisinek I): 6 Adım
Arpeggiating Synthesizer (Mosquito I): Mosquito I, Arduino Nano ve Mozzi ses sentez kitaplığını kullanan küçük bir arpej sentezleyicidir. Yirmiden fazla 8 adımlı diziyi çalabilir, ancak istediğiniz kadar özel dizi ekleyebilirsiniz. Kurulumu nispeten basittir ve
MakeyMakey ve Scratch ile Su Sentezleyici: 6 Adım (Resimlerle)
MakeyMakey ve Scratch ile Su Sentezleyici: Farklı malzemeleri anahtarlara veya düğmelere dönüştürmek ve böylece bilgisayardaki hareketleri veya sesleri tetiklemek için MakeyMakey'i kullanmak büyüleyici bir olaydır. Hangi malzemenin zayıf akım dürtüsünü ilettiğini öğrenir ve i
Sadece Ayrık Bileşenler Kullanan Harika Analog Sentezleyici/Organ: 10 Adım (Resimlerle)
Müthiş Analog Sentezleyici/Yalnızca Ayrık Bileşenleri Kullanan Organ: Analog sentezleyiciler çok havalı, ama aynı zamanda yapmak da oldukça zor. Bu yüzden olabildiğince basit bir tane yapmak istedim, böylece işleyişi kolayca anlaşılabilir olabilir. birkaç temel alt devreye ihtiyaç var: Dirençli basit bir osilatör
Keytar Hero (Sentezleyici Olarak Wii Gitar Kontrol Cihazı Kullanmak): 7 Adım (Resimlerle)
Keytar Hero (Sentezleyici Olarak Wii Guitar Controller Kullanmak): Guitar Hero oyunları bir düzine yıl önce çok popülerdi, bu yüzden etrafta toz toplayan bir sürü eski gitar denetleyicisi olması gerekiyor. Bir sürü düğmesi, düğmesi ve kolu var, neden onları tekrar iyi bir şekilde kullanmayasınız? Gitar kumandası
Kablosuz Wii Nunchuck Kontrollü Arduino: 7 Adım
Kablosuz Wii Nunchuck Kontrollü Arduino: Herhangi bir Arduino tabanlı proje için kontrol sistemi olarak tamamen değiştirilmemiş bir kablosuz Wii Nunchuck kullanın. Eklenen radyo vericisi/alıcı çifti vs. yok. Bu talimat, Arduino mikrodenetleyicisi ile biraz deneyime sahip olduğunu varsaymaktadır. radyan