Innholdsfortegnelse:
- Trinn 1: Koble til NunChuck
- Trinn 2: Bli kjent med Mozzi
- Trinn 3: Sett alt sammen
- Trinn 4: Siste berøringer
Video: Wii Nunchuck Synthesizer: 4 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:21
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
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
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å).
- Plugg kontakten i nederste høyre hjørne av brettet for å få plass til resten. Jekken skal være 5 pinner bred.
- Koble den midterste raden til bakken med en jumper wire.
- Koble den øverste raden i kontakten til en tom rad over (rad 10 på bildet). Dette er ledningen som bærer lydsignalet.
- Koble Digital Pin ~ 9 til rad 10 også.
- Koble Ground på Arduino til bakkeskinnen på brødbrettet.
- 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
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
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:
Arpeggiating Synthesizer (Mosquito I): 6 trinn
Arpeggiating Synthesizer (Mosquito I): Mosquito I er en liten arpeggiating synthesizer som bruker en Arduino Nano og Mozzi lydsyntese bibliotek. Den kan spille over tjue 8-trinnssekvenser, men du kan legge til så mange egendefinerte sekvenser du vil. Det er relativt enkelt å sette opp og ikke
Eurorack Synthesizer strømforsyning: 8 trinn
Eurorack Synthesizer Strømforsyning: Velkommen til min Instructable om hvordan du lager en DIY strømforsyning for en Eurorack synthesizer. Vær oppmerksom på at min kunnskap om strømforsyningsdesign og Eurorack synthesizer er uten sidestykke. Ta rådene mine nøye. Jeg vil ikke holdes ansvarlig for
Keytar Hero (ved hjelp av en Wii -gitarkontroller som en synthesizer): 7 trinn (med bilder)
Keytar Hero (Bruke en Wii Guitar Controller som en synthesizer): Guitar Hero -spillene var alle raseri for et dusin år siden, så det vil sikkert være mange gamle gitarkontrollere som ligger og samler støv. De har mange knapper, knapper og spaker, så hvorfor ikke bruke dem igjen? Gitarkontrollen
Nunchuck kontrollert teleskopfokuser: 6 trinn (med bilder)
Nunchuck -kontrollert teleskopfokuser: Hvis du noen gang har prøvd å bruke teleskopet med relativt høye forstørrelser (> 150x), har du sannsynligvis lagt merke til hvordan manuell justering av teleskopfokuseren kan føre til at du virkelig får smerter i nakken. Dette er fordi selv den lettere justeringen du
Trådløs Wii Nunchuck -kontrollert Arduino: 7 trinn
Trådløs Wii Nunchuck -kontrollert Arduino: Bruk en helt umodifisert trådløs Wii & Nbspuck som et kontrollsystem for ethvert Arduino -basert prosjekt. Ingen ekstra radiosender/mottakerpar etc. Denne instruksen forutsetter viss erfaring med Arduino mikrokontroller. Radien