Indholdsfortegnelse:

Wii Nunchuck Synthesizer: 4 trin
Wii Nunchuck Synthesizer: 4 trin

Video: Wii Nunchuck Synthesizer: 4 trin

Video: Wii Nunchuck Synthesizer: 4 trin
Video: Nintendo BANNED these Wii accessories 2024, Juli
Anonim
Wii Nunchuck Synthesizer
Wii Nunchuck Synthesizer

The World of Wii Music:

Jeg besluttede mig for endelig at kombinere min kærlighed til musik med den lille smule programmeringserfaring, jeg har fået i løbet af de sidste par år. Jeg har været interesseret i at skabe et eget instrument lige siden jeg så en tale af Tod Machover på min skole. Hvis du ikke er bekendt med hans arbejde, så giv ham en Google, da han har skubbet grænserne for musik, teknologi og deres skæringer i en årrække nu (MIT medielaboratorier, Rock Band, Guitar Hero osv…).

Jeg har forbundet min Nunchuck til en Arduino Uno, der kører på Mozzi lydsyntesebiblioteket på grund af den veldokumenterede brug af begge online. For nemheds skyld bruger jeg en WiiChuck -brødbrætadapter, der kan sættes direkte i Arduino. Dette relativt enkle projekt spiller en række pladser afhængigt af Pitch (YZ-Plane) målt fra Nunchuckens accelerometer. Joystickets Y -værdi knyttes til forstærkningen for at gøre banen højere eller blødere. Det skifter også akkorder afhængigt af Z-knappen og tænder en fasemoduleringskonvolut, når der trykkes på C-knappen. Konvolutens frekvens ændres derefter med rullen målt fra Nunchuck (billedet drejer på en knap).

Ressourcer:

  • 1 x Arduino Uno
  • 1 x Wii Nunchuck
  • 1 x WiiChuck -adapter
  • 1 x brødbrætskompatibelt 3,5 mm hunstikstik
  • 1 x 3,5 mm lydkabel
  • 1 x en slags højttaler (Du kan først tilslutte en summer til at teste den
  • 4-5 ledninger i forskellige farver

Valgfrit, men anbefales:

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

Trin 1: Tilslutning af din NunChuck

Tilslutning af din NunChuck
Tilslutning af din NunChuck
Tilslutning af din NunChuck
Tilslutning af din NunChuck
Tilslutning af din NunChuck
Tilslutning af din NunChuck

Kopiér/indsæt WiiChuck -klassen fra Arduino Playground. Vi skal bruge versionen med erklæringen om PWR- og GND -ben. Gem det som WiiChuck.h, og gem det i samme bibliotek som dit projekt.

Kopier/indsæt nu følgende i Arduino IDE og upload det.

#include "Wire.h" //#include "WiiChuckClass.h" // sandsynligvis dens WiiChuck.h for os andre. #include "WiiChuck.h" WiiChuck chuck = WiiChuck ();

ugyldig opsætning () {

// 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"); } ellers {Serial.print ("-"); }

Serial.print (",");

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

hvis (chuck.buttonC) {Serial.print ("C"); } ellers {Serial.print ("-"); }

Serial.println ();

}

Afbryd din Arduino fra strømmen, og tilslut din WiiChuck-adapter til Analog Pins 2-5 på din Arduino.

Tilslut til strømmen igen, og sørg for, at Nunchuck -værdierne sendes til din Arduino og udskrives på den serielle skærm. Hvis du ikke ser nogen ændring i tallene, skal du sørge for, at dine forbindelser er gode, og at du er Nunchuck fungerer. Jeg brugte et par dage på at prøve at reparere software, før jeg indså, at min Nunchuck -ledning var internt brudt!

Dernæst vil vi tilslutte alt til Mozzi…

Trin 2: Lær Mozzi at kende

Lær Mozzi at kende
Lær Mozzi at kende

Først skal du downloade den nyeste version af Mozzi. De er drevet af donationer, så doner, hvis du føler dig så tilbøjelig og download biblioteket. Du kan nemt tilføje det til dine biblioteker ved at vælge Skitse> Biblioteker> Tilføj. ZIP -bibliotek … fra Arduino IDE.

Nu tilslutter vi 3,5 mm hovedtelefonstikket til brødbrættet og Arduino, så vi let kan tilslutte det senere (du kan tage Nunchuck og adapteren ud af stikkontakten for nu).

  1. Sæt din Jack i nederste højre hjørne af brættet for at få plads til resten. Stikket skal være 5 ben bredt.
  2. Forbind den midterste række til jorden med en jumper wire.
  3. Tilslut den øverste række af donkraften til en tom række ovenfor (række 10 på billedet). Dette er ledningen, der bærer lydsignalet.
  4. Tilslut Digital Pin ~ 9 også til række 10.
  5. Tilslut Ground på din Arduino til jordskinnen på brødbrættet.
  6. Du behøver ikke nødvendigvis at bruge modstanden og kondensatoren endnu, men du vil muligvis bemærke en høj lyd, hvis du ikke gør det. Det fungerer som et lavpasfilter for at eliminere frekvenser over ~ 15 kHz.

Åbn Mozzis Sinewave -skitse i Arduino IDE ved at vælge Filer> Eksempler> Mozzi> Grundlæggende> Sinewave. Dette er i det væsentlige Mozzis ækvivalent til "Hello World".

Upload skitsen, og tilslut en højttaler til brødbrættet. Du kan også bruge en summer, hvis du ikke har tilsluttet brødbrættet til lydstikket endnu.

Hvis du ikke hører en konstant A4 (440Hz) fra din højttaler, skal du sørge for, at alle dine forbindelser er gode, og prøv igen.

Dernæst forbinder vi Nunchuck med Arduino!

Trin 3: Sæt det hele sammen

Samler det hele
Samler det hele

Nu skal vi bruge rulleværdien fra Nunchuck til at ændre frekvensen af en Sinewave.

Fra Arduino IDE Vælg Filer> Eksempler> Mozzi> Sensorer> Piezo -frekvens

Vi bliver nødt til at tilføje et par linjer til denne kode for at få den til at fungere med Nunchuck. Føj en inkluder til WiiChuck -biblioteket, og instantier et WiiChuck -objekt kaldet chuck. Du kan også kommentere erklæringen om PIEZO_PIN eller bare slette den, da vi ikke vil bruge den.

#inkluder "WiiChuck. H"

WiiChuck chuck = WiiChuck (); // const int PIEZO_PIN = 3; // indstil den analoge indgangsstift til piezoen

Nu i opsætningen skal vi tilføje følgende:

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

og endelig bliver vi nødt til at ændre et par ting i updateControl ():

void updateControl () {

chuck.update (); // få de seneste nunchuck -data // læs piezo // int piezo_value = mozziAnalogRead (PIEZO_PIN); // værdien er 0-1023 int piezo_value = map (Kommenter linjen, der sætter piezo_value, og tilføj følgende nedenunder:

void updateControl () {chuck.update (); // få de seneste nunchuck -data // læs piezo // int piezo_value = mozziAnalogRead (PIEZO_PIN); // værdi er 0-1023 // Vi behøver ikke linjen ovenfor, men hvorfor ikke kortlægge rullen til det samme område? int piezo_value = map (chuck.readRoll (), -180, 180, 0 1023);

Upload koden, og frekvensen skal svare til din Nunchuck's Roll. Prøv at kortlægge den til forskellige frekvensområder. Hvis du ikke har bemærket yderligere nedenfor i skitsen, er værdien fra sensoren ganget med 3, så vi spiller i øjeblikket toner fra 0 Hz til omkring 3000 Hz.

Trin 4: Sidste hånd

Sidste hånd
Sidste hånd

Nu er du klar til at uploade den sidste version af koden, som jeg har samlet sammen fra det foregående trin og et par flere af Mozzis eksempler (Phase_Mod_Envelope, og Control_Gain for at være præcis). For at gøre mit liv lettere inkluderede jeg også en fil kaldet pitches.h, som simpelthen definerer frekvensværdier med velkendte notenavne (dvs. NOTE_A4).

Jeg foreslår, at du læser Mozzi -dokumentationen, da meget af koden er direkte fra eksemplerne bortset fra koden til Nunchuck.

Her er et link til mit Git -lager. Alle vigtige filer er inkluderet bortset fra Mozzi -biblioteket, som du bør få fra deres websted, så det er opdateret. Download WiiMusic.ino og upload det til din enhed for at høre, hvordan det lyder. Jeg foreslår, at du leger med de parametre, jeg ændrer (ændrer kortområderne, dividerer/multiplicerer tal osv.), Da det var sådan jeg fandt den særlige lyd, jeg ledte efter.

Afspejling

Jeg føler ikke, at jeg er helt færdig. Det er ikke at sige, at jeg ikke er tilfreds med projektet eller lyden, det giver, men jeg føler, at jeg lige har dyppet tæerne i en ny verden, som jeg vil blive ved med at udforske, så jeg vil tilføje en ny gren fra dette projekt, når jeg fortsætter at arbejde.

Alligevel, når det er sagt, var dette min første sande rejse ind i mikrokontrollernes verden, så jeg er meget taknemmelig for læringsoplevelsen. De omkring tyve timer, jeg brugte på at arbejde med det, gav mig juleideer til mig selv og praktisk talt alle i min familie. Jeg fortryder noget, at jeg ikke arbejdede på dette projekt med en anden, da jeg kunne have brugt masser af råd og vejledning undervejs. Imidlertid lærte jeg personligt meget gennem mine forsøg, herunder tre dage med at trække mit hår ud i forsøget på at fejlsøge et softwareproblem, der aldrig var der (en intern ledning i Nunchuck var gået i stykker).

Der er stadig en række muligheder fremad. For eksempel ville jeg elske at bruge Arduino som en type MIDI -grænseflade mellem en MIDI -controller og hovedtelefonen ud for at ændre parametre for MIDI -sedlen, da der er så mange at vælge imellem (volumen, cutoff, kuvertfrekvens, pitch bend, modulering, vibrato, you name it). Dette giver mulighed for meget mere fleksibilitet, herunder skift af parametre med knapperne, og simpelthen at spille en akkord, der ikke er hardcoded i et C ++ - array.

Anbefalede: