ארדואינו למתחילים: פרויקט – נגן מוזיקה

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

אם טרם ראיתם אותו, הנה הסרטון שמציג את הנגן בפעולה (בשתי הגרסאות):

רוצים גם?

החומרים הדרושים

  • 1 לוח ארדואינו כלשהו
  • 1 רמקול קטן, לא חשוב איזה
  • 2 חוטי חשמל דקים לחיבור הרמקול, אם הוא הגיע בלי
  • 1 פוטנציומטר עם התנגדות של מקסימום 10K אום (אפשר גם פחות)
  • 3 חוטי חשמל דקים לחיבור הפוטנציומטר
  • 1 חוט חשמל דק נוסף (אופציונלי)

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

Speaker in natural habitat
הרמקול בסביבתו הטבעית

התוכנה של הנגן שלנו, כאמור, קצת מורכבת ולכן נפרט אותה בפוסט ההמשך. בינתיים, נחבר את החומרה וניצור תוכנה בסיסית רק כדי לבדוק שהיא עובדת. את אחד החוטים של הרמקול חיברתי ל-Ground של הארדואינו (החיבור הצמוד לחיבור הדיגיטלי מס' 13), ואת החוט השני לחיבור דיגיטלי מס' 7. למה שבע? סתם.

Basic Hardware Setup
חיבור בסיסי של רמקול לארדואינו

אם נשלח סתם זרם לרמקול, באמצעות פקודה כמו digitalWrite, נקבל צליל אחיד במקרה הטוב או צרצור לא אחיד במקרה הרע. כאן אנחנו רוצים לשלוט בצלילים, ואת זה מבצעים באמצעות הפקודה tone. פקודה זו מקבלת שני פרמטרים (מספר חיבור ותדר צליל) או שלושה (חיבור, תדר ומשך באלפיות השניה), ושולחת לחיבור שצוין אות חשמלי מתאים להפקת צליל נקי יחסית בתדר המבוקש. אם לא צוין משך, כדאי בשלב כזה או אחר להשתמש בפקודת ההשתקה –noTone (שמקבלת מספר חיבור להשתקה). שימו לב: בכל רגע נתון, הארדואינו מסוגל להשמיע צליל דרך חיבור אחד בלבד.

נכתוב תוכנה בסיסית, שמשמיעה צלילים בתדר 300 הרץ. כל צליל יישמע במשך 50 אלפיות השניה, ואחריו הפסקה של שניה שלמה. הנה הקוד:

void setup() {
pinMode(7, OUTPUT);
}

void loop() {
tone(7, 300, 50);
delay(1000);
}

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

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

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

אם כן, אנחנו מחברים:

  • רגל קיצונית אחת של הפוטנציומטר, באמצעות חוט חשמל, אל חיבור מס' 7 בארדואינו (במקום החוט של הרמקול כמובן)
  • רגל קיצונית שניה ל-Ground של הארדואינו (ביחד עם הרמקול או בחיבור GND אחר)
  • את הרגל האמצעית לחוט החופשי של הרמקול, זה שהוצאנו קודם מחיבור 7

התוצאה הסופית אמורה להיראות בערך ככה (התעלמו מהחוט הירוק שלא מחובר לכלום – עליו נדבר כשנעסוק בתוכנה):

Advanced Hardware Setup
חיבור של ארדואינו, רמקול ופוטנציומטר לשליטה בעוצמת הקול

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

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

להרשמה
הודע לי על
14 Comments
מהכי חדשה
מהכי ישנה לפי הצבעות
Inline Feedbacks
הראה את כל התגובות

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

רק רציתי להוסיף , ששאלתי בקבוצת "ארדואינו" ואחד הגולשים אמר לי לחבר מגבר אודיו ושמתי לב שבמדריך הזה לא הזכרת דבר כזה.
יש לי שני רמקולים 1 . 8 התנגדות/3W
2. 4 התנגדות /3W
תודה עידו היקר 🙂

שלום,
ניסיתי לשלב את זה בקוד, מופיע למטה, אבל זה לא מתקמפל (אני אשמח לעזרה, אני רק בין עשר וחצי)

void setup() {
pinMode (7,OUTPUT);
analogReference (0,INPUT);
}

void loop() {
if
(analogRead (0,HIGH))
{
tone (7,300,40);
}
if
(analogRead (LOW,0))
{
(tone (7,150,30));
}
}

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

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

הי. רק לברך אותך על הבלוג – טוב שיהיה גם בעברית וכיף לחשוב שתצמח פה קהילה פעילה כמו בארה"ב. בהצלחה!

שתי שאלות קטנות:
א. האם התכנות הוא ב-c לכל דבר?
ב. מה עושים כאשר צריך עוד זכרון בשביל התוכנית? (כאשר למשל כותבים תוכנית לעיבוד תמונה)