Cuprins:

Sintetizator Wii Nunchuck: 4 pași
Sintetizator Wii Nunchuck: 4 pași

Video: Sintetizator Wii Nunchuck: 4 pași

Video: Sintetizator Wii Nunchuck: 4 pași
Video: Doar încă un live înainte de sâmbătă live! Să creștem împreună pe YouTube! #SanTenChan 2024, Iulie
Anonim
Sintetizator Wii Nunchuck
Sintetizator Wii Nunchuck

Lumea muzicii Wii:

Am decis să combin în sfârșit dragostea mea pentru muzică cu puțina experiență de programare pe care am acumulat-o în ultimii ani. M-am interesat să creez un instrument propriu de când am văzut o discuție a lui Tod Machover la școala mea. Dacă nu sunteți familiarizați cu munca sa, oferiți-i un Google, deoarece el depășește limitele muzicii, tehnologiei, precum și intersectarea lor de câțiva ani (laboratoare media MIT, Rock Band, Guitar Hero etc.).).

Mi-am conectat Nunchuck la un Arduino Uno care rulează pe biblioteca de sinteză a sunetului Mozzi datorită utilizării bine documentate a ambelor online. Pentru ușurință, folosesc un adaptor WiiChuck pentru panouri care se conectează direct la Arduino. Acest proiect relativ simplu joacă o serie de pitchuri în funcție de pitch (YZ-Plane) măsurată de la accelerometrul Nunchuck. Valoarea Y a joystick-ului este mapată la câștig pentru a face tonul mai tare sau mai moale. De asemenea, modifică acordurile în funcție de butonul Z și pornește un plic de modulare de fază atunci când butonul C este apăsat. Frecvența plicului este apoi modificată cu rola măsurată de la Nunchuck (imaginea rotind un buton).

Resurse:

  • 1 x Arduino Uno
  • 1 x Wii Nunchuck
  • 1 x adaptor WiiChuck
  • 1 x mufă stereo femelă de 3,5 mm compatibilă
  • 1 x cablu audio de 3,5 mm
  • 1 x difuzor de un fel (puteți conecta la început un buzzer pentru a-l testa
  • 4-5 fire de diferite culori

Opțional, dar recomandat:

  • 1 rezistor de 330 Ohm
  • 1 x.1 uF condensator

Pasul 1: conectarea la NunChuck

Conectarea la NunChuck
Conectarea la NunChuck
Conectarea la NunChuck
Conectarea la NunChuck
Conectarea la NunChuck
Conectarea la NunChuck

Copiați / lipiți clasa WiiChuck din Arduino Playground. Vom avea nevoie de versiunea cu declarația pinilor PWR și GND. Salvați-l ca WiiChuck.h și păstrați-l în același director cu proiectul dvs.

Acum copiați / lipiți următoarele în Arduino IDE și încărcați-le.

#includeți „Wire.h” // # include „WiiChuckClass.h” // cel mai probabil WiiChuck.h pentru restul dintre noi. #include "WiiChuck.h" WiiChuck chuck = WiiChuck ();

configurare nulă () {

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

bucla nulă () {

întârziere (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 (",");

if (chuck.buttonZ) {

Serial.print („Z”); } else {Serial.print ("-"); }

Serial.print (",");

// nu este o funcție // if (chuck.buttonC ()) {

if (chuck.buttonC) {Serial.print ("C"); } else {Serial.print ("-"); }

Serial.println ();

}

Deconectați-vă Arduino de la alimentare și conectați adaptorul WiiChuck la pinii analogici 2-5 de pe Arduino.

Conectați-vă din nou la alimentare și asigurați-vă că valorile Nunchuck sunt trimise către Arduino și sunt tipărite pe monitorul serial. Dacă nu vedeți nicio modificare a numerelor, asigurați-vă că conexiunile sunt bune și că Nunchuck funcționează. Am petrecut câteva zile încercând să repar software-ul înainte de a-mi da seama că firul lui Nunchuck era rupt intern!

Apoi, vom conecta totul la Mozzi…

Pasul 2: Cunoașterea Mozzi

Cunoașterea Mozzi
Cunoașterea Mozzi

În primul rând, va trebui să descărcați cea mai recentă versiune de Mozzi. Acestea sunt alimentate de donații, așa că donați dacă vă simțiți atât de înclinați și descărcați biblioteca. Îl puteți adăuga cu ușurință în bibliotecile dvs., alegând Schiță> Biblioteci> Adăugare bibliotecă. ZIP … din Arduino IDE.

Acum vom conecta mufa pentru căști de 3,5 mm la panou și la Arduino, astfel încât să ne putem conecta cu ușurință ulterior (puteți deconecta Nunchuck și adaptorul deocamdată).

  1. Conectați Jack-ul la colțul din dreapta jos al plăcii pentru a face loc pentru restul. Mufa ar trebui să aibă o lățime de 5 pini.
  2. Conectați rândul din mijloc la masă cu un fir jumper.
  3. Conectați rândul de sus al cricului la un rând gol de deasupra (rândul 10 din imagine). Acesta este firul care transportă semnalul audio.
  4. Conectați Pinul digital ~ 9 și la rândul 10.
  5. Conectați masă de pe Arduino la șina de masă de pe panou.
  6. Nu trebuie neapărat să utilizați încă rezistorul și condensatorul, dar este posibil să observați un țipăt puternic dacă nu. Acționează ca un filtru trece jos pentru a elimina frecvențele peste ~ 15 kHz.

Deschideți schița Sinewave Mozzi în Arduino IDE alegând Fișier> Exemple> Mozzi> Noțiuni de bază> Sinewave. Acesta este în esență echivalentul lui Mozzi cu „Hello World”.

Încărcați schița și conectați un difuzor la panou. Puteți utiliza și un buzzer dacă nu ați conectat încă placa de prindere la mufa audio.

Dacă nu auziți un difuzor constant A4 (440Hz) din difuzor, asigurați-vă că toate conexiunile sunt bune și încercați din nou.

Apoi, vom conecta Nunchuck la Arduino!

Pasul 3: Puneți totul împreună

Punând totul împreună
Punând totul împreună

Acum vom folosi valoarea de rulare din Nunchuck pentru a schimba frecvența unei Sinewave.

Din Arduino IDE alegeți Fișier> Exemple> Mozzi> Senzori> Frecvență piezo

Va trebui să adăugăm câteva linii la acest cod pentru a putea funcționa cu Nunchuck. Adăugați o include în biblioteca WiiChuck și creați un obiect WiiChuck numit chuck. De asemenea, puteți să comentați declarația PIEZO_PIN sau pur și simplu să o ștergeți, deoarece nu o vom folosi.

#include „WiiChuck. H”

WiiChuck chuck = WiiChuck (); // const int PIEZO_PIN = 3; // setați pinul de intrare analogic pentru piezo

Acum, în configurare, va trebui să adăugăm următoarele:

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

și, în cele din urmă, va trebui să schimbăm câteva lucruri în updateControl ():

void updateControl () {

chuck.update (); // obține cele mai recente date nunchuck // citește piezo // int piezo_value = mozziAnalogRead (PIEZO_PIN); // valoarea este 0-1023 int piezo_value = map (Comentează linia care setează piezo_value și adaugă următoarele sub:

void updateControl () {chuck.update (); // obține cele mai recente date nunchuck // citește piezo // int piezo_value = mozziAnalogRead (PIEZO_PIN); // valoarea este 0-1023 // Nu avem nevoie de linia de mai sus, dar de ce să nu mapăm rulajul în același interval? int piezo_value = map (chuck.readRoll (), -180, 180, 0 1023);

Încărcați codul și frecvența ar trebui să corespundă cu Nunchuck's Roll. Încercați să o mapați la diferite intervale de frecvență. Dacă nu ați observat mai jos în schiță, valoarea de la senzor este înmulțită cu 3, astfel că redăm în prezent tonuri de la 0 Hz la aproximativ 3000 Hz.

Pasul 4: Atingeri finale

Atingeri finale
Atingeri finale

Acum sunteți gata să încărcați versiunea finală a codului pe care l-am creat din pasul anterior și câteva alte exemple ale lui Mozzi (Phase_Mod_Envelope și Control_Gain pentru a fi exact). Pentru a-mi face viața mai ușoară, am inclus și un fișier numit pitches.h care definește pur și simplu valorile frecvenței cu nume de note familiare (adică NOTE_A4).

Vă sugerez să citiți documentația Mozzi, deoarece o mare parte din cod este direct din exemple, cu excepția codului pentru Nunchuck.

Iată un link către depozitul meu Git. Toate fișierele importante sunt incluse, cu excepția bibliotecii Mozzi pe care ar trebui să o obțineți de pe site-ul lor web, astfel încât să fie actualizată. Descărcați WiiMusic.ino și încărcați-l pe dispozitivul dvs. pentru a auzi cum sună. Vă sugerez să vă jucați cu parametrii pe care îi schimb (modificați intervalele hărții, împărțiți / înmulțiți numerele etc.), așa cum am găsit sunetul pe care îl căutam.

Reflecţie

Nu simt că am terminat. Asta nu înseamnă că nu sunt mulțumit de proiect sau de sunetul pe care îl face, dar simt că tocmai mi-am scufundat degetele de la picioare într-o lume nouă pe care vreau să o explorez în continuare, așa că voi adăuga o nouă ramură din acest proiect pe măsură ce voi continua a munci.

Totuși, acestea fiind spuse, aceasta a fost prima mea călătorie adevărată în lumea microcontrolerelor, așa că sunt foarte recunoscător pentru experiența de învățare. Cele douăzeci și ceva de ore pe care le-am petrecut lucrând la el mi-au dat idei de Crăciun pentru mine și practic pentru fiecare membru al familiei mele. Regret oarecum că nu am lucrat la acest proiect cu altcineva, deoarece aș fi putut folosi o mulțime de sfaturi și îndrumări pe parcurs. Cu toate acestea, personal am învățat multe lucruri prin încercările mele, inclusiv trei zile de tragere a părului, încercând să depanez o problemă de software care nu a existat niciodată (un fir intern din Nunchuck s-a rupt).

Există încă o serie de posibilități care merg înainte. De exemplu, mi-ar plăcea să folosesc Arduino ca un tip de interfață MIDI între un controler MIDI și ieșirea căștilor pentru a schimba parametrii notei MIDI, deoarece există atât de multe dintre care puteți alege (volum, cutoff, frecvența plicului, pitch bend, modulație, vibrato, îl numești). Acest lucru ar permite mult mai multă flexibilitate, inclusiv schimbarea parametrilor cu butoanele și simpla redare a unei coarde care nu este codificată într-o matrice C ++.

Recomandat: