דלגו לתוכן המרכזי
KitLab
שיעור קודם
פסנתר אלקטרוני — הפרויקט המסכם· 5 / 5
פסנתר אלקטרוני — הפרויקט המסכם
🎬

הסרטון בדרך אלינו

בינתיים — התמלול המלא של השיעור מחכה לכם למטה

פסנתר אלקטרוני — הפרויקט המסכם

מה בשיעור?

  • שבעה קלידים ומיפוי לתדרים
  • Pin.PULL_UP — נגדים בתוך השבב
  • רשימות מקבילות לקוד קצר
  • מתי while הוא הפתרון ומתי הבעיה
  • סיכום כל הקורס

מה נלמד כאן

  • פסנתר מלא
  • Pin.PULL_UP — נגדים בתוך השבב
  • הפרויקט המסכם

הפרויקט האחרון

פסנתר אלקטרוני

שבעה לחצנים, שבעה תווים.

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


הידע שצריך

המבנה

מבנה המערכת

הקלַיד התו התדר
1 דו 523
2 רה 587
3 מי 659
4 פה 698
5 סול 784
6 לה 880
7 סי 988

Pin.PULL_UP — בלי נגדים

בשיעור 4 בנינו Pull-Up עם נגד חיצוני. כאן יש שבעה לחצנים — שבעה נגדים ושבעה חוטים.

הפתרון:

btn = Pin(16, Pin.IN, Pin.PULL_UP)

ל-ESP32 יש נגדי Pull-Up מובנים בשבב. הפרמטר השלישי מפעיל אותם — ומייתר את כל שבעת הנגדים.

⚠️ ההיגיון נשאר הפוך: לחיצה = 0, משוחרר = 1.

שווה לדעת שזה היה קיים כל הזמן. למדנו את הדרך הארוכה קודם — כי בלי להבין מה עושה נגד Pull-Up, PULL_UP היה נשאר קסם.


ההרכבה

בלי ערכת הבנייה — אפשר לבנות על שני לוחות ניסוי.

שלבי ההרכבה:

שלב הרכבה 1

שלב הרכבה 2

שלב הרכבה 3

שלב הרכבה 4

שלב הרכבה 5

שלב הרכבה 6

שלב הרכבה 7

שלב הרכבה 8

שלב הרכבה 9

שלב הרכבה 10

שלב הרכבה 11

שלב הרכבה 12

שלב הרכבה 13

שלב הרכבה 14

שלב הרכבה 15

שלב הרכבה 16

שלב הרכבה 17

שלב הרכבה 18

שלב הרכבה 19

שלב הרכבה 20

שלב הרכבה 21

שלב הרכבה 22

שלב הרכבה 23

שלב הרכבה 24

שלב הרכבה 25

שלב הרכבה 26

שלב הרכבה 27

שלב הרכבה 28


הניסוי

המטרה: שבעה לחצנים מנגנים שבעה תווים.

רשימת רכיבים

הרכיב כמות
לוח ESP32 1
לוח ניסוי 400 נקודות 2
זמזם פסיבי 1
לחצנים 7
טרנזיסטור + נגד 1kΩ 1

שבעה לחצנים ואפס נגדי Pull-Up.


הקוד

from machine import Pin, PWM
import time

key_pins = [16, 17, 18, 19, 23, 12, 13]
notes    = [523, 587, 659, 698, 784, 880, 988]

keys = [Pin(p, Pin.IN, Pin.PULL_UP) for p in key_pins]

buzzer = PWM(Pin(14))
buzzer.duty(0)

while True:
    for i in range(7):
        if keys[i].value() == 0:
            time.sleep_ms(50)                # ריטוט
            if keys[i].value() == 0:
                print(i + 1)
                buzzer.duty(512)
                buzzer.freq(notes[i])

                while keys[i].value() == 0:  # כל עוד מחזיקים
                    pass

                buzzer.duty(0)

למה הקוד כל כך קצר

שלושה דברים:

1. רשימות מקבילותkeys[i] הלחצן, notes[i] התו. התבנית משיעור 9.

2. Pin.PULL_UP — חסך שבעה נגדים.

3. ה-whileוכאן הוא דווקא רצוי. הוא מחזיק את הצליל בדיוק כל עוד מחזיקים את הקלַיד.

שימו לב שזה ההפך משיעור 37, שם ה-while היה בעיה. אותו כלי, הקשר אחר. להבין מתי להשתמש במה — זה מה שמפריד בין להעתיק קוד לכתוב קוד.


סיימתם את הקורס

עצרו רגע ותסתכלו אחורה.

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

ובדרך למדתם: machine.Pin ואובייקטים, PWM ו-duty, ADC ו-atten, תשעה סוגי חיישנים, מנועים וסרוו, תצוגות וסריקה דינמית, רשימות ומילונים, try/except, מכונות מצבים והיסטרזיס, ספריות על הלוח, בלוטות' ו-WiFi — ובניתם שרת אינטרנט על שבב.

וכל זה בפייתון — שפה שתשמש אתכם גם הרבה מעבר לחומרה.

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

עכשיו תבנו משהו שאף אחד לא אמר לכם לבנות. זה החלק הכי טוב.


נסו בעצמכם

  • נגנו "כוכב קטן" — התווים משיעור 9.
  • הוסיפו נורית לכל קלַיד.
  • הוסיפו מתג אוקטבה: לחצן שמכפיל את התדרים ב-2.
  • הקליטו רצף: שמרו את התווים ברשימה ונגנו חזרה.
  • שלבו עם שיעור 33: פסנתר שנשלט מהדפדפן.

🧰 הרכיבים לשיעור הזה

רוצים את חומרי הקורס והעדכונים?

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