Innholdsfortegnelse:

Wii Nunchuck Synthesizer: 4 trinn
Wii Nunchuck Synthesizer: 4 trinn

Video: Wii Nunchuck Synthesizer: 4 trinn

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

The World of Wii Music:

Jeg bestemte meg for å endelig kombinere min kjærlighet til musikk med den lille programmeringserfaringen jeg har fått de siste årene. Jeg har vært interessert i å lage et eget instrument siden jeg så et foredrag av Tod Machover på skolen min. Hvis du ikke er kjent med arbeidet hans, gi ham en Google, ettersom han har presset grensene for musikk, teknologi og skjæringspunktet deres i en årrekke nå (MIT medielaboratorier, Rock Band, Guitar Hero etc. …).

Jeg har koblet min Nunchuck til en Arduino Uno som kjører på Mozzi lydsyntesebibliotek på grunn av veldokumentert bruk av begge på nettet. For enkelhets skyld bruker jeg en WiiChuck -brødbrettadapter som kobles direkte til Arduino. Dette relativt enkle prosjektet spiller en rekke plasser avhengig av Pitch (YZ-Plane) målt fra Nunchucks akselerometer. Joystickens Y -verdi tilordnes forsterkningen for å gjøre tonehøyden høyere eller mykere. Den endrer også akkorder avhengig av Z-knappen og slår på en fasemoduleringskonvolutt når C-knappen trykkes. Konvoluttens frekvens endres deretter med rullen målt fra Nunchuck (bildet dreier på en knapp).

Ressurser:

  • 1 x Arduino Uno
  • 1 x Wii Nunchuck
  • 1 x WiiChuck -adapter
  • 1 x brødbrettskompatibel 3,5 mm kvinnelig stereokontakt
  • 1 x 3,5 mm lydkabel
  • 1 x høyttaler av en eller annen art (Du kan først koble til en summer for å teste den
  • 4-5 ledninger i forskjellige farger

Valgfritt, men anbefalt:

  • 1 x 330 Ohm motstand
  • 1 x.1 uF kondensator

Trinn 1: Koble til NunChuck

Koble til din NunChuck
Koble til din NunChuck
Koble til din NunChuck
Koble til din NunChuck
Koble til din NunChuck
Koble til din NunChuck

Kopier/lim inn WiiChuck -klassen fra Arduino Playground. Vi trenger versjonen med erklæringen av PWR- og GND -pinner. Lagre det som WiiChuck.h og behold det i samme katalog som prosjektet ditt.

Kopier/lim inn følgende i Arduino IDE og last det opp.

#inkludere "Wire.h" //#inkludere "WiiChuckClass.h" // mest sannsynlig WiiChuck.h for oss andre. #include "WiiChuck.h" WiiChuck chuck = WiiChuck ();

ugyldig oppsett () {

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

void loop () {

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

hvis (chuck.buttonZ) {

Serial.print ("Z"); } annet {Serial.print ("-"); }

Serial.print (",");

// ikke en funksjon // hvis (chuck.buttonC ()) {

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

Serial.println ();

}

Koble Arduino fra strømmen og koble WiiChuck-adapteren til Analog Pins 2-5 på Arduino.

Koble til strømmen igjen og sørg for at Nunchuck -verdiene sendes til Arduinoen din og skrives ut til seriell skjerm. Hvis du ikke ser noen endring i tallene, må du kontrollere at forbindelsene er gode og at Nunchuck fungerer. Jeg brukte noen dager på å fikse programvare før jeg skjønte at ledningen til Nunchuck var internt ødelagt!

Deretter kobler vi alt til Mozzi…

Trinn 2: Bli kjent med Mozzi

Bli kjent med Mozzi
Bli kjent med Mozzi

Først må du laste ned den nyeste versjonen av Mozzi. De drives av donasjoner, så doner hvis du føler deg så tilbøyelig og laster ned biblioteket. Du kan enkelt legge det til i bibliotekene dine ved å velge Sketch> Libraries> Add. ZIP Library… fra Arduino IDE.

Nå kobler vi 3,5 mm hodetelefonkontakten til brødbrettet og Arduino, slik at vi enkelt kan koble til det senere (du kan koble fra Nunchuck og adapter for nå).

  1. Plugg kontakten i nederste høyre hjørne av brettet for å få plass til resten. Jekken skal være 5 pinner bred.
  2. Koble den midterste raden til bakken med en jumper wire.
  3. Koble den øverste raden i kontakten til en tom rad over (rad 10 på bildet). Dette er ledningen som bærer lydsignalet.
  4. Koble Digital Pin ~ 9 til rad 10 også.
  5. Koble Ground på Arduino til bakkeskinnen på brødbrettet.
  6. Du trenger ikke nødvendigvis å bruke motstanden og kondensatoren ennå, men du kan legge merke til et høyt skrik hvis du ikke gjør det. Det fungerer som et lavpassfilter for å eliminere frekvenser over ~ 15 kHz.

Åpne Mozzis Sinewave -skisse i Arduino IDE ved å velge Fil> Eksempler> Mozzi> Grunnleggende> Sinewave. Dette er i hovedsak Mozzis ekvivalent til "Hello World".

Last opp skissen og koble en høyttaler til brødbrettet. Du kan også bruke en summer hvis du ikke har koblet brødbrettet til lydkontakten ennå.

Hvis du ikke hører en konstant A4 (440Hz) fra høyttaleren, må du kontrollere at alle tilkoblingene er gode, og prøv igjen.

Deretter kobler vi Nunchuck til Arduino!

Trinn 3: Sett alt sammen

Sette alt sammen
Sette alt sammen

Nå skal vi bruke rulleverdien fra Nunchuck til å endre frekvensen til en Sinewave.

Fra Arduino IDE Velg Fil> Eksempler> Mozzi> Sensorer> Piezo -frekvens

Vi må legge til noen få linjer i denne koden for å få den til å fungere med Nunchuck. Legg til en inkludering i WiiChuck -biblioteket og instantier et WiiChuck -objekt kalt chuck. Du kan også kommentere erklæringen til PIEZO_PIN eller bare slette den, da vi ikke kommer til å bruke den.

#inkludere "WiiChuck. H"

WiiChuck chuck = WiiChuck (); // const int PIEZO_PIN = 3; // sett den analoge inngangspinnen for piezo

Nå i oppsettet, må vi legge til følgende:

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

og til slutt må vi endre noen få ting i updateControl ():

void updateControl () {

chuck.update (); // få siste nunchuck -data // les piezo // int piezo_value = mozziAnalogRead (PIEZO_PIN); // verdien er 0-1023 int piezo_value = map (Kommenter linjen som angir piezo_value og legg til følgende under:

void updateControl () {chuck.update (); // få siste nunchuck -data // les piezo // int piezo_value = mozziAnalogRead (PIEZO_PIN); // verdien er 0-1023 // Vi trenger ikke linjen ovenfor, men hvorfor ikke kartlegge rullen til samme område? int piezo_value = map (chuck.readRoll (), -180, 180, 0 1023);

Last opp koden og frekvensen skal svare til din Nunchuck's Roll. Prøv å kartlegge den til forskjellige frekvensområder. Hvis du ikke har lagt merke til mer nedenfor i skissen, er verdien fra sensoren multiplisert med 3, så vi spiller for øyeblikket toner fra 0 Hz til omtrent 3000 Hz.

Trinn 4: Siste berøringer

Siste berøringer
Siste berøringer

Nå er du klar til å laste opp den endelige versjonen av koden som jeg har satt sammen fra forrige trinn og noen flere av Mozzis eksempler (Phase_Mod_Envelope, og Control_Gain for å være nøyaktig). For å gjøre livet mitt enklere inkluderte jeg også en fil som heter pitches.h som ganske enkelt definerer frekvensverdier med kjente notatnavn (dvs. NOTE_A4).

Jeg foreslår at du leser Mozzi -dokumentasjonen ettersom mye av koden er rett fra eksemplene bortsett fra koden for Nunchuck.

Her er en lenke til Git -depotet mitt. Alle viktige filer er inkludert bortsett fra Mozzi -biblioteket som du bør få fra nettstedet deres, så det er oppdatert. Last ned WiiMusic.ino og last den opp til enheten din for å høre hvordan den høres ut. Jeg foreslår at du leker med parametrene jeg endrer (endrer kartområdene, dividerer/multipliserer tall osv.), Da det var slik jeg fant den spesielle lyden jeg lette etter.

Speilbilde

Jeg føler ikke at jeg er helt ferdig. Det er ikke å si at jeg ikke er fornøyd med prosjektet eller lyden det lager, men jeg føler at jeg bare dyppet tærne i en ny verden som jeg vil fortsette å utforske, så jeg vil legge til en ny gren fra dette prosjektet mens jeg fortsetter å jobbe.

Likevel, når det er sagt, var dette min første sanne reise inn i verden av mikrokontrollere, så jeg er veldig takknemlig for læringsopplevelsen. De tjue eller så timene jeg brukte på å jobbe med det, ga meg juleideer for meg selv og praktisk talt alle i familien min. Jeg angrer noe på at jeg ikke jobbet med dette prosjektet med noen andre, da jeg kunne ha brukt mange råd og veiledning underveis. Imidlertid lærte jeg personlig mye gjennom forsøkene mine, inkludert tre dager med å trekke håret mitt og prøve å feilsøke et programvareproblem som aldri var der (en intern ledning i Nunchuck hadde gått i stykker).

Det er fortsatt en rekke muligheter fremover. For eksempel vil jeg gjerne bruke Arduino som en type MIDI -grensesnitt mellom en MIDI -kontroller og hodetelefonen ut for å endre parametere for MIDI -notatet, da det er så mange å velge mellom (volum, cutoff, konvoluttfrekvens, pitch bend, modulasjon, vibrato, you name it). Dette vil gi mye mer fleksibilitet, inkludert bytte av parametere med knappene, og ganske enkelt å spille et akkord som ikke er hardkodet til et C ++ - array.

Anbefalt: