İçindekiler:
- Gereçler
- Adım 1: Akışı Anlamak
- Adım 2: Sunucuyu Ayarlama - Ngrok
- 3. Adım: Sunucuyu Ayarlama - Düğüm-Kırmızı
- Adım 4: Sunucuyu Ayarlama - MQTT (Sivrisinek)
- Adım 5: Kod
- Adım 6: 3B Modeli Yazdırın
- Adım 7: Montaj ve Kaynak
- 8. Adım: Arkadaşlarınızla Bazı Döngüler Oynayın
Video: Melodi: 8 Adım (Resimlerle)
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:17
Evden çalışmaya olanak sağlayan birçok avantajın ve teknolojik çözümlerin yanı sıra, iş arkadaşları arasında yaşam desteği oluşturma ve oluşturma zorluğu devam etmektedir. MELODY, işbirlikçi kısa müzik reçellerinin oluşturulmasını sağlayan dijital-fiziksel bir cihazdır. İş arkadaşları zamanı koordine eder ve cihaz, dönüşler ve farklı rastgele seslerle bir jam session ayarlar. İlk katılımcı belirli bir ritim belirler, ardından her katılımcı belirlenen ritme karşılık gelen kendi müzikal bölümünü ekler. Müzik geçmişi olmayan kullanıcıların işini kolaylaştırmak için yazılım, tıklamalarını örnekleyerek ve uygun ritmi ayarlayarak ayak uydurmalarına yardımcı olur. Oturum, tüm katılımcılar kendi bölümlerini kaydetmeyi bitirdiğinde yaklaşık 3 dakika sonra sona erer.
O nasıl çalışır?
Melody, MQTT protokolü üzerinden bir Node-Red sunucusuyla iletişim kuran ESP2866 donanımına dayanmaktadır. Cihaz, oyuncunun notlarını sunucuya ve sunucudan diğer oyunculara geri gönderilen bir dizi karaktere çevirir. Bu, herkesin ağ bağlantısından kesinti olmadan melodiyi çalmasını ve duymasını sağlar.
Melodi iki ana görsel göstergeye sahiptir. Birincisi, oyuncuya Döngünün ne zaman başladığını ve ne zaman bittiğini bildiren ve oyuncunun sırasının gelip gelmediğini gösteren bir LED şerittir. İkincisi, mevcut melodiyi görsel olarak göstermek için kullanılan, ürünün ortasındaki bir LED göstergedir. 3'ten 1'e geri sayım, çalmaya başlamayı belirtir ve bir zamanlama ekranı, kullanıcıyı grubun Melodisi'ne ne zaman ve nasıl katkıda bulunmak istediğini yönlendirir. Kayıt, gelecekte kullanılmak üzere otomatik olarak şirketin bulutuna kaydedilir.
Bu proje, disiplinler arası Center Herzliya'daki (IDC) Medya inovasyon laboratuvarında (MiLab) dört öğrenci tarafından tasarlandı: Shahar Agassy, Eden Bar-Tov, Gal Eshchar ve Gad Stern. Zvika Markfeld, Netta Ofer ve Michal Leschinsky'nin yardımıyla ve Noa Morag ve Oren Zuckerman'ın rehberliğinde.
Buradaki bazı şeylerin nasıl uygulanacağını öğrenmeme yardımcı olan harika bir talimat oluşturduğu için Tom Granot'a teşekkürler (buradaki adımlardan bazıları bu harika talimattan sonra modellenmiştir).
Gereçler
- 3 boyutlu yazıcı
- ESP8266
- 7 düğme
- 8X8 LED matris
- WS2812B LED Şerit
- I2S amplifikatörü
- Dişi 1/8" (3,5 mm) 4 Kutuplu Ses Jakı
- 4X 1K direnç
- 1X3K direnç
Adım 1: Akışı Anlamak
Bu projede bazı sorunları çözmeye çalıştık:
- Oyuncuların aynı anda oynayabilmesi için çevrimiçi nasıl yapabiliriz?
- İnternet gecikmelerini nasıl aşabilir ve sorunsuz bir deneyim yaratabiliriz?
- Müzik geçmişi olmayan insanlar için bile müziğin kulağa hoş gelmesini nasıl sağlayabiliriz?
Müziğin zamanlaması ve serileştirilmesi
İlk sorunu çözmek için MIDI protokolüne baktık ve onu kullanmaya çalıştık, ancak gerçekten ihtiyacımız olandan daha sağlam olduğunu gördük, ayrıca ilk çalışan prototipi oluşturabilmemiz için gerçekten basitleştirmek istedik. Bu yüzden MIDI'den ilham aldık ve bir dizi sayı (0-5 arası) ile temsil edilen müzikal döngümüzün, oyuncuların döngü boyutunun zamanı ile temsil etmesini sağladık (tüm müzikal matematiği daha sonra açıklayacağız).
Müzikte ritimleri müzik çubuklarına böleriz. Her çubuk temelde küçük bir zaman dilimidir, biz 4/4 kullanmayı seçeriz (bir müzikal barda 4 vuruş anlamına gelir) - en yaygın olanı.
Her vuruş daha sonra 4 örnekleme penceresine bölünür, böylece çalınan her nota otomatik olarak iyi bir konuma hizalanır ve ayrıca bir şarkıyı sunucuya gönderilecek bir dizi sayı olarak temsil etmemize izin verir.
Müzikal geçmişi olmayan oyunculara dost olmak için üç şey yaptık:
- Oyuncunun daha az seçeneğe odaklanmasını sağlamak için tuş sayısını sınırlayın.
- Uyumsuzluk sesi olmaması için aynı ölçekte birlikte iyi çalınan notalar seçtik.
- Her basış ritmin "penceresine" ayarlanır, böylece oyuncu müziğini ritme yabancılaştırır
iletişim protokolleri
Peki müziğin mantığını anladıktan sonra bunu oyuncularımız arasında nasıl iletebiliriz?
Bunun için, mesajları cihazlar arasında taşıyan bir yayınla-abone ol ağ protokolü olan MQTT'yi kullanıyoruz.
her oyuncu iki konuya abonedir: döngü (en güncel döngüyü al) ve sıra (eşzamanlama amacıyla mevcut oyuncunun kimliğini alır).
Sırası geldiğinde, bir oyuncu melodiyi çalmayı bitirdiğinde, YUKARI düğmesine basacak ve döngü (güncellenmiş olan), döngü kanalındaki tüm oyunculara geri iletecek olan MQTT aracısına gönderilecek.
bu döngü, mevcut döngü bitene kadar "hareketsiz" kalacaktır ve ardından onu değiştirecektir. böylece oyuncu için şeffaf olacaktır. ayrıca yeni döngü şu anda oynatıcı cihazda yerel olarak kaydedildiğinden, müzik için internet gecikmesi yoktur ve bu nedenle ikinci sorunu çözdük.
Adım 2: Sunucuyu Ayarlama - Ngrok
ngrok bir tünel açma hizmetidir. Yerel olarak çalışan bir hizmeti (bizim durumumuzda, Node-RED) dış dünyaya - bir sunucu kurma veya DNS kayıtlarıyla uğraşma zahmetine girmeden - göstermemize olanak tanır. Bilgisayarınızda Node-RED'i çalıştırmanız ve ardından Node-RED'in çalıştığı bağlantı noktasında ngrok'u çalıştırmanız yeterlidir.
İşte bu kadar - hangi ağa bağlı olduğuna bakılmaksızın dünyanın herhangi bir yerinden Node-RED'e erişmek için kullanabileceğiniz bir URL alacaksınız.
Kurulum ve Yapılandırma
- İşletim sisteminiz için ngrok'u buradan indirin.
- İndirme sayfasındaki adımı "Ateşle" adımına kadar izleyin.
- "Ateşleme adımında", 80'i 1883 ile ve http'yi tcp'ye, örneğin./ngrok tcp 1883 ile değiştirin.
- URL'yi ve bağlantı noktası numarasını kaydedin (resimde görülüyor), daha sonra ihtiyacımız olacak.
3. Adım: Sunucuyu Ayarlama - Düğüm-Kırmızı
Projenin Sunucu mantığı olan Node-RED, çeşitli yazılımları (ve donanımları!) birbirine bağlamanızı sağlayan görsel bir programlama ortamıdır.
Burada tüm oyuncular arasındaki iletişimin mantığını oluşturduk (döngüleri paylaşma ve alma ve dönüşleri koordine etme)
Node-Red'in Kurulumu
Yerel bilgisayarınıza Node-RED akışımızı yüklemek için aşağıdaki adımları izleyin:
- Node-RED, Node.js gerektirir, buradan yükleyin
- buradaki talimatları kullanarak Node-RED'i kurun.
Artık Node-RED'i yüklediğinize göre, yukarıdaki adımdaki talimatları kullanarak çalıştırın ve boş bir tuval sayfası görebildiğinizi doğrulayın. https://127.0.0.1:1880 konumunda olmalıdır.
Şimdi bu proje için kullandığımız akışı içe aktarmanız gerekecek, burada bulabilir ve JSON dosyasını eklemek için içe aktar'a basıp Dağıt'a basabilirsiniz.
Node-Red'in Kurulumu:
Bu adıma ekli resme bakarsanız, oyuncularımızdan birinden güncel bir döngü aldığımız 2 ana "eylemimiz" olduğunu görebilirsiniz ve ardından bunu diğer tüm oyunculara iletiyoruz. ayrıca yeni sırayı tüm oyunculara yayınlıyoruz. Böylece oyun senkronize kalır.
Adım 4: Sunucuyu Ayarlama - MQTT (Sivrisinek)
Node-RED'in kendi MQTT aracısı olmadığından ve sensörlerimiz ve aktivatörlerimizle MQTT üzerinden iletişim kurmamız gerekeceğinden, özel bir MQTT aracısı kullanacağız. Node-RED, Mosquitto'yu önerdiğinden, kullanacağımız şey bu. MQTT ve neden IoT projelerinde sıklıkla kullanıldığı hakkında bazı bilgiler için buraya bakın.
Kurulum ve Yapılandırma
- Mosquitto'yu buradan indirin ve işletim sisteminize göre kurun.
- Normalde, Node-RED'i Mosquitto'ya bağlamak için buradaki talimatları izlemeniz gerekir. Ancak, akışımızı kullandıysanız, sizin için önceden yapılandırılmıştır. Akışı ve Mosquitrro'yu düzgün bir şekilde yüklediğiniz ve Mosquitto, 1883 numaralı bağlantı noktasında (varsayılan olarak çalıştığı) çalıştığı sürece, kutunun dışında çalışması gerekir.
- Bunun, MQTT aracısının ve Node-RED sunucunuzun aynı makinede çalıştığı anlamına geldiğini unutmayın. Bu, sistem içindeki iletişimi basitleştirmek için kullanışlıdır. Daha fazla bilgi için aşağıdaki nota bakın.
MQTT trafiğini izleme
Trafiği izlemek için MQTTfx kullandım, çok basit bir GUI'ye sahip harika bir araç.
Adım 5: Kod
kodu GitHub'da bulabilirsiniz (tüm veri dosyaları ve config.h ile birlikte)
Bağımlılıklar:
kodu esp2866'ya yüklemeden önce birkaç kitaplık yüklemeniz gerekir:
- libmad-8266 (müziği SPIFF'den ve I2S'ye deşifre edin)
- EspMQTTClient
- ESP8266WiFi
- Adafruit_NeoPixel
SPIFF kullanarak sesleri ESP'ye yükleyin:
- bu harika talimatı takip edin.
- veri klasörünü kaynak kod dizinine ekleyin.
- Arduino IDE'de Araçlar altında Flash boyutunu "4MB (FS:3MB TOA:~512KB)" olarak değiştirin
- Ayrıca Araçlar'ın altında ESP2866 Çizim Verisi Yükleme'ye basın
Parametrelerin ayarlanması:
bundan sonra config.h dosyasına gidin ve WIFI kimlik bilgileri ve ngrok URL'si ve önceki adımdaki bağlantı noktası gibi gerekli verileri ekleyin (referans için ekteki fotoğrafı kontrol edin).
p.s - Akıllı telefonunuzdan WIFI ve ngrok verilerini ayarlamanıza yardımcı olacak bir otomatik bağlantı özelliği ekledim, çünkü bu sadece bir ilk kavram kanıtı olduğu için bir gün eklemek isterim.
İstediğiniz oyuncu miktarını ayarlayın (bu oyun en iyi 2-3 oyuncu için çalışır ve kutunun dışında 2 oyuncu için bir dizi ses ile yüklenir). ancak daha fazlası için kolayca ayarlanabilir:
her oyuncu için, kullanıcıya özel bir konunun altında bir döngü yayınlamak için kırmızı düğüme başka bir akış ekleyin.
ayrıca, bu diziyi özel seslerinize dönüştürerek müzik sesini düzenleyebilirsiniz:
Burada 3 çeşit enstrüman görebilirsiniz (Oyuncu 0 için Chrods, Oyuncu 1 için Kurşun ve Oyuncu 2 için Bass)
const char* yolları[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"};
Adım 6: 3B Modeli Yazdırın
İlk adım için STL'yi indirin ve yazdırın.
destekleri çıkardıktan ve belki biraz zımparaladıktan sonra (yazıcının çözünürlüğüne bağlı olarak)
istediğiniz renge boyayın
Adım 7: Montaj ve Kaynak
Yani temel olarak gerçek sihrin gerçekleştiği yer burasıdır.
bu şemaları takip edebilir ve her şeyi birlikte kaynaklayabilirsiniz.
PIN'lerin konumunu değiştirebileceğinizi unutmayın, sadece kodda da değiştirmeyi unutmayın.
A0 ve I2S yerinde oldukça sabittir:
A0 direnç köprüsü için olduğundan (5'ten hangi düğmeye basıldığını bilmek için akımdaki farkı kullanırız - bu Talimatlara benzer.
I2S'nin burada bulabileceğiniz belirli bir kodlaması vardır.
8. Adım: Arkadaşlarınızla Bazı Döngüler Oynayın
Önerilen:
Nasıl Yapılır: Raspberry PI 4 Headless (VNC) Kurulumu Rpi-imager ve Resimlerle: 7 Adım (Resimlerle)
Nasıl Yapılır: Raspberry PI 4 Headless (VNC) Kurulumu Rpi-imager ve Resimlerle: Bu Rapsberry PI'yi blogumda bir sürü eğlenceli projede kullanmayı planlıyorum. Kontrol etmekten çekinmeyin. Raspberry PI'mi kullanmaya geri dönmek istedim ama yeni konumumda Klavye veya Farem yoktu. Ahududu kurduğumdan beri bir süre geçti
Pokemon Melodi Kutusu: 10 Adım
Pokemon Melody Box: İçinde oyuncaklar olan bir Pokemon Melody Box nasıl yapılır. Müzik kutunuzu Pokemon ile ilgili yapmak zorunda değilsiniz. Yaratıcı olabilir ve istediğiniz herhangi bir kutuyu yapabilirsiniz. En sevdiğiniz şarkıyı kodlayıp mücevher kutusuna dönüştürebilirsiniz
Kolay Adımlar ve Resimlerle Bilgisayar Nasıl Sökülür: 13 Adım (Resimlerle)
Kolay Adımlar ve Resimlerle Bir Bilgisayar Nasıl Sökülür: Bu, bir PC'nin nasıl söküleceği hakkında bir talimattır. Temel bileşenlerin çoğu modülerdir ve kolayca çıkarılabilir. Ancak bu konuda organize olmanız önemlidir. Bu, parçaları kaybetmenize ve aynı zamanda yeniden birleştirmeyi kolaylaştırmaya yardımcı olacaktır
Adım Adım Ciclop 3d Tarayıcı My Way: 16 Adım (Resimlerle)
Adım Adım Ciclop 3d Tarayıcı Adım Adım: Merhabalar, ünlü Ciclop 3D tarayıcıyı gerçekleştireceğim. Orijinal projede iyi açıklanan tüm adımlar mevcut değil. Öncelikle işlemi basitleştirmek için bazı düzeltmeler yaptım. Tabanı yazdırıyorum ve PCB'yi yeniden sterilize ediyorum, ama devam et
Melodi Kutusu: 4 Adım (Resimli)
Melodi Kutusu: Merhabalar!Her biri farklı melodi olan 3 adet butondan oluşan bir kutu yaptım.Her melodinin farklı led rengi vardır ve nota çalınırken devam eder. düğmesine basın melodi daha hızlı gidiyor. İhtiyacınız olan şeyler:-