מה נלמד כאן
- איך פסנתר אלקטרוני הופך לחיצה על קליד לצליל
- להרכיב פסנתר עץ אמיתי עם שבעה קלידים שנלחצים
- לחבר שני לוחות ניסוי לאחד ולחווט עליהם שבעה כפתורים
- לנגן תו מדויק עם הבלוק buzzer frequency
- לבנות בלוק נפרד לכל תו עם define — ולסדר תוכנית ארוכה
מה זה בעצם צליל
לפני שנבנה פסנתר, שאלה אחת: למה "דו" נשמע אחרת מ"סול"?

צליל הוא רעידה של האוויר. מה שקובע אם נשמע צליל נמוך או גבוה הוא כמה פעמים בשנייה האוויר רועד. המספר הזה נקרא תדר, ומודדים אותו ביחידה שנקראת הרץ (Hz).
- 262 רעידות בשנייה = התו דו (במוזיקה קוראים לו C4)
- 294 רעידות בשנייה = רה (D4)
- 330 = מי (E4)
ככל שהמספר גדול יותר, הצליל גבוה יותר. זה הכול. פסנתר גדול הוא בסך הכול מכונה שמתרגמת לחיצה על קליד לתדר מסוים.
ובפסנתר אלקטרוני אין מיתרים בכלל. יש מעגל שמייצר אות חשמלי שמתנדנד בתדר הנכון, ורמקול שהופך אותו לרעידות אוויר. זה בדיוק מה שנבנה — רק שהרמקול שלנו יהיה זמזם קטן.
זה הפרויקט האחרון בקורס. תיהנו ממנו.
איך פסנתר אלקטרוני עובד
חמישה שלבים, מהאצבע ועד האוזן:
- לחיצה — הקליד לוחץ על מתג שסוגר מעגל חשמלי.
- בחירת תדר — המוח של הכלי יודע איזה קליד נלחץ, ומתאים לו מספר: התדר.
- יצירת האות — מעגל מייצר אות חשמלי שמתנדנד בדיוק במספר הזה של פעמים בשנייה.
- הגברה — האות מוגבר כדי שיהיה חזק מספיק להזיז ממברנה.
- השמעה — רמקול הופך את האות לרעידות אוויר. שומעים תו.
בפסנתר שלנו: הכפתורים הם שלב 1, ה-ESP32 עושה את שלבים 2 ו-3, טרנזיסטור קטן עושה את שלב 4, והזמזם הפסיבי עושה את שלב 5.
הרכיבים
זמזם פסיבי
זמזם רגיל (אקטיבי) יודע לצפצף צליל אחד בלבד. זמזם פסיבי הוא ההפך: הוא לא יודע לייצר צליל בעצמו, אבל אם תשלחו אליו תדר — הוא ינגן אותו. בדיוק בגלל זה הוא היחיד שמתאים לפסנתר.
שבעה כפתורים ושבעה נגדי 10kΩ
כל כפתור מחובר דרך נגד 10kΩ ל-5V, ודרך הכפתור עצמו ל-GND. זה נקרא נגד מעלה (pull-up). כשהכפתור משוחרר הפין קורא 1, וכשלוחצים עליו הוא קורא 0. כן, הפוך ממה שהיה נראה הגיוני — ובכל זאת זאת הדרך הנפוצה בעולם.
נגד 1kΩ וטרנזיסטור
הם יושבים בין הלוח לזמזם ומגבירים את האות. הטרנזיסטור הוא כמו ברז שהלוח פותח וסוגר בזרת, ודרכו עובר זרם חזק בהרבה.
שני לוחות ניסוי 400 חורים
שבעה כפתורים לא נכנסים ללוח אחד. נחבר שניים יחד ללוח ארוך.
מרכיבים את הפסנתר
אין לכם את ערכת העץ? דלגו ל"החיבור" — התוכנית תעבוד גם על כפתורים בלוח ניסוי על השולחן.
שלב 1 — מתקינים את לוח ה-ESP32
ארבעה עמודי נחושת M3 באורך 12 מ״מ מרימים את הלוח מעל הבסיס, ושבעה ברגי M3 שטוחים באורך 6 מ״מ מחזיקים הכול.


שלב 2 — לוחות הצד של הפסנתר


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



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


שלב 5 — מקבעים את לוח הניסוי
שתי מדבקות דו-צדדיות מצמידות את הלוח לבסיס. בדקו את המיקום פעמיים לפני שאתם מסירים את הנייר המגן.



שלב 6 — תומך הקלידים


שלב 7 — לוח החזית


⚠️ עצרו כאן וחווטו לפני שתסגרו. ברגע שלוחות העץ הבאים ייכנסו, לא תוכלו להגיע ללוח הניסוי. השלימו את כל החיווט לפי הטבלה שב"החיבור", ורק אז המשיכו לשלב 9.
שלב 8 — החיווט
זהו השלב הארוך ביותר. קחו אוויר ועשו אותו חוט אחרי חוט, לא הכול ביחד.


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


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


שלב 10 — מתקינים את מערך הקלידים


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


שלב 12 — לוח הגב


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


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

וכך זה נראה על שני לוחות הניסוי:

| הקליד | התו | התדר | הפין בלוח |
|---|---|---|---|
| 1 | דו (C4) | 262 Hz | 16 |
| 2 | רה (D4) | 294 Hz | 17 |
| 3 | מי (E4) | 330 Hz | 18 |
| 4 | פה (F4) | 349 Hz | 19 |
| 5 | סול (G4) | 392 Hz | 23 |
| 6 | לה (A4) | 440 Hz | 12 |
| 7 | סי (B4) | 494 Hz | 13 |
הזמזם מחובר לפין 14 דרך הנגד של 1kΩ והטרנזיסטור. הפינים אינם לפי הסדר — 12 ו-13 באים אחרי 23 — אז עקבו אחרי הטבלה ולא אחרי ההיגיון.
הבלוקים
התוכנית הזאת היא דוגמה מושלמת לסדר. יש בה הרבה מאוד בלוקים, אבל היא קלה יותר לקריאה מכל תוכנית אחרת בקורס — כי היא מחולקת נכון.
התוכנית הראשית — שמונה בלוקים בלבד

מתחת ל-start the program יש רק זה:
- Initialize — בלוק ורוד אחד.
- forever — ובתוכו שבעה בלוקים ורודים: Do, Re, Mi, Fa, Sol, La, Si.
זהו. כל התוכנית הראשית. אפשר להבין אותה במבט אחד — וזאת בדיוק המטרה.
מה זה בלוק ורוד
בלוק ורוד הוא בלוק שאתם המצאתם. בונים אותו עם כובע define ונותנים לו שם, ומאותו רגע אפשר לגרור אותו לתוכנית כמו כל בלוק אחר. כל מה שנמצא בתוך ה-define יקרה בכל פעם שהבלוק נקרא.
הבלוק Initialize
בתוך define Initialize יושבים שבעה בלוקים זהים:
set pin [16] mode to [input pullup], ואחריו אותו דבר עבור 17, 18, 19, 23, 12 ו-13.
מה הם עושים? אומרים ללוח: "הפין הזה הוא קלט — אני הולך לקרוא ממנו, לא לכתוב אליו. וחוץ מזה, תחזיק אותו במתח גבוה מבפנים." זה מה ש-input pullup אומר. כך, כשהכפתור לא לחוץ הפין קורא 1, וכשלוחצים עליו הוא מתחבר ל-GND וקורא 0.
שבעת בלוקי התווים

כל שבעת בלוקי התווים בנויים בדיוק אותו דבר. הנה define Do במלואו:
if <(read digital pin [16]) = (0)> then buzzer [14] frequency [C4] wait until <(read digital pin [16]) = (1)> buzzer [14] stop
ארבע שורות, וכל אחת מהן עושה משהו אחד:
if <(read digital pin [16]) = (0)> — הבלוק העגלגל read digital pin עונה מה קורה על הפין. 0 פירושו הקליד לחוץ.
buzzer [14] frequency [C4] — הבלוק הכחול שמנגן. בתיבה הראשונה מספר הפין של הזמזם, ובתיבה השנייה רשימה נפתחת של תווים: C4, D4, E4 וכן הלאה. אתם בוחרים מהרשימה במקום לזכור מספרי הרץ. ברגע שהבלוק הזה רץ, הזמזם מתחיל לנגן — וממשיך לנגן עד שמישהו יעצור אותו.
wait until <(read digital pin [16]) = (1)> — וזה הבלוק שהופך את הפסנתר לפסנתר. wait until עוצר את התוכנית במקום ומחכה עד שהתנאי במשושה יתקיים. כאן התנאי הוא "הפין חזר ל-1", כלומר הקליד שוחרר. כל עוד האצבע על הקליד — הצליל ממשיך.
buzzer [14] stop — האצבע עלתה, הצליל נפסק.
וזה בדיוק ההבדל בין צפצוף לכלי נגינה: בכלי נגינה אתם קובעים כמה זמן נמשך כל תו.
למה שבעה בלוקים ולא תוכנית אחת ארוכה
אפשר היה לדחוס את כל 28 השורות לתוך ה-forever. זה היה עובד — ואף אחד, גם לא אתם עצמכם בעוד שבוע, לא היה מצליח לקרוא את זה.
כשמפרידים לבלוקים עם שם, קורים שלושה דברים טובים: התוכנית הראשית נקראת כמו משפט בעברית; אם "מי" לא עובד, אתם יודעים בדיוק לאיזה בלוק להיכנס; וכשתרצו להוסיף קליד שמיני, תעתיקו בלוק קיים ותשנו שני דברים. זאת הדרך שבה עובדים מתכנתים אמיתיים, ובשיעור הזה עשיתם את זה בעצמכם.
מריצים
⬇ להורדת הקובץ Electronic_Piano.sb3 — גוררים אותו לתוך ACECode ולוחצים Upload.
ההסבר המלא על צריבה נמצא בשיעור ההתקנה.
אחרי הצריבה — לחצו על הקליד השמאלי. תשמעו דו. עברו קליד-קליד ימינה ותשמעו את כל הסולם: דו, רה, מי, פה, סול, לה, סי.

ועכשיו נסו לנגן משהו. "פרה פרה" הוא מי-רה-דו-רה-מי-מי-מי. "יום הולדת" מתחיל בדו-דו-רה-דו-פה-מי.
לא עובד?
- אף קליד לא מגיב → כנראה חסרים שני חוטי הגישור בין לוחות הניסוי. ראו שלב 8.
- ארבעת הקלידים הימניים שותקים → אותו דבר בדיוק: פס הכוח של הלוח השני לא מחובר.
- קליד אחד לא עובד → בדקו את הנגד 10kΩ שלו ואת החוט לפין. הפינים 12 ו-13 הם אלה שהכי קל להתבלבל בהם.
- הזמזם רועש רעש צורם ולא תו → ודאו שהזמזם הוא הפסיבי. האקטיבי לא יודע לנגן תווים.
- הצליל לא נפסק → הכפתור נתקע לחוץ. לחצו ושחררו כמה פעמים, ואם צריך העלו את הקליד ובדקו שאינו מתחכך בעץ.
מה קרה כאן
הפכתם לחיצה למספר, ומספר לצליל.
הבלוק buzzer frequency אמר לזמזם כמה פעמים בשנייה לרעוד. הבלוק wait until נתן לכם שליטה על משך התו. הבלוק set pin mode to input pullup הכין את שבעת הפינים לקריאה. והבלוקים הוורודים של define הפכו תוכנית שיכלה להיות בלגן אחד גדול לתוכנית ראשית בת שמונה בלוקים.
סיימתם את הקורס
עצרו רגע והסתכלו אחורה. התחלתם מנורית אחת שנדלקת — ובסוף הדרך בניתם פח שפותח את עצמו, מחסום שמזהה מכונית, מאוורר עם שלוש מהירויות וראש מסתובב, ועכשיו כלי נגינה.
בדרך אספתם את כל הרעיונות הגדולים של התכנות: משתנה שזוכר, תנאי שמחליט, לולאה שחוזרת, דגל שמונע כפילות, ובלוק משלכם שמסדר את הכול. הרעיונות האלה לא שייכים ל-ACECode. הם אותם רעיונות בדיוק בכל שפת תכנות בעולם — רק שבמקום לגרור אותם, מקלידים אותם.
וזה בדיוק המקום שאליו כדאי להמשיך: הקורס באותה ערכה עם Arduino ב-C++ או הקורס עם MicroPython. אותם רכיבים, אותם פרויקטים, שפה חדשה. אתם כבר יודעים איך הכול עובד — נשאר רק ללמוד איך לכתוב את זה.
תרגילים
- מעבירים את הפסנתר לאוקטבה גבוהה. בכל אחד משבעת בלוקי התווים שנו את התו ברשימה הנפתחת של buzzer frequency לאוקטבה הבאה — C4 יהפוך ל-C5, D4 ל-D5 וכן הלאה. אותו סולם בדיוק, רק צייצני יותר.
- קליד עם נורית. בחרו קליד אחד, והוסיפו בתוך הבלוק שלו set digital pin to [high] לפני הצליל ו-set digital pin to [low] אחרי buzzer stop. חברו נורית עם נגד 220Ω לפין פנוי. הקליד יאיר בזמן שהוא מנגן.
- תו שנשמע גם אחרי שעזבתם. בבלוק Do, הוסיפו wait (300) milliseconds מיד אחרי wait until, לפני buzzer stop. עכשיו לתו יש "זנב" קצר, כמו בפסנתר עם דוושה.
- אתגר — נגן שיר לבד. הוסיפו קליד שמיני (או השתמשו באחד הקיימים) שיפעיל רצף של שישה בלוקי buzzer frequency עם wait ביניהם — וינגן מנגינה קצרה לבד. רמז: פתחו בלוק define חדש בשם Song, שימו בתוכו את כל הרצף, וקראו לו מתוך התנאי של הקליד.


