Isi kandungan:

Melodi: 8 Langkah (dengan Gambar)
Melodi: 8 Langkah (dengan Gambar)

Video: Melodi: 8 Langkah (dengan Gambar)

Video: Melodi: 8 Langkah (dengan Gambar)
Video: melodi gampang 2024, November
Anonim
Image
Image
Memahami Arus
Memahami Arus

Di samping banyak kelebihan dan penyelesaian teknologi yang membolehkan kerja dari rumah, kesukaran untuk merumuskan dan mewujudkan sokongan hidup di kalangan rakan sekerja masih ada. MELODY adalah peranti digital-fizikal yang memungkinkan penciptaan jam muzik pendek kolaboratif. Rakan sekerja menyelaraskan masa dan peranti menetapkan sesi jam dengan giliran dan bunyi rawak yang berbeza. Peserta pertama menetapkan irama tertentu, selepas itu setiap peserta menambah bahagian muzik mereka sendiri sesuai dengan irama yang ditetapkan. Untuk mempermudah pengguna tanpa latar muzik, perisian ini menolong mereka mengikuti dengan mengambil sampel klik mereka dan menyesuaikan dengan irama yang sesuai. Sesi berakhir setelah kira-kira 3 minit apabila semua peserta selesai merakam bahagian mereka.

Bagaimanakah ia berfungsi?

Melody didasarkan pada perkakasan ESP2866, yang berkomunikasi dengan pelayan Node-Red melalui protokol MQTT. Peranti menerjemahkan nota pemain menjadi rentetan watak yang dihantar ke pelayan dan dari pelayan kembali ke pemain lain. Ini membolehkan semua orang bermain dan mendengar lagu tanpa gangguan dari sambungan rangkaian mereka.

Melody mempunyai dua petunjuk visual utama. Yang pertama adalah jalur LED yang membolehkan pemain mengetahui kapan Loop bermula dan kapan ia berakhir dan menunjukkan apakah giliran pemain. Yang kedua adalah paparan LED di bahagian tengah produk, yang digunakan untuk menampilkan lagu yang ada secara visual. Hitung mundur dari 3 hingga 1 menunjukkan untuk mula bermain dan paparan waktu mengarahkan pengguna kapan dan bagaimana dia ingin menyumbang kepada Melodi kumpulan. Rakaman disimpan secara automatik ke cloud syarikat untuk penggunaan di masa depan.

Projek ini dirancang oleh empat orang pelajar di makmal inovasi Media (MiLab) di Pusat interdisipliner Herzliya (IDC): Shahar Agassy, Eden Bar-Tov, Gal Eshchar, dan Gad Stern. Dengan bantuan Zvika Markfeld, Netta Ofer dan Michal Leschinsky dan bimbingan Noa Morag dan Oren Zuckerman.

terima kasih kepada Tom Granot kerana mencipta instruksional hebat yang membantu saya belajar bagaimana melaksanakan beberapa perkara di sini (beberapa langkah di sini dimodelkan selepas pengajaran hebat ini).

Bekalan

  • Pencetak 3D
  • ESP8266
  • 7 butang
  • Matriks LED 8X8
  • Jalur LED WS2812B
  • Penguat I2S
  • Jack 1/4 "(3.5mm) Perempuan 4 Tiang Audio
  • Perintang 4X 1K
  • Perintang 1X3K

Langkah 1: Memahami Aliran

Memahami Arus
Memahami Arus
Memahami Arus
Memahami Arus

Dalam projek ini, kami cuba mengatasi beberapa masalah:

  1. Bagaimana kita membuatnya dalam talian, jadi pemain boleh bermain pada masa yang sama?
  2. Bagaimana kita dapat menggunakan latensi internet dan mencipta pengalaman yang lancar?
  3. Bagaimana kita dapat menjadikan muzik itu bagus walaupun bagi orang yang tidak mempunyai latar belakang muzik?

Masa dan siri muzik

Untuk menyelesaikan masalah pertama, kami melihat protokol MIDI dan cuba menggunakannya, tetapi kami melihat bahawa ia lebih mantap daripada apa yang sebenarnya kami perlukan dan kami juga ingin menjadikannya mudah supaya kami dapat membuat prototaip pertama yang berfungsi. Oleh itu, kami mendapat inspirasi dari MIDI dan menjadikan gelung muzik kami diwakili oleh rentetan nombor (dari 0-5) kali ganda gelung mengikut masa pemain (kami akan menerangkan semua matematik muzik kemudian).

Dalam muzik, kami membahagikan irama menjadi bar muzik. Setiap bar pada dasarnya adalah segmen kecil-kecil kami memilih untuk menggunakan 4/4 (bermaksud 4 ketukan di bar muzik) - yang paling biasa.

Setiap rentak kemudian dibagi menjadi 4 jendela sampel sehingga setiap catatan yang dimainkan akan diselaraskan secara otomatis ke posisi yang baik dan juga memungkinkan kita untuk mewakili lagu sebagai rentetan angka untuk dikirim ke pelayan.

Untuk bersahabat dengan pemain tanpa latar muzik, kami melakukan tiga perkara:

  1. Hadkan bilangan kekunci untuk menjadikan pemain fokus pada pilihan yang lebih sedikit.
  2. Kami mengambil nota pada skala yang sama yang bermain dengan baik sehingga tidak akan ada suara disonansi.
  3. Setiap tekan diatur ke "jendela" irama sehingga mengasingkan muzik pemain dengan irama

Protokol komunikasi

Oleh itu, setelah kita memahami logik di sebalik muzik, bagaimana kita dapat menyampaikannya di antara pemain kita?

untuk itu, kami menggunakan MQTT, protokol rangkaian penerbitan-langganan yang mengangkut mesej antara peranti.

setiap pemain dilanggan dua topik: gelung (dapatkan gelung terkini) dan giliran (mendapat id pemain semasa untuk tujuan penyegerakan).

Pada gilirannya apabila pemain selesai memainkan lagu, dia akan menekan butang UP dan gelung (yang diperbarui) akan dihantar ke broker MQTT, yang akan mengirimkannya kembali ke semua pemain di saluran gelung.

gelung ini akan kekal "tidak aktif" sehingga gelung semasa selesai dimainkan dan kemudian akan menggantikannya. oleh itu ia akan telus kepada pemain. kerana gelung baru kini disimpan secara tempatan di peranti pemain, tidak ada latensi internet untuk muzik sehingga kami menyelesaikan masalah kedua.

Langkah 2: Menetapkan Pelayan - Ngrok

Menetapkan Pelayan - Ngrok
Menetapkan Pelayan - Ngrok
Menetapkan Pelayan - Ngrok
Menetapkan Pelayan - Ngrok

ngrok adalah perkhidmatan terowong. Ini membolehkan kita memaparkan perkhidmatan yang dijalankan secara tempatan (dalam kes kita, Node-RED) ke dunia luar - tanpa perlu menyiapkan pelayan atau berurusan dengan rekod DNS. Anda hanya menjalankan Node-RED di komputer anda, dan kemudian jalankan ngrok pada port yang sama Node-RED sedang berjalan.

Itu sahaja - anda akan mendapat URL yang boleh anda gunakan untuk mengakses Node-RED dari mana sahaja di dunia, tanpa mengira rangkaian yang dihubungkan dengannya.

Pemasangan & Konfigurasi

  1. Muat turun ngrok untuk sistem operasi anda dari sini.
  2. Ikuti langkah di halaman muat turun, hingga langkah "Naikkannya".
  3. Dalam "Lancarkan langkah ke atas", tukar 80 untuk 1883 - dan http ke tcp seperti di,./ngrok tcp 1883 bergantung pada anda
  4. simpan URL dan nombor port (telah dilihat dalam gambar) yang kita perlukan kemudian.

Langkah 3: Menetapkan Pelayan - Node-Red

Menetapkan Pelayan - Node-Red
Menetapkan Pelayan - Node-Red

Logik pelayan projek, Node-RED adalah persekitaran pengaturcaraan visual yang membolehkan anda menyambungkan pelbagai perisian (dan perkakasan!).

Di sini kami membuat logik komunikasi antara semua pemain (berkongsi dan menerima gelung dan menyelaraskan giliran)

Pasang Node-Red

ikuti langkah berikut untuk memuat aliran Node-RED kami di komputer tempatan anda:

  1. Node-RED memerlukan Node.js, memasangnya dari sini
  2. pasang Node-RED sendiri menggunakan arahan di sini.

Setelah anda memasang Node-RED, jalankan dengan menggunakan arahan pada langkah di atas dan sahkan bahawa anda dapat melihat halaman kanvas kosong. Ia mesti berada di

Anda sekarang perlu mengimport aliran yang kami gunakan untuk projek ini, anda boleh mencarinya di sini dan tekan import tambah fail JSON dan tekan Terapkan.

Pasang Node-Red:

jika anda melihat gambar yang dilampirkan pada langkah ini, anda dapat melihat bahawa kami mempunyai 2 "tindakan" utama, kami menerima gelung semasa dari salah satu pemain kami dan kemudian kami menghantarnya ke semua pemain lain. sebagai tambahan, kami menyiarkan giliran baru kepada semua pemain. jadi permainan tetap selari.

Langkah 4: Menetapkan Pelayan - MQTT (Mosquitto)

Menetapkan Pelayan - MQTT (Mosquitto)
Menetapkan Pelayan - MQTT (Mosquitto)

Oleh kerana Node-RED tidak mempunyai broker MQTT sendiri, dan kami perlu berkomunikasi dengan sensor dan pengaktif kami melalui MQTT, kami akan menggunakan broker MQTT khusus. Oleh kerana Node-RED mengesyorkan Mosquitto, inilah yang akan kami gunakan. Lihat di sini untuk beberapa maklumat mengenai MQTT dan mengapa ia sering digunakan dalam projek IoT.

Pemasangan & Konfigurasi

  1. Muat turun Mosquitto dari sini dan pasangkannya, semuanya mengikut sistem operasi anda.
  2. Biasanya, anda perlu mengikuti arahan di sini untuk menghubungkan Node-RED ke Mosquitto. Namun, jika anda menggunakan aliran kami, ini sudah dikonfigurasikan untuk anda. Selagi anda memasang aliran dan Mosquitrro dengan betul, dan Mosquitto berjalan di port 1883 (di mana ia berjalan secara lalai), ia harus berfungsi di luar kotak.
  3. Perhatikan bahawa ini bermaksud bahawa broker MQTT dan pelayan Node-RED anda berjalan pada mesin yang sama. Ini berguna untuk memudahkan komunikasi di dalam sistem. Lihat nota di bawah untuk maklumat lebih lanjut.

Memantau trafik MQTT

Saya menggunakan MQTTfx untuk memantau lalu lintas, ini adalah alat yang hebat dengan GUI yang sangat sederhana.

Langkah 5: Kod

Kod tersebut
Kod tersebut

anda boleh mendapatkan kod di GitHub (dengan semua fail data dan config.h)

Kebergantungan:

sebelum memuatkan kod ke esp2866 anda perlu memasang beberapa perpustakaan:

  1. libmad-8266 (menyahkod muzik dari SPIFF dan ke I2S)
  2. Pelanggan EspMQTTC
  3. ESP8266WiFi
  4. Adafruit_NeoPixel

Muat naik suaranya ke ESP menggunakan SPIFF:

  1. ikuti petunjuk yang hebat ini.
  2. tambahkan folder data ke direktori kod sumber.
  3. Di Arduino IDE di bawah Alat ubah saiz Flash menjadi "4MB (FS: 3MB TOA: ~ 512KB)"
  4. Juga di bawah Tools Tekan ESP2866 Sketch Data Upload

Menetapkan parameter:

selepas itu pergi ke file config.h dan tambahkan data yang diperlukan seperti kelayakan WIFI dan URL dan port ngrok dari langkah sebelumnya (periksa foto yang dilampirkan untuk rujukan).

p.s - Saya belum menambahkan ciri sambung secara automatik untuk membantu anda menetapkan data WIFI dan ngrok dari telefon pintar anda, kerana ini hanyalah bukti konsep pertama, saya ingin menambahkannya beberapa hari.

Tetapkan jumlah pemain yang anda mahukan (permainan ini berfungsi paling baik untuk 2-3 pemain dan di luar kotak ia dimuat dengan pelbagai bunyi untuk 2 pemain). tetapi boleh disesuaikan dengan lebih mudah:

untuk setiap pemain menambah aliran lain dalam simpul-merah untuk menerbitkan gelung di bawah topik khusus pengguna.

juga, anda boleh mengedit suara muzik dengan memasukkan larik ini ke suara tersuai anda:

di sini anda dapat melihat 3 jenis instrumen (Chrod untuk pemain 0, Lead untuk pemain 1, dan Bass untuk pemain 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"};

Langkah 6: Cetak Model 3D

Cetak Model 3D
Cetak Model 3D
Cetak Model 3D
Cetak Model 3D
Cetak Model 3D
Cetak Model 3D
Cetak Model 3D
Cetak Model 3D

Untuk langkah pertama, muat turun STL dan cetaknya.

setelah mengeluarkan sokongan dan mungkin pengamplasan sedikit (bergantung pada resolusi pencetak)

cat ke warna yang dikehendaki

Langkah 7: Pemasangan dan Pengelasan

Pemasangan dan Pengelasan
Pemasangan dan Pengelasan

Oleh itu, di sinilah sihir sebenar berlaku.

anda boleh mengikuti skema ini dan menggabungkan semuanya.

ingat bahawa anda boleh mengubah kedudukan PIN hanya ingat untuk mengubahnya dalam kod juga.

A0 dan I2S dipasang dengan betul:

kerana A0 adalah untuk jambatan perintang (kami menggunakan perbezaan arus untuk mengetahui butang mana dari 5 yang ditekan - serupa dengan Instructables ini.

I2S mempunyai pengekodan khusus yang anda dapati di sini

Langkah 8: Mainkan Beberapa Gelung Dengan Rakan Anda

Disyorkan: