Mundarija:

Ohang: 8 qadam (rasmlar bilan)
Ohang: 8 qadam (rasmlar bilan)

Video: Ohang: 8 qadam (rasmlar bilan)

Video: Ohang: 8 qadam (rasmlar bilan)
Video: 45 SONIYADA ISMINGIZNI UNUTASIZ 2024, Noyabr
Anonim
Image
Image
Oqimni tushunish
Oqimni tushunish

Uyda ishlashga imkon beradigan ko'plab afzalliklar va texnologik echimlar bilan birga, hamkasblar o'rtasida hayotiy yordamni shakllantirish va yaratish qiyinligi saqlanib qolmoqda. MELODY-bu raqamli-jismoniy qurilma bo'lib, birgalikda qisqa musiqiy murabbo yaratishga imkon beradi. Hamkasblar vaqtni muvofiqlashtiradi va qurilma burilishlar va turli tasodifiy tovushlar bilan murabbo sessiyasini o'rnatadi. Birinchi ishtirokchi o'ziga xos ritmni o'rnatadi, shundan so'ng har bir ishtirokchi belgilangan ritmga mos keladigan o'z musiqiy qismini qo'shadi. Musiqiy fonga ega bo'lmagan foydalanuvchilarga qulaylik yaratish maqsadida, dasturiy ta'minot ularning sekin urishlarini tanlab, mos ritmga moslashtirish orqali tezlikni saqlashga yordam beradi. Mashg'ulot 3 daqiqadan so'ng, barcha ishtirokchilar o'z qismini yozib bo'lgach tugaydi.

Bu qanday ishlaydi?

Melodiya ESP2866 uskunasiga asoslangan bo'lib, u MQTT protokoli orqali tugun-qizil server bilan bog'lanadi. Qurilma o'yinchi yozuvlarini serverga va serverdan boshqa o'yinchilarga yuboriladigan belgilar qatoriga aylantiradi. Bu har bir kishiga tarmoq ulanishida uzilishlarsiz musiqani ijro etish va eshitish imkonini beradi.

Melodiya ikkita asosiy vizual ko'rsatkichga ega. Birinchisi, LED tasmasi bo'lib, u o'yinchiga Loop qachon boshlanishini va qachon tugashini bilishga imkon beradi va o'yinchining navbatini bildiradi. Ikkinchisi - mahsulot markazidagi LED displey, u mavjud kuyni vizual tarzda ko'rsatish uchun ishlatiladi. 3 dan 1 gacha bo'lgan sanash o'yin boshlanishini ko'rsatadi va vaqt ko'rsatgichi foydalanuvchini guruh melodiyasiga qachon va qanday hissa qo'shishni xohlashini ko'rsatadi. Yozuv kelajakda foydalanish uchun avtomatik ravishda kompaniya bulutiga saqlanadi.

Ushbu loyiha Herzliya (IDC) fanlararo markazining Media innovatsion laboratoriyasida (MiLab) to'rt talaba tomonidan ishlab chiqilgan: Shahar Agassi, Eden Bar-Tov, Gal Eshchar va Gad Stern. Zvika Markfeld, Netta Ofer va Mixal Leschinskiy va Noa Morag va Oren Tsukerman rahbarligida.

bu erda ba'zi narsalarni qanday amalga oshirishni o'rganishimga yordam bergan buyuk ko'rsatma yaratgani uchun Tom Granotga rahmat (bu erdagi qadamlarning ba'zilari bu buyuk ko'rsatmaga muvofiq modellashtirilgan).

Ta'minotlar

  • 3D printer
  • ESP8266
  • 7 tugma
  • 8X8 LED matritsasi
  • WS2812B LED tasmasi
  • I2S kuchaytirgichi
  • Ayol 1/8 "(3,5 mm) 4 qutbli audio raz'em
  • 4X 1K qarshilik
  • 1X3K qarshilik

1 -qadam: oqimni tushunish

Oqimni tushunish
Oqimni tushunish
Oqimni tushunish
Oqimni tushunish

Ushbu loyihada biz ba'zi muammolarni hal qilishga harakat qildik:

  1. O'yinchilar bir vaqtning o'zida o'ynashi uchun uni qanday qilib onlayn qilishimiz mumkin?
  2. Qanday qilib biz Internetdagi kechikishlarni aylanib o'tib, muammosiz tajriba orttirishimiz mumkin?
  3. Qanday qilib biz musiqani yaxshi biladigan odamlarga ham yaxshi ovoz berishimiz mumkin?

Musiqaning vaqti va ketma -ketligi

Birinchi muammoni hal qilish uchun biz MIDI protokoliga qaradik va undan foydalanishga harakat qildik, lekin biz uning kuchliroq ekanini ko'rdik, biz haqiqatdan ham kerakli narsani soddalashtirmoqchi edik, shunda biz birinchi ishchi prototipni qura olamiz. Shunday qilib, biz MIDIdan ilhom oldik va musiqiy tsiklni o'yinchilar sonidan (0-5 gacha) bir qator raqamlar bilan ifodaladik (keyinroq biz barcha musiqiy matematikani tushuntiramiz).

Musiqada biz ritmlarni musiqiy chiziqlarga ajratdik. Har bir satr asosan kichik vaqt segmenti bo'lib, biz 4/4 (musiqiy satrda 4 ta zarba) dan foydalanishni tanlaymiz - bu eng keng tarqalgan.

Keyin har bir zarba 4 ta namuna olish oynasiga bo'linadi, shuning uchun har bir nota avtomatik ravishda yaxshi holatga o'rnatiladi va bizga qo'shiqni serverga yuboriladigan raqamlar qatori sifatida ko'rsatishga imkon beradi.

Musiqiy ma'lumotga ega bo'lmagan o'yinchilar bilan do'st bo'lish uchun biz uchta narsani qildik:

  1. O'yinchini kamroq variantlarga yo'naltirish uchun kalitlar sonini cheklang.
  2. Biz bir xil o'lchamdagi notalarni tanladik, chunki ular bir -biri bilan yaxshi o'ynaydi, shuning uchun hech qanday dissonans ovozi eshitilmaydi.
  3. Har bir bosish ritmning "oynasi" ga o'rnatiladi, shuning uchun o'yinchi musiqasini ritmga begona qiladi

Aloqa protokollari

Xo'sh, biz musiqaning mantig'ini tushunganimizdan so'ng, uni qanday qilib o'yinchilarimiz o'rtasida bog'lay olamiz?

Buning uchun biz MQTT-ni ishlatamiz, bu nashrga obuna bo'ladigan tarmoq protokoli bo'lib, u qurilmalar o'rtasida xabarlarni uzatadi.

har bir o'yinchi ikkita mavzuga obuna bo'ladi: pastadir (eng dolzarb tsiklni olish) va navbat (sinxronizatsiya uchun joriy o'yinchining identifikatorini oladi).

O'z navbatida, o'yinchi ohangni ijro etgandan so'ng, UP tugmachasini bosadi va pastadir (yangilangan) MQTT brokeriga yuboriladi, u uni loop kanalidagi barcha o'yinchilarga qaytaradi.

bu pastadir o'ynalmaguncha "harakatsiz" qoladi va keyin uni almashtiradi. Shunday qilib, o'yinchi uchun shaffof bo'ladi. shuningdek, yangi tsikl hozirda pleyer qurilmasida saqlangani uchun musiqa uchun internetda kechikish yo'q, shuning uchun biz ikkinchi masalani hal qildik.

2 -qadam: Serverni sozlash - Ngrok

Serverni sozlash - Ngrok
Serverni sozlash - Ngrok
Serverni sozlash - Ngrok
Serverni sozlash - Ngrok

ngrok - bu tunnel xizmati. Bu bizga mahalliy ishlaydigan xizmatni (bizning holatimizda, Node -RED) tashqi dunyoga ochish imkonini beradi - serverni sozlash yoki DNS yozuvlari bilan ishlash muammosiz. Siz shunchaki Node-RED-ni kompyuteringizda ishga tushirasiz, keyin esa ngrok-ni Node-RED ishlayotgan portda ishga tushirasiz.

Hammasi shu - siz Node -RED -ga dunyoning istalgan nuqtasidan, qaysi tarmoqqa ulanganligidan qat'i nazar, kirishingiz mumkin bo'lgan URLni olasiz.

O'rnatish va sozlash

  1. Bu erda operatsion tizimingiz uchun ngrok -ni yuklab oling.
  2. Yuklab olish sahifasidagi "Yong'inni o'chirish" bosqichigacha bajaring.
  3. "Yonish bosqichida" 80 -ni 1883 -ga almashtiring - va http -ni tcp -dagi kabi./ngrok tcp 1883 -ga qarab.
  4. URL va port raqamini saqlang (rasmda ko'rsatilgan), keyinroq bizga kerak bo'ladi.

3 -qadam: Serverni sozlash - tugun -qizil

Serverni sozlash - tugun -qizil
Serverni sozlash - tugun -qizil

Loyihaning Server mantig'i, Node-RED-bu turli xil dasturiy ta'minotni (va qo'shimcha qurilmalarni!) Ulash imkonini beruvchi vizual dasturlash muhiti.

Bu erda biz barcha o'yinchilar o'rtasidagi muloqot mantig'ini yaratdik (tsikllarni bo'lishish va qabul qilish va burilishlarni muvofiqlashtirish).

Qizil tugunni o'rnatish

Node-RED oqimini mahalliy kompyuteringizga yuklash uchun quyidagi amallarni bajaring.

  1. Node-RED uchun Node.js kerak, uni shu erdan o'rnating
  2. Node-RED-ni o'zi bu erdagi ko'rsatmalardan foydalanib o'rnating.

Endi siz Node-RED-ni o'rnatgan bo'lsangiz, uni yuqoridagi qadamda bajaring va tasdiqlang, siz bo'sh tuvali sahifani ko'rishingiz mumkin. U https://127.0.0.1:1880 da joylashgan bo'lishi kerak

Endi siz ushbu loyiha uchun ishlatilgan oqimni import qilishingiz kerak bo'ladi, uni bu erda topishingiz mumkin va JSON faylini qo'shish uchun importni bosing va Deploy -ni bosing.

Qizil tugunni o'rnatish:

Agar siz ushbu qadamga biriktirilgan tasvirga qarasangiz, bizda ikkita asosiy "harakat" borligini ko'rishingiz mumkin, biz o'yinchilardan biridan joriy tsiklni olamiz va keyin uni boshqa barcha o'yinchilarga uzatamiz. bundan tashqari, biz barcha futbolchilarga yangi burilishni efirga uzatamiz. shuning uchun o'yin hamohang bo'lib qoladi.

4 -qadam: Serverni sozlash - MQTT (Mosquitto)

Serverni sozlash - MQTT (Mosquitto)
Serverni sozlash - MQTT (Mosquitto)

Node-RED-da MQTT-ning o'z brokeri yo'qligi sababli, biz MQTT orqali sensorlarimiz va aktivatorlarimiz bilan bog'lanishimiz kerak bo'ladi, biz maxsus MQTT-brokeridan foydalanamiz. Node-RED Mosquitto-ni tavsiya qilgani uchun, biz uni ishlatamiz. MQTT haqida va nima uchun u IoT loyihalarida tez -tez ishlatilishini bilish uchun bu erga qarang.

O'rnatish va sozlash

  1. Mosquitto -ni bu erdan yuklab oling va uni operatsion tizimingizga mos ravishda o'rnating.
  2. Odatda, Node-RED-ni Mosquittoga ulash uchun siz bu erdagi ko'rsatmalarga amal qilishingiz kerak bo'ladi. Ammo, agar siz bizning oqimimizdan foydalansangiz, u siz uchun oldindan tuzilgan. Agar siz oqim va Mosquitrro -ni to'g'ri o'rnatgan bo'lsangiz va Mosquitto 1883 -portda ishlaydi (u sukut bo'yicha ishlaydi), u qutidan chiqib ketishi kerak.
  3. E'tibor bering, bu MQTT brokeri va sizning Node-RED serveringiz bitta mashinada ishlaydi. Bu tizim ichidagi aloqani soddalashtirish uchun foydalidir. Qo'shimcha ma'lumot olish uchun quyidagi eslatmani ko'ring.

MQTT trafigini kuzatish

Men trafikni kuzatish uchun MQTTfx dan foydalanardim, bu juda oddiy GUI bilan ajoyib vosita.

5 -qadam: Kod

Kodeks
Kodeks

kodni GitHub -da topishingiz mumkin (barcha ma'lumotlar fayllari va config.h bilan)

Bog'liqliklar:

kodni esp2866 -ga yuklamasdan oldin siz bir nechta kutubxonalarni o'rnatishingiz kerak bo'ladi:

  1. libmad-8266 (SPIFF va I2S musiqalarini dekodlash)
  2. EspMQTTClient
  3. ESP8266 Wi -Fi
  4. Adafruit_NeoPixel

Ovozlarni SPIFF yordamida ESP -ga yuklang:

  1. bu buyuk ko'rsatmaga amal qiling.
  2. ma'lumotlar papkasini manba kodlari katalogiga qo'shing.
  3. Arduino IDE -da "Asboblar" bo'limida Flash hajmini "4MB (FS: 3MB TOA: ~ 512KB)" ga o'zgartiring.
  4. Shuningdek, asboblar ostida ESP2866 eskiz ma'lumotlarini yuklashni bosing

Parametrlarni sozlash:

Shundan so'ng, config.h fayliga o'ting va oldingi qadamdagi WIFI hisob ma'lumotlari, ngrok URL va port kabi kerakli ma'lumotlarni qo'shing (havola uchun ilova qilingan rasmga qarang).

p.s-men hali ham aqlli telefoningizdan Wi-Fi va ngrok ma'lumotlarini o'rnatishga yordam beradigan avtomatik ulanish xususiyatini qo'shganman, chunki bu kontseptsiyaning birinchi isboti edi, men uni bir kun qo'shmoqchiman.

O'zingiz xohlagan o'yinchi miqdorini belgilang (bu o'yin 2-3 o'yinchi uchun eng yaxshi ishlaydi va qutiga 2 o'yinchi uchun tovushlar to'plami yuklanadi). lekin osonlikcha sozlanishi mumkin:

har bir o'yinchi uchun tugun-qizil rangga boshqa oqim qo'shib, foydalanuvchiga tegishli mavzu bo'yicha pastadir chop etish.

Bundan tashqari, siz musiqiy tovushni bu qatorni o'zingiz xohlagan tovushlarga qo'shib tahrirlashingiz mumkin:

Bu erda siz 3 turdagi asboblarni ko'rishingiz mumkin (0 -o'yinchi uchun Chrods, 1 -o'yinchi uchun qo'rg'oshin va 2 -o'yinchi uchun Bass)

const char* yo'llari [NUMofNotes] = {"/blank1.wav", "/Chords_Am.wav", "/Chords_F.wav", "/Chords_C.wav", "/Chords_G.wav", "/Chords_Dm.wav", "/blank2.wav", "/Lead_C.wav", "/Lead_D.wav", "/Lead_E.wav", "/Lead_G.wav", "/Lead_A.wav", "/blank0.wav", "/Bass_C3.wav", "/Bass_D3.wav", "/Bass_F3.wav", "/Bass_G3.wav", "/Bass_A3.wav"};

6 -qadam: 3D modelini chop eting

3D modelini chop eting
3D modelini chop eting
3D modelini chop eting
3D modelini chop eting
3D modelini chop eting
3D modelini chop eting
3D modelini chop eting
3D modelini chop eting

Birinchi qadam uchun STL -ni yuklab oling va chop eting.

Qo'llab -quvvatlagichlarni olib tashlaganingizdan so'ng va ozgina silliqlashdan so'ng (printerning o'lchamiga qarab)

uni kerakli rangga bo'yab qo'ying

7 -qadam: yig'ish va payvandlash

Payvandlash va yig'ish
Payvandlash va yig'ish

Demak, bu erda haqiqiy sehr sodir bo'ladi.

Siz ushbu sxemalarga amal qilishingiz va hamma narsani payvandlashingiz mumkin.

Shuni yodda tutingki, siz PIN -kodlarning o'rnini o'zgartirishingiz mumkin, uni kodda o'zgartirishni unutmang.

A0 va I2S bir -biriga juda mos keladi:

chunki A0 qarshilik ko'prigi uchun (biz 5 -tugmachaning qaysi tugmasi bosilganligini bilish uchun oqimdagi farqni ishlatamiz - bu ko'rsatmaga o'xshash).

I2S -da ma'lum kodlash mavjud, uni bu erda topishingiz mumkin

8 -qadam: Do'stlaringiz bilan bir necha tsikl o'ynang

Tavsiya: