Spisu treści:

Melodia: 8 kroków (ze zdjęciami)
Melodia: 8 kroków (ze zdjęciami)

Wideo: Melodia: 8 kroków (ze zdjęciami)

Wideo: Melodia: 8 kroków (ze zdjęciami)
Wideo: Rafał Porzeziński | 12 kroków | Krok 8 - Skrzywdzeni 2024, Lipiec
Anonim
Image
Image
Zrozumienie przepływu
Zrozumienie przepływu

Oprócz wielu zalet i rozwiązań technologicznych, które umożliwiają pracę w domu, pozostaje trudność formułowania i tworzenia podtrzymywania życia wśród współpracowników. MELODY to cyfrowo-fizyczne urządzenie, które umożliwia tworzenie wspólnych krótkich jam muzycznych. Współpracownicy koordynują czas, a urządzenie ustawia jam session z turami i różnymi losowymi dźwiękami. Pierwszy uczestnik ustala określony rytm, po czym każdy z uczestników dodaje własną sekcję muzyczną odpowiadającą ustalonemu rytmowi. Aby ułatwić pracę użytkownikom bez muzycznego tła, oprogramowanie pomaga im dotrzymać kroku, próbkując ich kliknięcia i dostosowując się do odpowiedniego rytmu. Sesja kończy się po około 3 minutach, gdy wszyscy uczestnicy skończą nagrywanie swojej części.

Jak to działa?

Melody bazuje na sprzęcie ESP2866, który komunikuje się z serwerem Node-Red za pomocą protokołu MQTT. Urządzenie tłumaczy notatki gracza na ciąg znaków, który jest wysyłany na serwer i z serwera z powrotem do innych graczy. Dzięki temu każdy może grać i słuchać melodii bez przerywania połączenia sieciowego.

Melody ma dwa główne wskaźniki wizualne. Pierwszym z nich jest pasek LED, który informuje gracza, kiedy Loop zaczyna się i kiedy kończy oraz wskazuje, czy nadeszła kolej gracza. Drugi to wyświetlacz LED na środku produktu, który służy do wizualnego wyświetlania istniejącej melodii. Odliczanie od 3 do 1 wskazuje na rozpoczęcie gry, a wyświetlacz czasu pokazuje użytkownikowi, kiedy i w jaki sposób chce przyczynić się do melodii grupy. Nagranie jest automatycznie zapisywane w firmowej chmurze do wykorzystania w przyszłości.

Projekt ten został zaprojektowany przez czterech studentów z laboratorium innowacji mediów (MiLab) w interdyscyplinarnym Centrum Herzliya (IDC): Shahar Agassy, Eden Bar-Tov, Gal Eshchar i Gad Stern. Z pomocą Zviki Markfeld, Netty Ofer i Michala Leschinsky'ego oraz pod kierunkiem Noa Morag i Orena Zuckermana.

dzięki Tomowi Granotowi za stworzenie wspaniałej instrukcji, która pomogła mi nauczyć się wdrażać niektóre z tych rzeczy (niektóre kroki są wzorowane na tej wspaniałej instrukcji).

Kieszonkowe dzieci

  • drukarka 3d
  • ESP8266
  • 7 przycisków
  • Matryca LED 8X8
  • Taśma LED WS2812B
  • Wzmacniacz I2S
  • Żeńskie 4-biegunowe gniazdo audio 1/8" (3,5 mm)
  • Rezystor 4X 1K
  • Rezystor 1X3K

Krok 1: Zrozumienie przepływu

Zrozumienie przepływu
Zrozumienie przepływu
Zrozumienie przepływu
Zrozumienie przepływu

W tym projekcie staraliśmy się rozwiązać kilka problemów:

  1. Jak możemy zrobić to online, aby gracze mogli grać w tym samym czasie?
  2. Jak możemy obejść opóźnienia w Internecie i stworzyć bezproblemową obsługę?
  3. Jak możemy sprawić, by muzyka brzmiała dobrze nawet dla osób bez muzycznego zaplecza?

Czas i serializacja muzyki

Aby rozwiązać pierwszy problem, przyjrzeliśmy się protokołowi MIDI i próbowaliśmy go użyć, ale zauważyliśmy, że jest on bardziej wytrzymały niż to, czego faktycznie potrzebowaliśmy, a także naprawdę chcieliśmy go uprościć, abyśmy mogli zbudować pierwszy działający prototyp. Wzięliśmy więc inspirację z MIDI i stworzyliśmy naszą muzyczną pętlę reprezentowaną przez ciąg liczb (od 0-5) razy wielkość pętli przez graczy (omówimy całą muzyczną matematykę później).

W muzyce dzielimy rytmy na muzyczne takty. Każdy takt jest w zasadzie małym segmentem czasowym, który wybieramy do użycia 4/4 (co oznacza 4 uderzenia w takcie muzycznym) - najbardziej powszechny.

Każde uderzenie jest następnie dzielone na 4 okna próbkowania, więc każda zagrana nuta zostanie automatycznie wyrównana do dobrej pozycji, a także pozwoli nam przedstawić utwór jako ciąg liczb do wysłania na serwer.

Aby być przyjaznym graczom bez muzycznego zaplecza, zrobiliśmy trzy rzeczy:

  1. Ogranicz liczbę klawiszy, aby gracz skupił się na mniejszej liczbie opcji.
  2. Wybraliśmy dźwięki w tej samej skali, które dobrze ze sobą współgrają, więc nie będzie żadnego dysonansu.
  3. Każde naciśnięcie jest ustawione na „okno” rytmu, dzięki czemu muzyka odtwarzacza jest obca rytmowi

Protokoły komunikacyjne

Więc kiedy zrozumieliśmy logikę stojącą za muzyką, jak możemy ją przekazać między naszymi graczami?

w tym celu używamy MQTT, protokołu sieciowego publikuj-subskrybuj, który przesyła wiadomości między urządzeniami.

każdy gracz jest zapisany do dwóch tematów: pętli (pobierz najbardziej aktualną pętlę) i turn (pobierz identyfikator bieżącego gracza do celów synchronizacji).

Z kolei, gdy gracz skończy grać utwór, naciśnie przycisk GÓRA, a pętla (zaktualizowana) zostanie wysłana do brokera MQTT, który prześle ją z powrotem do wszystkich graczy na kanale pętli.

ta pętla pozostanie „uśpiona”, dopóki bieżąca pętla nie zakończy odtwarzania, a następnie ją zastąpi. dzięki temu będzie przejrzysty dla gracza. ponieważ nowa pętla jest obecnie zapisywana lokalnie na urządzeniu odtwarzacza, nie ma opóźnień w Internecie dla muzyki, więc rozwiązaliśmy drugi problem.

Krok 2: Konfiguracja serwera - Ngrok

Konfiguracja serwera - Ngrok
Konfiguracja serwera - Ngrok
Konfiguracja serwera - Ngrok
Konfiguracja serwera - Ngrok

ngrok to usługa tunelowania. Pozwala nam wystawić lokalnie działającą usługę (w naszym przypadku Node-RED) na świat zewnętrzny - bez kłopotów z konfiguracją serwera lub zajmowaniem się rekordami DNS. Po prostu uruchamiasz Node-RED na swoim komputerze, a następnie uruchamiasz ngrok na tym samym porcie, na którym działa Node-RED.

To wszystko – otrzymasz adres URL, którego możesz użyć, aby uzyskać dostęp do Node-RED z dowolnego miejsca na świecie, niezależnie od sieci, do której jest podłączony.

Instalacja i konfiguracja

  1. Pobierz ngrok dla swojego systemu operacyjnego stąd.
  2. Postępuj zgodnie z instrukcjami na stronie pobierania, aż do kroku „Uruchom go”.
  3. W kroku „Fire it up step” zamień 80 na 1883 - i http na tcp, jak w,./ngrok tcp 1883 w zależności od twojego
  4. zapisz adres URL i numer portu (widoczny na obrazku) będziemy potrzebować później.

Krok 3: Ustawienie serwera - czerwony węzeł

Ustawienie serwera - węzeł-czerwony
Ustawienie serwera - węzeł-czerwony

Logika serwera projektu Node-RED to wizualne środowisko programistyczne, które pozwala na łączenie różnego oprogramowania (i sprzętu!).

Tutaj stworzyliśmy logikę komunikacji między wszystkimi graczami (udostępnianie i odbieranie pętli oraz koordynowanie zwrotów)

Zainstaluj Node-Red

wykonaj następujące kroki, aby załadować nasz przepływ Node-RED na komputerze lokalnym:

  1. Node-RED wymaga Node.js, zainstaluj go stąd
  2. zainstaluj samego Node-RED, korzystając z instrukcji tutaj.

Teraz, gdy masz już zainstalowany Node-RED, uruchom go zgodnie z instrukcjami w powyższym kroku i sprawdź, czy widzisz pustą stronę kanwy. Powinien znajdować się w

Musisz teraz zaimportować przepływ, którego użyliśmy w tym projekcie, możesz go znaleźć tutaj i po prostu naciśnij import, dodaj plik JSON i naciśnij Wdróż.

Zainstaluj węzeł czerwony:

jeśli spojrzysz na obraz, który jest dołączony do tego kroku, zobaczysz, że mamy 2 główne "akcje", otrzymujemy pętlę prądową od jednego z naszych graczy, a następnie przesyłamy ją do wszystkich innych graczy. dodatkowo transmitujemy nową turę do wszystkich graczy. więc gra pozostaje zsynchronizowana.

Krok 4: Ustawienie serwera - MQTT (Mosquitto)

Konfiguracja serwera - MQTT (Mosquitto)
Konfiguracja serwera - MQTT (Mosquitto)

Ponieważ Node-RED nie ma własnego brokera MQTT i będziemy musieli komunikować się z naszymi czujnikami i aktywatorami przez MQTT, użyjemy dedykowanego brokera MQTT. Ponieważ Node-RED poleca Mosquitto, to właśnie tego użyjemy. Zobacz tutaj, aby uzyskać informacje na temat MQTT i dlaczego jest często używany w projektach IoT.

Instalacja i konfiguracja

  1. Pobierz Mosquitto stąd i zainstaluj go, wszystko zgodnie z twoim systemem operacyjnym.
  2. Zwykle musisz postępować zgodnie z instrukcjami tutaj, aby połączyć Node-RED z Mosquitto. Jeśli jednak skorzystałeś z naszego przepływu, jest on już dla Ciebie wstępnie skonfigurowany. Dopóki poprawnie zainstalujesz flow i Mosquitrro, a Mosquitto działa na porcie 1883 (na którym działa domyślnie), powinno działać po wyjęciu z pudełka.
  3. Zauważ, że oznacza to, że broker MQTT i serwer Node-RED działają na tej samej maszynie. Jest to przydatne do uproszczenia komunikacji wewnątrz systemu. Więcej informacji znajdziesz w poniższej uwadze.

Monitorowanie ruchu MQTT

Użyłem MQTTfx do monitorowania ruchu, jest to świetne narzędzie z bardzo prostym GUI.

Krok 5: Kodeks

Kod
Kod

możesz znaleźć kod w GitHub (ze wszystkimi plikami danych i plikiem config.h)

Zależności:

przed załadowaniem kodu do esp2866 musisz zainstalować kilka bibliotek:

  1. libmad-8266 (dekoduj muzykę z SPIFF i do I2S)
  2. Klient EspMQTT
  3. ESP8266WiFi
  4. Adafruit_NeoPixel

Prześlij dźwięki do ESP za pomocą SPIFF:

  1. postępuj zgodnie z tą wspaniałą instrukcją.
  2. dodaj folder danych do katalogu kodu źródłowego.
  3. W Arduino IDE w menu Narzędzia zmień rozmiar Flasha na "4MB (FS:3MB TOA:~512KB)"
  4. Również w Narzędziach Naciśnij ESP2866 Przesyłanie danych szkicu

Ustawianie parametrów:

następnie przejdź do pliku config.h i dodaj wymagane dane, takie jak poświadczenia WIFI oraz adres URL i port ngrok z poprzedniego kroku (sprawdź załączone zdjęcie w celach informacyjnych).

p.s - Dodałem jeszcze funkcję automatycznego łączenia, która pomoże ci ustawić dane WIFI i ngrok ze smartfona, ponieważ był to tylko pierwszy weryfikacja koncepcji, chciałbym ją kiedyś dodać.

Ustaw żądaną liczbę graczy (ta gra działa najlepiej dla 2-3 graczy, a po wyjęciu z pudełka jest załadowana szeregiem dźwięków dla 2 graczy). ale można je łatwo dostosować na więcej:

dla każdego gracza dodaj kolejny przepływ w węźle-czerwonym, aby opublikować pętlę w ramach tematu specyficznego dla użytkownika.

możesz także edytować dźwięk muzyczny, zmieniając tę tablicę na własne dźwięki:

tutaj możesz zobaczyć 3 rodzaje instrumentów (Chrods dla gracza 0, Lead dla gracza 1 i Bass dla gracza 2)

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"};

Krok 6: Wydrukuj model 3D

Wydrukuj model 3D
Wydrukuj model 3D
Wydrukuj model 3D
Wydrukuj model 3D
Wydrukuj model 3D
Wydrukuj model 3D
Wydrukuj model 3D
Wydrukuj model 3D

W pierwszym kroku pobierz STL i wydrukuj je.

po zdjęciu podpór i może trochę piaskowania (w zależności od rozdzielczości drukarki)

pomaluj go na żądany kolor

Krok 7: Montaż i spawanie

Montaż i spawanie
Montaż i spawanie

Więc w zasadzie tutaj dzieje się prawdziwa magia.

możesz postępować zgodnie z tymi schematami i zespawać wszystko razem.

pamiętaj, że możesz zmienić położenie PIN-ów, pamiętaj tylko, aby zmienić je również w kodzie.

A0 i I2S są dość ustalone:

ponieważ A0 jest dla mostka rezystorowego (używamy różnicy w prądzie, aby wiedzieć, który przycisk z 5 został naciśnięty - podobnie jak w tej instrukcji.

I2S ma specyficzne kodowanie, które można znaleźć tutaj

Krok 8: Zagraj w kilka pętli ze znajomymi

Zalecana: