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

סינטיסייזר נבל לייזר על לוח זיבו: 10 שלבים (עם תמונות)
סינטיסייזר נבל לייזר על לוח זיבו: 10 שלבים (עם תמונות)

וִידֵאוֹ: סינטיסייזר נבל לייזר על לוח זיבו: 10 שלבים (עם תמונות)

וִידֵאוֹ: סינטיסייזר נבל לייזר על לוח זיבו: 10 שלבים (עם תמונות)
וִידֵאוֹ: Laser Harp Cover: Third Rendez-vous by Jean Michel Jarre 2024, יולי
Anonim
סינטיסייזר נבל לייזר על לוח זיבו
סינטיסייזר נבל לייזר על לוח זיבו

במדריך זה ניצור נבל לייזר מתפקד במלואו באמצעות חיישני IR עם ממשק סדרתי שיאפשר למשתמש לשנות את הכוונון והטון של המכשיר. נבל זה יהיה הגרסה המחודשת של המאה ה -21 לכלי הישן. המערכת נוצרה באמצעות לוח פיתוח של Xilinx Zybo יחד עם סוויטות העיצוב Vivado. מה שאתה צריך כדי להשלים את הפרויקט:

  • 12 חיישנים ופולטות IR (ניתן להשתמש פחות או יותר בהתאם למספר המיתרים)
  • לוח הפיתוח של Zybo Zynq-7000
  • RTOS בחינם
  • סוויטת עיצוב Vivado
  • חוט (לחיבור החיישנים ללוח)
  • 3 חלקים של צינור PVC ((2) 18 אינץ 'ו (1) 8 אינץ')
  • 2 מרפקים מ- PVC

שלב 1: קבל הדגמת שמע של Zilbo DMA של Digilent

צד ה- FPGA של הפרויקט מבוסס במידה רבה על פרויקט ההדגמה שנמצא כאן. הוא משתמש בגישה ישירה לזיכרון כדי לשלוח נתונים ישירות מהזיכרון שאליהם יכול המעבד לכתוב באמצעות AXI Stream לבלוק שמע I2S. השלבים הבאים יעזרו לך להפעיל את פרויקט הדגמת האודיו של DMA:

  1. ייתכן שיהיה צורך בגרסה חדשה של קובץ הלוח ללוח ה- Zybo. עקוב אחר הוראות אלה כדי להשיג קבצי לוח חדשים עבור Vivado.
  2. בצע את שלבים 1 ו -2 בהוראות בדף זה כדי לפתוח את פרויקט ההדגמה ב- Vivado. השתמש בשיטת Vivado, לא במסירת חומרת SDK.
  3. ייתכן שתקבל הודעה שאומרת שיש לעדכן כמה מחסימות ה- ip שלך. אם כן, בחר "הצג סטטוס IP" ולאחר מכן בכרטיסייה סטטוס IP בחר את כל ה- IP המיושן ולחץ על "שדרג נבחר". כאשר הוא מסתיים וחלון צץ ששואל אם ברצונך לייצר מוצר פלט, לחץ על "צור". אם אתה מקבל הודעת אזהרה קריטית, התעלם ממנה.
  4. עבור מהעיצוב ללשונית המקורות ב- Vivado כדי לראות את קבצי המקור. לחץ באמצעות לחצן העכבר הימני על עיצוב הבלוק "design_1" ובחר "צור עטיפת HDL". כאשר תתבקש לבחור "העתק עטיפה שנוצרה כדי לאפשר עריכות משתמשים". ייווצר קובץ עטיפה לפרויקט.
  5. כעת, לאחר שהשלבים הקריטיים האלה שאיכשהו הושמטו בהדרכה השנייה הושלמו, תוכל לחזור להדרכה המקושרת בעבר ולהמשיך משלב 4 עד הסוף ולוודא שפרויקט ההדגמה פועל כהלכה. אם אין לך דרך להזין אודיו כדי להקליט אותו, פשוט הקלט עם האוזניות שלך והקשב לצליל מעורפל של 5-10 שניות בעת לחיצה על כפתור ההפעלה. כל עוד משהו יוצא משקע האוזניות כשאתה לוחץ על כפתור ההפעלה, זה כנראה עובד כמו שצריך.

שלב 2: בצע כמה שינויים ב- Vivado

בצע כמה שינויים ב- Vivado
בצע כמה שינויים ב- Vivado

אז עכשיו יש לך את ההדגמה של אודיו DMA של Digilent שעובדת, אבל זה בכלל לא המטרה הסופית כאן. אז עלינו לחזור ל- Vivado ולבצע כמה שינויים כדי שניתן יהיה לחבר את החיישנים שלנו לכותרות PMOD ונוכל להשתמש בערך שלהם בצד התוכנה.

  1. פתח את תרשים הבלוק ב- Vivado
  2. צור בלוק GPIO על ידי לחיצה ימנית בשטח ריק בתרשים הבלוקים ובחירה "הוסף IP" מהתפריט. מצא ובחר "AXI GPIO".
  3. לחץ פעמיים על בלוק ה- IP החדש ובחלון ההתאמה האישית מחדש עבור ללשונית תצורת ה- IP. בחר את כל הכניסות והגדר את הרוחב ל -12, מכיוון שיהיו לנו 12 "מיתרים" בנבל שלנו ולכן נצטרך 12 חיישנים. אם אתה רוצה להשתמש בחיישנים פחות או יותר, התאם את המספר הזה כראוי. הגדר גם הפסקת הפעלה.
  4. לחץ לחיצה ימנית על הבלוק החדש של GPIO IP ובחר "הפעל אוטומציה של חיבורים". סמן את התיבה AXI ולחץ על בסדר. זה אמור לחבר את ממשק AXI באופן אוטומטי, אך להשאיר את פלט הבלוק ללא חיבור.
  5. על מנת לפנות מקום להפרעה הנוספת, לחץ פעמיים על בלוק ה- xlconcat_0 ושנה את מספר היציאות מ -4 ל- 5. לאחר מכן תוכל לחבר את סיכת ip2intc_irpt מהבלוק החדש של GPIO ליציאה החדשה שאינה בשימוש בלוק xlconcat.
  6. לחץ לחיצה ימנית על הפלט "GPIO" של בלוק ה- IPIO החדש של GPIO ובחר "צור חיצוני". מצא לאן עובר הקו ולחץ על הפנטגון הקטן הצידי ובצד שמאל אמור להיפתח חלון בו תוכל לשנות את השם. שנה את השם ל- "SENSORS". חשוב להשתמש באותו שם אם אתה רוצה שקובץ האילוצים שאנו מספקים יעבוד, אחרת תצטרך לשנות את השם בקובץ האילוצים.
  7. בחזרה ללשונית המקורות, מצא את קובץ האילוצים והחלף אותו בקובץ שאנו מספקים. אתה יכול לבחור להחליף את הקובץ או פשוט להעתיק את התוכן של קובץ האילוצים שלנו ולהדביק אותו על התוכן של הקובץ הישן. אחד הדברים החשובים שקובץ האילוצים שלנו עושה הוא לאפשר את נגדי ה- pullup בכותרות ה- PMOD. זה הכרחי עבור החיישנים הספציפיים בהם השתמשנו, אולם לא כל החיישנים זהים. אם החיישנים שלך דורשים נגדי הנעה תוכל לשנות כל מופע של "set_property PULLUP true" עם "set_property PULLDOWN true". אם הם דורשים ערך הנגד שונה מזה של הלוח, תוכל להסיר קווים אלה ולהשתמש בנגדים חיצוניים. שמות הסיכות נמצאים בתגובות בקובץ האילוצים, והם תואמים את התוויות בתרשים הראשון בתרשימות Zybo. דף שניתן למצוא כאן. אם אתה רוצה להשתמש בסיכות pmod שונות, פשוט התאם את השמות בקובץ האילוץ לתוויות בסכימה. אנו משתמשים בכותרת PMOD JE ו- JD, ומשתמשים בשישה סיכות נתונים בכל אחד, תוך השמטת סיכות 1 ו- 7. מידע זה חשוב בעת חיבור החיישנים שלך. כפי שמוצג בסכימה, סיכות 6 ו -12 ב- PMODS הן VCC וסיכות 5 ו -11 נקרקות.
  8. שחזר את עטיפת ה- HDL כמו בעבר, והעתק והעתיק את הישן. בסיום זה, צור זרם סיביות וייצא חומרה כמו בעבר והפעל מחדש את ה- SDK. אם תישאל אם ברצונך להחליף את קובץ החומרה הישן, התשובה היא כן. סביר להניח שכדאי לסגור את ה- SDK בעת ייצוא חומרה כך שיוחלף כראוי.
  9. הפעל את ה- SDK.

שלב 3: הפעל את FreeRTOS

השלב הבא הוא להפעיל את FreeRTOS על לוח ה- Zybo.

  1. אם עדיין אין לך עותק, הורד את FreeRTOS כאן וחלץ את הקבצים.
  2. ייבא את ההדגמה FreeRTOS Zynq הממוקמת ב- FreeRTOSv9.0.0 / FreeRTOS / Demo / CORTEX_A9_Zynq_ZC702 / RTOSDemo. תהליך הייבוא פחות או יותר זהה לפרויקט ההדגמה האחר, אולם מכיוון שהדגמת FreeRTOS Zynq מסתמכת על קבצים אחרים בתיקיית FreeRTOS, אין להעתיק את הקבצים לסביבת העבודה שלך. במקום זאת, עליך למקם את כל תיקיית FreeRTOS בתוך תיקיית הפרויקט שלך.
  3. צור חבילת תמיכה חדשה בלוח על ידי מעבר אל "קובץ" -> "חדש" -> "חבילת תמיכה בלוח". וודא שבחרת עצמאית ולחץ על סיום. לאחר רגע יופיע חלון, סמן את התיבה שליד lwip141 (פעולה זו מונעת מאחת מההדגמות של FreeRTOS להיכשל) ולחץ על אישור. לאחר סיום הקלקה הימנית על פרויקט RTOSdemo ועבור אל "מאפיינים", עבור לכרטיסייה "הפניות לפרויקט" וסמן את התיבה שליד ה- bsp החדש שיצרת. אני מקווה שזה יוכר אבל לפעמים ה- SDK של Xilinx יכול להיות מוזר בדברים כאלה. אם עדיין מתקבלת שגיאה לאחר שלב זה ש- xparameters.h חסר או משהו כזה, נסה לחזור על שלב זה ואולי לצאת ולהפעיל מחדש את ה- SDK.

שלב 4: הוסף קוד נבל לייזר

כעת, כאשר FreeRTOS מיובא, תוכל להביא את הקבצים מפרויקט נבל הלייזר להדגמת FreeRTOS

  1. צור תיקייה חדשה מתחת לתיקיית src בהדגמה של FreeRTOS והעתק והדבק את כל קבצי c שסופקו למעט main.c בתיקייה זו.
  2. החלף את ה- main.c של RTOSDemo ב- main.c.
  3. אם הכל נעשה כראוי, אתה אמור להיות מסוגל להריץ את קוד נבל הלייזר בשלב זה. למטרות בדיקה, קלט הכפתורים ששימש בפרויקט הדגמת DMA משמש כעת להשמעת צלילים ללא חיישנים מחוברים (כל אחד מארבעת הכפתורים העיקריים יפעל). היא תנגן מחרוזת בכל פעם שתלחץ עליה ותחזור בין כל המיתרים במערכת על פני לחיצות מרובות. חבר כמה אוזניות או רמקולים לשקע האוזניות בלוח ה- Zybo וודא שאתה יכול לשמוע את קולות המיתרים המגיעים כאשר אתה לוחץ על כפתור.

שלב 5: אודות הקוד

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

מפריע

ראשית אזכיר כיצד נוצרים הפרעות בפרויקט זה. הדרך שעשינו זאת הייתה על ידי יצירת תחילה מבנה טבלאות וקטור מפסק העוקב אחר המזהה, מטפל הפרעות והתייחסות למכשיר עבור כל הפרעה. מזהי ההפרעה מגיעים מ- xparameters.h. מטפל הפרעות הוא פונקציה שכתבנו עבור ה- DMA ו- GPIO, והפסקת I2C מגיעה ממנהלת ה- Xlic I2C. ההתייחסות למכשיר מצביעה על מופעים של כל מכשיר אותו אנו מאתחלים במקומות אחרים. סמוך לסוף הפונקציה _init_audio לולאה עוברת בכל פריט בטבלת וקטור הפרעות וקוראת לשתי פונקציות, XScuGic_Connect () ו- XScuGic_Enable () כדי להתחבר ולהפעיל את ההפרעות. הם מתייחסים ל- xInterruptController, שהוא בקר הפרעות שנוצר כברירת מחדל ב- main.c FreeRTOS. אז בעצם אנו מצרפים כל אחד מההפרעות שלנו לבקר ההפרעה הזה שכבר נוצר עבורנו על ידי FreeRTOS.

DMA

קוד האתחול של DMA מתחיל ב- lh_main.c. ראשית מוכרז מופע סטטי של מבנה XAxiDma. ואז בפונקציה _init_audio () הוא מוגדר. ראשית נקראת פונקציית התצורה מפרויקט ההדגמה, שהיא ב- dma.c. הוא מתועד היטב ומגיע ישירות מההדגמה. ואז ההפרעה מתחברת ומתאפשרת. עבור פרויקט זה נדרשת רק הפרעה מאסטר לעבד, מכיוון שכל הנתונים נשלחים על ידי ה- DMA לבקר I2S. אם ברצונך להקליט אודיו, תזדקק גם להפסקה של עבדים לאבנים. ההפרעה מאסטר לעבד מתקשרת כאשר ה- DMA מסיים לשלוח את כל הנתונים שאמרת לה לשלוח. הפרעה זו חשובה להפליא עבור הפרויקט שלנו מכיוון שבכל פעם שה- DMA מסיים לשלוח מאגר אחד של דגימות שמע הוא חייב להתחיל מייד לשלוח את המאגר הבא, אחרת יתכן עיכוב קולי בין השליחות. בתוך הפונקציה dma_mm2s_ISR () אתה יכול לראות כיצד אנו מטפלים בהפרעה. החלק החשוב הוא קרוב לסוף שבו אנו משתמשים ב- xSemaphoreGiveFromISR () וב- portYIELD_FROM_ISR () כדי להודיע ל- _audio_task () שהוא יכול ליזום את העברת ה- DMA הבאה. הדרך שבה אנו שולחים נתוני שמע קבועים היא על ידי החלפה בין שני מאגרים. כאשר מאגר אחד מועבר לבלוק I2C, החישוב השני מאוחסן ומאוחסן. ואז כאשר ההפרעה מגיעה מה- DMA, המאגר הפעיל עובר והמאגר שנכתב לאחרונה מתחיל להיות מועבר בעוד שהמאגר שהועבר בעבר מתחיל להיחלף בנתונים חדשים. החלק המרכזי בפונקציה _audio_task הוא המקום בו fnAudioPlay () נקרא. fnAudioPlay () לוקח את מופע ה- DMA, את אורך המאגר ומצביע למאגר שממנו יועברו הנתונים. כמה ערכים נשלחים לרשומות I2S כדי ליידע אותו שמדגימות נוספות מגיעות. ואז XAxiDma_SimpleTransfer () נקרא ליזום את ההעברה.

שמע I2S

audio.c ו- audio.h הם המקום שבו מתבצעת אתחול I2S. קוד האתחול של I2S הוא נתח קוד די נפוץ שצף במספר מקומות, ייתכן שתמצא וריאציות קלות ממקורות אחרים אך זה אמור לעבוד. זה מתועד היטב ולא צריך לשנות הרבה עבור פרויקט הנבל. הדגמת האודיו של DMA שממנה הגיעה כוללת פונקציות למעבר למיקרופון או כניסות לקו, כך שתוכל להשתמש בהן אם אתה זקוק לפונקציונליות הזו.

סינתזה של קול

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

שיטה 1: תקופה אחת של ערכי סינוס מחושבת עבור כל מחרוזת בתדירות המתאימה לתו המוסיקלי של אותה מחרוזת ומאוחסנת במערך. לדוגמה, אורך המערך יהיה תקופת גל הסינוס בדגימות, השווה למספר דגימות / מחזור. אם קצב הדגימה הוא 48 קילוהרץ ותדירות ההערה היא 100 הרץ, אז יש 48, 000 דגימות/שנייה ו -100 מחזורים/שנייה המובילים ל -4800 דגימות למחזור, ואורך המערך יהיה 4800 דגימות ויכיל את הערכים של אחד שלם תקופת גלי סינוס. כאשר מחרוזת המחרוזת, מאגר דגימת האודיו מתמלא על ידי לקיחת ערך ממערך גלי הסינוס והכנסתו למאגר השמע כדגימה, ולאחר מכן הגדלת האינדקס למערך גלי הסינוס כך שהשימוש בדוגמה הקודמת שלנו לאורך הקורס מתוך 4800 דוגמאות מחזור גל סינוס אחד מוכנס למאגר השמע. פעולת מודולו משמשת על מדד המערך כך שתמיד נופל בין 0 והאורך, וכאשר מדד המערך עובר סף מסוים (כמו דוגמאות בערך של 2 שניות) המחרוזת כבויה. כדי לנגן מספר מחרוזות בו -זמנית, עקוב אחר אינדקס המערך של כל מחרוזת בנפרד והוסף את הערך מכל גל הסינוס של כל מיתר כדי לקבל כל מדגם.

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

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

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

באופן כללי סינתזת הצליל אינטואיטיבית אך כבדה לחישוב. אחסון כל צליל המיתרים בזיכרון בו זמנית יידרש יותר מדי זיכרון, אך חישוב גל הסינוס והפונקציה המעריכית בין כל פריים ייקח יותר מדי זמן כדי לעמוד בקצב הפעלת האודיו. מספר טריקים משמשים בקוד כדי להאיץ את החישוב. כל המתמטיקה למעט ביצירה הראשונית של טבלאות הריקבון הסינוס והעריכי מעריכי מתבצעת בפורמט שלם, הדורש פיזור השטח המספרי הזמין בפלט השמע של 24 ביט. לדוגמה, טבלת הסינוס היא במשרעת 150 כך שהיא חלקה אך לא כל כך גדולה עד שהמחרוזות הרבות המנגנות יחד יכולות להוסיף להיות מעל 24 סיביות. באופן דומה, ערכי הטבלה האקספוננציאלית מוכפלים ב- 80 לפני שהם מעוגלים למספרים שלמים ומאוחסנים. המשקלים ההרמוניים יכולים לקבל ערכים נפרדים בין 0 ל- 10. כמו כן כל הדגימות למעשה מוכפלות וגלי הסינוס מאונדסים ב -2, ובאופן יעיל מחצית את קצב הדגימה. זה מגביל את התדירות המרבית שניתן לשחק, אך היה נחוץ כדי לחשב את מספר המיתרים וההרמוניות הנוכחיים במהירות מספקת.

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

שלב 6: חיבור החיישנים

חיבור החיישנים
חיבור החיישנים

כדי ליצור את המיתרים השתמשנו בחיישני קרן שבירה של IR שיזהו מתי משמיע את המחרוזת. הזמנו את החיישנים שלנו מהקישור הבא. לחיישנים יש חוט חשמל, הקרקע ונתונים בעוד שלפולטים יש רק חוט חשמל וארקה. השתמשנו ב -3.3 V וסיכות הארקה מכותרות ה- PMOD כדי להפעיל את הפולטים והחיישנים כאחד. כדי להפעיל את כל החיישנים והפולטים יש צורך לחבר את כל החיישנים והפולטים במקביל. חוטי הנתונים מהחיישנים יצטרכו כל אחד לעבור לפין pmod שלו.

שלב 7: בניית השלד

בניית השלד
בניית השלד

על מנת ליצור את צורת הנבל שלושת החלקים משמשים כשלד להנחת החיישנים והפולטים. על אחת משתי חתיכות 18 אינץ 'של צינור PVC יישר את החיישנים והפולטים בסדר מתחלף 1.5 סנטימטר אחד מהשני ואז הדביקו אותם אל הצינור. בצינור ה- PVC השני בגודל 18 אינץ 'יישר את החיישנים והפולטים בסדר מתחלף אך הקפד לקזז את ההזמנה (כלומר אם לצינור הראשון היה חיישן ראשון לשני צריך להיות פולט ראשון ולהיפך).יהיה צורך להלחים חוטים ארוכים יותר בחוטי הנתונים, החשמל והקרקע כדי להבטיח שהם יוכלו להגיע ללוח.

שלב 8: בניית חיצוני העץ

בניית חיצוני העץ
בניית חיצוני העץ

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

*הערה: מומלץ להוסיף נקודות גישה על מנת להיות מסוגל להסיר ולהכניס את שלד הצינור במידה ויהיה צורך לבצע תיקונים או לבצע התאמות קלות.

שלב 9: חיבור כל החלקים

לחבר את כל החלקים ביחד
לחבר את כל החלקים ביחד

לאחר סיום כל השלבים הקודמים הגיע הזמן לבנות את הנבל. ראשית הניחו את שלד הצינור בתוך חיצוני העץ. לאחר מכן חבר את חוטי החיישנים והפולטים למיקום הנכון על הלוח. לאחר מכן פתח את ה- SDK ולחץ על כפתור איתור באגים כדי לתכנת את הלוח. לאחר הלוח מתוכנת חבר חבר לאוזניות או לרמקול. תלוי איזה חיישן יגיע באיזה יציאת pmod כנראה שהמיתרים של הנבל שלך לא יהיו תקינים מלכתחילה. מכיוון שיכול להיות קשה לדעת איזה חוט עובר לאיזה חיישן כאשר כל כך הרבה חוטים מעורבים, כללנו דרך למפות מספרי מחרוזת כדי להפריע את מיקומי הסיביות בתוכנה. מצא את "static int sensor_map [NUM_STRINGS]" והתאם את הערכים במערך עד שהמחרוזות משחקות מהנמוך לגבוה לפי הסדר.

ניתן להשתמש בתפריט על ידי פתיחת מסוף סדרתי (למשל RealTerm) והגדרת קצב השידור ל- 115200 והתצוגה ל- ANSI. ניתן לנווט בתפריט באמצעות מקשי w ו- s כדי לזוז למעלה ולמטה ובמקשי a ו- d כדי לשנות את הערכים.

שלב 10: רוק אאוט

ברגע שהנבל מתפקד במלואו. שליט בנבל והקשיב לצליל המתוק של המוזיקה שלך!

מוּמלָץ: