Wii Nunchuck սինթեզատոր `4 քայլ
Wii Nunchuck սինթեզատոր `4 քայլ
Wii Nunchuck սինթեզատոր
Wii Nunchuck սինթեզատոր

Wii երաժշտության աշխարհը

Ես որոշեցի վերջապես համատեղել իմ սերը դեպի երաժշտությունը վերջին մի քանի տարիների ընթացքում ձեռք բերած ծրագրավորման մի փոքր փորձի հետ: Ինձ հետաքրքրում էր իմ սեփական գործիքը ստեղծել այն ժամանակվանից, երբ տեսա Թոդ Մաչովերի ելույթը իմ դպրոցում: Եթե դուք անծանոթ եք նրա աշխատանքին, տվեք նրան Google, քանի որ նա արդեն մի քանի տարի է, ինչ մղում է երաժշտության, տեխնոլոգիայի, ինչպես նաև դրանց հատման սահմանները (MIT մեդիա լաբորատորիաներ, ռոք խումբ, կիթառի հերոս և այլն):):

Ես իմ Nunchuck- ը միացրել եմ Arduino Uno- ին, որն աշխատում է Mozzi ձայնային սինթեզի գրադարանում `երկուսի առցանց լավ փաստաթղթավորված օգտագործման շնորհիվ: Հեշտության համար ես օգտագործում եմ WiiChuck տախտակի ադապտեր, որը միանում է անմիջապես Arduino- ին: Այս համեմատաբար պարզ նախագիծը խաղում է մի շարք խաղադաշտեր ՝ կախված Նունչուկի արագացուցիչից չափված Չափից (YZ-Plane): Joyոյսթիկի Y արժեքը քարտեզագրվում է շահույթին `բարձրությունը դարձնելու համար ավելի բարձր կամ մեղմ: Այն նաև փոխում է ակորդները ՝ կախված Z- կոճակից և միացնում փուլային մոդուլյացիայի ծրարը, երբ C- կոճակը սեղմվում է: Theրարի հաճախականությունը այնուհետև փոփոխվում է Նունչուկից չափվող գլանափաթեթով (նկարը պտտվում է բռնակով):

Պաշարներ:

  • 1 x Arduino Uno
  • 1 x Wii Nunchuck
  • 1 x WiiChuck ադապտեր
  • 1 x breadboard- ի հետ համատեղելի 3.5 մմ կանացի ստերեո խցիկ
  • 1 x 3.5 մմ աուդիո մալուխ
  • 1 x ինչ -որ տեսակի բարձրախոս (ստուգելու համար սկզբում կարող եք միացնել ազդանշանային ազդանշանը)
  • 4-5 տարբեր գույնի լարեր

Լրացուցիչ, բայց խորհուրդ է տրվում

  • 1 x 330 Օմ դիմադրություն
  • 1 x.1 uF կոնդենսատոր

Քայլ 1. Միացնելով ձեր NunChuck- ին

Միացնելով ձեր NunChuck- ին
Միացնելով ձեր NunChuck- ին
Միացնելով ձեր NunChuck- ին
Միացնելով ձեր NunChuck- ին
Միացնելով ձեր NunChuck- ին
Միացնելով ձեր NunChuck- ին

Պատճենեք/տեղադրեք WiiChuck դասը Arduino խաղահրապարակից: Մեզ պետք կգա PWR և GND կապերի հայտարարագրմամբ տարբերակը: Պահեք այն որպես WiiChuck.h և պահեք այն նույն գրացուցակում, ինչ ձեր նախագիծը:

Այժմ պատճենեք/տեղադրեք հետևյալը Arduino IDE- ում և վերբեռնեք:

#ներառել «Wire.h» //#ներառել «WiiChuckClass.h» // ամենայն հավանականությամբ, դրա WiiChuck.h մնացածներիս համար: #ներառել «WiiChuck.h» WiiChuck chuck = WiiChuck ();

void setup () {

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

դատարկ շրջան () {

ուշացում (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 (",");

եթե (chuck.buttonZ) {

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

Serial.print (",");

// գործառույթ չէ // if (chuck.buttonC ()) {

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

Serial.println ();

}

Անջատեք ձեր Arduino- ն հոսանքից և միացրեք ձեր WiiChuck ադապտերը ձեր Arduino- ի անալոգային 2-5 կապերին:

Կրկին միացեք հոսանքին և համոզվեք, որ Nunchuck- ի արժեքները ուղարկվում են ձեր Arduino- ին և տպվում են Serial Monitor- ին: Եթե թվերի մեջ որևէ փոփոխություն չեք տեսնում, համոզվեք, որ կապերը լավ են, և դուք Նունչուկը գործում եք: Ես մի քանի օր փորձեցի ծրագրակազմը շտկել ՝ նախքան հասկանալը, որ իմ Nunchuck- ի մետաղալարը ներքին կոտրված է:

Հաջորդը, մենք ամեն ինչ կպցնենք Mozzi- ին:..

Քայլ 2: ozանոթանալ Mozzi- ին

Ozանոթացում Mozzi- ին
Ozանոթացում Mozzi- ին

Նախ, դուք պետք է ներբեռնեք Mozzi- ի վերջին տարբերակը: Դրանք սնվում են նվիրատվություններով, ուստի նվիրաբերեք, եթե այդքան տրամադրված եք և ներբեռնեք գրադարանը: Դուք կարող եք այն հեշտությամբ ավելացնել ձեր գրադարաններին ՝ ընտրելով Էսքիզ> Գրադարաններ> Ավելացնել. ZIP գրադարան… Arduino IDE- ից:

Այժմ մենք 3.5 մմ ականջակալների միակցիչը կմիացնենք տախտակին և Arduino- ին, որպեսզի հետագայում հեշտությամբ միանանք դրան (այժմ կարող եք անջատել Nunchuck- ը և ադապտերը):

  1. Միացրեք ձեր Jack- ը տախտակի ներքևի աջ անկյունում `մնացածի համար տեղ ազատելու համար: Theեկը պետք է լինի 5 կապում լայնությամբ:
  2. Միջին շարանը միացրեք ցատկող մետաղալարով գետնին:
  3. Միացրեք վարդակի ամենավերևի շարքը վերևի դատարկ տողի հետ (նկարի 10 -րդ տողը): Սա ձայնային ազդանշան կրող մետաղալարն է:
  4. Միացրեք թվային Pin ~ 9 -ը նաև 10 -րդ տողին:
  5. Միացրեք Ground- ը ձեր Arduino- ի վրա հացահատիկի գրունտային երկաթուղու հետ:
  6. Պարտադիր չէ, որ դեռ օգտագործեք ռեզիստորն ու կոնդենսատորը, բայց չօգտագործելու դեպքում կարող եք նկատել բարձր ճիչ: Այն գործում է որպես ցածր փոխանցման ֆիլտր ՝ eliminate 15 կՀց -ից բարձր հաճախականությունները վերացնելու համար:

Բացեք Mozzi's Sinewave ուրվագիծը Arduino IDE- ում ՝ ընտրելով Ֆայլ> Օրինակներ> Mozzi> Հիմունքներ> Sinewave: Սա ըստ էության Mozzi- ի համարժեքն է «Բարև աշխարհ»:

Վերբեռնեք ուրվագիծը և բարձրախոսը միացրեք սեղանի սեղանին: Կարող եք նաև ազդանշան օգտագործել, եթե դեռ հացահատիկը միացված չեք եղել աուդիո խցիկին:

Եթե բարձրախոսից չեք լսում մշտական A4 (440 Հց), համոզվեք, որ ձեր բոլոր կապերը լավ են և նորից փորձեք:

Հաջորդը, մենք Nunchuck- ը կկապենք Arduino- ին:

Քայլ 3: Ամեն ինչ միասին դնել

Այդ ամենը միասին դնելը
Այդ ամենը միասին դնելը

Այժմ մենք մտադիր ենք օգտագործել Nunchuck- ի գլորման արժեքը ՝ Sinewave- ի հաճախականությունը փոխելու համար:

Arduino IDE- ից ընտրեք Ֆայլ> Օրինակներ> Mozzi> Սենսորներ> Պիեզո հաճախականություն

Մենք պետք է մի քանի տող ավելացնենք այս ծածկագրին, որպեսզի այն աշխատի Nunchuck- ի հետ: WiiChuck գրադարանին ավելացրեք հավելում և ստեղծեք WiiChuck օբյեկտ, որը կոչվում է chuck: Կարող եք նաև մեկնաբանել PIEZO_PIN- ի հայտարարագիրը կամ պարզապես ջնջել այն, քանի որ մենք չենք օգտագործի այն:

#ներառել «WiiChuck. H»

WiiChuck chuck = WiiChuck (); // const int PIEZO_PIN = 3; // տեղադրել պիեզոյի համար անալոգային մուտքի քորոց

Այժմ տեղադրման ընթացքում մենք պետք է ավելացնենք հետևյալը.

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

և վերջապես, մենք պետք է մի քանի բան փոխենք updateControl- ում ():

void updateControl () {

chuck.update (); // ստանալ վերջին nunchuck տվյալները // կարդալ piezo // int piezo_value = mozziAnalogRead (PIEZO_PIN); // արժեքը 0-1023 int piezo_value = քարտեզ (Մեկնաբանեք piezo_value սահմանող տողը և ներքևում ավելացրեք հետևյալը.

void updateControl () {chuck.update (); // ստանալ վերջին nunchuck տվյալները // կարդալ piezo // int piezo_value = mozziAnalogRead (PIEZO_PIN); // արժեքը 0-1023 // Մեզ վերևի տողը պետք չէ, բայց ինչու՞ չպետք է քարտեզը քարտեզագրենք նույն տիրույթում: int piezo_value = քարտեզ (chuck.readRoll (), -180, 180, 0 1023);

Վերբեռնեք կոդը և հաճախականությունը պետք է համապատասխանի ձեր Nunchuck's Roll- ին: Փորձեք քարտեզագրել այն տարբեր հաճախականությունների տիրույթներում: Եթե էսքիզի ներքևում այլևս չեք նկատել, սենսորից ստացված արժեքը բազմապատկվում է 3 -ով, այնպես որ մենք այժմ նվագում ենք 0 Հց -ից մինչև 3000 Հց հնչերանգներ:

Քայլ 4: Վերջնական հպումներ

Վերջնական հպումներ
Վերջնական հպումներ

Այժմ դուք պատրաստ եք վերբեռնել ծածկագրի վերջին տարբերակը, որը ես կազմել եմ նախորդ քայլից և Mozzi- ի ևս մի քանի օրինակներ (ճշգրիտ Phase_Mod_Envelope և Control_Gain): Իմ կյանքն ավելի հեշտ դարձնելու համար ես ներառեցի նաև մի ֆայլ, որը կոչվում է pitches.h, որը պարզապես սահմանում է հաճախության արժեքները ծանոթ նշումների անուններով (այսինքն ՝ NOTE_A4):

Ես առաջարկում եմ կարդալ Mozzi- ի փաստաթղթերը, քանի որ ծածկագրի մեծ մասը ուղիղ է օրինակներից, բացառությամբ Nunchuck- ի ծածկագրի:

Ահա իմ Git շտեմարանի հղումը: Բոլոր կարևոր ֆայլերը ներառված են, բացառությամբ Mozzi գրադարանի, որը դուք պետք է ստանաք նրանց կայքից, որպեսզի այն արդիական լինի: Ներբեռնեք WiiMusic.ino- ն և վերբեռնեք այն ձեր սարքին ՝ լսելու, թե ինչ է հնչում: Ես առաջարկում եմ խաղալ պարամետրերի հետ, որոնք ես փոխում եմ (փոխել քարտեզի տիրույթները, բաժանել/բազմապատկել թվերը և այլն …

Արտացոլում

Չեմ զգում, որ բավականին ավարտված եմ: Դա չի նշանակում, որ ես գոհ չեմ նախագծից կամ դրա հնչողությունից, բայց զգում եմ, որ պարզապես մատներս թաթախեցի մի նոր աշխարհի մեջ, որը ցանկանում եմ շարունակել ուսումնասիրել, ուստի շարունակելու դեպքում այս նախագծից կավելացնեմ նոր ճյուղ: աշխատել.

Այնուամենայնիվ, ասելով, որ սա իմ առաջին իսկական ճանապարհորդությունն էր միկրոկոնտրոլերների աշխարհ, այնպես որ ես շատ շնորհակալ եմ ուսուցման փորձի համար: Դրա վրա աշխատած մոտ քսան ժամը տվեց ինձ ամանորյա գաղափարներ իմ և գործնականում իմ ընտանիքի յուրաքանչյուր անդամի համար: Ես որոշ չափով ափսոսում եմ, որ այս նախագծի վրա ուրիշի հետ չեմ աշխատել, քանի որ կարող էի բազմաթիվ խորհուրդներ և ուղեցույցներ օգտագործել այդ ճանապարհին: Այնուամենայնիվ, ես անձամբ շատ բան իմացա իմ փորձությունների միջոցով, ներառյալ երեք օր մազերս քաշել ՝ փորձելով կարգաբերել ծրագրային ապահովման խնդիրը, որը երբեք չկար (Նունչուկի ներքին մետաղալարը կոտրվել էր):

Դեռ մի շարք հնարավորություններ կան առաջ շարժվելու: Օրինակ, ես կցանկանայի օգտագործել Arduino- ն որպես MIDI ինտերֆեյսի մի տեսակ MIDI վերահսկիչի և ականջակալների միջև ՝ MIDI նշման պարամետրերը փոխելու համար, քանի որ ընտրելու շատ բան կա (ձայն, անջատում, ծրարի հաճախականություն, սկիպիդար թեքում), մոդուլյացիա, վիբրատո, դու այն անվանիր): Սա թույլ կտա շատ ավելի ճկունություն ապահովել, ներառյալ կոճակներով պարամետրերի փոխարկումը և պարզապես նվագելը, որը կոդավորված չէ C ++ զանգվածի մեջ:

Խորհուրդ ենք տալիս: