INHOUDSOPGAWE:

Melodie: 8 stappe (met prente)
Melodie: 8 stappe (met prente)

Video: Melodie: 8 stappe (met prente)

Video: Melodie: 8 stappe (met prente)
Video: 💦Blackview BV9200 ЧЕСТНЫЙ ОБЗОР ПРОТИВОУДАРНОГО 2024, November
Anonim
Image
Image
Verstaan die vloei
Verstaan die vloei

Benewens die vele voordele en tegnologiese oplossings wat werk van die huis af moontlik maak, bly die moeilikheid om lewensondersteuning onder medewerkers op te stel en te skep. MELODY is 'n digitaal-fisiese toestel wat dit moontlik maak om kort musiek saam te stel. Medewerkers koördineer tyd en die toestel bied 'n jam-sessie met draaie en verskillende ewekansige geluide. Die eerste deelnemer stel 'n spesifieke ritme, waarna elke deelnemer sy eie musikale afdeling byvoeg wat ooreenstem met die stelritme. Om dit makliker te maak vir gebruikers sonder 'n musikale agtergrond, help die sagteware hulle om tred te hou deur hul klik te toets en aan te pas by die gepaste ritme. Die sessie eindig na ongeveer 3 minute wanneer alle deelnemers hul deel opgeneem het.

Hoe werk dit?

Melodie is gebaseer op ESP2866-hardeware, wat met 'n Node-Red-bediener kommunikeer via MQTT-protokol. Die toestel vertaal die speler se notas in 'n string karakters wat na die bediener gestuur word en van die bediener terug na die ander spelers. Dit stel almal in staat om die deuntjie te speel en te hoor sonder onderbreking van hul netwerkverbinding.

Melodie het twee hoof visuele aanwysers. Die eerste is 'n LED -strook wat die speler laat weet wanneer Loop begin en wanneer dit eindig, en aandui of dit die speler se beurt is. Die tweede is 'n LED -skerm in die middel van die produk, wat gebruik word om die bestaande deuntjie visueel te vertoon. 'N Aftelling van 3 na 1 dui aan dat hy moet begin speel, en 'n tydsberekening wys die gebruiker wanneer en hoe sy wil bydra tot die melodie van die groep. Die opname word outomaties in die onderneming se wolk gestoor vir toekomstige gebruik.

Hierdie projek is ontwerp deur vier studente aan die Media Innovation Lab (MiLab) by die interdissiplinêre sentrum Herzliya (IDC): Shahar Agassy, Eden Bar-Tov, Gal Eshchar en Gad Stern. Met die hulp van Zvika Markfeld, Netta Ofer en Michal Leschinsky en die leiding van Noa Morag en Oren Zuckerman.

dankie aan Tom Granot vir die skep van 'n wonderlike instruksies wat my gehelp het om te leer hoe ek 'n paar dinge hier kan implementeer ('n paar van die stappe hier is gemodelleer na hierdie wonderlike instruksies).

Voorrade

  • 3D -drukker
  • ESP8266
  • 7 knoppies
  • 8X8 LED matriks
  • WS2812B LED -strook
  • I2S versterker
  • Vroulike 1/8 "(3,5 mm) 4 -polige klankaansluiting
  • 4X 1K weerstand
  • 1X3K weerstand

Stap 1: Begrip van die vloei

Verstaan die vloei
Verstaan die vloei
Verstaan die vloei
Verstaan die vloei

In hierdie projek het ons probeer om 'n paar probleme aan te pak:

  1. Hoe kan ons dit aanlyn maak, sodat spelers terselfdertyd kan speel?
  2. Hoe kan ons internetvertragings omseil en 'n naatlose ervaring skep?
  3. Hoe kan ons die musiek laat klink, selfs vir mense sonder 'n musikale agtergrond?

Tydsberekening en reeksvolgorde van die musiek

Om die eerste probleem op te los, het ons na die MIDI -protokol gekyk en probeer om dit te gebruik, maar ons het gesien dat dit meer robuust is as wat ons eintlik nodig gehad het, maar ons wou dit ook eenvoudig maak sodat ons die eerste werkende prototipe kan bou. Ons het dus inspirasie uit die MIDI geneem en ons musikale lus voorgestel deur 'n string getalle (van 0-5) maal die grootte van die lusse die tyd van die spelers (ons sal al die musikale wiskunde later verduidelik).

In musiek verdeel ons die ritmes in musikale mate. Elke maat is basies 'n klein segment wat ons kies om 4/4 te gebruik (wat 4 slae in 'n musikale maat beteken) - die algemeenste een.

Elke maat word dan in 4 samplingsvensters verdeel, sodat elke noot wat gespeel word, outomaties in 'n goeie posisie geplaas word en ons ook 'n lied kan voorstel as 'n string getalle wat na die bediener gestuur moet word.

Om vriendelik te wees teenoor spelers sonder 'n musikale agtergrond, het ons drie dinge gedoen:

  1. Beperk die aantal sleutels om die speler op minder opsies te laat fokus.
  2. Ons het note op dieselfde skaal gekies wat goed saamspeel, sodat daar geen dissonansie klank is nie.
  3. Elke druk is ingestel op die "venster" van die ritme en vervreem die speler se musiek met die ritme

Kommunikasie protokolle

Dus, nadat ons die logika agter die musiek verstaan het, hoe kan ons dit tussen ons spelers kommunikeer?

daarvoor gebruik ons MQTT, 'n netwerk-protokol vir publiseer-intekening wat boodskappe tussen toestelle vervoer.

elke speler is ingeskryf vir twee onderwerpe: die lus (kry die mees onlangse lus) en die beurt (kry die ID van die huidige speler vir sinchronisasie).

As 'n speler op sy beurt klaar is met die snit, druk hy op die UP -knoppie en die lus (die opgedateerde een) sal na die MQTT -makelaar gestuur word, wat dit na al die spelers op die luskanaal terugstuur.

hierdie lus sal "dormant" bly totdat die huidige lus klaar is met speel en dit dan vervang. dus sal dit deursigtig wees vir die speler. aangesien die nuwe lus tans plaaslik op die speler -toestel gestoor word, is daar geen internetvertraging vir die musiek nie, en ons het die tweede probleem opgelos.

Stap 2: Stel die bediener in - Ngrok

Stel die bediener in - Ngrok
Stel die bediener in - Ngrok
Stel die bediener in - Ngrok
Stel die bediener in - Ngrok

ngrok is 'n tonneldiens. Dit stel ons in staat om 'n plaaslik lopende diens (in ons geval, Node -RED) aan die buitewêreld bloot te stel - sonder die moeite om 'n bediener op te stel of DNS -rekords te hanteer. U voer eenvoudig Node-RED op u rekenaar uit, en voer dan ngrok uit op dieselfde poort waarop Node-RED werk.

Dit is dit - u kry 'n URL waarmee u vanaf enige plek ter wêreld toegang tot Node -RED kan kry, ongeag die netwerk waarmee dit gekoppel is.

Installasie en opset

  1. Laai ngrok vir u bedryfstelsel hier af.
  2. Volg die stap op die aflaai -bladsy tot in die stap "Maak dit klaar".
  3. Wissel die 80 in 1883 in die 'Fire it up step' - en die http na tcp soos in./ngrok tcp 1883, afhangende van u
  4. stoor die URL en poortnommer (kan gesien word in die prentjie), ons sal dit later nodig hê.

Stap 3: Stel die bediener in - Node -Red

Stel die bediener in - Node -Red
Stel die bediener in - Node -Red

Die bedienerlogika van die projek, Node-RED, is 'n visuele programmeringsomgewing waarmee u verskillende sagteware (en hardeware!) Kan koppel.

Hier het ons die logika van die kommunikasie tussen al die spelers gemaak (om die lusse te deel en te ontvang en die draaie te koördineer)

Installeer Node-Red

volg die volgende stappe om ons Node-RED-stroom op u plaaslike rekenaar te laai:

  1. Node-RED vereis Node.js, installeer dit van hier af
  2. installeer Node-RED self volgens die instruksies hier.

Noudat u Node-RED geïnstalleer het, voer dit uit volgens die instruksies op die stap hierbo en bevestig dat u 'n leë doekbladsy kan sien. Dit moet geleë wees in

U moet nou die vloei wat ons vir hierdie projek gebruik het, invoer; u kan dit hier vind en druk op invoer, voeg die JSON -lêer by en druk op Ontplooi.

Installeer Node-Red:

As u na die prentjie kyk wat by hierdie stap aangeheg is, kan u sien dat ons twee hoofaksies het, ons ontvang 'n stroomlus van een van ons spelers en stuur dit dan na al die ander spelers. Daarbenewens het ons die nuwe beurt aan al die spelers uitgesaai. sodat die spel in ooreenstemming bly.

Stap 4: Stel die bediener in - MQTT (Mosquitto)

Stel die bediener in - MQTT (Mosquitto)
Stel die bediener in - MQTT (Mosquitto)

Aangesien Node-RED nie sy eie MQTT-makelaar het nie, en ons oor MQTT met ons sensors en aktiveerders sal moet kommunikeer, gebruik ons 'n toegewyde MQTT-makelaar. Aangesien Node-RED Mosquitto aanbeveel, is dit die een wat ons sal gebruik. Kyk hier vir meer inligting oor MQTT en waarom dit gereeld in IoT -projekte gebruik word.

Installasie en opset

  1. Laai Mosquitto hier af en installeer dit volgens u bedryfstelsel.
  2. Normaalweg moet u die instruksies hier volg om Node-RED aan Mosquitto te koppel. As u egter ons stroom gebruik het, is dit reeds vooraf vir u gekonfigureer. Solank u die vloei en Mosquitrro behoorlik installeer en Mosquitto op poort 1883 loop (waarop dit standaard werk), behoort dit uit die boks te werk.
  3. Let daarop dat dit beteken dat die MQTT-makelaar en u Node-RED-bediener op dieselfde masjien werk. Dit is handig om kommunikasie binne die stelsel te vereenvoudig. Sien die nota hieronder vir meer inligting.

Monitor MQTT -verkeer

Ek het MQTTfx gebruik om die verkeer te monitor, dit is 'n wonderlike hulpmiddel met 'n baie eenvoudige GUI.

Stap 5: Die kode

Die kode
Die kode

u kan die kode in GitHub vind (met al die datalêers en die config.h)

Afhanklikheid:

Voordat u die kode na die esp2866 laai, moet u 'n paar biblioteke installeer:

  1. libmad-8266 (dekodeer die musiek van SPIFF en na I2S)
  2. EspMQTTClient
  3. ESP8266WiFi
  4. Adafruit_NeoPixel

Laai die klanke op na die ESP met SPIFF:

  1. volg hierdie wonderlike instruksies.
  2. voeg die datamap by die bronkode -gids.
  3. In die Arduino IDE onder Tools verander die flitsgrootte na "4MB (FS: 3MB TOA: ~ 512KB)"
  4. Ook onder Tools Press ESP2866 Sketch Data Upload

Stel parameters:

Gaan daarna na die config.h -lêer en voeg die vereiste data by, soos WIFI -geloofsbriewe en die ngrok -URL en poort van die vorige stap (kyk die aangehegte foto vir verwysing).

p.s-Ek het nog 'n outomatiese verbindingsfunksie bygevoeg om u te help om die WIFI- en ngrok-data van u slimfoon in te stel, aangesien dit net 'n eerste bewys van die konsep was, wil ek dit eendag byvoeg.

Stel die hoeveelheid speler in wat u wil hê (hierdie speletjie werk die beste vir 2-3 spelers, en uit die boks is dit gelaai met 'n verskeidenheid klanke vir 2 spelers). maar kan maklik aangepas word vir meer:

voeg vir elke speler nog 'n stroom in die node-rooi by om 'n lus te publiseer onder 'n gebruikersspesifieke onderwerp.

U kan ook die musikale klank wysig deur hierdie skikking aan u pasgemaakte klanke te verander:

hier kan u drie soorte instrumente sien (Chrods vir speler 0, Lead vir speler 1 en Bass vir speler 2)

const char* path [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", "/Bas_C3.wav", "/Bas_D3.wav", "/Bas_F3.wav", "/Bas_G3.wav", "/Bas_A3.wav"};

Stap 6: Druk die 3D -model af

Druk die 3D -model af
Druk die 3D -model af
Druk die 3D -model af
Druk die 3D -model af
Druk die 3D -model af
Druk die 3D -model af
Druk die 3D -model af
Druk die 3D -model af

Laai die STL af vir die eerste stap en druk dit af.

na die verwydering van die stutte en miskien 'n bietjie skuur (afhangende van die resolusie van die drukker)

verf dit tot die gewenste kleur

Stap 7: Monteer en sweis

Samestelling en sweiswerk
Samestelling en sweiswerk

So eintlik is dit waar die ware magie gebeur.

u kan hierdie skemas volg en alles aanmekaar las.

onthou dat u die posisie van die PIN's kan verander, onthou dat u dit ook in die kode moet verander.

die A0 en die I2S is redelik vasgemaak:

aangesien die A0 vir die weerstandsbrug is (ons gebruik die verskil in die stroom om te weet watter knoppie uit die 5 gedruk is - soortgelyk aan hierdie instruksies.

die I2S het 'n spesifieke kodering, u kan dit hier vind

Stap 8: Speel 'n paar lusse met u vriende

Aanbeveel: