תקציר

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

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

זמזם פסיבי וזמזם אקטיבי

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

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

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

איך עובד זמזם פסיבי?

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

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

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

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

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

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

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

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

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

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

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

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

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

הרכבת המעגל החשמלי

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

החיבורים הפנימיים בברדבורד בכל צד של החריץ המרכזי, חמשת החורים שבאותה שורה מחוברים זה לזה. החריץ מפריד בין שני הצדדים. חיבורים פנימיים בכל שורה ABCDEFGHIJ 1 2 3 חמשת החורים מחוברים חריץ מפריד קבוצה נפרדת
חמשת החורים בכל קבוצה מחוברים לרצועת מתכת אחת. החריץ באמצע מפריד בין קבוצת החורים השמאלית לימנית.

מטרתנו היא לחבר את פין מס’ 0 של המיקרוביט אל פין ה-”+” של הזמזם, ואת פין האדמה (GND) של המיקרוביט אל הפין השני של הזמזם. באופן הזה זרם חשמלי יעבור מפין 0, דרך הזמזם ומשם אל פין האדמה של המיקרוביט.

חיבור הזמזם למיקרוביט חוט כחול מחבר את P0 למגע החיובי של הזמזם, וחוט אדום מחבר את GND למגע השני. חיבור שני החוטים micro:bit P0 GND זמזם פסיבי + − כחול: P0 אל + אדום: GND
P0 מתחבר למגע החיובי של הזמזם; GND מתחבר למגע השני. החורים באותה שורת ברדבורד מחברים בין כל רכיביה.

עקבו אחר ההוראות:

  1. נכניס את המיקרוביט לתוך המתאם מסוג T.
  2. נכניס את המתאם לתוך הברדבורד כך שפין מס’ 0 של המתאם נמצא בשורה מס’ 1 של הברדבורד.
  3. נתקע את הבאזר לתוך הברדבורד כך שהפין המסומן ב-”+” נמצא בשורה 30, והפין השני בשורה 33.
  4. ניקח חוט כחול: צד אחד שלו נכניס לחור בשורה 1, בצד של פין מס’ 0 של המתאם. את הצד השני נכניס לחור בשורה 30.
  5. ניקח חוט אדום: צד אחד שלו נכניס לחור בשורה 1 בצד של פין GND של המתאם. את הצד השני נכניס לחור בשורה 33.

חיבור זמזם חיצוני ללוח micro:bit ולברדבורד

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

תוכנת MakeCode למיתוג פין P0

נלחץ על כפתור ה-Download: העורך יטען את הקוד אל הכרטיס. כעת נלחץ על כפתור A שעל הכרטיס: אם הכל עובד כשורה, אנחנו אמורים לשמוע זמזום מהזמזם שלנו.

זמזם עם אות דיגיטלי

נתרגם את הקוד שלנו לשפה מדוברת:

אם כפתור A נלחץ, חזור על הפעולה הבאה 1000 פעם: קבע את ערכו של פין P0 ל-‘1’, המתן שתי אלפיות השניה, שנה את ערכו של פין P0 ל-‘0’, המתן עוד שתי אלפיות השניה, וחוזר חלילה.

אות דיגיטלי עולה ויורד האות הדיגיטלי בפין P0 מתחלף בין ערך נמוך לערך גבוה. הערך הדיגיטלי של P0 מתחלף 1 0 זמן גבוה נמוך
הפין מחליף בין 0 ל־1. המעבר החוזר בין המצבים משנה את הזרם בסליל וגורם לדיאפרגמה לרטוט.

פין P0 הוא הפין שחיברנו, כזכור, לפין ה-+ של הזמזם, והמשמעות המעשית של קביעת ערכו ל-‘1’ היא דחיפה של זרם חשמלי דרך הפין ואל הסליל שבתוך הזמזם. המיתוג המהיר בין הלוך ושוב בין 1 ו-0 גורם לדיאפרגמה שבזמזם לרטוט.

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

Frequency = 1/0.004 = 250

דהיינו, הצליל שאנחנו אמורים לשמוע מהזמזם הוא צליל בתדר של 250 מחזורים בכל שניה, או 250 הרץ.

מחזור של ארבע אלפיות השנייה שתי אלפיות השנייה במצב גבוה ועוד שתי אלפיות במצב נמוך יוצרות מחזור של ארבע אלפיות השנייה, כלומר 250 הרץ. מחזור אחד של האות 2 אלפיות: מצב גבוה 2 אלפיות: מצב נמוך T = 4 ms → f = 1 ÷ 0.004 = 250 Hz
מחזור אחד נמשך 4 אלפיות השנייה: 2 אלפיות במצב גבוה ועוד 2 במצב נמוך. התדר המחושב הוא 250 הרץ.

אולי שמתם לב שכתבתי “אמורים”, כי במציאות אנחנו מקבלים צליל בתדר מעט שונה. מדוע? כי המעבד - ‘המוח’ של המיקרוביט - הוא איטי יחסית, והוא לא מסוגל לשנות את ערכו של פין P0 בקצב מהיר כל כך. תוכלו להיווכח בכך בעצמכם: שנו את זמני ההמתנה בין מיתוג למיתוג משתי אלפיות השנייה לארבע אלפיות השנייה. אם הפקודות האלה היו מתבצעות כלשונם היינו אמורים לשמוע צליל בתדר נמוך יותר (שהרי האות ממותג לאט יותר) - אבל כפי שתשמעו בעצמכם, הצליל נשמע בדיוק אותו דבר.

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

זמזם עם אות אנלוגי

הבה נשנה את התוכנה שלנו כך:

תוכנת MakeCode לנגינת Middle C במשך ארבע פעימות

נטען את הקוד אל הכרטיס, ונלחץ על כפתור A: הזמזם ישמיע צליל - וליתר דיוק, את התו “דו”. כעת נלחץ על Middle C ובחלונית שתיפתח נבחר צליל אחר. נטען את הקוד ושוב נלחץ על הכפתור - הפעם נוכל לשמוע בברור שהצליל החדש שונה מהצליל הקודם. למה? מה השתנה? מה שקרה הוא שהקוד החדש שכתבנו מפעיל חומרה ייעודית במיקרוביט: מעגלים אלקטרוניים שתוכננו במיוחד כדי להיות מסוגלים לשנות את האותות החשמליים שמפיק הכרטיס במהירות הגבוהה שנדרשת כדי להשמיע צלילים מדויקים.

הבה נבחן את הקוד החדש שלנו.

  • הפקודה set built-in speaker OFF מכבה את הזמזם המובנה שעל הכרטיס, וזאת מכיוון שברירת המחדל של אותה חומרה ייעודית שתיארתי היא לשלוח את האותות שהיא מפיקה אל הזמזם המובנה הזה. אם תשנו את ערכה של הפקודה הזו ל-ON, תוכלו לשמוע שגם הזמזם המובנה יפיק צליל במקביל לזמזם החיצוני.
  • הפקודה set volume 255 קובעת את עוצמתם של האותות שנשלחים אל הזמזם: 255 פירושו עוצמה מירבית (הקול שיופק יהיה החזק ביותר), ו-0 היא עוצמה מינימלית (הקול החלש ביותר - או למעשה, שקט).
משרעת נמוכה וגבוהה שני גלים בתדירות זהה ובמשרעות שונות. משרעת גדולה יותר מייצגת אות חזק יותר. אותה תדירות, משרעת שונה עוצמה נמוכה עוצמה גבוהה
בשני הגלים יש אותו מספר מחזורים. המשרעת הגדולה יותר מייצגת אות חזק יותר ואת עוצמת הצליל.
  • הפקודה play tone Middle C for 4 beat until done מנחה את הכרטיס להפיק את הצליל “דו” למשך 4 פעימות, פרקי זמן קצרים - ואז להפסיק. ההבדל בין until done ל-in background הוא ש-until done מכריחה את המעבד לחכות עד לסיום הצליל לפני שיבצע את הפקודה הבאה, בעוד ש in background מאפשרת למעבד להמשיך ולבצע פקודות נוספות בזמן שהצליל מתנגן. האפשרות השלישית, looping in background, עושה את אותו הדבר אבל הצליל ממשיך להתנגן בלולאה ללא הפסקה.

הפקודה ring tone (Hz) Middle C מפיקה גם היא את הצליל “דו”, אבל בניגוד ל- play tone הצליל יופק ללא הפסקה, לנצח - או עד שנפסיק אותו באמצעות הפקודה stop all sounds.

תוכנת MakeCode לנגינת צליל ברצף

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

תוכנת MakeCode לנגינת מנגינה

שחקו עם האפשרויות השונות של הבלוק: ניתן לבחור ממנגינות קיימות או ליצור מנגינה משלנו, ולשנות את הקצב (שנמדד במספר פעימות לדקה, beats per minutes).

סיכום

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

להתראות,
רן