İçindekiler:

Wii Nunchuck Sentezleyici: 4 Adım
Wii Nunchuck Sentezleyici: 4 Adım

Video: Wii Nunchuck Sentezleyici: 4 Adım

Video: Wii Nunchuck Sentezleyici: 4 Adım
Video: Nunchuk module prototype 2024, Kasım
Anonim
Wii Nunchuck Sentezleyici
Wii Nunchuck Sentezleyici

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

NunChuck'ınızı Takma
NunChuck'ınızı Takma
NunChuck'ınızı Takma
NunChuck'ınızı Takma
NunChuck'ınızı Takma
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

Mozzi'yi Tanımak
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).

  1. 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.
  2. Orta sırayı bir aktarma kablosuyla toprağa bağlayın.
  3. 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.
  4. Dijital Pin ~9'u da 10. sıraya bağlayın.
  5. Arduino'nuzdaki Ground'u breadboard üzerindeki toprak rayına bağlayın.
  6. 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

Hepsini bir araya koy
Hepsini bir araya koy

Ş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

Son dokunuşlar
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: