Turinys:

„Wii Nunchuck“sintezatorius: 4 žingsniai
„Wii Nunchuck“sintezatorius: 4 žingsniai

Video: „Wii Nunchuck“sintezatorius: 4 žingsniai

Video: „Wii Nunchuck“sintezatorius: 4 žingsniai
Video: Nunchuk module prototype 2024, Liepa
Anonim
„Wii Nunchuck“sintezatorius
„Wii Nunchuck“sintezatorius

„Wii“muzikos pasaulis:

Nusprendžiau pagaliau sujungti savo meilę muzikai su trupučiu programavimo patirties, kurią įgijau per pastaruosius kelerius metus. Nuo tada, kai savo mokykloje pamačiau Todo Machoverio kalbą, man buvo įdomu sukurti savo instrumentą. Jei nesate susipažinę su jo darbu, duokite jam „Google“, nes jis jau daugelį metų stumia muzikos, technologijų ir jų susikirtimo ribas (MIT žiniasklaidos laboratorijos, roko grupė, „Guitar Hero“ir kt.).).

Aš prijungiau savo „Nunchuck“prie „Arduino Uno“, veikiančio „Mozzi“garso sintezės bibliotekoje, nes abu dokumentai buvo gerai dokumentuoti. Kad būtų lengviau, naudoju „WiiChuck“duonos plokštės adapterį, kuris prijungiamas tiesiai prie „Arduino“. Šis gana paprastas projektas atkuria daugybę žingsnių, priklausomai nuo žingsnio (YZ-plokštumos), išmatuoto naudojant „Nunchuck“akselerometrą. Vairasvirtės Y reikšmė susieta su stiprinimu, kad žingsnis būtų garsesnis arba minkštesnis. Jis taip pat keičia akordus, priklausomai nuo Z mygtuko, ir įjungia fazės moduliacijos voką, kai paspaudžiamas C mygtukas. Tada voko dažnis keičiamas ritiniu, išmatuotu iš „Nunchuck“(paveikslėlis pasukamas rankenėle).

Ištekliai:

  • 1 x „Arduino Uno“
  • 1 x „Wii Nunchuck“
  • 1 x „WiiChuck“adapteris
  • 1 x su duonos lenta suderinamas 3,5 mm moteriškas stereo lizdas
  • 1 x 3,5 mm garso kabelis
  • 1 x tam tikras garsiakalbis (iš pradžių galite prijungti garso signalą, kad jį išbandytumėte
  • 4-5 įvairių spalvų laidai

Neprivaloma, bet rekomenduojama:

  • 1 x 330 omų rezistorius
  • 1 x.1 uF kondensatorius

1 veiksmas: prijunkite „NunChuck“

„NunChuck“prijungimas
„NunChuck“prijungimas
„NunChuck“prijungimas
„NunChuck“prijungimas
„NunChuck“prijungimas
„NunChuck“prijungimas

Nukopijuokite/įklijuokite „WiiChuck“klasę iš „Arduino Playground“. Mums reikės versijos su PWR ir GND kaiščių deklaracija. Išsaugokite jį kaip „WiiChuck.h“ir laikykite tame pačiame kataloge kaip ir jūsų projektas.

Dabar nukopijuokite/įklijuokite tai į „Arduino IDE“ir įkelkite.

#įtraukti „Wire.h“//#apima „WiiChuckClass.h“// greičiausiai jo „WiiChuck.h“mums visiems. #include "WiiChuck.h" WiiChuck chuck = WiiChuck ();

void setup () {

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

void loop () {

vėlavimas (20); chuck.update ();

Serial.print (chuck.readPitch ());

Serial.print (","); Serial.print (chuck.readRoll ()); Serial.print (",");

Serial.print (chuck.readJoyX ());

Serial.print (","); Serijinis atspaudas (chuck.readJoyY ()); Serial.print (",");

if (chuck.buttonZ) {

Serial.print („Z“); } else {Serial.print ("-"); }

Serial.print (",");

// ne funkcija // if (chuck.buttonC ()) {

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

Serial.println ();

}

Atjunkite „Arduino“nuo maitinimo ir prijunkite „WiiChuck“adapterį prie „Arduino“analoginių kaiščių 2-5.

Vėl prijunkite prie maitinimo ir įsitikinkite, kad „Nunchuck“vertės siunčiamos į „Arduino“ir spausdinamos į serijinį monitorių. Jei nematote jokių skaičių pokyčių, įsitikinkite, kad ryšiai yra geri ir kad „Nunchuck“veikia. Praleidau kelias dienas bandydamas pataisyti programinę įrangą, kol supratau, kad mano „Nunchuck“viela buvo pažeista!

Toliau viską prijungsime prie Mozzi…

2 žingsnis: Susipažinkite su Mozzi

Susipažinimas su Mozzi
Susipažinimas su Mozzi

Pirmiausia turėsite atsisiųsti naujausią „Mozzi“versiją. Juos skatina aukos, todėl paaukokite, jei jaučiatės taip linkę, ir atsisiųskite biblioteką. Galite lengvai ją pridėti prie savo bibliotekų pasirinkę „Arduino IDE“eskizas> Bibliotekos> Pridėti. ZIP biblioteką….

Dabar mes prijungsime 3,5 mm ausinių lizdą prie duonos lentos ir „Arduino“, kad vėliau galėtume lengvai prisijungti prie jo (kol kas galite atjungti „Nunchuck“ir adapterį).

  1. Prijunkite lizdą prie apatinio dešiniojo lentos kampo, kad liktų vietos likusiems. Lizdas turi būti 5 kaiščių pločio.
  2. Prijunkite vidurinę eilę prie žemės su trumpikliu.
  3. Prijunkite viršutinę lizdo eilę prie tuščios eilės aukščiau (10 eilutė paveikslėlyje). Tai laidas, kuriuo perduodamas garso signalas.
  4. Skaitmeninį kaištį ~ 9 taip pat prijunkite prie 10 eilutės.
  5. Prijunkite „Arduino“pagrindą prie duonos lentos įžeminimo bėgelio.
  6. Jums dar nebūtinai reikia naudoti rezistorių ir kondensatorių, tačiau, jei to nepadarysite, galite pastebėti didelį triukšmą. Jis veikia kaip žemo dažnio filtras, pašalinantis aukštesnius nei ~ 15 kHz dažnius.

Atidarykite „Mozzi“„Sinewave“eskizą „Arduino IDE“pasirinkdami Failas> Pavyzdžiai> Mozzi> Pagrindai> „Sinewave“. Tai iš esmės yra Mozzi „Hello World“atitikmuo.

Įkelkite eskizą ir prijunkite garsiakalbį prie duonos lentos. Taip pat galite naudoti garso signalą, jei dar neprijungėte duonos lentos prie garso lizdo.

Jei iš garsiakalbio negirdite nuolatinio A4 (440 Hz), įsitikinkite, kad visi ryšiai yra geri, ir bandykite dar kartą.

Toliau mes prijungsime „Nunchuck“prie „Arduino“!

3 žingsnis: sudėkite viską kartu

Viską sujungti
Viską sujungti

Dabar mes naudosime ritinio vertę iš „Nunchuck“, kad pakeistume „Sinewave“dažnį.

Iš „Arduino IDE“pasirinkite Failas> Pavyzdžiai> Mozzi> Jutikliai> Pjezo dažnis

Prie šio kodo turėsime pridėti keletą eilučių, kad jis veiktų su „Nunchuck“. Įtraukite įtraukimą į „WiiChuck“biblioteką ir parodykite „WiiChuck“objektą, pavadintą „Chuck“. Taip pat galite pakomentuoti PIEZO_PIN deklaraciją arba tiesiog ją ištrinti, nes mes jos nenaudosime.

#įtraukti „WiiChuck. H“

„WiiChuck“griebtuvas = „WiiChuck“(); // const int PIEZO_PIN = 3; // nustatykite pjezo analoginį įvesties kaištį

Dabar sąrankos metu turėsime pridėti šiuos dalykus:

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

ir galiausiai turėsime pakeisti keletą dalykų atnaujinime Control: ():

void updateControl () {

chuck.update (); // gauti naujausius nunchuck duomenis // skaityti pjezo // int piezo_value = mozziAnalogRead (PIEZO_PIN); // vertė yra 0-1023 int piezo_value = map (Pakomentuokite eilutę, kuri nustato piezo_value, ir po juo pridėkite:

void updateControl () {chuck.update (); // gauti naujausius nunchuck duomenis // skaityti pjezo // int piezo_value = mozziAnalogRead (PIEZO_PIN); // vertė yra 0-1023 // Mums nereikia aukščiau esančios eilutės, bet kodėl nenurodžius ritinio į tą patį diapazoną? int piezo_value = žemėlapis (chuck.readRoll (), -180, 180, 0 1023);

Įkelkite kodą ir dažnis turi atitikti jūsų „Nunchuck's Roll“. Pabandykite susieti jį su skirtingais dažnių diapazonais. Jei nepastebėjote toliau pateikto eskizo, jutiklio vertė padauginama iš 3, todėl šiuo metu grojame tonus nuo 0 Hz iki maždaug 3000 Hz.

4 žingsnis: paskutiniai prisilietimai

Paskutiniai prisilietimai
Paskutiniai prisilietimai

Dabar esate pasiruošę įkelti galutinę kodo versiją, kurią surinkau iš ankstesnio veiksmo, ir dar keletą Mozzi pavyzdžių (tiksliau - „Phase_Mod_Envelope“ir „Control_Gain“). Kad mano gyvenimas būtų lengvesnis, aš taip pat įtraukiau failą pavadinimu pitches.h, kuriame tiesiog apibrėžiamos dažnio vertės su pažįstamais užrašų pavadinimais (t. Y. NOTE_A4).

Aš siūlau perskaityti „Mozzi“dokumentaciją, nes didžioji dalis kodo yra tiesiogiai iš pavyzdžių, išskyrus „Nunchuck“kodą.

Čia yra nuoroda į mano „Git“saugyklą. Įtraukti visi svarbūs failai, išskyrus „Mozzi“biblioteką, kurią turėtumėte gauti iš jų svetainės, kad ji būtų atnaujinta. Atsisiųskite „WiiMusic.ino“ir įkelkite jį į savo įrenginį, kad išgirstumėte, kaip tai skamba. Siūlau pažaisti su mano keičiamais parametrais (pakeisti žemėlapių diapazonus, padalyti/padauginti skaičius ir pan.), Nes taip radau konkretų ieškomą garsą.

Atspindys

Nesijaučiu visiškai baigta. Tai nereiškia, kad nesu patenkinta projektu ar jo skleidžiamu garsu, bet jaučiuosi taip, lyg ką tik įmerkiau kojų pirštus į naują pasaulį, kurį norėčiau toliau tyrinėti, todėl tęsdamas šį projektą pridėsiu naują šaką dirbti.

Vis dėlto tai buvo mano pirmoji tikra kelionė į mikrovaldiklių pasaulį, todėl esu labai dėkingas už mokymosi patirtį. Maždaug dvidešimt valandų, kurias praleidau dirbdamas, davė man kalėdinių idėjų sau ir praktiškai kiekvienam šeimos nariui. Aš šiek tiek apgailestauju, kad nedirbau prie šio projekto su kuo nors kitu, nes galėjau pasinaudoti daugybe patarimų ir patarimų. Tačiau aš asmeniškai daug išmokau per savo bandymus, įskaitant tris dienas, kai traukiau plaukus, bandydamas derinti programinės įrangos problemą, kurios niekada nebuvo (nutrūko vidinė viela „Nunchuck“).

Vis dar yra daug galimybių judėti į priekį. Pvz., Norėčiau naudoti „Arduino“kaip MIDI sąsajos tipą tarp MIDI valdiklio ir ausinių, kad pakeistumėte MIDI užrašo parametrus, nes yra tiek daug pasirinkimų (garsumas, riba, vokų dažnis, pakreipimas), moduliacija, vibrato, jūs tai vadinate). Tai suteiktų daug daugiau lankstumo, įskaitant parametrų perjungimą mygtukais ir tiesiog grojimą akordu, kuris nėra užkoduotas į C ++ masyvą.

Rekomenduojamas: