Мазмуну:

Wii Nunchuck синтезатору: 4 кадам
Wii Nunchuck синтезатору: 4 кадам

Video: Wii Nunchuck синтезатору: 4 кадам

Video: Wii Nunchuck синтезатору: 4 кадам
Video: Nunchuk module prototype 2024, Ноябрь
Anonim
Wii Nunchuck синтезатору
Wii Nunchuck синтезатору

World of Wii Music:

Мен акыры музыкага болгон сүйүүмдү акыркы бир нече жылда топтогон кичинекей программалоо тажрыйбасы менен айкалыштырууну чечтим. Мен мектепте Тод Мачовердин баяндамасын көргөндөн бери өзүмдүн инструментимди жасоого кызыгам. Эгерде сиз анын иши менен тааныш эмес болсоңуз, анда ага Google бериңиз, анткени ал музыканын, технологиянын, ошондой эле алардын кесилишинин чек арасын бир нече жылдан бери (MIT медиа лабораториялары, Рок тобу, Гитар баатыры ж.).

Мен Нунчукту Mozzi үн синтезинин китепканасында иштеген Arduino Uno менен байланыштырдым, анткени экөө тең интернетте жакшы документтештирилген. Жеңилдик үчүн мен WiiChuck нан адаптерин колдонуп жатам, ал Arduinoго туура келет. Бул салыштырмалуу жөнөкөй долбоор Нунчуктун акселерометринен өлчөнгөн чайырга (YZ-Plane) жараша бир катар оюндарды ойнойт. Джойстиктин Y мааниси чайырды катуураак же жумшак кылуу үчүн пайдага картага түшүрүлөт. Ошондой эле Z-Buttonго жараша аккорддорду өзгөртөт жана C-Button басылганда фазалык модуляция конвертин күйгүзөт. Конверттин жыштыгы Нунчуктан өлчөнгөн Роллдун жардамы менен өзгөртүлөт (сүрөт баскычты бурат).

Ресурстар:

  • 1 x Arduino Uno
  • 1 x Wii Nunchuck
  • 1 x WiiChuck адаптери
  • 1 х нанга ылайыктуу 3,5 мм аял стерео уячасы
  • 1 х 3,5 мм аудио кабель
  • 1 х кандайдыр бир спикер (Сиз сыноо үчүн алгач ызылдакты туташтырсаңыз болот
  • Ар кандай түстөгү 4-5 зым

Милдеттүү эмес, бирок сунушталат:

  • 1 x 330 Ом каршылыгы
  • 1 x.1 uF конденсатор

1 -кадам: Сиздин NunChuckту туташтыруу

Сиздин NunChuckту туташтыруу
Сиздин NunChuckту туташтыруу
Сиздин NunChuckту туташтыруу
Сиздин NunChuckту туташтыруу
Сиздин NunChuckту туташтыруу
Сиздин NunChuckту туташтыруу

Ардуино аянтчасынан WiiChuck классын көчүрүү/чаптоо. Бизге PWR жана GND пиндеринин декларациясы бар версия керек болот. Аны WiiChuck.h катары сактап, долбооруңуз менен бир каталогдо сактаңыз.

Эми төмөнкүлөрдү Arduino IDEге көчүрүп/чаптаңыз жана жүктөңүз.

#clude "Wire.h" //#"WiiChuckClass.h" кирет // балким анын калган WiiChuck.h биз үчүн. #include "WiiChuck.h" WiiChuck chuck = WiiChuck ();

жараксыз орнотуу () {

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

void loop () {

кечигүү (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"); } else {Serial.print ("-"); }

Serial.print (",");

// функция эмес // if (chuck.buttonC ()) {

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

Serial.println ();

}

Ардуинону кубаттан ажыратыңыз жана WiiChuck адаптериңизди Arduinoңуздагы Analog Pins 2-5ке туташтырыңыз.

Кайра бийликке туташыңыз жана Nunchuckтин баалуулуктары сиздин Arduino'го жөнөтүлүп, Serial Monitorго басылып чыгарылышын камсыздаңыз. Эгерде сиз сандарда эч кандай өзгөрүүнү көрбөсөңүз, анда туташууларыңыз жакшы экенине жана Nunchuck иштеп жатканына ишениңиз. Мен программалык камсыздоону оңдоого аракет кылып, Нунчуктун зымы ички үзүлгөнүн түшүнгөнгө чейин бир нече күн өткөрдүм!

Андан кийин, биз бардыгын Mozziге байланыштырабыз…

2 -кадам: Mozzi менен таанышуу

Mozzi менен таанышуу
Mozzi менен таанышуу

Биринчиден, сиз Mozzinin акыркы версиясын жүктөп алышыңыз керек. Алар кайрымдуулуктун эсебинен иштешет, андыктан эгер сиз каалооңузду билдирсеңиз жана китепкананы жүктөп алыңыз. Сиз аны китепканаларыңызга Sketch> Китепканалар> Arduino IDEден. ZIP Китепкана кошуу … тандап оңой эле кошо аласыз.

Эми биз 3.5 мм гарнитура уячасын нан тактасына жана Arduino -го туташтырабыз, андыктан кийинчерээк оңой туташа алабыз (азыр Nunchuck менен адаптерин ажыратып койсоңуз болот).

  1. Калганына орун бошотуу үчүн джекти тактанын төмөнкү оң бурчуна сайыңыз. Уячанын туурасы 5 казык болушу керек.
  2. Ортоңку катарды жерге секирүүчү зым менен туташтырыңыз.
  3. Уячанын эң үстүңкү катарын жогорудагы бош сапка туташтырыңыз (сүрөттөгү 10 -катар). Бул аудио сигналды алып жүргөн зым.
  4. Digital Pin ~ 9ду 10 -катарга туташтырыңыз.
  5. Arduino түзмөгүңүздөгү Groundду панелдеги жер темир жолуна туташтырыңыз.
  6. Сиз резисторду жана конденсаторду колдонуунун кажети жок, бирок андай кылбасаңыз, катуу чыңырууну байкайсыз. ~ 15 кГцтен жогору жыштыктарды жок кылуу үчүн төмөн өтмө чыпка катары иштейт.

Arduino IDEде Mozzi Sinewave эскизин Файл> Мисалдар> Mozzi> Негиздери> Sinewave тандап ачыңыз. Бул негизинен Моцзинин эквиваленти "Hello World".

Эскизди жүктөп, спикерди нан тактасына сайыңыз. Эгерде сиз нан дискин аудио уячасына туташтыра элек болсоңуз, анда коңгуроону колдоно аласыз.

Эгерде сиз динамиктен туруктуу A4 (440 Гц) үнүн укпасаңыз, бардык туташууларыңыз жакшы экенин текшерип, кайра аракет кылыңыз.

Андан кийин, биз Нундукту Arduino менен туташтырабыз!

3 -кадам: Бардыгын бириктирүү

Баарын бир жерге коюу
Баарын бир жерге коюу

Эми биз синчек толкундарынын жыштыгын өзгөртүү үчүн Нунчуктун ролунун маанисин колдонобуз.

Arduino IDEден File> Examples> Mozzi> Sensors> Piezo Frequency тандаңыз

Биз Nunchuck менен иштөө үчүн бул кодго бир нече саптарды кошушубуз керек болот. WiiChuck китепканасына киргизүүнү кошуңуз жана чак деп аталган WiiChuck объектин түзүңүз. Сиз ошондой эле PIEZO_PIN декларациясына комментарий бере аласыз же биз аны колдонбой тургандыктан аны жок кылсаңыз болот.

#"WiiChuck. H" кошуу

WiiChuck чак = WiiChuck (); // const int PIEZO_PIN = 3; // пьезо үчүн аналогдук кирүү пин орнотуу

Эми орнотууда, биз төмөнкүлөрдү кошуубуз керек:

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

жана акырында updateControl () ичинде бир нече нерсени өзгөртүүбүз керек болот:

жараксыз updateControl () {

chuck.update (); // акыркы nunchuck маалыматтарын алуу // пьезону окуу // int piezo_value = mozziAnalogRead (PIEZO_PIN); // мааниси 0-1023 int piezo_value = карта (Piezo_value орнотуучу сапты комментарийлеп, астына төмөнкүлөрдү кошуңуз:

жараксыз updateControl () {chuck.update (); // акыркы nunchuck маалыматтарын алуу // пьезону окуу // 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 жүктөп алып, аны кандай угуу үчүн аны түзмөгүңүзгө жүктөңүз. Мен сизге өзгөртүп жаткан параметрлер менен ойноону сунуштайм (картанын диапазонун өзгөртүү, сандарды бөлүү/көбөйтүү ж. Б.).

Reflection

Мен аягына чыккандай сезилбейм. Мен бул долбоорго же анын үнүнө канааттанган жокмун дегенди билдирбейт, бирок мен өзүмдүн бармактарымды жаңы дүйнөгө чукуп койгондой сезип жатам, ошондуктан мен бул долбоордон жаңы бутакты кошом. иштөө.

Ошентсе да, бул менин микроконтроллер дүйнөсүнө жасаган биринчи чыныгы саякатым, ошондуктан мен үйрөнүү тажрыйбасы үчүн абдан ыраазымын. Анын үстүндө иштеген жыйырмага жакын саат мага өзүм үчүн жана үй -бүлөмдүн ар бир мүчөсү үчүн жаңы жылдык идеяларды берди. Мен бул долбоордо башка бирөө менен иштебегениме өкүнөм, анткени жолдо көптөгөн кеңештерди жана көрсөтмөлөрдү колдоно алмакмын. Бирок, мен жеке өзүмдүн сыноолорум аркылуу көп нерсени үйрөндүм, анын ичинде эч качан болбогон программалык камсыздоонун көйгөйүн чечүү үчүн чачымды жулуп алуу (Нунчуктун ички зымы үзүлгөн).

Алдыга жылуу үчүн дагы көптөгөн мүмкүнчүлүктөр бар. Мисалы, мен Arduino -ны MIDI интерфейсинин бир түрү катары MIDI контроллери менен гарнитуранын ортосунда MIDI нотасынын параметрлерин өзгөртүү үчүн колдонгум келет, анткени тандоо үчүн көп нерсе бар (көлөмү, кесүү, конверт жыштыгы, кадамдын ийилүүсү), модуляция, вибрато, сиз аны атаңыз). Бул дагы ийкемдүүлүккө мүмкүнчүлүк берет, анын ичинде баскычтар менен параметрлерди алмаштыруу жана C ++ массивине коддолгон эмес аккорд ойноо.

Сунушталууда: