Turinys:
- Prekės
- 1 žingsnis: Supraskite srautą
- 2 veiksmas: nustatykite serverį - „Ngrok“
- 3 veiksmas: serverio nustatymas - raudonas mazgas
- 4 žingsnis: nustatykite serverį - MQTT (Mosquitto)
- 5 žingsnis: Kodas
- 6 veiksmas: spausdinkite 3D modelį
- 7 žingsnis: surinkimas ir suvirinimas
- 8 veiksmas: žaiskite keletą kilpų su draugais
Video: Melodija: 8 žingsniai (su nuotraukomis)
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:44
Be daugybės privalumų ir technologinių sprendimų, leidžiančių dirbti iš namų, vis dar sunku suformuluoti ir sukurti palaikymą bendradarbiams. MELODY yra skaitmeninis-fizinis įrenginys, leidžiantis kurti bendrus trumpus muzikinius kamščius. Bendradarbiai koordinuoja laiką, o prietaisas nustato trukdžių seansą su posūkiais ir skirtingais atsitiktiniais garsais. Pirmasis dalyvis nustato konkretų ritmą, po kurio kiekvienas dalyvis prideda savo muzikinį skyrių, atitinkantį nustatytą ritmą. Kad vartotojams, neturintiems muzikinio pagrindo, būtų lengviau, programinė įranga padeda jiems neatsilikti, atrinkdama paspaudimus ir prisitaikydama prie atitinkamo ritmo. Sesija baigiasi po maždaug 3 minučių, kai visi dalyviai baigia įrašyti savo dalį.
Kaip tai veikia?
„Melody“yra pagrįsta ESP2866 aparatine įranga, kuri bendrauja su „Node-Red“serveriu per MQTT protokolą. Prietaisas išverčia žaidėjo užrašus į simbolių eilutę, kuri siunčiama į serverį ir iš serverio atgal į kitus žaidėjus. Tai leidžia visiems groti ir išgirsti melodiją be pertraukos iš tinklo ryšio.
Melodija turi du pagrindinius vaizdinius rodiklius. Pirmasis yra LED juostelė, leidžianti žaidėjui žinoti, kada prasideda kilpa ir kada ji baigiasi, ir nurodo, ar atėjo žaidėjo eilė. Antrasis - LED ekranas gaminio centre, kuris naudojamas vizualiai parodyti esamą melodiją. Atgalinis laikas nuo 3 iki 1 nurodo pradėti groti, o laiko rodymas nurodo vartotojui, kada ir kaip ji nori prisidėti prie grupės melodijos. Įrašas automatiškai išsaugomas įmonės debesyje, kad būtų galima naudoti ateityje.
Šį projektą sukūrė keturi tarpdisciplininio centro „Herzliya“(IDC) žiniasklaidos inovacijų laboratorijos (MiLab) studentai: Shahar Agassy, Eden Bar-Tov, Gal Eshchar ir Gad Stern. Padedami Zvika Markfeld, Netta Ofer ir Michal Leschinsky bei vadovaujant Noa Morag ir Oren Zuckerman.
ačiū Tomui Granotui, sukūrusiam puikų nurodymą, kuris padėjo man išmokti įgyvendinti kai kuriuos dalykus (kai kurie čia pateikti veiksmai yra sukurti pagal šį puikų nurodymą).
Prekės
- 3D spausdintuvas
- ESP8266
- 7 mygtukai
- 8x8 LED matrica
- WS2812B LED juostelė
- I2S stiprintuvas
- Moteriškas 1/8 colio (3,5 mm) 4 polių garso lizdas
- 4X 1K rezistorius
- 1X3K rezistorius
1 žingsnis: Supraskite srautą
Šiame projekte bandėme išspręsti kai kurias problemas:
- Kaip mes galime tai padaryti internete, kad žaidėjai galėtų žaisti tuo pačiu metu?
- Kaip apeiti interneto delsą ir sukurti vientisą patirtį?
- Kaip galime padaryti, kad muzika skambėtų gerai net ir žmonėms, neturintiems muzikinio pagrindo?
Muzikos laikas ir serializavimas
Norėdami išspręsti pirmąją problemą, mes pažvelgėme į MIDI protokolą ir bandėme jį naudoti, tačiau pamatėme, kad jis yra tvirtesnis nei tai, ko mums iš tikrųjų reikėjo, ir mes tikrai norėjome jį padaryti paprastą, kad galėtume sukurti pirmąjį veikiantį prototipą. Taigi, mes įkvėpėme MIDI ir savo muzikinę kilpą vaizdavome skaičių eilute (nuo 0 iki 5), kuri viršija žaidėjų kilpų dydį (visą muzikinę matematiką paaiškinsime vėliau).
Muzikoje ritmus suskirstėme į muzikines juostas. Kiekviena juosta iš esmės yra nedidelio laiko segmentas, kurį pasirenkame naudoti 4/4 (tai reiškia 4 smūgius muzikinėje juostoje) - dažniausiai pasitaikančią.
Tada kiekvienas ritmas yra padalintas į 4 mėginių ėmimo langus, todėl kiekviena grojama nata bus automatiškai suderinta į gerą padėtį ir taip pat leis mums pavaizduoti dainą kaip skaičių eilutę, kurią reikia siųsti į serverį.
Norėdami būti draugiški žaidėjams, neturintiems muzikinio pagrindo, mes padarėme tris dalykus:
- Apribokite klavišų skaičių, kad žaidėjas sutelktų dėmesį į mažiau parinkčių.
- Mes pasirinkome tos pačios masto natas, kurios gerai groja kartu, todėl nebus jokio disonanso garso.
- Kiekvienas paspaudimas yra nustatytas į ritmo „langą“, todėl grotuvo muzika svetima ritmui
Bendravimo protokolai
Taigi, kai supratome muzikos logiką, kaip galime ją perduoti savo žaidėjams?
tam mes naudojame „MQTT“-paskelbimo ir prenumeratos tinklo protokolą, kuris perduoda pranešimus tarp įrenginių.
kiekvienas žaidėjas yra užsiprenumeravęs dvi temas: ciklą (gauti naujausią ciklą) ir posūkį (sinchronizavimo tikslais gauna dabartinio grotuvo ID).
Savo ruožtu, kai žaidėjas baigs groti melodiją, jis paspaus AUKŠTYNO mygtuką ir ciklas (atnaujinta) bus išsiųstas MQTT brokeriui, kuris ją perduos visiems ciklo kanalo žaidėjams.
ši kilpa liks „neveikli“, kol bus paleista dabartinė kilpa ir tada ją pakeis. todėl žaidėjui jis bus skaidrus. taip pat, kadangi nauja kilpa šiuo metu yra išsaugota grotuvo įrenginyje, muzikai nėra interneto delsos, todėl išsprendėme antrąją problemą.
2 veiksmas: nustatykite serverį - „Ngrok“
„ngrok“yra tunelio paslauga. Tai leidžia mums atskleisti vietiniu mastu veikiančią paslaugą (mūsų atveju - „Node -RED“) išoriniam pasauliui - be vargo nustatant serverį ar tvarkant DNS įrašus. Tiesiog paleiskite „Node-RED“savo kompiuteryje ir paleiskite „ngrok“tame pačiame prievade, kuriame veikia „Node-RED“.
Štai ir viskas - gausite URL, kurį galėsite naudoti norėdami pasiekti „Node -RED“iš bet kurios pasaulio vietos, nepriklausomai nuo to, prie kokio tinklo jis prijungtas.
Diegimas ir konfigūravimas
- Atsisiųskite „ngrok“savo operacinei sistemai iš čia.
- Atlikite atsisiuntimo puslapyje nurodytą veiksmą iki veiksmo „Įjunkite“.
- „Įjunkite žingsnį“pakeiskite 80 į 1883 - ir http į tcp, kaip nurodyta,./ngrok tcp 1883, priklausomai nuo jūsų
- Išsaugokite URL ir prievado numerį (matote paveikslėlyje), kurio mums prireiks vėliau.
3 veiksmas: serverio nustatymas - raudonas mazgas
Projekto serverio logika „Node-RED“yra vizualinio programavimo aplinka, leidžianti prijungti įvairią programinę įrangą (ir aparatinę įrangą!).
Čia mes sukūrėme visų žaidėjų bendravimo logiką (dalijamės ir gauname kilpas bei koordinuojame posūkius)
Raudonojo mazgo diegimas
atlikite šiuos veiksmus, norėdami įkelti „Node-RED“srautą į vietinį kompiuterį:
- „Node-RED“reikalingas „Node.js“, įdiekite jį iš čia
- įdiekite „Node-RED“patys, vadovaudamiesi čia pateiktomis instrukcijomis.
Dabar, kai esate įdiegę „Node-RED“, paleiskite jį vadovaudamiesi aukščiau nurodytu žingsniu ir patikrinkite, ar galite pamatyti tuščią drobės puslapį. Jis turėtų būti
Dabar turėsite importuoti srautą, kurį naudojome šiam projektui, jį rasite čia ir tiesiog paspauskite importuoti, pridėkite JSON failą ir paspauskite Diegti.
Raudonojo mazgo diegimas:
Jei pažvelgsite į paveikslėlį, pridėtą prie šio žingsnio, pamatysite, kad turime du pagrindinius „veiksmus“, mes gauname srovės ciklą iš vieno iš mūsų žaidėjų ir tada perduodame jį visiems kitiems žaidėjams. be to, naująjį posūkį transliuojame visiems žaidėjams. todėl žaidimas lieka sinchronizuotas.
4 žingsnis: nustatykite serverį - MQTT (Mosquitto)
Kadangi „Node-RED“neturi savo MQTT tarpininko, ir mes turėsime bendrauti su savo jutikliais ir aktyvikliais per MQTT, mes naudosime tam skirtą MQTT tarpininką. Kadangi „Node-RED“rekomenduoja „Mosquitto“, tai mes naudosime. Čia rasite informacijos apie MQTT ir kodėl ji dažnai naudojama daiktų interneto projektuose.
Diegimas ir konfigūravimas
- Atsisiųskite „Mosquitto“iš čia ir įdiekite ją pagal savo operacinę sistemą.
- Paprastai, norėdami prijungti „Node-RED“prie „Mosquitto“, turite vadovautis čia pateiktomis instrukcijomis. Tačiau, jei naudojote mūsų srautą, jis jau yra iš anksto sukonfigūruotas. Kol tinkamai įdiegsite srautą ir „Mosquitrro“, o „Mosquitto“veiks 1883 prievade (kuriame jis veikia pagal numatytuosius nustatymus), jis turėtų veikti iš dėžutės.
- Atminkite, kad tai reiškia, kad MQTT tarpininkas ir jūsų „Node-RED“serveris veikia tame pačiame įrenginyje. Tai naudinga supaprastinant bendravimą sistemos viduje. Daugiau informacijos rasite pastaboje žemiau.
MQTT srauto stebėjimas
Srautui stebėti naudoju „MQTTfx“, tai puikus įrankis su labai paprasta GUI.
5 žingsnis: Kodas
kodą galite rasti „GitHub“(su visais duomenų failais ir konfigūracija. h)
Priklausomybės:
prieš įkeliant kodą į esp2866, turėsite įdiegti kelias bibliotekas:
- libmad-8266 (iššifruoti muziką iš SPIFF ir į I2S)
- EspMQTTClient
- ESP8266WiFi
- „Adafruit_NeoPixel“
Įkelkite garsus į ESP naudodami SPIFF:
- vykdykite šį puikų nurodymą.
- pridėkite duomenų aplanką prie šaltinio kodo katalogo.
- „Arduino IDE“skiltyje „Įrankiai“pakeiskite „Flash“dydį į „4 MB (FS: 3 MB TOA: ~ 512 KB)“
- Taip pat skiltyje Įrankiai Paspauskite ESP2866 Sketch Data Upload
Parametrų nustatymas:
po to eikite į failą config.h ir pridėkite reikalingus duomenis, pvz., WIFI kredencialus, ir ngrok URL bei prievadą iš ankstesnio veiksmo (žiūrėkite pridėtą nuotrauką).
p.s.-Aš dar pridėjau automatinio prisijungimo funkciją, padedančią nustatyti WIFI ir ngrok duomenis iš savo išmaniojo telefono, nes tai buvo tik pirmasis koncepcijos įrodymas, norėčiau ją kada nors pridėti.
Nustatykite norimą žaidėjo kiekį (šis žaidimas geriausiai tinka 2–3 žaidėjams, o iš dėžutės jis pakraunamas daugybe garsų 2 žaidėjams). bet galima lengvai reguliuoti daugiau:
kiekvienam žaidėjui pridėkite kitą srautą mazge raudonai, kad paskelbtumėte ciklą konkrečiai vartotojui skirtoje temoje.
taip pat galite redaguoti muzikinį garsą, susieję šį masyvą į savo pasirinktinius garsus:
čia galite pamatyti 3 rūšių instrumentus (Chrods 0 žaidėjui, Lead 1 žaidėjui ir Bass 2 grotuvui)
const char* paths [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 veiksmas: spausdinkite 3D modelį
Pirmiausia atsisiųskite STL ir atsispausdinkite.
nuėmus atramas ir galbūt šiek tiek nušlifavus (priklausomai nuo spausdintuvo skiriamosios gebos)
nudažykite jį norima spalva
7 žingsnis: surinkimas ir suvirinimas
Taigi iš esmės čia vyksta tikroji magija.
galite sekti šias schemas ir suvirinti viską kartu.
atminkite, kad galite pakeisti PIN kodų padėtį, nepamirškite pakeisti ir kodo.
A0 ir I2S yra gana tvirtai pritvirtinti:
kadangi A0 yra skirtas rezistoriaus tiltui (mes naudojame srovės skirtumą, kad žinotume, kuris mygtukas iš 5 buvo paspaustas - panašiai kaip šioje instrukcijoje.
„I2S“turi specifinį kodavimą, kurį galite rasti čia
8 veiksmas: žaiskite keletą kilpų su draugais
Rekomenduojamas:
„Pasidaryk pats“„Leds Arduino“ruletės žaidimas: 3 žingsniai (su nuotraukomis)
„Pasidaryk pats“37 „Leds Arduino“ruletės žaidimas: Ruletė yra kazino žaidimas, pavadintas prancūziško žodžio, reiškiančio mažą ratą, vardu
„Arduino Halloween Edition“- „Zombies“iššokantis ekranas (žingsniai su nuotraukomis): 6 žingsniai
„Arduino Halloween Edition“- „Zombies“iššokantis ekranas (žingsniai su paveikslėliais): norite Helovino metu išgąsdinti savo draugus ir sukelti riksmą? O gal tiesiog norite padaryti gerą išdaigą? Šis iššokantis „Zombies“ekranas gali tai padaryti! Šioje instrukcijoje aš išmokysiu jus, kaip lengvai padaryti iššokančius zombius naudojant „Arduino“. HC-SR0
Paprasta „Arduino“melodija: 3 žingsniai
Paprasta „Arduino“melodija: paprasta „Arduino“melodija yra būdas pradėti „Arduino“projektus, nes jūs ketinate įkelti kodą tik iš „Arduino“programinės įrangos tiesiogiai nieko nerašydami
Varžtas - „pasidaryk pats“belaidis įkrovimo naktinis laikrodis (6 žingsniai): 6 žingsniai (su nuotraukomis)
Varžtas - „Pasidaryk pats“belaidis įkrovimo naktinis laikrodis (6 žingsniai): Indukcinis įkrovimas (taip pat žinomas kaip belaidis įkrovimas arba belaidis įkrovimas) yra belaidžio energijos perdavimo tipas. Jis naudoja elektromagnetinę indukciją tiekti elektros energiją nešiojamiesiems įrenginiams. Dažniausia programa yra „Qi“belaidžio įkrovimo st
Su gimtadieniu melodija naudojant „Circuit“žaidimų aikštelę: 3 žingsniai
Su gimtadieniu melodija naudojant „Circuit“žaidimų aikštelę: Štai kaip žaisti „Happy Birthday Melody“„Adafruit“suderinamoje „Arduino“plokštės grandinės žaidimų aikštelėje. Man reikėjo kažko mažo, kad įterptumėte į dėžutę, skirtą gimtadienio dėžutės staigmenai