Съдържание:

Мелодия: 8 стъпки (със снимки)
Мелодия: 8 стъпки (със снимки)

Видео: Мелодия: 8 стъпки (със снимки)

Видео: Мелодия: 8 стъпки (със снимки)
Видео: Стоян колев се кара с яница 2024, Юли
Anonim
Image
Image
Разбиране на потока
Разбиране на потока

Наред с многото предимства и технологични решения, които позволяват работа от вкъщи, остава трудността при формулирането и създаването на поддържане на живота сред колегите. MELODY е цифрово-физическо устройство, което позволява създаването на съвместни кратки музикални конфитюри. Колегите координират времето и устройството задава джем сесия с завои и различни случайни звуци. Първият участник задава специфичен ритъм, след което всеки участник добавя своя музикална секция, съответстваща на зададения ритъм. За да улесни потребителите без музикален опит, софтуерът им помага да поддържат темпо, като изваждат проби от кликванията си и се настройват към подходящия ритъм. Сесията приключва след около 3 минути, когато всички участници приключат със записа на своята част.

Как работи?

Melody е базиран на хардуер ESP2866, който комуникира със сървър Node-Red по протокол MQTT. Устройството превежда бележките на играча в низ от знаци, който се изпраща до сървъра и от сървъра обратно до другите играчи. Това позволява на всеки да свири и чува мелодията без прекъсване от мрежовата си връзка.

Мелодията има два основни визуални индикатора. Първият е LED лента, която позволява на играча да знае кога Loop започва и кога приключва и показва дали е ред на играча. Вторият е LED дисплей в центъра на продукта, който се използва за визуално показване на съществуващата мелодия. Обратното броене от 3 до 1 показва, че трябва да започне да играе, а дисплеят на тайминга насочва потребителя кога и как иска да допринесе за Мелодията на групата. Записът автоматично се запазва в облака на компанията за бъдеща употреба.

Този проект е проектиран от четирима студенти в лабораторията за медийни иновации (MiLab) в интердисциплинарния център Herzliya (IDC): Shahar Agassy, Eden Bar-Tov, Gal Eshchar и Gad Stern. Със съдействието на Звика Маркфелд, Нетта Офер и Михал Лещински и ръководството на Ноа Мораг и Орен Зукерман.

благодаря на Том Гранот за създаването на страхотна инструкция, която ми помогна да науча как да прилагам някои от нещата тук (някои от стъпките тук са моделирани след тази страхотна инструкция).

Консумативи

  • 3D принтер
  • ESP8266
  • 7 бутона
  • 8X8 LED матрица
  • WS2812B LED лента
  • I2S усилвател
  • Женски 1/8 "(3,5 мм) 4 -полюсен аудио жак
  • 4X 1K резистор
  • 1X3K резистор

Стъпка 1: Разбиране на потока

Разбиране на потока
Разбиране на потока
Разбиране на потока
Разбиране на потока

В този проект се опитахме да се справим с някои проблеми:

  1. Как можем да го направим онлайн, така че играчите да могат да играят едновременно?
  2. Как можем да заобиколим закъсненията в интернет и да създадем безпроблемно изживяване?
  3. Как можем да накараме музиката да звучи добре дори за хора без музикален опит?

Време и сериализация на музиката

За да разрешим първия проблем, разгледахме протокола MIDI и се опитахме да го използваме, но видяхме, че той е по -здрав от това, което всъщност ни трябваше, и наистина искахме да го опростим, за да можем да изградим първия работещ прототип. Така че черпихме вдъхновение от MIDI и направихме нашия музикален цикъл представен от низ от числа (от 0-5) пъти по размер на контурите по време на играчите (ще обясним цялата музикална математика по-късно).

В музиката разделяме ритмите на музикални ленти. Всеки бар е по същество малък сегмент, който избираме да използваме 4/4 (което означава 4 удара в музикален бар) - най -често срещаният.

След това всеки ритъм се разделя на 4 прозореца за вземане на проби, така че всяка изиграна нота ще бъде автоматично подравнена в добра позиция c и също така ще ни позволи да представим песен като низ от числа, които да изпратим до сървъра.

За да бъдем приятелски настроени към играчи без музикален опит, направихме три неща:

  1. Ограничете броя на клавишите, за да накарате плейъра да се съсредоточи върху по -малко опции.
  2. Подбрахме ноти в същия мащаб, които свирят добре заедно, така че няма да има дисонансен звук.
  3. Всяко натискане е настроено към „прозореца“на ритъма, като по този начин музиката на плейъра е чужда на ритъма

Комуникационни протоколи

И така, след като разбрахме логиката зад музиката, как можем да я съобщим между нашите играчи?

за това използваме MQTT, мрежов протокол за публикуване и абониране, който транспортира съобщения между устройства.

всеки играч е абониран за две теми: цикълът (получаване на най -актуалния цикъл) и завой (получава идентификатора на текущия плейър за целите на синхронизирането).

На свой ред, когато играчът приключи с възпроизвеждането на мелодията, той/тя ще натисне бутона НАГОРЕ и цикълът (актуализираният) ще бъде изпратен до брокера на MQTT, който ще го предаде обратно на всички играчи по канала на цикъла.

този цикъл ще остане "спящ", докато текущият цикъл не приключи с възпроизвеждането и след това ще го замени. по този начин той ще бъде прозрачен за играча. също така, тъй като понастоящем новият цикъл се записва локално на устройството на плейъра, няма закъснение в интернет за музиката и затова решихме втория проблем.

Стъпка 2: Настройка на сървъра - Ngrok

Настройка на сървъра - Ngrok
Настройка на сървъра - Ngrok
Настройка на сървъра - Ngrok
Настройка на сървъра - Ngrok

ngrok е услуга за тунелиране. Тя ни позволява да изложим локално работеща услуга (в нашия случай Node -RED) на външния свят - без да се налага създаването на сървър или работа с DNS записи. Просто стартирате Node-RED на вашия компютър и след това стартирате ngrok на същия порт, на който работи Node-RED.

Това е всичко - ще получите URL адрес, който можете да използвате за достъп до Node -RED от всяка точка на света, независимо от мрежата, към която е свързан.

Инсталиране и конфигуриране

  1. Изтеглете ngrok за вашата операционна система от тук.
  2. Следвайте стъпката на страницата за изтегляне до стъпката „Запалете я“.
  3. В стъпката „Запалете го“сменете 80 за 1883 - и http за tcp както в,./ngrok tcp 1883 в зависимост от вашия
  4. запазете URL адреса и номера на порта (вижда се на изображението), ще ни трябва по -късно.

Стъпка 3: Настройка на сървъра - Node -Red

Настройка на сървъра - Node -Red
Настройка на сървъра - Node -Red

Логиката на сървъра на проекта, Node-RED е среда за визуално програмиране, която ви позволява да свързвате различен софтуер (и хардуер!).

Тук направихме логиката на комуникацията между всички играчи (споделяне и получаване на цикли и координиране на завоите)

Инсталиране на Node-Red

следвайте следните стъпки, за да заредите нашия Node-RED поток на вашия локален компютър:

  1. Node-RED изисква Node.js, инсталирайте го от тук
  2. инсталирайте самия Node-RED, като използвате инструкциите тук.

Сега, когато имате инсталиран Node-RED, стартирайте го, като използвате инструкциите на стъпката по-горе и потвърдете, че можете да видите празна страница с платно. Тя трябва да се намира в

Сега ще трябва да импортирате потока, който използвахме за този проект, можете да го намерите тук и просто натиснете import, добавете JSON файла и натиснете Deploy.

Инсталиране на Node-Red:

ако погледнете изображението, което е приложено към тази стъпка, можете да видите, че имаме 2 основни "действия", получаваме текущ цикъл от един от нашите играчи и след това го предаваме на всички останали играчи. освен това излъчваме новия завой на всички играчи. така че играта остава в синхрон.

Стъпка 4: Настройка на сървъра - MQTT (Mosquitto)

Настройка на сървъра - MQTT (Mosquitto)
Настройка на сървъра - MQTT (Mosquitto)

Тъй като Node-RED няма собствен MQTT брокер и ще трябва да комуникираме с нашите сензори и активатори през MQTT, ще използваме специален MQTT брокер. Тъй като Node-RED препоръчва Mosquitto, това ще използваме. Вижте тук за малко информация за MQTT и защо често се използва в IoT проекти.

Инсталиране и конфигуриране

  1. Изтеглете Mosquitto от тук и го инсталирайте, всичко според вашата операционна система.
  2. Обикновено трябва да следвате инструкциите тук, за да свържете Node-RED към Mosquitto. Ако обаче сте използвали нашия поток, той вече е предварително конфигуриран за вас. Докато инсталирате потока и Mosquitrro правилно и Mosquitto работи на порт 1883 (на който работи по подразбиране), той трябва да работи извън кутията.
  3. Обърнете внимание, че това означава, че брокерът MQTT и вашият Node-RED сървър работят на една и съща машина. Това е полезно за опростяване на комуникацията вътре в системата. Вижте бележката по -долу за повече информация.

Мониторинг на MQTT трафика

Използвах MQTTfx за наблюдение на трафика, това е чудесен инструмент с много прост графичен интерфейс.

Стъпка 5: Кодът

Кодът
Кодът

можете да намерите кода в GitHub (с всички файлове с данни и config.h)

Зависимости:

преди да заредите кода в esp2866, ще трябва да инсталирате няколко библиотеки:

  1. libmad-8266 (декодиране на музиката от SPIFF и в I2S)
  2. EspMQTTClient
  3. ESP8266WiFi
  4. Adafruit_NeoPixel

Качете звуците в ESP с помощта на SPIFF:

  1. следвайте тази страхотна инструкция.
  2. добавете папката с данни към директорията с изходния код.
  3. В IDE на Arduino под Инструменти променете размера на Flash на "4MB (FS: 3MB TOA: ~ 512KB)"
  4. Също така под Инструменти Натиснете ESP2866 Sketch Data Upload

Настройка на параметрите:

след това отидете на файла config.h и добавете необходимите данни, като идентификационни данни за WIFI и URL адреса и порта ngrok от предишната стъпка (проверете приложената снимка за справка).

p.s-Все още съм добавил функция за автоматично свързване, която да ви помогне да настроите WIFI и ngrok данни от вашия смартфон, тъй като това беше само първо доказателство за концепцията, бих искал да я добавя някой ден.

Задайте желаното количество играчи (тази игра работи най-добре за 2-3 играчи и извън кутията се зарежда с набор от звуци за 2 играчи). но може лесно да се регулира за повече:

за всеки играч добавете друг поток в node-red, за да публикувате цикъл в под специфична за потребителя тема.

също така можете да редактирате музикалния звук, като свържете този масив към вашите персонализирани звуци:

тук можете да видите 3 вида инструменти (Chrods за играч 0, Lead за играч 1 и Bass за играч 2)

const char* пътеки [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: Отпечатайте 3D модела

Отпечатайте 3D модела
Отпечатайте 3D модела
Отпечатайте 3D модела
Отпечатайте 3D модела
Отпечатайте 3D модела
Отпечатайте 3D модела
Отпечатайте 3D модела
Отпечатайте 3D модела

За първата стъпка изтеглете STL и ги отпечатайте.

след премахване на опорите и може би малко шлайфане (в зависимост от разделителната способност на принтера)

боядисвайте го в желания цвят

Стъпка 7: Сглобяване и заваряване

Сглобяване и заваряване
Сглобяване и заваряване

Така че тук всъщност се случва истинската магия.

можете да следвате тези схеми и да заварявате всичко заедно.

имайте предвид, че можете да промените позицията на ПИН кодовете, само не забравяйте да ги промените и в кода.

A0 и I2S са доста фиксирани на място:

тъй като A0 е за резисторен мост (използваме разликата в тока, за да знаем кой бутон от 5 е натиснат - подобно на този Instructables.

I2S има специфично кодиране, можете да го намерите тук

Стъпка 8: Играйте няколко цикъла с приятелите си

Препоръчано: