תוכן עניינים:

מנגינה: 8 שלבים (עם תמונות)
מנגינה: 8 שלבים (עם תמונות)

וִידֵאוֹ: מנגינה: 8 שלבים (עם תמונות)

וִידֵאוֹ: מנגינה: 8 שלבים (עם תמונות)
וִידֵאוֹ: מוזיקה מרגיעה - 12 שעות! 2024, יולי
Anonim
Image
Image
הבנת הזרימה
הבנת הזרימה

לצד היתרונות והפתרונות הטכנולוגיים הרבים המאפשרים עבודה מהבית, נותר הקושי לגבש ולייצר תמיכה בחיים בקרב עמיתים לעבודה. MELODY הוא מכשיר דיגיטלי-פיזי המאפשר יצירת ריבות מוזיקליות קצרות בשיתוף פעולה. עמיתים לעבודה מתאמים את הזמן והמכשיר קובע ג'אם סשן עם סיבובים וצלילים אקראיים שונים. המשתתף הראשון קובע קצב ספציפי, ולאחר מכן כל משתתף מוסיף קטע מוזיקלי משלו המתאים לקצב המוגדר. על מנת להקל על משתמשים ללא רקע מוזיקלי, התוכנה מסייעת להם לעמוד בקצב על ידי דגימת הקליקים שלהם והתאמה לקצב המתאים. המפגש מסתיים לאחר כ -3 דקות כאשר כל המשתתפים סיימו להקליט את חלקם.

איך זה עובד?

מלודיה מבוססת על חומרת ESP2866, המתקשרת עם שרת Node-Red על פרוטוקול MQTT. המכשיר מתרגם את הערות השחקן למחרוזת תווים הנשלחת לשרת ומהשרת חזרה לשחקנים האחרים. זה מאפשר לכולם לשחק ולשמוע את המנגינה ללא הפרעה מחיבור הרשת שלהם.

למלודיה שני אינדיקטורים חזותיים עיקריים. הראשון הוא רצועת LED המאפשרת לשחקן לדעת מתי לולאה מתחילה ומתי היא מסתיימת ומציינת אם הגיע תורו של השחקן. השני הוא תצוגת LED במרכז המוצר, המשמשת להצגה חזותית של המנגינה הקיימת. ספירה לאחור מ -3 ל -1 מציינת להתחיל לשחק ותצוגת תזמונים מכוונת את המשתמש מתי ואיך היא רוצה לתרום ללחן הקבוצה. ההקלטה נשמרת אוטומטית בענן של החברה לשימוש עתידי.

פרויקט זה תוכנן על ידי ארבעה סטודנטים במעבדת החדשנות בתקשורת (MiLab) במרכז הבינתחומי הרצליה (IDC): שחר אגסי, עדן בר-טוב, גל אשחר, וגד שטרן. בסיוע צביקה מרקפלד, נטע עופר ומיכל לסקינסקי ובהנחיית נועה מורג ואורן צוקרמן.

תודה לטום גרנות על יצירת מדריך נהדר שעזר לי ללמוד כיצד ליישם כמה מהדברים כאן (חלק מהשלבים כאן מעוצבים על פי ההנחיה הנהדרת הזו).

אספקה

  • מדפסת תלת מימד
  • ESP8266
  • 7 כפתורים
  • מטריצת LED 8X8
  • רצועת LED WS2812B
  • מגבר I2S
  • נקבת שמע 8 אינץ '(3.5 מ"מ) 4 קוטבים
  • נגד 4X 1K
  • נגד 1X3K

שלב 1: הבנת הזרימה

הבנת הזרימה
הבנת הזרימה
הבנת הזרימה
הבנת הזרימה

בפרויקט זה ניסינו להתמודד עם כמה נושאים:

  1. איך נוכל להפוך את זה לרשת כדי ששחקנים יוכלו לשחק בו זמנית?
  2. כיצד נוכל לעקוף את זמני האיחור באינטרנט וליצור חוויה חלקה?
  3. כיצד נוכל לגרום למוזיקה להישמע טוב גם לאנשים ללא רקע מוזיקלי?

תזמון וסדרה של המוזיקה

על מנת לפתור את הבעיה הראשונה בדקנו את פרוטוקול MIDI וניסינו להשתמש בו, אך ראינו שהוא חזק יותר מאשר מה שהיינו צריכים בעצם גם רצינו להפוך אותו לפשוט כדי שנוכל לבנות את אב הטיפוס הראשון שעובד. אז לקחנו השראה מה- MIDI ויצרנו את הלול המוזיקלי שלנו המיוצג על ידי מחרוזת מספרים (מ 0-5) פי גודל הלולאות בזמן השחקנים (נסביר את כל המתמטיקה המוזיקלית בהמשך).

במוזיקה, חילקנו את המקצבים לברים מוזיקליים. כל בר הוא בעצם קטע קטן שאנו בוחרים להשתמש ב- 4/4 (כלומר 4 פעימות בבר מוזיקלי) - הנפוץ ביותר.

כל פעימה מתחלקת לאחר מכן ל -4 חלונות דגימה כך שכל תו שיושמע יותאם אוטומטית למיקום טוב וגם יאפשר לנו לייצג שיר כמחרוזת מספרים לשלוח לשרת.

על מנת להיות ידידותיים לשחקנים ללא רקע מוזיקלי עשינו שלושה דברים:

  1. הגבל את מספר המקשים כדי לגרום לשחקן להתמקד בפחות אפשרויות.
  2. בחרנו תווים באותו קנה מידה שמשחקים טוב ביחד כך שלא יהיה צליל דיסוננס.
  3. כל לחיצה מוגדרת ל"חלון "של הקצב ובכך מזרים את מוזיקת הנגן לקצב

פרוטוקולי תקשורת

אז אחרי שהבנו את ההיגיון מאחורי המוזיקה, איך נוכל לתקשר אותה בין השחקנים שלנו?

לשם כך אנו משתמשים ב- MQTT, פרוטוקול רשת לפרסם-הרשמה המעביר הודעות בין מכשירים.

כל שחקן מנוי לשני נושאים: הלולאה (קבל את הלולאה העדכנית ביותר) והתור (מקבל את המזהה של השחקן הנוכחי למטרות סנכרון).

בתורו כאשר שחקן מסיים לשחק את המנגינה הוא/היא ילחצו על כפתור UP והלולאה (המעודכנת) תישלח לברוקר MQTT, שיעביר אותו בחזרה לכל השחקנים בערוץ הלופ.

הלולאה הזו תישאר "רדומה" עד שהלולאה הנוכחית תיגמר ואז תחליף אותה. כך שהוא יהיה שקוף לשחקן. גם מכיוון שהלולאה החדשה נשמרת כרגע באופן מקומי בהתקן הנגן אין חביון לאינטרנט למוסיקה ולכן פתרנו את הבעיה השנייה.

שלב 2: הגדרת השרת - Ngrok

הגדרת השרת - Ngrok
הגדרת השרת - Ngrok
הגדרת השרת - Ngrok
הגדרת השרת - Ngrok

ngrok הוא שירות מנהרות. הוא מאפשר לנו לחשוף שירות הפועל באופן מקומי (במקרה שלנו, Node -RED) לעולם החיצון - ללא הטרחה של הקמת שרת או התמודדות עם רשומות DNS. אתה פשוט מפעיל Node-RED במחשב שלך ולאחר מכן מפעיל ngrok על אותה יציאה Node-RED פועל.

זהו - תקבל כתובת אתר שתוכל להשתמש בה כדי לגשת ל- Node -RED מכל מקום בעולם, ללא קשר לאיזו רשת היא מחוברת.

התקנה ותצורה

  1. הורד מכאן את ngrok למערכת ההפעלה שלך.
  2. בצע את השלב בדף ההורדות, עד לשלב "הפעל אותו".
  3. ב "שלב זה עולה", החלף את ה- 80 לשנת 1883 - ואת ה- http ל- tcp כמו ב-,./ngrok tcp 1883 בהתאם לרמתך
  4. שמור את כתובת האתר ומספר היציאה (ראה בתמונה) נצטרך את, מאוחר יותר.

שלב 3: הגדרת השרת - Node -Red

הגדרת השרת - Node -Red
הגדרת השרת - Node -Red

לוגיקת השרת של הפרויקט, Node-RED היא סביבת תכנות חזותית המאפשרת לך לחבר תוכנות שונות (וחומרה!).

כאן עשינו את ההיגיון בתקשורת בין כל השחקנים (שיתוף וקבלת הלולאות ותיאום הסיבובים)

התקנה של Node-Red

בצע את השלבים הבאים כדי לטעון את זרימת הצומת האדום שלנו במחשב המקומי שלך:

  1. Node-RED דורש Node.js, התקן אותו מכאן
  2. התקן את Node-RED עצמו באמצעות ההוראות כאן.

כעת לאחר התקנת Node-RED, הפעל אותו לפי ההוראות שבשלב למעלה ואמת שאתה יכול לראות דף בד ריק. זה צריך להיות ממוקם ב

כעת יהיה עליך לייבא את הזרימה בה השתמשנו לפרויקט זה, תוכל למצוא אותה כאן ולחץ על יבוא הוסף את קובץ JSON ולחץ על פריסה.

התקנה של 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. ESP8266 Wi -Fi
  4. Adafruit_NeoPixel

העלה את הצלילים ל- ESP באמצעות SPIFF:

  1. עקוב אחר ההנחיה הנהדרת הזו.
  2. הוסף את תיקיית הנתונים לספריית קוד המקור.
  3. ב- IDE של Arduino תחת כלים שנה את גודל הבזק ל- "4MB (FS: 3MB TOA: ~ 512KB)"
  4. גם תחת כלים לחץ על ESP2866 העלאת נתוני סקיצה

הגדרת הפרמטרים:

לאחר מכן עבור לקובץ config.h והוסף את הנתונים הדרושים כגון אישורי WIFI וכתובת ה- URL של ה- ngrok והיציאה מהשלב הקודם (בדוק את התמונה המצורפת לעיון).

p.s-עדיין הוספתי תכונת חיבור אוטומטי שתעזור לך להגדיר את נתוני WIFI ו- ngrok מהטלפון החכם שלך, מכיוון שזו הייתה רק הוכחה ראשונה לרעיון, הייתי רוצה להוסיף אותו מתישהו.

הגדר את כמות השחקן שאתה רוצה (המשחק הזה עובד הכי טוב עבור 2-3 שחקנים ומחוץ לקופסה הוא עמוס במערך צלילים עבור 2 שחקנים). אך ניתן להתאים אותו בקלות ליותר:

עבור כל שחקן הוסף זרימה נוספת בצומת האדום כדי לפרסם לולאה תחת נושא ספציפי למשתמש.

כמו כן, באפשרותך לערוך את הצליל המוזיקלי על ידי שינוי מערך זה לצלילים המותאמים אישית שלך:

כאן אתה יכול לראות 3 סוגים של מכשירים (Chrods לנגן 0, Lead עבור נגן 1 ובס עבור נגן 2)

const char* path [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: שחק כמה לולאות עם החברים שלך

מוּמלָץ: