דלגו לתוכן המרכזי
KitLab
שיעור קודם
לחצן — הלוח מתחיל להקשיב· 7 / 41
לחצן — הלוח מתחיל להקשיב
🎬

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

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

לחצן — הלוח מתחיל להקשיב

מה בשיעור?

  • להסביר מה קורה בתוך לחצן כשלוחצים עליו
  • לזהות אילו שתי רגליים של הלחצן כבר מחוברות מהמפעל
  • להבין למה צריך נגד משיכה ומה הוא מונע
  • לדעת שלחצן משוחרר נותן 1 ולחצן לחוץ נותן 0
  • להשתמש בבלוק read digital pin כדי לקרוא מצב של פין
  • להדפיס ערכים לקונסולה עם הבלוק serial print ולעקוב אחריהם בזמן אמת

מה נלמד כאן

  • מה קורה בתוך לחצן ברגע הלחיצה
  • אילו רגליים של הלחצן מחוברות זו לזו כבר מהמפעל
  • מה זה נגד משיכה ולמה בלעדיו הלוח משתגע
  • הבלוק read digital pin שקורא מה קורה בפין
  • הבלוק serial print שמדפיס לכם מספרים למסך

עד היום הלוח רק דיבר. עכשיו הוא ילמד להקשיב

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

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

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

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

בשיעור הזה נחבר לחצן ונראה על המסך, בזמן אמת, אם הוא לחוץ או משוחרר.


הרכיבים

מה יש בתוך לחצן

לחצן הוא מתג מכני. בתוכו יש כיפה קטנה, קפיץ, ושני מגעי מתכת.

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

ציור של לחצן במצב לא לחוץ ובמצב לחוץ, עם הסבר שכל ארבע הרגליים מתחברות בלחיצה

הסוד של ארבע הרגליים

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

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

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

תהפכו את הלחצן ותסתכלו בגב שלו. יש שם קו אופקי קטן. שתי הרגליים שבמקביל לקו — הן המחוברות זו לזו כל הזמן.

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

נגד משיכה — למה הוא חייב להיות שם

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

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

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

הפתרון נקרא נגד משיכה (באנגלית pull-up), והוא פשוט:

תרשים חשמלי של מעגל נגד משיכה: 5V, נגד 10 קילו אוהם, פין IO, לחצן, GND

מחברים את הפין למתח הגבוה (5V) דרך נגד גדול של 10kΩ. עכשיו:

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

💡 שימו לב שזה הפוך ממה שהייתם מצפים: לחצן משוחרר נותן 1, ולחצן לחוץ נותן 0. תזכרו את זה — הרבה תוכניות בהמשך הקורס תלויות בזה.

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


החיבור

מה צריך: לוח ESP32, לוח ניסוי 400 נקודות, לחצן אחד, ונגד 10kΩ אחד.

לחצן אדום ונגד על לוח הניסוי, מחוברים בחוטים ללוח ה-ESP32

שלב אחרי שלב:

  1. תקעו את הלחצן באמצע לוח הניסוי, כך שהוא יושב על החריץ שבמרכז. ככה כל רגל נמצאת בשורה נפרדת.
  2. חברו חוט מ-5V אל צד אחד של הנגד 10kΩ.
  3. חברו את הצד השני של הנגד לרגל אחת של הלחצן — ובאותה שורה חברו חוט אל פין IO5.
  4. מהרגל שבאלכסון מולה — חוט אל GND.

⚠️ שוב, החשוב מכול: החוטים חייבים להיות באלכסון. אם אחרי הצריבה המספר לא משתנה בכלל כשלוחצים — סובבו את הלחצן ב-90 מעלות ונסו שוב.


הבלוקים

בשיעור הזה שני בלוקים חדשים, ושניהם מהמגירה Robots.

הבלוק read digital pin

הבלוק הכחול read digital pin עם תפריט 5

read digital pin [5] הוא הבלוק הראשון בקורס שקורא במקום לכתוב.

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

התפריט בוחר את מספר הפין שרוצים לבדוק. התשובה תמיד אחד משניים:

  • 1 — הפין במתח גבוה (3.3V או 5V). אצלנו: הלחצן משוחרר.
  • 0 — הפין במתח נמוך (0V). אצלנו: הלחצן לחוץ.

הבלוק serial print

הבלוק הכחול serial print עם תפריט 115200 ותיבה שכתוב בה Hi

serial print [115200] [Hi] מדפיס מה שתשימו בתיבה שלו — אל הקונסולה, חלון שחור קטן בפינה הימנית התחתונה של ACECode.

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

התפריט הראשון (115200) הוא מהירות התקשורת בין הלוח למחשב. אל תשנו אותו — הלוח והמחשב חייבים לדבר באותה מהירות, בדיוק כמו שני אנשים שחייבים לדבר באותה שפה.

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

מחברים את השניים

וכאן קורה הקסם. לוקחים את הבלוק הקורא:

הבלוק הכחול read digital pin עם תפריט הפין פתוח על 5

ואת הבלוק המדפיס:

הבלוק הכחול serial print עם תפריט 115200 ותיבת טקסט

וגוררים את הראשון לתוך התיבה של השני. הם נתפסים זה בזה כמו שתי חתיכות פאזל:

הבלוק serial print כשבתוך התיבה שלו יושב הבלוק read digital pin 5

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

איפה הקונסולה

סביבת ACECode עם חץ אדום שמצביע על חלון הקונסולה השחור בפינה הימנית התחתונה

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

התוכנית המלאה

תוכנית ACECode: start the program, forever, ובתוכו set ButtonState to read digital pin 5 ואז serial print ButtonState

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

  1. set [ButtonState] to [read digital pin [5]] — קורא את הפין ושם את התשובה בקופסה.
  2. serial print [115200] [ButtonState] — מדפיס את מה שיש בקופסה.
  3. forever מחזיר להתחלה, וזה קורה שוב ושוב, מאות פעמים בשנייה.

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


מריצים

⬇ להורדת הקובץ Button.sb3 — גוררים אותו לתוך ACECode ולוחצים Upload.

עוברים ל-Upload mode, בוחרים ESP32, בוחרים את הפורט הנכון ולוחצים Upload. מחכים שהמונה יגיע ל-100%.

ההסבר המלא על צריבה נמצא בשיעור ההתקנה.

לוח ESP32 מחובר ללוח ניסוי עם לחצן אדום ונגד

מה אמור לקרות

תסתכלו על הקונסולה. כשהלחצן משוחרר תראו שורות של 1 רצות למטה:

חלון קונסולה שחור עם שורות של הספרה 1

ועכשיו תלחצו על הלחצן והחזיקו. המספר מתחלף ל-0:

חלון קונסולה שחור עם שורות של הספרה 0

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

לא עובד?

  • המספר לא משתנה בכלל — כמעט בוודאות חיברתם לשתי רגליים שמחוברות מראש. סובבו את הלחצן ב-90 מעלות.
  • המספר קופץ בין 1 ל-0 לבד — הנגד לא מחובר נכון, או שהצד שלו לא מגיע ל-5V.
  • הקונסולה ריקה — בדקו שהלוח באמת מחובר ושבחרתם את הפורט הנכון.
  • מופיעים סימנים מוזרים — מהירות התקשורת לא תואמת. ודאו ש-115200 מופיע גם בבלוק וגם בהגדרות הקונסולה.

מה קרה כאן

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

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

בשיעורים הבאים הקלט יתחלף — חיישן תנועה, חיישן אור, מד טמפרטורה — אבל השלד יישאר בדיוק אותו שלד. וגם הבלוק serial print יישאר איתכם לתמיד, כי הוא הדרך היחידה לראות מה באמת קורה בתוך הלוח כשמשהו לא עובד.


תרגילים

  1. טקסט במקום מספר. הוציאו את read digital pin מהתיבה של serial print וכתבו שם במקומו את המילה Hello. תצרבו ותראו מה קורה בקונסולה.
  2. להאט את הזרם. הוסיפו בלוק wait [0.3] seconds בתוך ה-forever, אחרי ההדפסה. עכשיו השורות יופיעו לאט ותוכלו לקרוא אותן בנוחות.
  3. פין אחר. העבירו את החוט מ-IO5 לפין IO18, ושנו את התפריט של read digital pin ל-18. התוכנית צריכה להתנהג בדיוק אותו דבר.
  4. אתגר: ספירת לחיצות. צרו משתנה בשם count, והשתמשו בבלוק change [count] by [1] כדי להגדיל אותו כשהלחצן לחוץ. הדפיסו את count במקום את מצב הלחצן. מה מפריע לתוצאה, ואיך אפשר לתקן את זה בעזרת בלוק wait?

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

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

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