Mundarija:
- Ta'minotlar
- 1 -qadam: oqimni tushunish
- 2 -qadam: Serverni sozlash - Ngrok
- 3 -qadam: Serverni sozlash - tugun -qizil
- 4 -qadam: Serverni sozlash - MQTT (Mosquitto)
- 5 -qadam: Kod
- 6 -qadam: 3D modelini chop eting
- 7 -qadam: yig'ish va payvandlash
- 8 -qadam: Do'stlaringiz bilan bir necha tsikl o'ynang
Video: Ohang: 8 qadam (rasmlar bilan)
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:23
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
Ushbu loyihada biz ba'zi muammolarni hal qilishga harakat qildik:
- O'yinchilar bir vaqtning o'zida o'ynashi uchun uni qanday qilib onlayn qilishimiz mumkin?
- Qanday qilib biz Internetdagi kechikishlarni aylanib o'tib, muammosiz tajriba orttirishimiz mumkin?
- 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:
- O'yinchini kamroq variantlarga yo'naltirish uchun kalitlar sonini cheklang.
- Biz bir xil o'lchamdagi notalarni tanladik, chunki ular bir -biri bilan yaxshi o'ynaydi, shuning uchun hech qanday dissonans ovozi eshitilmaydi.
- 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
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
- Bu erda operatsion tizimingiz uchun ngrok -ni yuklab oling.
- Yuklab olish sahifasidagi "Yong'inni o'chirish" bosqichigacha bajaring.
- "Yonish bosqichida" 80 -ni 1883 -ga almashtiring - va http -ni tcp -dagi kabi./ngrok tcp 1883 -ga qarab.
- URL va port raqamini saqlang (rasmda ko'rsatilgan), keyinroq bizga kerak bo'ladi.
3 -qadam: 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.
- Node-RED uchun Node.js kerak, uni shu erdan o'rnating
- 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)
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
- Mosquitto -ni bu erdan yuklab oling va uni operatsion tizimingizga mos ravishda o'rnating.
- 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.
- 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
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:
- libmad-8266 (SPIFF va I2S musiqalarini dekodlash)
- EspMQTTClient
- ESP8266 Wi -Fi
- Adafruit_NeoPixel
Ovozlarni SPIFF yordamida ESP -ga yuklang:
- bu buyuk ko'rsatmaga amal qiling.
- ma'lumotlar papkasini manba kodlari katalogiga qo'shing.
- Arduino IDE -da "Asboblar" bo'limida Flash hajmini "4MB (FS: 3MB TOA: ~ 512KB)" ga o'zgartiring.
- 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
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
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:
Oddiy DTMF (ohang) telefon liniyasi dekoderini qanday qilish kerak: 3 qadam
Oddiy DTMF (ohangli) telefon liniyasi dekoderini qanday qilish mumkin: Bu DTMF signallarini har qanday telefon liniyasida dekodlash imkonini beradigan oddiy loyiha. Ushbu qo'llanmada biz MT8870D dekoderidan foydalanamiz. Biz oldindan tuzilgan ohang dekoderidan foydalanmoqdamiz, chunki, ishoning, buni orqa tomondan og'riq
Oddiy Arduino ohangli ohang: 3 qadam
Arduino -ning oddiy ohanglari: Arduino -ning oddiy ohanglari - bu Arduino loyihalaridan boshlash usuli, chunki siz hech narsa yozmasdan Arduino dasturidan kodni to'g'ridan -to'g'ri yuklaysiz
Ohang chiqarish uchun piezodan qanday foydalanish kerak: asoslar: 4 qadam (rasmlar bilan)
Ohangni chiqarish uchun piezodan qanday foydalanish kerak: asoslar: Hammaga salom, bu ko'rsatmada biz ohang chiqarish uchun piezo signalidan foydalanamiz. Piezo - bu elektron qurilmadir, u ham tovushni chiqarish, ham aniqlash uchun ishlatilishi mumkin. Ilovalar: Siz o'ynash uchun bir xil sxemadan foydalanishingiz mumkin
Oddiy ohang generatori: 7 qadam (rasmlar bilan)
Oddiy ohang generatori: Arduino Tone Generator - bu umumiy terminalni GND -ga ulashadigan kalitlar to'plami, qolgan pinlar 2, 3, 4, 5, 6, 7, 8 va 9 Arduino raqamli pinlariga ulangan, shuningdek karnay bilan. Arduino Uno -dan GND va raqamli pin 11 o'rtasida o'rnatilgan
Mikrokontroller mato ohang generatori C-kodda: 8 qadam (rasmlar bilan)
Mikrokontroller mato ohanglari generatori C-kodi: O'tgan yilning oktyabr oyi oxirida, carmitsu foydalanuvchisi menga tushlik qutisi sinxronlanishini ko'rganimdan so'ng xabar yubordi. Uning xabaridan: Men boshlang'ich maktabda musiqadan dars beraman. Biz juda ko'p magnitafon musiqasini ijro etamiz. ya’ni bolalar kichkina nay chalishadi …… menda