Агуулгын хүснэгт:

Wii Nunchuck синтезатор: 4 алхам
Wii Nunchuck синтезатор: 4 алхам

Видео: Wii Nunchuck синтезатор: 4 алхам

Видео: Wii Nunchuck синтезатор: 4 алхам
Видео: Wii Remote (Motion plus) + Nunchuk - китайская копия 2024, Арваннэгдүгээр
Anonim
Wii Nunchuck синтезатор
Wii Nunchuck синтезатор

Wii хөгжмийн ертөнц:

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

Би Nunchuck-ийг Mozzi-ийн дууны синтез номын санд ажилладаг Arduino Uno-той холбосон бөгөөд хоёуланг нь онлайнаар сайн баримтжуулсан байдаг. Хялбар болгохын тулд би Arduino -д шууд залгагддаг WiiChuck талхны самбар адаптер ашиглаж байна. Энэхүү харьцангуй энгийн төсөл нь Nunchuck-ийн хурдатгал хэмжигчээс хэмжсэн давирхай (YZ-Plane) -ээс хамаарч хэд хэдэн давирхай тоглодог. Дуу чимээг чанга эсвэл зөөлөн болгохын тулд джойстикийн Y -ийн утгыг ашиг тусын тулд тооцоолно. Энэ нь мөн Z товчлуураас хамааран хөвчүүдийг өөрчилж, C товчлуурыг дарахад фазын модуляцийн дугтуйг асаана. Дараа нь дугтуйны давтамжийг Nunchuck -аас хэмждэг Roll ашиглан өөрчилдөг (зураг бариул эргүүлж байгаа зураг).

Нөөц:

  • 1 x Arduino Uno
  • 1 x Wii Nunchuck
  • 1 x WiiChuck адаптер
  • 1 х талхны хавтантай нийцтэй 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 ();

хүчингүй тохиргоо () {

// nunchuck_init (); Цуваа.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 (","); Цуваа.хэвлэх (chuck.readJoyY ()); Serial.print (",");

хэрэв (chuck.buttonZ) {

Serial.print ("Z"); } өөр {Serial.print ("-"); }

Serial.print (",");

// функц биш // if (chuck.buttonC ()) {

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

Serial.println ();

}

Arduino-г тэжээлээс салгаад, WiiChuck адаптераа Arduino дээрх Analog Pins 2-5 руу холбоно уу.

Эрчим хүчээ дахин холбож, Nunchuck -ийн утгыг таны Arduino руу илгээж, Цуваа монитор дээр хэвлэж байгаа эсэхийг шалгаарай. Хэрэв та тоон өөрчлөлтийг олж харахгүй байгаа бол холболт сайн байгаа эсэхийг шалгаарай, мөн та Nunchuck ажиллаж байна. Нунчукийн утас дотооддоо эвдэрсэн болохыг олж мэдэхээс өмнө би хэдэн өдрийн турш програм хангамжийг засах гэж оролдсон!

Дараа нь бид бүх зүйлийг Mozzi -тэй холбох болно…

Алхам 2: Моззитой танилцах

Моззитай танилцах
Моззитай танилцах

Эхлээд та Mozzi -ийн хамгийн сүүлийн хувилбарыг татаж авах хэрэгтэй болно. Тэд хандиваар тэжээгддэг тул хэрэв та хүсэж байгаа бол хандив өгч, номын санг татаж аваарай. Та үүнийг Arduino IDE -ээс Sketch> Libraries> Add. ZIP Library… командыг ашиглан өөрийн номын санд амархан нэмж болно.

Одоо бид чихэвчний 3.5 мм -ийн үүрийг талх болон Arduino -той холбох тул дараа нь амархан холбох боломжтой болно (та одоо Nunchuck болон адаптерийг салгаж болно).

  1. Үлдэх зай гаргахын тулд Жак -аа самбарын баруун доод буланд залгаарай. Жак нь 5 зүү өргөнтэй байх ёстой.
  2. Дунд эгнээг газартай холбогч утсаар холбоно.
  3. Жакны хамгийн дээд эгнээ дээрх хоосон эгнээтэй холбоно уу (Зураг дээрх 10 -р эгнээ). Энэ бол аудио дохио дамжуулдаг утас юм.
  4. Digital Pin ~ 9 -ийг 10 -р эгнээнд холбоно уу.
  5. Arduino дээрх Ground -ийг талхны самбар дээрх газардуулгатай холбоно уу.
  6. Та резистор ба конденсаторыг заавал ашиглах шаардлагагүй боловч ашиглахгүй бол чанга дуу чимээ анзаарч магадгүй юм. Энэ нь ~ 15 кГц -ээс дээш давтамжийг арилгахын тулд бага нэвтрүүлэх шүүлтүүрийн үүрэг гүйцэтгэдэг.

Arduino IDE дээр Mozzi -ийн Sinewave ноорогыг нээгээд File> Examples> Mozzi> Basics> Sinewave -ийг сонгоно уу. Энэ нь үндсэндээ Моззигийн "Hello World" -той дүйцэхүйц утга юм.

Ноорог зургийг байршуулж, чанга яригчийг талхны самбар дээр залгаарай. Хэрэв та талхны самбарыг аудио залгуурт холбож амжаагүй байгаа бол та дуут дохиог ашиглаж болно.

Хэрэв та чанга яригчаасаа A4 (440Hz) тогтмол ирдэгийг сонсохгүй байгаа бол бүх холболт сайн байгаа эсэхийг шалгаад дахин оролдоно уу.

Дараа нь бид Nunchuck -ийг Arduino руу холбох болно!

Алхам 3: Бүгдийг нэгтгэх

Бүгдийг хамтад нь оруулах
Бүгдийг хамтад нь оруулах

Одоо бид Nunchuck -ийн өнхрөх утгыг ашиглан Sinewave -ийн давтамжийг өөрчлөх гэж байна.

Arduino IDE -ээс Файл> Жишээ> Mozzi> Мэдрэгчид> Piezo давтамжийг сонгоно уу

Nunchuck -тэй ажиллахын тулд бид энэ кодонд хэдэн мөр нэмэх шаардлагатай болно. WiiChuck номын санд add нэмээд chuck нэртэй WiiChuck объектыг үүсгэнэ үү. Та мөн PIEZO_PIN -ийн мэдэгдлийг тайлбарлах эсвэл бид ашиглахгүй тул устгаж болно.

#"WiiChuck. H" -г оруулна уу.

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

Одоо тохиргоонд бид дараахь зүйлийг нэмэх шаардлагатай болно.

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

Эцэст нь бид updateControl () дээр хэд хэдэн зүйлийг өөрчлөх шаардлагатай болно.

хүчингүй updateControl () {

chuck.update (); // хамгийн сүүлийн үеийн nunchuck өгөгдлийг авах // piezo // int piezo_value = mozziAnalogRead (PIEZO_PIN) -ийг унших; // утга нь 0-1023 int piezo_value = map (Piezo_value -ийг тохируулдаг мөрийг тайлбарлаж доор нь нэмнэ үү.

хүчингүй 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).

Nunchuck -ийн кодыг эс тооцвол ихэнх код жишээнүүдээс шууд гардаг тул би Mozzi -ийн баримт бичгийг уншихыг санал болгож байна.

Энд миний Git репозиторын линк байна. Mozzi номын сангаас бусад чухал файлуудыг оруулсан болно, үүнийг та вэбсайтаас нь авах ёстой бөгөөд ингэснээр энэ нь шинэчлэгдсэн болно. WiiMusic.ino татаж аваад төхөөрөмж дээрээ байршуулаад ямар санагдаж байгааг сонсоорой. Би өөрчилж буй параметрүүдээр тоглохыг санал болгож байна (газрын зургийн хүрээг өөрчлөх, тоог хуваах/үржүүлэх гэх мэт.).

Дүгнэлт

Надад ажил дууссан юм шиг санагдахгүй байна. Энэ нь төсөл эсвэл түүний гаргаж буй дуунд сэтгэл хангалуун бус байна гэсэн үг биш, гэхдээ би үргэлжлүүлэн судлахыг хүсч буй шинэ ертөнцөд хөлийнхөө хурууг дүрсэн юм шиг санагдаж байгаа тул үргэлжлүүлэн хийхдээ энэ төслийн шинэ салбарыг нэмж оруулах болно. ажиллах.

Гэсэн хэдий ч энэ бол миний микроконтроллеруудын ертөнцөд хийсэн анхны жинхэнэ аялал байсан гэж хэлэхэд энэ туршлагад маш их талархаж байна. Үүн дээр ажилласан хорь орчим цаг надад Христийн Мэндэлсний Баярын санааг өөртөө болон гэр бүлийнхээ бараг бүх гишүүдэд өгсөн юм. Энэ төсөл дээр өөр хэн нэгэнтэй хамтарч ажиллаагүйдээ харамсаж байна, учир нь би олон зөвлөмж, удирдамжийг ашиглаж байсан. Гэсэн хэдий ч би туршилтынхаа явцад маш олон зүйлийг сурч мэдсэн бөгөөд үүнд хэзээ ч байгаагүй програм хангамжийн алдааг олж засварлах гэж гурван өдрийн турш үсээ зулгааж (Nunchuck -ийн дотоод утас тасарсан байсан).

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

Зөвлөмж болгож буй: