فهرست مطالب:
- تدارکات
- مرحله 1: درک جریان
- مرحله 2: تنظیم سرور - Ngrok
- مرحله 3: تنظیم سرور - Node -Red
- مرحله 4: تنظیم سرور - MQTT (Mosquitto)
- مرحله 5: کد
- مرحله 6: مدل سه بعدی را چاپ کنید
- مرحله 7: مونتاژ و جوشکاری
- مرحله 8: چند حلقه با دوستان خود پخش کنید
تصویری: ملودی: 8 مرحله (همراه با تصاویر)
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:52
در کنار بسیاری از مزایا و راه حل های تکنولوژیکی که امکان کار در خانه را فراهم می کند ، مشکل تدوین و ایجاد حمایت از زندگی در میان همکاران همچنان باقی است. MELODY یک دستگاه فیزیکی دیجیتالی است که امکان ایجاد جم های کوتاه مشترک موسیقی را فراهم می کند. همکاران زمان را هماهنگ می کنند و دستگاه یک جلسه جم با پیچ ها و صداهای تصادفی مختلف تنظیم می کند. اولین شرکت کننده ریتم خاصی را تنظیم می کند ، پس از آن هر شرکت کننده بخش موسیقی خود را متناسب با ریتم تنظیم شده اضافه می کند. این نرم افزار به منظور سهولت کاربری برای کاربرانی که زمینه موسیقی ندارند ، با نمونه گیری از کلیک ها و تنظیم ریتم مناسب به آنها کمک می کند تا سرعت خود را حفظ کنند. این جلسه پس از حدود 3 دقیقه که همه شرکت کنندگان ضبط قسمت خود را به پایان رساندند ، به پایان می رسد.
چگونه کار می کند؟
ملودی بر اساس سخت افزار ESP2866 است که با سرور Node-Red از طریق پروتکل MQTT ارتباط برقرار می کند. دستگاه یادداشت های پخش کننده را به رشته ای از کاراکترها تبدیل می کند که به سرور و از سرور به سایر پخش کننده ها ارسال می شود. این به همه اجازه می دهد تا آهنگ را بدون وقفه از اتصال شبکه خود پخش کرده و بشنوند.
ملودی دارای دو شاخص اصلی بصری است. اولین نوار LED یک نوار LED است که به پخش کننده می گوید زمان شروع و پایان حلقه چیست و نشان می دهد که نوبت بازیکن است. مورد دوم یک نمایشگر LED در مرکز محصول است که برای نمایش بصری لحن موجود استفاده می شود. شمارش معکوس از 3 تا 1 نشان می دهد که شروع به پخش می کند و نمایش زمانبندی ها به کاربر دستور می دهد که چگونه و چگونه می خواهد در ملودی گروه سهیم باشد. ضبط به طور خودکار برای استفاده بعدی در ابر شرکت ذخیره می شود.
این پروژه توسط چهار دانش آموز در آزمایشگاه نوآوری رسانه (MiLab) در مرکز بین رشته ای Herzliya (IDC) طراحی شده است: Shahar Agassy ، Eden Bar-Tov ، Gal Eshchar و Gad Stern. با کمک Zvika Markfeld ، Netta Ofer و Michal Leschinsky و راهنمایی Noa Morag و Oren Zuckerman.
با تشکر از تام گرانوت برای ایجاد یک دستورالعمل عالی که به من کمک کرد نحوه اجرای برخی از موارد را در اینجا بیاموزم (برخی از مراحل در اینجا از این دستورالعمل عالی الگوبرداری شده است).
تدارکات
- چاپگر سه بعدی
- ESP8266
- 7 دکمه
- ماتریس LED 8X8
- نوار LED WS2812B
- تقویت کننده I2S
- جک صوتی 4 قطبی زن 1/8 اینچ (3.5 میلی متر)
- مقاومت 4X 1K
- مقاومت 1X3K
مرحله 1: درک جریان
در این پروژه سعی کردیم به برخی مسائل بپردازیم:
- چگونه می توانیم آن را آنلاین کنیم ، بنابراین بازیکنان می توانند همزمان بازی کنند؟
- چگونه می توان با تاخیرهای اینترنتی کنار آمد و تجربه ای یکپارچه ایجاد کرد؟
- چگونه می توانیم موسیقی را حتی برای افرادی که سابقه موسیقی ندارند ، خوب جلوه دهیم؟
زمان بندی و سریال سازی موسیقی
برای حل اولین مسئله ، ما به پروتکل MIDI نگاه کردیم و سعی کردیم از آن استفاده کنیم ، اما دیدیم که این پروتکل قوی تر از چیزی است که ما واقعاً به آن نیاز داشتیم ، ما واقعاً می خواستیم آن را ساده کنیم تا بتوانیم اولین نمونه اولیه کار را بسازیم. بنابراین ما از MIDI الهام گرفتیم و حلقه موسیقی خود را با رشته ای از اعداد (از 0 تا 5) برابر اندازه حلقه ها به اندازه زمان پخش کننده ها نشان دادیم (همه ریاضیات موسیقی را بعدا توضیح خواهیم داد).
در موسیقی ، ریتم ها را به میله های موسیقی تقسیم می کنیم. هر نوار اساساً یک بخش کوتاه است که ما استفاده از 4/4 (به معنی 4 ضربه در نوار موسیقی) را انتخاب می کنیم - رایج ترین.
سپس هر ضربه به 4 پنجره نمونه گیری تقسیم می شود ، بنابراین هر نت پخش شده به صورت خودکار در موقعیت خوب c قرار می گیرد و همچنین به ما امکان می دهد یک آهنگ را به عنوان رشته ای از اعداد برای ارسال به سرور نشان دهیم.
برای اینکه با بازیکنان بدون سابقه موسیقی دوست باشیم ، سه کار انجام دادیم:
- تعداد کلیدها را محدود کنید تا پخش کننده روی گزینه های کمتر تمرکز کند.
- ما نت هایی را در مقیاس یکسان انتخاب کردیم که با هم خوب اجرا می شوند تا هیچ صدای ناهماهنگی وجود نداشته باشد.
- هر فشار روی "پنجره" ریتم تنظیم می شود ، بنابراین موسیقی پخش کننده با ریتم بیگانه می شود
پروتکل های ارتباطی
بنابراین پس از درک منطق موسیقی ، چگونه می توانیم آن را بین نوازندگان خود برقرار کنیم؟
برای این منظور ، ما از MQTT استفاده می کنیم ، یک پروتکل شبکه انتشار و اشتراک گذاری که پیام ها را بین دستگاه ها منتقل می کند.
هر بازیکن دارای دو موضوع است: حلقه (دریافت جدیدترین حلقه) و نوبت (شناسه بازیکن فعلی را برای اهداف همگام سازی دریافت می کند).
به نوبه خود هنگامی که بازیکنی آهنگ خود را تمام می کند ، دکمه UP را فشار می دهد و حلقه (به روز شده) به کارگزار MQTT ارسال می شود ، که آن را به همه بازیکنان کانال حلقه ارسال می کند.
این حلقه تا زمانی که حلقه فعلی پخش نشود "خاموش" باقی می ماند و سپس آن را جایگزین می کند. بنابراین برای پخش کننده شفاف خواهد بود. همچنین از آنجا که حلقه جدید در حال حاضر به صورت محلی در دستگاه پخش ذخیره می شود ، تأخیر اینترنت برای موسیقی وجود ندارد ، بنابراین ما مسئله دوم را حل کردیم.
مرحله 2: تنظیم سرور - Ngrok
گرمک یک سرویس تونل زنی است. این به ما امکان می دهد یک سرویس محلی (در مورد ما ، Node -RED) را در معرض دید دنیای خارج قرار دهیم - بدون هیچ گونه زحمتی برای ایجاد سرور یا برخورد با سوابق DNS. شما به سادگی Node-RED را در رایانه خود اجرا کرده و سپس گرمک را بر روی همان پورت Node-RED در حال اجرا است.
این تمام است - شما یک URL دریافت خواهید کرد که می توانید از آن در هر نقطه از جهان بدون در نظر گرفتن اینکه به چه شبکه ای وصل است از Node -RED استفاده کنید.
نصب و پیکربندی
- گرمک سیستم عامل خود را از اینجا بارگیری کنید.
- مرحله را در صفحه بارگیری ، تا مرحله "Fire it up" دنبال کنید.
- در "Fire it up up" ، 80 را با 1883 - و http را به tcp مطابق با ،./ngrok tcp 1883 بسته به نوع خود عوض کنید.
- آدرس و شماره پورت (در تصویر دیده شده است) را ذخیره کنید ، بعداً به آن نیاز خواهیم داشت.
مرحله 3: تنظیم سرور - Node -Red
منطق سرور پروژه ، Node-RED یک محیط برنامه نویسی بصری است که به شما امکان اتصال نرم افزارهای مختلف (و سخت افزار!) را می دهد.
در اینجا ما منطق ارتباط بین همه بازیکنان (اشتراک گذاری و دریافت حلقه ها و هماهنگی دورها) را ایجاد کردیم
نصب Node-Red
مراحل زیر را برای بارگیری جریان Node-RED در رایانه محلی خود دنبال کنید:
- Node-RED به Node.js نیاز دارد ، آن را از اینجا نصب کنید
- خود Node-RED را با استفاده از دستورالعمل های اینجا نصب کنید.
اکنون که Node-RED را نصب کرده اید ، آن را با استفاده از دستورالعمل های مرحله بالا اجرا کنید و اعتبار سنجی کنید که می توانید یک صفحه بوم خالی را مشاهده کنید. باید در https://127.0.0.1:1880 واقع شود
اکنون باید جریان مورد استفاده برای این پروژه را وارد کنید ، می توانید آن را در اینجا پیدا کنید و فقط وارد کردن فایل JSON را اضافه کنید و Deploy را فشار دهید.
نصب Node-Red:
اگر به تصویری که در این مرحله ضمیمه شده است نگاه کنید ، می بینید که ما 2 "عمل" اصلی داریم ، ما یک حلقه فعلی را از یکی از بازیکنان خود دریافت می کنیم و سپس آن را به همه بازیکنان دیگر منتقل می کنیم. علاوه بر این ، ما نوبت جدید را برای همه بازیکنان پخش می کنیم. بنابراین بازی همگام می ماند
مرحله 4: تنظیم سرور - MQTT (Mosquitto)
از آنجا که Node-RED کارگزار MQTT مختص به خود را ندارد و ما نیاز به ارتباط با سنسورها و فعال کننده های خود از طریق MQTT داریم ، از یک کارگزار اختصاصی MQTT استفاده خواهیم کرد. از آنجا که Node-RED Mosquitto را توصیه می کند ، این موردی است که ما از آن استفاده خواهیم کرد. برای اطلاعات بیشتر در مورد MQTT و اینکه چرا اغلب در پروژه های IoT استفاده می شود ، اینجا را ببینید.
نصب و پیکربندی
- Mosquitto را از اینجا بارگیری کرده و مطابق سیستم عامل خود نصب کنید.
- به طور معمول ، برای اتصال Node-RED به Mosquitto باید دستورالعمل های اینجا را دنبال کنید. با این حال ، اگر از جریان ما استفاده کردید ، قبلاً برای شما پیکربندی شده است. تا زمانی که جریان و Mosquitrro را به درستی نصب کنید و Mosquitto روی پورت 1883 اجرا شود (که به طور پیش فرض روی آن کار می کند) ، باید از جعبه خارج شود.
- توجه داشته باشید که این بدان معناست که کارگزار MQTT و سرور Node-RED شما بر روی یک دستگاه اجرا می شوند. این برای ساده سازی ارتباطات درون سیستم مفید است. برای اطلاعات بیشتر به یادداشت زیر مراجعه کنید.
نظارت بر ترافیک MQTT
من از MQTTfx برای نظارت بر ترافیک استفاده کردم ، این یک ابزار عالی با GUI بسیار ساده است.
مرحله 5: کد
می توانید کد را در GitHub (با تمام پرونده های داده و config.h) پیدا کنید
وابستگی ها:
قبل از بارگذاری کد در esp2866 ، باید چند کتابخانه را نصب کنید:
- libmad-8266 (رمزگشایی موسیقی از SPIFF به I2S)
- EspMQTTClient
- ESP8266WiFi
- Adafruit_NeoPixel
با استفاده از SPIFF صداها را در ESP بارگذاری کنید:
- این دستورالعمل عالی را دنبال کنید
- پوشه داده را به پوشه کد منبع اضافه کنید.
- در Arduino IDE در قسمت Tools اندازه فلش را به "4MB (FS: 3MB TOA: 12 512KB)" تغییر دهید
- همچنین در قسمت ابزارها ESP2866 Sketch Data Upload را فشار دهید
تنظیم پارامترها:
پس از آن به فایل config.h بروید و داده های مورد نیاز مانند اعتبار WIFI و آدرس گرمک و پورت مرحله قبل را اضافه کنید (برای ضمیمه شدن عکس پیوست را بررسی کنید).
p.s-من هنوز یک ویژگی اتصال خودکار برای کمک به شما در تنظیم داده های WIFI و گرمk از تلفن هوشمند خود اضافه کرده ام ، زیرا این اولین اثبات مفهوم بود ، می خواهم روزی آن را اضافه کنم.
میزان پخش مورد نظر خود را تنظیم کنید (این بازی برای 2-3 بازیکن بهترین کار را می کند و خارج از جعبه با مجموعه ای از صداها برای 2 بازیکن بارگیری می شود). اما می تواند به راحتی برای موارد بیشتر تنظیم شود:
برای هر بازیکن یک جریان دیگر در گره قرمز اضافه کنید تا یک حلقه در یک موضوع خاص کاربر منتشر شود.
همچنین ، می توانید صدای موسیقی را با تغییر دادن این آرایه به صداهای دلخواه خود ویرایش کنید:
در اینجا می توانید 3 نوع ساز را ببینید (Chrods برای پخش کننده 0 ، Lead برای پخش کننده 1 و Bass برای پخش کننده 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"} ؛
مرحله 6: مدل سه بعدی را چاپ کنید
برای اولین مرحله ، STL را بارگیری کرده و آنها را چاپ کنید.
پس از برداشتن ساپورت ها و شاید کمی سنباده زنی (بسته به وضوح چاپگر)
آن را به رنگ دلخواه رنگ کنید
مرحله 7: مونتاژ و جوشکاری
بنابراین اساساً اینجاست که جادوی واقعی اتفاق می افتد.
می توانید این نمودارها را دنبال کنید و همه چیز را به هم جوش دهید.
توجه داشته باشید که می توانید موقعیت PIN ها را تغییر دهید فقط به یاد داشته باشید که آن را در کد نیز تغییر دهید.
A0 و I2S تقریباً ثابت هستند:
از آنجا که A0 مخصوص پل مقاومت است (ما از تفاوت جریان استفاده می کنیم تا بدانیم کدام دکمه از 5 فشار داده شده است - مشابه این دستورالعمل ها.
I2S دارای کدگذاری خاصی است که می توانید آن را در اینجا پیدا کنید
مرحله 8: چند حلقه با دوستان خود پخش کنید
توصیه شده:
چگونه: نصب Raspberry PI 4 Headless (VNC) با Rpi-imager و تصاویر: 7 مرحله (همراه با تصاویر)
چگونه: نصب Raspberry PI 4 Headless (VNC) با Rpi-imager و تصاویر: من قصد دارم از این Rapsberry PI در چندین پروژه سرگرم کننده در وبلاگم استفاده کنم. به راحتی آن را بررسی کنید. من می خواستم دوباره به استفاده از Raspberry PI بپردازم ، اما در مکان جدیدم صفحه کلید یا موس نداشتم. مدتی بود که من یک تمشک راه اندازی کردم
ملودی تن آردوینو ساده: 3 مرحله
ملودی ساده آردوینو: ملودی ساده آردوینو راهی برای شروع پروژه های آردوینو است زیرا شما فقط می خواهید کد را از نرم افزار آردوینو مستقیماً بدون نیاز به نوشتن هیچ چیزی بارگذاری کنید
تلاش من در ملودی زنگ دکمه آردوینو: 11 قدم
تلاش من در ملودی زنگ دکمه آردوینو: در این آموزش به شما نشان خواهم داد که چگونه یک دکمه می تواند ملودی را شروع کند. در طول سال تحصیلی ، بسیاری از زندگی ما با زنگ ها و زنگ هایی اداره می شود که به ما اطلاع می دهد زمان ترک یا زمان رفتن فرا رسیده است. اکثر ما به ندرت متوقف می شویم و به این فکر می کنیم که چگونه این تفاوت ها
نمایش اسلاید تصاویر تعطیلات خود را با لمس سحر و جادو!: 9 مرحله (همراه با تصاویر)
نمایش اسلاید تصاویر خود را با لمس جادو! برای مطابقت با پرچم و موضوع کشوری که من از آن دیدن می کنم (در این مورد ، سیسیل). تی
تطبیق یک گوشی تلفن همراه با تلفن همراه: 7 مرحله (همراه با تصاویر)
انطباق یک گوشی تلفن همراه با یک تلفن همراه: توسط بیل ریو ([email protected]) اقتباس شده برای دستورالعمل ها توسط موس ([email protected]) سلب مسئولیت: روش شرح داده شده در اینجا ممکن است برای شما کارساز نباشد گرفتن. اگر کار نمی کند ، یا اگر چیزی را خراب می کنید ، m نیست