Mündəricat:

Wii Nunchuck Sintezatoru: 4 addım
Wii Nunchuck Sintezatoru: 4 addım

Video: Wii Nunchuck Sintezatoru: 4 addım

Video: Wii Nunchuck Sintezatoru: 4 addım
Video: Nunchuk module prototype 2024, Noyabr
Anonim
Wii Nunchuck Sintezatoru
Wii Nunchuck Sintezatoru

World of Wii Music:

Nəhayət musiqi sevgimi son bir neçə il ərzində qazandığım proqramlaşdırma təcrübəsi ilə birləşdirmək qərarına gəldim. Məktəbdə Tod Machoverin bir çıxışını gördüyümdən bəri özümə məxsus bir alət yaratmaqla maraqlanıram. İşi ilə tanış deyilsinizsə, ona bir Google verin, çünki bir neçə ildir ki, musiqi, texnologiya və onların kəsişməsini (MIT media laboratoriyaları, Rock Band, Guitar Hero və s.)).

Nunchuck'ımı, hər ikisinin də yaxşı sənədləşdirilmiş istifadəsi səbəbiylə Mozzi səs sintezi kitabxanasında çalışan bir Arduino Uno ilə bağladım. Asanlıq üçün, Arduinoya birbaşa qoşulan WiiChuck çörək bağı adapterindən istifadə edirəm. Bu nisbətən sadə bir layihə, Nunchuck-ın akselerometrindən ölçülmüş Pitch-ə (YZ-Plane) bağlı olaraq bir sıra meydançalar oynayır. Joystickin Y dəyəri, meydançanı daha yüksək və ya yumşaq etmək üçün qazancla müqayisə olunur. Z düyməsinə bağlı olaraq akkordları da dəyişir və C-düyməsinə basıldıqda faz modulyasiya zərfini açır. Daha sonra zərfin tezliyi Nunchuck -dan ölçülən Roll ilə dəyişdirilir (şəkil düyməni çevirir).

Resurslar:

  • 1 x Arduino Uno
  • 1 x Wii Nunchuck
  • 1 x WiiChuck Adapteri
  • 1 x çörək taxtasına uyğun 3,5 mm qadın stereo jak
  • 1 x 3,5 mm səs kabeli
  • 1 x bir növ dinamik (Bunu sınamaq üçün əvvəlcə bir siqnalı bağlaya bilərsiniz
  • 4-5 müxtəlif rəngli tellər

İsteğe bağlı, lakin tövsiyə olunur:

  • 1 x 330 Ohm müqavimət
  • 1 x.1 uF kondansatör

Addım 1: NunChuck'ınızı bağlayın

NunChuck'ınızı bağlayın
NunChuck'ınızı bağlayın
NunChuck'ınızı bağlayın
NunChuck'ınızı bağlayın
NunChuck'ınızı bağlayın
NunChuck'ınızı bağlayın

WiiChuck sinifini Arduino Oyun Meydançasından kopyalayın/yapışdırın. PWR və GND pinlərinin elanı olan versiyaya ehtiyacımız olacaq. WiiChuck.h olaraq qeyd edin və layihənizlə eyni qovluqda saxlayın.

İndi aşağıdakıları Arduino IDE -ə kopyalayın/yapışdırın və yükləyin.

#"Wire.h" daxil edin //#"WiiChuckClass.h" daxil edin // çox güman ki, qalanlarımız üçün onun WiiChuck.h. #"WiiChuck.h" daxil edin WiiChuck chuck = WiiChuck ();

boş quraşdırma () {

// nunchuck_init (); Serial.begin (115200); chuck.begin (); chuck.update (); //chuck.calibrateJoy (); }

boşluq döngəsi () {

gecikmə (20); chuck.update ();

Serial.print (chuck.readPitch ());

Serial.print (","); Serial.print (chuck.readRoll ()); Serial.print (",");

Serial.print (chuck.readJoyX ());

Serial.print (","); Serial.print (chuck.readJoyY ()); Serial.print (",");

əgər (chuck.buttonZ) {

Serial.print ("Z"); } başqa {Serial.print ("-"); }

Serial.print (",");

// funksiya deyil // əgər (chuck.buttonC ()) {

if (chuck.buttonC) {Serial.print ("C"); } başqa {Serial.print ("-"); }

Serial.println ();

}

Arduino-nu elektrikdən ayırın və WiiChuck adapterinizi Arduino-dakı Analog Pins 2-5-ə qoşun.

Yenidən gücə qoşulun və Nunchuck dəyərlərinin Arduino -ya göndərildiyini və Serial Monitorda çap olunmasını təmin edin. Nömrələrdə heç bir dəyişiklik görmürsənsə, əlaqələrinizin yaxşı olduğundan və Nunchuck -un işlədiyindən əmin olun. Nunchuck telimin daxildən qırıldığını anlamaqdan əvvəl bir neçə gün proqram təminatını düzəltməyə çalışdım!

Sonra hər şeyi Mozziyə bağlayacağıq…

Addım 2: Mozzi ilə tanış olun

Mozzi ilə tanış olmaq
Mozzi ilə tanış olmaq

Əvvəlcə Mozzinin son versiyasını yükləməlisiniz. Bağışlardan qaynaqlanırlar, buna görə özünüzü meylli hiss edirsinizsə və kitabxananı yükləyin. Arduino IDE -dən Sketch> Kitabxanalar> ZIP Kitabxana əlavə et… seçərək kitabxanalarınıza asanlıqla əlavə edə bilərsiniz.

İndi 3,5 mm qulaqlıq yuvasını çörək taxtasına və Arduino -ya bağlayacağıq ki, sonra asanlıqla qoşula bilək (Nunchuck və adapteri indiyə qədər ayıra bilərsiniz).

  1. Qalanları üçün yer açmaq üçün Jack -ini lövhənin sağ alt küncünə bağlayın. Krikonun eni 5 sancaq olmalıdır.
  2. Orta cərgəni yerə tullanan bir tel ilə bağlayın.
  3. Krikonun ən üst sırasını yuxarıdakı boş bir cərgəyə bağlayın (şəkildəki 10 -cu sıra). Bu səs siqnalını daşıyan teldir.
  4. Digital Pin ~ 9 -u 10 -cu sıraya qoşun.
  5. Arduino'nuzdakı Ground'u çörək taxtasındakı yer relsinə qoşun.
  6. Rezistoru və kondansatörü hələ istifadə etməyinizə ehtiyac yoxdur, amma istifadə etməsəniz yüksək bir cızıq görə bilərsiniz. ~ 15 kHz -dən yuxarı olan tezlikləri aradan qaldırmaq üçün aşağı keçid filtri rolunu oynayır.

Fayl> Nümunələr> Mozzi> Əsaslar> Sinewave seçərək Arduino IDE -də Mozzinin Sinewave eskizini açın. Bu, əslində Mozzinin "Hello World" ə bərabərdir.

Eskizi yükləyin və çörək taxtasına bir dinamik qoşun. Çörək taxtasını hələ audio jakına bağlamamısınızsa, səs siqnalı da istifadə edə bilərsiniz.

Dinamikdən A4 (440Hz) sabit bir səs eşitmirsinizsə, bütün əlaqələrinizin yaxşı olduğundan əmin olun və yenidən cəhd edin.

Sonra, Nunchuck -ı Arduino -ya bağlayacağıq!

Addım 3: Hamısını bir araya gətirmək

Hamısını bir araya gətirmək
Hamısını bir araya gətirmək

İndi bir Sinewave tezliyini dəyişdirmək üçün Nunchuck -dan yuvarlanan dəyərdən istifadə edəcəyik.

Arduino IDE -dən Fayl> Nümunələr> Mozzi> Sensorlar> Piezo Tezliyi seçin

Nunchuck ilə işləməsini təmin etmək üçün bu koda bir neçə sətir əlavə etməliyik. WiiChuck kitabxanasına bir əlavə əlavə edin və chuck adlı bir WiiChuck obyekti yaradın. PIEZO_PIN bəyannaməsini şərh edə və ya istifadə etməyəcəyimiz üçün sadəcə silə bilərsiniz.

#"WiiChuck. H" daxil edin

WiiChuck ayağı = WiiChuck (); // const int PIEZO_PIN = 3; // piezo üçün analoq giriş pinini təyin edin

İndi quraşdırma zamanı aşağıdakıları əlavə etməliyik:

chuck.begin (); chuck.update ();

və nəhayət updateControl () da bir neçə şeyi dəyişdirməyimiz lazım olacaq:

etibarsız updateControl () {

chuck.update (); // son nunchuck məlumatlarını əldə edin // piezo oxuyun // int piezo_value = mozziAnalogRead (PIEZO_PIN); // dəyər 0-1023 int piezo_value = map (Piezo_value təyin edən xətti şərh edin və altına aşağıdakıları əlavə edin:

etibarsız updateControl () {chuck.update (); // son nunchuck məlumatlarını əldə edin // piezo oxuyun // int piezo_value = mozziAnalogRead (PIEZO_PIN); // dəyəri 0-1023-dir // Yuxarıdakı xəttə ehtiyacımız yoxdur, amma niyə rulonu eyni aralığa uyğunlaşdırmırıq? int piezo_value = xəritə (chuck.readRoll (), -180, 180, 0 1023);

Kodu yükləyin və tezlik Nunchuck Roll -a uyğun olmalıdır. Fərqli tezlik aralığına uyğunlaşdırmağa çalışın. Eskizdə daha sonra hiss etməmisinizsə, sensorun dəyəri 3 ilə vurulur, buna görə hazırda 0 Hz -dən 3000 Hz -ə qədər ton oynayırıq.

Addım 4: Son toxunuşlar

Son toxunuşlar
Son toxunuşlar

İndi əvvəlki addımdan topladığım kodun son versiyasını və daha bir neçə Mozzi nümunəsini yükləməyə hazırsınız (Phase_Mod_Envelope və Control_Gain daha doğrusu). Həyatımı asanlaşdırmaq üçün pitches.h adlı bir fayl da əlavə etdim ki, bu da adi qeyd adları ilə tezlik dəyərlərini təyin edir (yəni NOTE_A4).

Kodun çox hissəsi Nunchuck kodu istisna olmaqla nümunələrdən düz olduğundan Mozzi sənədlərini oxumağı təklif edirəm.

Budur Git depomun bağlantısı. Veb saytından əldə etməli olduğunuz Mozzi kitabxanası istisna olmaqla, bütün vacib sənədlər daxil edilmişdir, buna görə də aktualdır. WiiMusic.inonu yükləyin və nə kimi səsləndiyini eşitmək üçün cihazınıza yükləyin. Dəyişdirdiyim parametrlərlə oynamağı təklif edirəm (xəritə aralığını dəyişdirmək, ədədləri bölmək/çoxaltmaq və s.).

Refleksiya

Tamamilə bitmiş kimi hiss etmirəm. Bu, layihədən və ya səsdən razı qalmadığımı söyləmək deyil, ancaq ayaqlarımı araşdırmağa davam etmək istədiyim yeni bir dünyaya batırmış kimi hiss edirəm, buna görə də davam edərkən bu layihədən yeni bir filial əlavə edəcəyəm. işləmək.

Yenə də bu, mikro nəzarətçilər dünyasına ilk əsl səyahətim olduğuna görə öyrənmə təcrübəsi üçün çox minnətdaram. Bunun üzərində işlədiyim iyirmi saata yaxın vaxt mənə özüm və ailənin hər bir üzvü üçün Milad fikirləri verdi. Yol boyu çoxlu məsləhət və bələdçilikdən istifadə edə bildiyim üçün bu layihədə başqası ilə işləməməyimə bir qədər peşmanam. Bununla birlikdə, heç vaxt olmadığı bir proqram problemini düzəltmək üçün üç gün saçlarımı çəkərək sınamaqla çox şey öyrəndim (Nunchuckdakı daxili tel qırıldı).

Hələ irəliləmək üçün bir sıra imkanlar var. Məsələn, Arduino -dan MIDI nəzarətçi ilə qulaqlıq arasındakı MIDI qeydinin parametrlərini dəyişdirmək üçün bir MIDI interfeysi növü olaraq istifadə etmək istərdim, çünki seçmək üçün çox şey var (həcm, kəsmə, zərf tezliyi, addım bükülməsi), modulyasiya, vibrato, buna ad verirsiniz). Bu, düymələrlə parametrlərin dəyişdirilməsi və sadəcə C ++ serialına kodlaşdırılmamış bir akkordun çalınması da daxil olmaqla daha çox rahatlığa imkan verəcəkdir.

Tövsiyə: