Talaan ng mga Nilalaman:

Wii Nunchuck Synthesizer: 4 Hakbang
Wii Nunchuck Synthesizer: 4 Hakbang

Video: Wii Nunchuck Synthesizer: 4 Hakbang

Video: Wii Nunchuck Synthesizer: 4 Hakbang
Video: [ $9 ] DIY modular synth Wii nunchuck controller and Multi LFO / Joystic , Acceleration sensor 2024, Disyembre
Anonim
Wii Nunchuck Synthesizer
Wii Nunchuck Synthesizer

Ang Mundo ng Wii Music:

Napagpasyahan kong pagsamahin sa wakas ang aking pagmamahal sa musika sa kaunting karanasan sa programa na nakamit ko sa nakaraang ilang taon. Naging interesado ako sa paglikha ng sarili kong instrumento mula pa noong nakita ko ang usapan ni Tod Machover sa aking paaralan. Kung hindi ka pamilyar sa kanyang trabaho bigyan siya ng isang Google, dahil tinutulak niya ang mga hangganan ng musika, teknolohiya, pati na rin ang kanilang intersect sa loob ng maraming taon ngayon (MIT media labs, Rock Band, Guitar Hero atbp.).

Ikinonekta ko ang aking Nunchuck sa isang Arduino Uno na tumatakbo sa Mozzi sound synthesis library dahil sa mahusay na dokumentadong paggamit ng parehong online. Para sa kadalian, gumagamit ako ng isang WiiChuck breadboard adapter na kung saan ay naka-plug papunta sa Arduino. Ang medyo simpleng proyekto na ito ay gumaganap ng isang serye ng mga pitch depende sa Pitch (YZ-Plane) na sinusukat mula sa accelerometer ng Nunchuck. Ang halaga ng Y ng joystick ay nai-map upang makamit ang pagtaas ng tunog o paglambot. Nagbabago rin ito ng mga chord depende sa Z-Button at binubuksan ang isang phase modulation na sobre kapag pinindot ang C-Button. Ang dalas ng sobre ay pagkatapos ay nabago gamit ang Roll na sinusukat mula sa Nunchuck (larawan na isang knob).

Mga mapagkukunan:

  • 1 x Arduino Uno
  • 1 x Wii Nunchuck
  • 1 x WiiChuck Adapter
  • 1 x breadboard na katugmang 3.5mm babaeng stereo jack
  • 1 x 3.5mm audio cable
  • 1 x speaker ng ilang uri (Maaari kang mag-plug sa isang buzzer sa una upang subukan ito
  • 4-5 Mga wire na may iba't ibang kulay

Opsyonal ngunit inirerekomenda:

  • 1 x 330 Ohm risistor
  • 1 x.1 uF capacitor

Hakbang 1: Pag-plug sa Iyong NunChuck

Pag-plug sa Iyong NunChuck
Pag-plug sa Iyong NunChuck
Pag-plug sa Iyong NunChuck
Pag-plug sa Iyong NunChuck
Pag-plug sa Iyong NunChuck
Pag-plug sa Iyong NunChuck

Kopyahin / I-paste ang klase ng WiiChuck mula sa Arduino Playground. Kakailanganin namin ang bersyon sa deklarasyon ng PWR at GND pins. I-save ito bilang WiiChuck.h at panatilihin ito sa parehong direktoryo ng iyong proyekto.

Ngayon kopyahin / i-paste ang sumusunod sa Arduino IDE at i-upload ito.

# isama ang "Wire.h" // # isama ang "WiiChuckClass.h" // malamang ang WiiChuck.h nito para sa natitirang sa atin. # isama ang "WiiChuck.h" WiiChuck chuck = WiiChuck ();

walang bisa ang pag-setup () {

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

void loop () {

pagkaantala (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 (",");

kung (chuck.buttonZ) {

Serial.print ("Z"); } iba pa {Serial.print ("-"); }

Serial.print (",");

// not a function // if (chuck.buttonC ()) {

kung (chuck.buttonC) {Serial.print ("C"); } iba pa {Serial.print ("-"); }

Serial.println ();

}

Idiskonekta ang iyong Arduino mula sa kapangyarihan at ikonekta ang iyong WiiChuck adapter sa Analog Pins 2-5 sa iyong Arduino.

Kumonekta muli sa kapangyarihan at tiyakin na ang mga halaga ng Nunchuck ay ipinapadala sa iyong Arduino at nai-print sa Serial Monitor. Kung hindi ka nakakakita ng anumang pagbabago sa mga numero tiyakin na ang iyong mga koneksyon ay mabuti, at ikaw ay Nunchuck ay gumagana. Gumugol ako ng ilang araw na pagsubok upang ayusin ang software bago napagtanto na nasira ang panloob na kawad ng aking Nunchuck!

Susunod, isasabit namin ang lahat sa Mozzi…

Hakbang 2: Kilalanin ang Mozzi

Pagkilala sa Mozzi
Pagkilala sa Mozzi

Una, kakailanganin mong i-download ang pinakabagong bersyon ng Mozzi. Ang mga ito ay pinalakas ng mga donasyon kaya magbigay ng donasyon kung sa palagay mo ay may hilig at i-download ang silid-aklatan. Maaari mong idagdag ito sa iyong mga aklatan nang madali sa pamamagitan ng pagpili ng Sketch> Mga Aklatan> Magdagdag ng. ZIP Library … mula sa Arduino IDE.

Ngayon ay ikonekta namin ang 3.5mm headphone jack sa breadboard at Arduino upang madali kaming makakonekta dito sa paglaon (maaari mong i-unplug ang Nunchuck at adapter sa ngayon).

  1. I-plug ang iyong Jack sa kanang kanang sulok ng board upang magkaroon ng puwang para sa natitira. Ang jack ay dapat na 5 pin ang lapad.
  2. Ikonekta ang gitnang hilera sa lupa gamit ang isang jumper wire.
  3. Ikonekta ang pinakamataas na hilera ng jack sa isang walang laman na hilera sa itaas (Hilera 10 sa larawan). Ito ang kawad na nagdadala ng audio signal.
  4. Ikonekta ang Digital Pin ~ 9 sa row 10 din.
  5. Ikonekta ang Ground sa iyong Arduino sa ground rail sa breadboard.
  6. Hindi mo kinakailangang kailanganing gamitin ang risistor at capacitor ngunit maaari mong mapansin ang isang mataas na tunog ng hagulgol kung hindi mo gagawin. Gumaganap ito bilang isang mababang pass filter upang maalis ang mga frequency sa itaas ~ 15 kHz.

Buksan ang sketch ng Mozzi's Sinewave sa Arduino IDE sa pamamagitan ng pagpili ng File> Mga Halimbawa> Mozzi> Mga Pangunahing Kaalaman> Sinewave. Ito ay mahalagang katumbas ng Mozzi ng "Hello World".

I-upload ang sketch at i-plug ang isang speaker sa breadboard. Maaari kang gumamit ng buzzer din kung hindi mo pa na-wire ang breadboard sa audio jack.

Kung hindi mo maririnig ang isang pare-pareho na A4 (440Hz) na nagmumula sa iyong speaker tinitiyak na ang lahat ng iyong mga koneksyon ay mabuti at subukang muli.

Susunod, ikonekta namin ang Nunchuck sa Arduino!

Hakbang 3: Pagsasama-sama sa Lahat ng Ito

Pagsasama-sama sa Lahat ng Ito
Pagsasama-sama sa Lahat ng Ito

Ngayon ay gagamitin namin ang halaga ng pag-roll mula sa Nunchuck upang baguhin ang dalas ng isang Sinewave.

Mula sa Arduino IDE Pumili ng File> Mga Halimbawa> Mozzi> Sensor> Piezo Frequency

Kakailanganin naming magdagdag ng ilang mga linya sa code na ito upang maisagawa ito sa Nunchuck. Magdagdag ng isang isama sa WiiChuck library at magsimula ng isang WiiChuck object na tinatawag na chuck. Maaari mo ring puna ang deklarasyon ng PIEZO_PIN o tanggalin lamang ito dahil hindi namin ito gagamitin.

# isama ang "WiiChuck. H"

WiiChuck chuck = WiiChuck (); // const int PIEZO_PIN = 3; // itakda ang analog input pin para sa piezo

Ngayon sa pag-set up, kakailanganin naming idagdag ang sumusunod:

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

at sa wakas kakailanganin nating baguhin ang ilang mga bagay sa updateControl ():

walang bisa ang updateControl () {

chuck.update (); // get pinakabagong data ng nunchuck // basahin ang piezo // int piezo_value = mozziAnalogRead (PIEZO_PIN); // halaga ay 0-1023 int piezo_value = mapa (I-comment ang linya na nagtatakda ng piezo_value at idagdag ang sumusunod sa ilalim:

void updateControl () {chuck.update (); // get pinakabagong data ng nunchuck // basahin ang piezo // int piezo_value = mozziAnalogRead (PIEZO_PIN); // halaga ay 0-1023 // Hindi namin kailangan ang linya sa itaas ngunit bakit hindi mapa ang roll sa parehong saklaw? int piezo_value = mapa (chuck.readRoll (), -180, 180, 0 1023);

I-upload ang code at ang dalas ay dapat na tumutugma sa iyong Nunchuck's Roll. Subukang i-mapa ito sa iba't ibang mga saklaw ng dalas. Kung hindi mo pa napansin sa ibaba sa sketch ang halaga mula sa sensor ay pinarami ng 3 kaya kasalukuyang nagpe-play kami ng mga tone mula sa 0 Hz hanggang sa 3000 Hz.

Hakbang 4: Mga Pangwakas na Pag-ugnay

Pangwakas na Pag-ugnay
Pangwakas na Pag-ugnay

Handa ka na ngayong i-upload ang pangwakas na bersyon ng code na aking na-hiwalay mula sa nakaraang hakbang at ilang higit pang mga halimbawa ng Mozzi (Phase_Mod_Envelope, at Control_Gain upang maging tumpak). Upang gawing mas madali ang aking buhay ay nagsama rin ako ng isang file na tinatawag na pitches.h na tumutukoy lamang sa mga halagang dalas na may pamilyar na mga pangalan ng tala (ibig sabihin NOTE_A4).

Iminumungkahi kong basahin ang dokumentasyon ng Mozzi ng mas maraming ng code ay tuwid mula sa mga halimbawa maliban sa code para sa Nunchuck.

Narito ang isang link sa aking Git repository. Ang lahat ng mahahalagang file ay kasama maliban sa Mozzi library na dapat mong makuha mula sa kanilang website kaya't napapanahon. I-download ang WiiMusic.ino at i-upload ito sa iyong aparato upang marinig kung ano ang hitsura nito. Iminumungkahi kong maglaro ka sa mga parameter na binabago ko (baguhin ang mga saklaw ng mapa, hatiin / i-multiply ang mga numero, atbp..) Na kung paano ko nahanap ang partikular na tunog na hinahanap ko.

Pagninilay

Hindi ko naramdaman na medyo tapos na ako. Hindi ito sinasabi na hindi ako nasiyahan sa proyekto o tunog na ginagawa nito, ngunit nararamdaman kong isubsob ko lamang ang aking mga daliri sa isang bagong mundo na nais kong patuloy na tuklasin kaya magdagdag ako ng isang bagong sangay mula sa proyektong ito sa pagpapatuloy ko magtrabaho.

Gayunpaman, ang nasabing ito ang aking unang tunay na paglalakbay sa mundo ng mga microcontroller kaya't labis akong nagpapasalamat sa karanasan sa pag-aaral. Ang dalawampu't higit pang mga oras na ginugol ko sa pagtatrabaho dito ay nagbigay sa akin ng mga ideya sa Pasko para sa aking sarili at halos bawat miyembro ng aking pamilya. Medyo pinagsisisihan ko ang hindi pagtatrabaho sa proyektong ito sa ibang tao dahil maaaring gumamit ako ng maraming payo at patnubay sa daan. Gayunpaman, personal kong natutunan ng marami sa pamamagitan ng aking mga pagsubok kabilang ang tatlong araw ng paghila ng aking buhok na sinusubukang i-debug ang isang problema sa software na wala roon (nasira ang isang panloob na kawad sa Nunchuck).

Mayroong pa ring isang bilang ng mga posibilidad na sumulong. Halimbawa, gugustuhin kong gamitin ang Arduino bilang isang uri ng interface ng MIDI sa pagitan ng isang MIDI controller at ang headphone upang mabago ang mga parameter ng tala ng MIDI dahil maraming pipiliin (dami, cutoff, dalas ng sobre, pitch bend, modulasyon, vibrato, pinangalanan mo ito). Papayagan nito ang mas maraming kakayahang umangkop kasama ang paglipat ng mga parameter gamit ang mga pindutan, at simpleng pag-play ng isang chord na hindi hardcoded sa isang C ++ array.

Inirerekumendang: