Innehållsförteckning:

Wii Nunchuck Synthesizer: 4 steg
Wii Nunchuck Synthesizer: 4 steg

Video: Wii Nunchuck Synthesizer: 4 steg

Video: Wii Nunchuck Synthesizer: 4 steg
Video: DIY Animatronic Eye! 2024, November
Anonim
Wii Nunchuck Synthesizer
Wii Nunchuck Synthesizer

The World of Wii Music:

Jag bestämde mig för att äntligen kombinera min kärlek till musik med den lilla programmeringserfarenhet jag har fått under de senaste åren. Jag har varit intresserad av att skapa ett eget instrument sedan jag såg ett föredrag av Tod Machover på min skola. Om du inte är bekant med hans arbete, ge honom en Google, eftersom han har skjutit gränserna för musik, teknik och deras korsningar i ett antal år nu (MIT media labs, Rock Band, Guitar Hero etc. …).

Jag har anslutit min Nunchuck till en Arduino Uno som körs på Mozzis ljudsyntesbibliotek på grund av den väl dokumenterade användningen av båda online. För enkelhetens skull använder jag en WiiChuck -bräda -adapter som ansluts direkt till Arduino. Detta relativt enkla projekt spelar en rad platser beroende på Pitch (YZ-Plane) mätt från Nunchuckens accelerometer. Joystickens Y -värde mappas till förstärkningen för att göra tonhöjden högre eller mjukare. Det ändrar också ackord beroende på Z-knappen och slår på ett fasmoduleringshölje när C-knappen trycks in. Kuvertets frekvens ändras sedan med rullen mätt från Nunchuck (bilden vrider en ratt).

Resurser:

  • 1 x Arduino Uno
  • 1 x Wii Nunchuck
  • 1 x WiiChuck -adapter
  • 1 x brödbräda kompatibel 3,5 mm kvinnlig stereokontakt
  • 1 x 3,5 mm ljudkabel
  • 1 x högtalare av något slag (Du kan först koppla in en summer för att testa den
  • 4-5 trådar i olika färger

Valfritt men rekommenderas:

  • 1 x 330 Ohm motstånd
  • 1 x.1 uF kondensator

Steg 1: Anslut din NunChuck

Ansluter din NunChuck
Ansluter din NunChuck
Ansluter din NunChuck
Ansluter din NunChuck
Ansluter din NunChuck
Ansluter din NunChuck

Kopiera/klistra in WiiChuck -klassen från Arduino Playground. Vi behöver versionen med deklaration av PWR- och GND -stift. Spara den som WiiChuck.h och förvara den i samma katalog som ditt projekt.

Nu kopiera/klistra in följande i Arduino IDE och ladda upp det.

#inkludera "Wire.h" //#inkludera "WiiChuckClass.h" // troligtvis WiiChuck.h för oss andra. #include "WiiChuck.h" WiiChuck chuck = WiiChuck ();

void setup () {

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

void loop () {

fördröjning (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"); } annat {Serial.print ("-"); }

Serial.print (",");

// inte en funktion // if (chuck.buttonC ()) {

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

Serial.println ();

}

Koppla bort din Arduino från strömmen och anslut din WiiChuck-adapter till Analog Pins 2-5 på din Arduino.

Anslut till strömmen igen och se till att Nunchuck -värdena skickas till din Arduino och skrivs ut till seriemonitorn. Om du inte ser någon förändring i siffrorna, se till att dina anslutningar är bra och att du är Nunchuck fungerar. Jag tillbringade några dagar med att försöka fixa programvara innan jag insåg att min Nunchuck -tråd var internt trasig!

Därefter kommer vi att ansluta allt till Mozzi…

Steg 2: Lär känna Mozzi

Lär känna Mozzi
Lär känna Mozzi

Först måste du ladda ner den senaste versionen av Mozzi. De drivs av donationer, så donera om du känner dig så benägen och ladda ner biblioteket. Du kan enkelt lägga till det i dina bibliotek genom att välja Sketch> Libraries> Add. ZIP Library … från Arduino IDE.

Nu ansluter vi 3,5 mm hörlursuttaget till brödbrädan och Arduino så att vi enkelt kan ansluta till det senare (du kan koppla ur Nunchuck och adapter för tillfället).

  1. Anslut din Jack till det nedre högra hörnet av brädet för att få plats med resten. Domkraften ska vara 5 stift bred.
  2. Anslut den mellersta raden till marken med en bygelkabel.
  3. Anslut domkraftens översta rad till en tom rad ovan (rad 10 på bilden). Detta är tråden som bär ljudsignalen.
  4. Anslut Digital Pin ~ 9 till rad 10 också.
  5. Anslut Ground på din Arduino till markskenan på panelen.
  6. Du behöver inte nödvändigtvis använda motståndet och kondensatorn än, men du kan märka ett högt pip om du inte gör det. Det fungerar som ett lågpassfilter för att eliminera frekvenser över ~ 15 kHz.

Öppna Mozzis Sinewave -skiss i Arduino IDE genom att välja Arkiv> Exempel> Mozzi> Grunder> Sinewave. Detta är i huvudsak Mozzis motsvarighet till "Hello World".

Ladda upp skissen och anslut en högtalare till panelen. Du kan också använda en summer om du inte har anslutit brödbrädan till ljuduttaget än.

Om du inte hör en konstant A4 (440Hz) från högtalaren, se till att alla dina anslutningar är bra och försök igen.

Därefter kommer vi att ansluta Nunchuck till Arduino!

Steg 3: Sätta ihop allt

Få alltid att falla på plats
Få alltid att falla på plats

Nu ska vi använda rullevärdet från Nunchuck för att ändra frekvensen för en Sinewave.

Från Arduino IDE Välj Arkiv> Exempel> Mozzi> Sensorer> Piezo -frekvens

Vi måste lägga till några rader i den här koden för att få den att fungera med Nunchuck. Lägg till en inkludering i WiiChuck -biblioteket och instansiera ett WiiChuck -objekt som heter chuck. Du kan också kommentera PIEZO_PIN -deklarationen eller bara radera den eftersom vi inte kommer att använda den.

#inkludera "WiiChuck. H"

WiiChuck chuck = WiiChuck (); // const int PIEZO_PIN = 3; // ställ in den analoga ingångsstiften för piezoen

Nu i installationen måste vi lägga till följande:

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

och slutligen måste vi ändra några saker i updateControl ():

void updateControl () {

chuck.update (); // få senaste nunchuck -data // läs piezo // int piezo_value = mozziAnalogRead (PIEZO_PIN); // värdet är 0-1023 int piezo_value = map (Kommentera raden som anger piezo_value och lägg till följande nedan:

void updateControl () {chuck.update (); // få senaste nunchuck -data // läs piezo // int piezo_value = mozziAnalogRead (PIEZO_PIN); // värdet är 0-1023 // Vi behöver inte raden ovan men varför inte mappa rullen till samma intervall? int piezo_value = map (chuck.readRoll (), -180, 180, 0 1023);

Ladda upp koden och frekvensen ska motsvara din Nunchuck's Roll. Prova att mappa den till olika frekvensområden. Om du inte har märkt längre ner i skissen värdet från sensorn multipliceras med 3 så vi spelar för närvarande toner från 0 Hz till cirka 3000 Hz.

Steg 4: Sista handen

Sista handen
Sista handen

Nu är du redo att ladda upp den slutliga versionen av koden som jag har satt ihop från föregående steg och några fler av Mozzis exempel (Phase_Mod_Envelope och Control_Gain för att vara exakt). För att göra mitt liv enklare inkluderade jag också en fil som heter pitches.h som helt enkelt definierar frekvensvärden med bekanta notnamn (dvs. NOTE_A4).

Jag föreslår att du läser Mozzi -dokumentationen eftersom mycket av koden är direkt från exemplen förutom koden för Nunchuck.

Här är en länk till mitt Git -arkiv. Alla viktiga filer ingår förutom Mozzi -biblioteket som du bör hämta från deras webbplats så att det är uppdaterat. Ladda ner WiiMusic.ino och ladda upp den till din enhet för att höra hur det låter. Jag föreslår att du leker med parametrarna som jag ändrar (ändrar kartintervallen, dividerar/multiplicerar nummer, etc. …) eftersom det var så jag hittade det speciella ljud jag letade efter.

Reflexion

Jag känner inte att jag är riktigt färdig. Därmed inte sagt att jag inte är nöjd med projektet eller ljudet det ger, men jag känner att jag bara doppade tårna i en ny värld som jag vill fortsätta utforska så jag kommer att lägga till en ny gren från detta projekt när jag fortsätter att jobba.

Ändå är detta sagt min första riktiga resa in i mikrokontrollörernas värld så jag är mycket tacksam för inlärningsupplevelsen. De tjugo timmar jag arbetade med det gav mig julidéer för mig själv och praktiskt taget alla i min familj. Jag ångrar lite att jag inte arbetade med det här projektet med någon annan eftersom jag kunde ha använt massor av råd och vägledning under vägen. Men personligen lärde jag mig mycket genom mina prövningar, inklusive tre dagar med att dra ut håret och försöka felsöka ett mjukvaruproblem som aldrig fanns där (en intern tråd i Nunchuck hade gått sönder).

Det finns fortfarande ett antal möjligheter framåt. Till exempel skulle jag älska att använda Arduino som en typ av MIDI -gränssnitt mellan en MIDI -kontroller och hörlurarna ut för att ändra parametrar för MIDI -noten eftersom det finns så många att välja mellan (volym, cutoff, kuvertfrekvens, pitch bend, modulering, vibrato, you name it). Detta skulle möjliggöra mycket mer flexibilitet, inklusive att byta parametrar med knapparna, och helt enkelt spela ett ackord som inte är hårdkodat i en C ++ - array.

Rekommenderad: