Innehållsförteckning:
Video: Wii Nunchuck Synthesizer: 4 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:38
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
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
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).
- 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.
- Anslut den mellersta raden till marken med en bygelkabel.
- Anslut domkraftens översta rad till en tom rad ovan (rad 10 på bilden). Detta är tråden som bär ljudsignalen.
- Anslut Digital Pin ~ 9 till rad 10 också.
- Anslut Ground på din Arduino till markskenan på panelen.
- 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
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
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:
Oh Christmas Tree (Oh Tannenbaum) With MakeyMakey on the Water Synthesizer: 7 Steg
Oh Christmas Tree (Oh Tannenbaum) With MakeyMakey on the Water Synthesizer: Denna julsång är bra att spela med makeymakey på watersynthesizer. Du kan spela den med nio toner. För stämningen är det skönt att ha lite julbelysning :-) Njut
Arpeggiating Synthesizer (Mosquito I): 6 steg
Arpeggiating Synthesizer (Mosquito I): Mosquito I är en liten arpeggiating synthesizer som använder en Arduino Nano och Mozzi ljudsyntesbibliotek. Den kan spela över tjugo 8-stegssekvenser men du kan lägga till så många anpassade sekvenser som du vill. Det är relativt enkelt att installera och gör inte
Modular Synthesizer Power Supply: 10 Steg (med bilder)
Modular Synthesizer Power Supply: Om du bygger en modulär synthesizer är en sak du definitivt behöver en strömförsörjning. De flesta modulära synteser kräver ett system med dubbla skenor (0V, +12V och -12V är typiska), och det kan också vara praktiskt att ha en 5V -skena också om du är planerad
Nunchuck Controlled Telescope Focuser: 6 steg (med bilder)
Nunchuck Controlled Telescope Focuser: Om du någonsin försökt använda ditt teleskop med relativt höga förstoringar (> 150x) har du förmodligen märkt hur manuell justering av din teleskopfokuserare kan leda till en verklig smärta i nacken.
Trådlös Wii Nunchuck -kontrollerad Arduino: 7 steg
Trådlös Wii Nunchuck -kontrollerad Arduino: Använd en helt omodifierad trådlös Wii & nbspuck Nunchuck som styrsystem för alla Arduino -baserade projekt. Inga extra radiosändare/mottagarpar etc. Denna instruerbara förutsätter viss erfarenhet av Arduino mikrokontroller. Radien