INHOUDSOPGAWE:
- Voorrade
- Stap 1: Begrip van die vloei
- Stap 2: Stel die bediener in - Ngrok
- Stap 3: Stel die bediener in - Node -Red
- Stap 4: Stel die bediener in - MQTT (Mosquitto)
- Stap 5: Die kode
- Stap 6: Druk die 3D -model af
- Stap 7: Monteer en sweis
- Stap 8: Speel 'n paar lusse met u vriende
Video: Melodie: 8 stappe (met prente)
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:23
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
In hierdie projek het ons probeer om 'n paar probleme aan te pak:
- Hoe kan ons dit aanlyn maak, sodat spelers terselfdertyd kan speel?
- Hoe kan ons internetvertragings omseil en 'n naatlose ervaring skep?
- 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:
- Beperk die aantal sleutels om die speler op minder opsies te laat fokus.
- Ons het note op dieselfde skaal gekies wat goed saamspeel, sodat daar geen dissonansie klank is nie.
- 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
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
- Laai ngrok vir u bedryfstelsel hier af.
- Volg die stap op die aflaai -bladsy tot in die stap "Maak dit klaar".
- Wissel die 80 in 1883 in die 'Fire it up step' - en die http na tcp soos in./ngrok tcp 1883, afhangende van u
- 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
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:
- Node-RED vereis Node.js, installeer dit van hier af
- 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)
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
- Laai Mosquitto hier af en installeer dit volgens u bedryfstelsel.
- 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.
- 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
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:
- libmad-8266 (dekodeer die musiek van SPIFF en na I2S)
- EspMQTTClient
- ESP8266WiFi
- Adafruit_NeoPixel
Laai die klanke op na die ESP met SPIFF:
- volg hierdie wonderlike instruksies.
- voeg die datamap by die bronkode -gids.
- In die Arduino IDE onder Tools verander die flitsgrootte na "4MB (FS: 3MB TOA: ~ 512KB)"
- 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
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
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:
Nuttelose sak (met persoonlikheid): 9 stappe (met prente)
Pocket Useless Box (met persoonlikheid): Alhoewel ons nog ver van 'n robotopstand kan wees, is daar 'n masjien wat mense al weerspreek, al is dit op die kleinste manier moontlik. Of jy dit nou 'n nuttelose boks of 'n los masjien wil noem, hierdie snaakse, snaakse robot is
LEGO WALL-E Met Micro: bit: 8 stappe (met prente)
LEGO WALL-E Met Micro: bit: Ons gebruik 'n micro: bit saam met 'n LEGO-vriendelike Bit Board om die twee servomotors te beheer waarmee WALL-E die gevaarlike terrein van u woonkamervloer kan deurkruis .Vir die kode gebruik ons Microsoft MakeCode, wat 'n blo
DIY -stroombaanbord met skuifspelde - MAKER - STEM: 3 stappe (met prente)
DIY -stroombaanbord met skuifspelde | MAKER | STEM: Met hierdie projek kan u die pad van die elektriese stroom verander deur verskillende sensors. Met hierdie ontwerp kan u wissel tussen die aansteek van 'n blou LED of die aktivering van 'n zoemer. U het ook die keuse om 'n ligafhanklike weerstand te gebruik met
Beeldhoukundige eksperimente met harde snoep: 9 stappe (met prente)
Beeldhoukundige eksperimente met harde snoep: dit kan gegote, smeebaar en deursigtig wees, dit verander met verloop van tyd en kan met hitte, water of druk geërodeer word. Dit val in vorms, verander sy vorm stadig in reaksie op swaartekrag. Dit kan enige kleur aanneem en 'n wye verskeidenheid teksture verkry met
UD-waarskuwing. vir 'n seuntjie met outisme: 7 stappe (met prente)
UD-waarskuwing. vir 'n seuntjie met outisme: Ud-Alert, of beter Ontkleed Alert, maar waarvoor? Ons seun, Scott, 13 jaar oud, ly aan outisme. Hy is nie -verbaal en het nog steeds probleme om ons te wys wanneer hy na die toilet moet gaan. As gevolg van sy beperkte kommunikasie, trek hy sy klere uit