היי חבר'ה, במהלך השבועות האחרונים עבדתי על התחברות מחדש לאהבה שלי לגיטרה. לנגן על גיטרת הקופסה היה איך שאני נרגע לפני כמה שנים לפני שהסקסופון השתלט עליו. כשחזרתי לגיטרה, לאחר 3 שנים של נגינה נדירה באקורד, גיליתי בין השאר שאני כבר לא יודע איך כל מיתר צריך להישמע, ולנסח זאת במילים של חבר שלי, "השמיעה שלי כבר לא הייתה מכוונת" כתוצאה מכך לא הצלחתי לכוון את הגיטרה ללא עזרת מקלדת או אפליקציה לנייד שהורדתי מאוחר יותר. השבועות חלפו עד לפני מספר ימים כאשר היצרן שבי נהיה חדור מוטיבציה והחלטתי לבנות טיונר גיטרה מבוסס ארדואינו. במדריך של היום, אשתף כיצד לבנות טיונר גיטרה ארדואינו בעצמך.
איך עובד טיונר גיטרה
לפני שאנחנו עוברים לאלקטרוניקה, חשוב להבין את העיקרון שמאחורי הבניין. ישנם 7 תווים מוסיקליים גדולים המסומנים על ידי האלפבית; A, B, C, D, E, F, G ובדרך כלל מסתיימים ב- A אחר שנמצא תמיד באוקטבה הגבוהה יותר מה- A. במוזיקה קיימות כמה גרסאות של תווים אלה כמו ה- A הראשון והאחרון A. נבדלים זה מזה מהווריאציה שלהם זה מזה על ידי אחד ממאפייני הצליל המכונה צליל. המגרש מוגדר כקולניות או הנמוכה של הצליל והוא מצוין על ידי תדירות הצליל הזה. מכיוון שתדירות התווים הללו ידועה, כדי שנוכל לקבוע אם הגיטרה מכוונת או לא, עלינו רק להשוות את תדר התו של המיתר המסוים לתדירות בפועל של התו שהמחרוזת מייצגת.
התדרים של 7 התווים המוסיקליים הם:
A = 27.50 הרץ
B = 30.87 הרץ
C = 16.35 הרץ
D = 18.35 הרץ
E = 20.60 הרץ
F = 21.83 הרץ
G = 24.50 הרץ
כל וריאציה של תווים אלה נמצאת תמיד בגובה השווה ל- FxM כאשר F הוא התדר ו- M הוא מספר שלם שאינו אפס. לפיכך עבור ה- A האחרון שכפי שתואר קודם לכן, נמצא באוקטבה הגבוהה יותר מה- A הראשון, התדר הוא;
27.50 x 2 = 55 הרץ.
בגיטרה (עופרת / גיטרת תיבה) יש בדרך כלל 6 מיתרים המסומנים על ידי התווים E, A, D, G, B, E על מיתר פתוח. כרגיל, ה- E האחרון יהיה באוקטבה הגבוהה מה E. הראשונה. אנו נעצב את מכוון הגיטרה שלנו שיעזור לכוון את הגיטרה באמצעות התדרים של התווים הללו.
על פי כוונון הגיטרה הסטנדרטי, התו והתדירות המקבילה של כל מיתר מוצגים בטבלה שלהלן.
מיתרים |
תדירות |
סִמוּן |
1 (ה) |
329.63 הרץ |
דואר 4 |
2 (ב) |
246.94 הרץ |
B3 |
3 (G) |
196.00 הרץ |
G3 |
4 (ד) |
146.83 הרץ |
D3 |
5 (א) |
110.00 הרץ |
A2 |
6 (ה) |
82.41 הרץ |
E2 |
זרימת הפרויקט היא די פשוט; אנו ממירים את אות הצליל שנוצר על ידי הגיטרה לתדר ואז משווים לערך התדרים המדויק של המיתר המכוון. הגיטריסט מקבל הודעה באמצעות נורית LED כאשר הערך מתואם.
איתור / המרת תדרים כולל 3 שלבים עיקריים;
- מַגְבִּיר
- מְקַזֵז
- המרה אנלוגית לדיגיטלית (דגימה)
אות הקול המופק יהיה חלש מכדי ש- ADC של Arduino יוכל לזהות אותו ולכן עלינו להגביר את האות. לאחר הגברה, כדי לשמור על האות בטווח שניתן לזהות אותו על ידי ה- ADC של Arduino כדי למנוע גזירת האות, אנו מקזזים את מתח האות. לאחר קיזוז, האות מועבר ל- ADC Arduino שם הוא נדגם ומתקבל תדר הצליל הזה.
רכיבים נדרשים
הרכיבים הבאים נדרשים לבניית פרויקט זה;
- Arduino Uno x1
- LM386 x1
- מיקרופון הקבל x1
- שקע מיקרופון / שמע x1
- פוטנציומטר 10k x1
- קבלים O.1uf x2
- נגן 100 אוהם x4
- הנגד 10 אוהם x1
- קבל 10uf x3
- 5 מ"מ צהוב LED x2
- 5 מ"מ ירוק LED x1
- כפתורי לחיצה פתוחים בדרך כלל x6
- חוטי מגשר
- קרש לחם
סכימות
חבר את הרכיבים כפי שמוצג בתרשים המעגלים לכוונון הגיטרה להלן.
לחצני הלחיצה מחוברים ללא נגדי משיכה כלפי מעלה / מטה מכיוון שישמשו נגדי משיכה מובנים של הארדואינו. זאת על מנת להבטיח שהמעגל יהיה פשוט ככל האפשר.
קוד ארדואינו לכוונון גיטרה
האלגוריתם שמאחורי הקוד לפרויקט טיונר גיטרות זה פשוט. כדי לכוון מחרוזת מסוימת, הגיטריסט בוחר את המיתר על ידי לחיצה על כפתור הלחיצה המתאים ומנגן את הנגינה על מיתר פתוח. הצליל נאסף על ידי שלב ההגברה ומועבר ל- ADC של ארדואינו. התדר מפוענח ומושווה. כאשר תדר הקלט מהמחרוזת נמוך מהתדר שצוין, עבור מחרוזת אחת נוריות ה- LED הצהובות נדלקות המציינות כי יש להדק את המחרוזת. כאשר התדר הנמדד גדול מהתדר שנקבע עבור מחרוזת זו, נורית נורית נוספת נדלקת. כאשר התדר הוא בטווח הקבוע עבור מחרוזת זו נורית הנורית הירוקה נדלקת להנחיית הגיטריסט.
קוד ארדואינו מלא ניתן בסוף, כאן הסברנו בקצרה את חלקי הקוד החשובים.
אנו מתחילים ביצירת מערך שיחזיק את המתגים.
מערך כפתור int = {13, 12, 11, 10, 9, 8}; //
לאחר מכן, אנו יוצרים מערך שיחזיק את התדר המתאים לכל אחד מהמחרוזות.
freqarray צף = {82.41, 110.00, 146.83, 196.00, 246.94, 329.63}; // הכל בהרץ
לאחר ביצוע פעולה זו, אנו מצהירים על הפינים אליהם מחוברים נוריות הנורה ומשתנים אחרים שישמשו להשגת התדר מ- ADC.
int lowerLed = 7; int higherLed = 6; int justRight = 5; # הגדר אורך 512 בתים rawData; ספירת int;
הבא הוא פונקציית התקנת הריק () .
כאן אנו מתחילים בכך שמאפשרים משיכה פנימית על הארדואינו לכל אחד מהסיכות אליהם מחובר המתגים. לאחר מכן הגדרנו את הסיכות אליהן מחוברות הנוריות כמוצאים ומשיקים את המסך הטורי להצגת הנתונים.
הגדרת חלל () { עבור (int i = 0; i <= 5; i ++) { pinMode (מערך כפתורים, INPUT_PULLUP); } pinMode (lowerLed, OUTPUT); pinMode (highLed, OUTPUT); pinMode (justRight, OUTPUT); Serial.begin (115200); }
לאחר מכן, היא פונקציית לולאת הריק , אנו מיישמים את איתור והשוואת התדרים.
loop loop () { if (count <LENGTH) { count ++; rawData = analogRead (A0) >> 2; } אחר { סכום = 0; pd_state = 0; תקופת int = 0; עבור (i = 0; i <len; i ++) { // Autocorrelation sum_old = sum; סכום = 0; עבור (k = 0; k <len-i; k ++) סכום + = (rawData-128) * (rawData-128) / 256; // Serial.println (סכום); // שיא זיהוי מכונת מצב אם (pd_state == 2 && (sum-sum_old) <= 0) { period = i; pd_state = 3; } אם (pd_state == 1 && (sum> thresh) && (sum-sum_old)> 0) pd_state = 2; אם (! i) { תריס = סכום * 0.5; pd_state = 1; } } // תדר שזוהה בהרץ אם (תריס> 100) { freq_per = sample_freq / period; Serial.println (freq_per); עבור (int s = 0; s <= 5; s ++) { if (digitalRead (buttonarray) == HIGH) { if (freq_per - freqarray <0) { digitalWrite (lowerLed, HIGH); } אחר אם (freq_per - freqarray> 10) { digitalWrite (higherLed, HIGH); } אחר { digitalWrite (justRight, HIGH); } } } } ספירה = 0; } }
הקוד להשלים עם וידאו הפגנה הוא כדלקמן. העלה את הקוד ללוח Arduino שלך וחטוף משם.