- חומרים נדרשים:
- תרשים מעגל:
- שרטוטים והסברים:
- הבנת ה
- השמעת צלילי פסנתר בארדואינו:
- תכנות הארדואינו:
- נגן, הקלט, הפעל מחדש וחזור! :
ארדואינו היווה ברכה לאנשים שאינם מרקע האלקטרוניקה לבנות דברים בקלות. זה היה כלי טיפוס נהדר או לנסות משהו מגניב, בפרויקט זה אנו הולכים לבנות פסנתר קטן אך מהנה באמצעות הארדואינו. הפסנתר הזה די פשוט עם 8 לחצני כפתור בלבד וזמזם. הוא משתמש בפונקציית הטון () של ארדואינו כדי ליצור סוגים שונים של תווים לפסנתר ברמקול. כדי לתבל את זה מעט הוספנו את תכונת ההקלטה בפרויקט, זה מאפשר לנו לנגן את תקליט המנגינה ולהשמיע אותה שוב ושוב בעת הצורך. נשמע מעניין נכון !! אז בואו נקבל בניין….
חומרים נדרשים:
- ארדואינו אונו
- 16 * 2 תצוגת LCD
- זַמזָם
- גוזם 10k
- מתג SPDT
- כפתור לחיצה (8 מס ')
- נגדים (10k, 560R, 1.5k, 2.6k, 3.9, 5.6k, 6.8k, 8.2k, 10k)
- קרש לחם
- חוטי חיבור
תרשים מעגל:
ניתן לבנות את פרויקט הפסנתר השלם של ארדואינו על גבי קרש לחם עם כמה חוטים מחברים. תרשים המעגל שנעשה באמצעות פריץ המציג את תצוגת הקרש של הפרויקט מוצג להלן
פשוט עקוב אחר דיאגרמת המעגל וחבר את החוטים בהתאם, את כפתורי הלחיצה והזמזם כפי שהם משמשים עם מודול PCB אך בחומרה ממש השתמשנו רק במתג ובזמזם, זה לא אמור לבלבל אותך הרבה כי יש להם את אותו סוג סיכה. אתה יכול גם להתייחס לתמונה למטה של החומרה כדי ליצור את החיבורים שלך.
ערך הנגדים משמאל הוא בסדר הבא, 10k, 560R, 1.5k, 2.6k, 3.9, 5.6k, 6.8k, 8.2k ו- 10k. אם אין לך את אותו מתג DPST תוכל להשתמש במתג להחלפה רגיל כמו זה שמוצג בתרשים המעגל לעיל. עכשיו בואו נסתכל על הסכימות של הפרויקט כדי להבין מדוע יצרנו את הקשרים הבאים.
שרטוטים והסברים:
התרשימים לתרשים המעגל המוצגים לעיל מובאים להלן, והיא נעשתה גם באמצעות פריצינג.
חיבור עיקרי אחד שעלינו להבין הוא שכיצד חיברנו את 8 כפתורי הלחיצה לארדואינו דרך סיכה A0 אנלוגית. בעיקרון אנו זקוקים ל -8 סיכות קלט שניתן לחבר ל -8 כפתורי כפתור הקלט, אך עבור פרויקטים כאלה איננו יכולים להשתמש ב -8 פינים של המיקרו-בקר רק ללחצני כפתור מכיוון שנצטרך אותם לשימוש מאוחר יותר. במקרה שלנו יש לנו את ממשק התצוגה LCD.
אז אנו משתמשים בסיכה האנלוגית של הארדואינו ויוצרים מחלק פוטנציאלי עם ערכי נגדים משתנים להשלמת המעגל. בדרך זו כאשר כל לחצן נלחץ, מתח אנלוגי אחר יסופק לסיכה האנלוגית. מעגל לדוגמא עם שני נגדים בלבד ושני כפתורי לחיצה מוצג להלן.
במקרה זה סיכת ה- ADC תקבל +5 וולט כאשר לחצני הלחיצה לא נלחצים, אם לוחצים על הכפתור הראשון, המחלק הפוטנציאלי מסתיים דרך הנגד 560R ואם לוחצים על הכפתור השני, המחלק הפוטנציאלי מתחרה באמצעות 1.5 נגד k. בדרך זו המתח המתקבל על ידי סיכת ה- ADC ישתנה בהתאם לנוסחאות המחלק הפוטנציאלי. אם אתה רוצה לדעת יותר על אופן פעולת המחלק הפוטנציאלי וכיצד לחשב את ערך המתח המתקבל על ידי סיכת ADC, תוכל להשתמש בדף מחשבון פוטנציאלי זה.
מלבד זאת כל החיבורים ישרים קדימה, ה- LCD מחובר לסיכות 8, 9, 10, 11 ו- 12. הבאזר מחובר לסיכה 7 ומתג SPDT מחובר לסיכה 6 של Arduino. הפרויקט השלם מופעל באמצעות יציאת ה- USB של המחשב הנייד. אתה יכול גם לחבר את Arduino לאספקת 9V או 12V דרך שקע DC והפרויקט עדיין יעבוד אותו הדבר.
הבנת ה
ל- Arduino פונקציית טונוס שימושית () בה ניתן לייצר אותות תדרים משתנים שניתן להשתמש בהם להפקת צלילים שונים באמצעות זמזם. אז בואו להבין כיצד הפונקציה עובדת וכיצד ניתן להשתמש בה עם Arduino.
לפני כן עלינו לדעת כיצד עובד זמזם של פיזו. יכול להיות שלמדנו על גבישי פיזו בבית הספר שלנו, זה לא אלא גביש הממיר תנודות מכניות לחשמל או להיפך. כאן אנו מפעילים זרם (תדר) משתנה שעבורו הגביש רוטט וכך נוצר צליל. מכאן שכדי לגרום לזמזם הפיזו להרעיש קצת עלינו לגרום לקריסטל הפיזו לרטוט, גובה הצליל ורמת הרעש תלוי במהירות הרטט של הגביש. מכאן שניתן לשלוט על הטון והגובה על ידי שינוי תדירות הזרם.
אוקיי, אז איך נקבל תדר משתנה מארדואינו? כאן נכנסת פונקציית הטון () הטון () יכול ליצור תדר מסוים על סיכה ספציפית. ניתן לציין את משך הזמן במידת הצורך. התחביר לטון () הוא
טון תחביר (סיכה, תדר) טון (סיכה, תדר, משך) סיכת פרמטרים: הסיכה להפקת תדר הטון: תדירות הטון בהרץ - משך זמן לא חתום: משך הטון באלפיות השנייה (אופציונלי 1) - לא חתום ארוך
הערכים של סיכה יכולים להיות כל אחד מהסיכות הדיגיטליות שלך. השתמשתי כאן בסיכה 8. התדירות שניתן ליצור תלויה בגודל הטיימר בלוח ה- Arduino שלך. עבור UNO ורוב הלוחות הנפוצים האחרים התדר המינימלי שניתן לייצר הוא 31Hz והתדר המרבי שניתן לייצר הוא 65535Hz. עם זאת אנו בני האדם יכולים לשמוע רק תדרים בין 2000 הרץ ל -5000 הרץ.
השמעת צלילי פסנתר בארדואינו:
אוקיי, עוד לפני שאתחיל בנושא זה הרשה לי להבהיר שאני טירון עם תווים או פסנתר, אז אנא סלח לי אם משהו שמוזכר בכותרת זו הוא רעש.
כעת אנו יודעים שנוכל להשתמש בפונקציית הטונים בארדואינו כדי להפיק כמה צלילים, אך כיצד נוכל להשמיע צלילים של תו מסוים באמצעות אותם. למזלנו יש ספרייה בשם "pitches.h" שנכתבה על ידי ברט הגמן. ספריה זו מכילה את כל המידע לגבי התדירות המקבילה לאיזה תו על פסנתר. הופתעתי עד כמה הספרייה הזו באמת יכולה לעבוד ולנגן כמעט כל תו על פסנתר, השתמשתי בו כדי לנגן תווים לפסנתר של Pirates of Caribbean, Crazy Frog, Mario ואפילו titanic והם נשמעו מדהים. אופס! כאן קצת מתחיל לנושא, אז אם אתה מעוניין בכך לבדוק נגינות מנגינות באמצעות פרויקט Arduino. תוכלו למצוא הסברים נוספים על ספריית pitches.h בפרויקט זה.
בפרויקט שלנו יש רק 8 כפתורי לחיצה, כך שכל כפתור יכול לנגן תו מוזיקלי מסוים אחד בלבד ולפיכך אנו יכולים לנגן 8 תווים בלבד. בחרתי את התווים הנפוצים ביותר בפסנתר, אך האם באפשרותך לבחור כל 8 או אפילו להרחיב את הפרויקט בעזרת כפתורי לחיצה נוספים ולהוסיף תווים נוספים.
התווים שנבחרו בפרויקט זה הם התווים C4, D4, E4, F4, G4, A4, B4 ו- C5 אותם ניתן להשמיע באמצעות הכפתורים 1 עד 8 בהתאמה.
תכנות הארדואינו:
די בתיאוריה בואו נגיע לחלק המהנה של תכנות הארדואינו. מלאת Arduino תכנית ניתנת בסוף הדף הזה אתה יכול לקפוץ למטה אם אתה להוט או לקרוא עוד להבין כיצד פועל קוד.
בתכנית Arduino שלנו עלינו לקרוא את המתח האנלוגי מסיכה A0, ואז לחזות איזה כפתור נלחץ ולנגן את הטון המתאים לכפתור זה. תוך כדי כך עלינו להקליט גם על איזה כפתור המשתמש לחץ וכמה זמן הוא / היא לחצו, כדי שנוכל לשחזר את הטון אותו שיחק המשתמש בהמשך.
לפני שנלך לחלק ההגיוני, עלינו להצהיר על איזה 8 צלילים נשמיע. התדירות המתאימה לתווים נלקחת מהספרייה pitches.h ואז נוצר מערך כמוצג להלן. כאן התדר להשמעת תו C4 הוא 262 וכן הלאה.
הערות int = {262, 294, 330, 349, 392, 440, 494, 523}; // הגדר תדר עבור C4, D4, E4, F4, G4, A4, B4,
בהמשך עלינו להזכיר לאילו פינים מחוברת תצוגת LCD. אם אתה עוקב אחר אותן סכימות שניתנו לעיל, אינך צריך לשנות כאן שום דבר.
const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13; // סיכות שאליהן מחובר LCD LiquidCrystal lcd (rs, en, d4, d5, d6, d7);
לאחר מכן, בתוך פונקציית ההתקנה שלנו אנו רק מאתחלים את מודול ה- LCD והצג הסדרתי לצורך איתור באגים. אנו גם מציגים הודעת מבוא רק כדי לוודא שהדברים עובדים כמתוכנן. לאחר מכן , בתוך פונקציית הלולאה הראשית יש לנו שניים לולאות.
לולאה אחת תתבצע כל עוד מתג SPDT ימוקם בהקלטה נוספת. במצב הקלטה המשתמש יכול לשלם את הטונים הנדרשים ובמקביל יישמר גם הטון שמושמע. אז לולאת בזמן נראית כך למטה
בעוד (digitalRead (6) == 0) // אם מתג ההחלפה מוגדר במצב הקלטה {lcd.setCursor (0, 0); lcd.print ("הקלטה.."); lcd.setCursor (0, 1); כפתור זיהוי (); פליי-טון (); }
כפי ששמתם לב יש לנו שתי פונקציות בתוך לולאת הזמן. נעשה שימוש בפונקציה Detect_button () הראשונה, מצא באיזה כפתור המשתמש לחץ והפונקציה השנייה Play_tone () משמשת להפעלת הטון המתאים. מלבד פונקציה זו הפונקציה Detect_button () מתעדת גם איזה לחצן נלחץ ופונקציית Play_tone () מתעדת כמה זמן לחצו על הכפתור.
בתוך Detect_button () פונקציה אנו קוראים מתח אנלוגי מהפין A0 ולהשוות אותו עם כמה ערכים מוגדרים מראש כדי לגלות איזה כפתור נלחץ. ניתן לקבוע את הערך על ידי שימוש במחשבון מחלק המתח שלמעלה או על ידי שימוש בצג הטורי כדי לבדוק איזה ערך אנלוגי נקרא עבור כל כפתור.
בטל Detect_button () { analogVal = analogRead (A0); // קרא את הוולטוג האנלוגי על סיכה A0 pev_button = כפתור; // זכרו את הכפתור הקודם שלוחץ על ידי המשתמש אם (analogVal <550) כפתור = 8; אם כפתור (analogVal <500) = 7; אם (analogVal <450) כפתור = 6; אם כפתור (analogVal <400) = 5; אם (analogVal <300) כפתור = 4; אם (analogVal <250) כפתור = 3; אם (analogVal <150) כפתור = 2; אם (analogVal <100) כפתור = 1; אם (analogVal> 1000) כפתור = 0; / רקורד את הכפתורים שנלחצו במערך *** / אם (כפתור! = pev_button && pev_button! = 0) { מוקלט_כפתור = pev_button; כפתור_אינדקס ++; כניסה מוקלטת = 0; כפתור_אינדקס ++; } / ** סיום תוכנית ההקלטות ** / }
כאמור, בתוך פונקציה זו אנו מקליטים גם את הרצף בו לוחצים על הכפתורים. הערכים המוקלטים נשמרים במערך בשם מוקלט_כפתור. ראשית אנו בודקים אם יש לחיצת כפתור חדשה, אם נלחץ אז נבדוק גם אם אינו כפתור 0. היכן כפתור 0 אינו אלא לחיצת כפתור. בתוך לולאת ה- if אנו שומרים את הערך במיקום האינדקס שניתן על ידי המשתנה button_index ואז אנו גם מגדילים את ערך האינדקס הזה כדי שלא נכתוב יותר מדי באותו מיקום.
/ רקורד את הכפתורים שנלחצו במערך *** / if (כפתור! = כפתור_כפתור && שבר-כפתור! = 0) {כניסה מוקלטת = כפתור-שבר; כפתור_אינדקס ++; כניסה מוקלטת = 0; כפתור_אינדקס ++; } / ** סוף תוכנית ההקלטות ** /
בתוך Play_tone () הפונקציה ננגן את הטון המתאים עבור הכפתור נלחץ באמצעות מרובים אם תנאים. כמו כן נשתמש במערך בשם recording_time שבתוכו נשמור את משך הזמן שלחצו לחצו על הכפתור. הפעולה דומה לרשמת כפתור ההקלטה על ידי שימוש בפונקציה millis () כדי לקבוע כמה זמן לחצו על כל כפתור, גם להפחתת גודל המשתנה אנו מחלקים את הערך ב- 10. עבור כפתור 0, כלומר המשתמש אינו בלחיצה על משהו אנחנו לא מנגנים שום צליל באותו זמן הקוד השלם בתוך הפונקציה מוצג להלן.
בטל Play_tone () { / **** תקליט את עיכוב הזמן בין לחיצת כפתור במערך *** / if (button! = pev_button) { lcd.clear (); // ואז לנקות אותו note_time = (millis () - start_time) / 10; זמן מוקלט = זמן הערה; time_index ++; start_time = מילי (); } / ** סוף תוכנית ההקלטה ** / if (כפתור == 0) { noTone (7); lcd.print ("0 -> השהה.."); } אם (כפתור == 1) { טון (7, הערות); lcd.print ("1 -> NOTE_C4"); } אם (כפתור == 2) { טון (7, הערות); lcd.print ("2 -> NOTE_D4"); } אם (כפתור == 3) { טון (7, הערות); lcd.print ("3 -> NOTE_E4"); } אם (כפתור == 4) { טון (7, הערות); lcd.print ("4 -> NOTE_F4"); } אם (כפתור == 5) { טון (7, הערות); lcd.print ("5 -> NOTE_G4"); } אם (כפתור == 6) { טון (7, הערות); lcd.print ("6 -> NOTE_A4"); } אם (כפתור == 7) { טון (7, הערות); lcd.print ("7 -> NOTE_B4"); } אם (כפתור == 8) { טון (7, הערות); lcd.print ("8 -> NOTE_C5"); } }
לבסוף לאחר ההקלטה המשתמש צריך להחליף את ה- DPST לכיוון השני כדי להשמיע את הטון המוקלט. כאשר זה נעשה התוכנית פורצת מלולאת בזמן הקודמת ונכנסת ללולאת זמן שניה בה אנו מנגנים את התווים ברצף הכפתורים שנלחץ למשך זמן שהוקלט בעבר. הקוד לעשות את אותו הדבר מוצג להלן.
בעוד (digitalRead (6) == 1) // אם מתג ההחלפה מוגדר במצב הפעלה { lcd.clear (); lcd.setCursor (0, 0); lcd.print ("עכשיו מנגן.."); עבור (int i = 0; i <sizeof (כפתור מוקלט) / 2; i ++) { עיכוב ((זמן הקלטה) * 10); // המתן לפני שתשלם את המנגינה הבאה אם ( מוקלט_כפתור == 0) noTone (7); // המשתמש לא יכול לגעת בכל טון כפתור אחר (7, הערות - 1)]); // השמע את הצליל המתאים לכפתור שנגע בו המשתמש } } }
נגן, הקלט, הפעל מחדש וחזור!:
הכינו את החומרה לפי דיאגרמת המעגל המוצגת, והעלו את הקוד ללוח הארדואינו וזמנו המוצג. מקם את ה- SPDT במצב הקלטה והתחל לנגן את הצלילים שבחרת, לחיצה על כל כפתור תפיק צליל אחר. במהלך מצב זה LCD יציג " הקלטה… " ובשורה השנייה תראה את שם התו שנלחץ כרגע כמוצג להלן
לאחר שניגנת את הטון שלך, החלף את מתג SPDT לצד השני ועל ה- LCD להציג את " Now Playing.." ואז להתחיל לנגן את הטון שרק ניגנת. אותו צליל יושמע שוב ושוב כל עוד מתג ההחלפה נשמר במצב כפי שמוצג בתמונה למטה.
את העבודה המלאה של הפרויקט ניתן למצוא בסרטון הבא. מקווה שהבנתם את הפרויקט ונהניתם לבנות אותו. אם יש לך בעיות בבניית פרסום זה בסעיף ההערות או השתמש בפורומים לעזרה טכנית בפרויקט שלך. אל תשכח לבדוק את סרטון ההדגמה המופיע להלן.