Turinys:

Melodija: 8 žingsniai (su nuotraukomis)
Melodija: 8 žingsniai (su nuotraukomis)

Video: Melodija: 8 žingsniai (su nuotraukomis)

Video: Melodija: 8 žingsniai (su nuotraukomis)
Video: Nesimiega? 8 Žingsniai Kaip Pagerinti Miego Kokybę **SHOCKING RESULTS** 2024, Lapkritis
Anonim
Image
Image
Srauto supratimas
Srauto supratimas

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ą

Srauto supratimas
Srauto supratimas
Srauto supratimas
Srauto supratimas

Šiame projekte bandėme išspręsti kai kurias problemas:

  1. Kaip mes galime tai padaryti internete, kad žaidėjai galėtų žaisti tuo pačiu metu?
  2. Kaip apeiti interneto delsą ir sukurti vientisą patirtį?
  3. 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:

  1. Apribokite klavišų skaičių, kad žaidėjas sutelktų dėmesį į mažiau parinkčių.
  2. Mes pasirinkome tos pačios masto natas, kurios gerai groja kartu, todėl nebus jokio disonanso garso.
  3. 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“

Serverio nustatymas - „Ngrok“
Serverio nustatymas - „Ngrok“
Serverio nustatymas - „Ngrok“
Serverio nustatymas - „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

  1. Atsisiųskite „ngrok“savo operacinei sistemai iš čia.
  2. Atlikite atsisiuntimo puslapyje nurodytą veiksmą iki veiksmo „Įjunkite“.
  3. „Įjunkite žingsnį“pakeiskite 80 į 1883 - ir http į tcp, kaip nurodyta,./ngrok tcp 1883, priklausomai nuo jūsų
  4. Išsaugokite URL ir prievado numerį (matote paveikslėlyje), kurio mums prireiks vėliau.

3 veiksmas: serverio nustatymas - raudonas mazgas

Serverio nustatymas - mazgas raudonas
Serverio nustatymas - mazgas raudonas

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į:

  1. „Node-RED“reikalingas „Node.js“, įdiekite jį iš čia
  2. į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)

Serverio nustatymas - MQTT (Mosquitto)
Serverio nustatymas - 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

  1. Atsisiųskite „Mosquitto“iš čia ir įdiekite ją pagal savo operacinę sistemą.
  2. 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.
  3. 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

Kodas
Kodas

kodą galite rasti „GitHub“(su visais duomenų failais ir konfigūracija. h)

Priklausomybės:

prieš įkeliant kodą į esp2866, turėsite įdiegti kelias bibliotekas:

  1. libmad-8266 (iššifruoti muziką iš SPIFF ir į I2S)
  2. EspMQTTClient
  3. ESP8266WiFi
  4. „Adafruit_NeoPixel“

Įkelkite garsus į ESP naudodami SPIFF:

  1. vykdykite šį puikų nurodymą.
  2. pridėkite duomenų aplanką prie šaltinio kodo katalogo.
  3. „Arduino IDE“skiltyje „Įrankiai“pakeiskite „Flash“dydį į „4 MB (FS: 3 MB TOA: ~ 512 KB)“
  4. 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į

Spausdinti 3D modelį
Spausdinti 3D modelį
Spausdinti 3D modelį
Spausdinti 3D modelį
Spausdinti 3D modelį
Spausdinti 3D modelį
Spausdinti 3D modelį
Spausdinti 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

Surinkimas ir suvirinimas
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: