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

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

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

פח אשפה חכם — הפח שפותח לכם את המכסה לבד

מה בשיעור?

  • להסביר איך פח חכם יודע שמישהו התקרב אליו
  • להרכיב את דגם הפח מהלוחות, הברגים והאומים
  • לאפס את הסרוו ל-90 מעלות לפני שמחברים את הזרוע
  • לחבר חיישן אולטרסוני ומנוע סרוו ללוח ה-ESP32
  • להבין את הבלוק servo angle ואת הבלוק repeat until
  • להשתמש במשתנה דגל כדי שהמכסה לא ייפתח שוב ושוב
  • לשנות את מרחק הפתיחה ואת מהירות התנועה בעצמכם

מה נלמד כאן

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

הפח שאף אחד לא רוצה לגעת בו

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

איור של פח אשפה חכם שפותח את המכסה כשיד מתקרבת

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

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


איך פח חכם חושב

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

  1. לחוש — החיישן האולטרסוני שולח פעימת קול שאוזן אנושית לא שומעת, ומודד כמה זמן לוקח להד לחזור. מהזמן הזה הלוח מחשב מרחק בסנטימטרים. פעמים רבות בשנייה.
  2. להחליט — התוכנית משווה את המרחק לגבול שקבענו מראש. בפרויקט שלנו הגבול הוא 25 ס״מ. קרוב מזה? מישהו כאן. רחוק מזה? השטח פנוי.
  3. לפעול — המנוע מקבל פקודה לסובב את המכסה למעלה או למטה.

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


הרכיבים

לוח ה-ESP32

המוח של הפח. הוא זה שמודד, משווה ומחליט — ושולח פקודות למנוע.

החיישן האולטרסוני (HC-SR04)

שתי ה"עיניים" הכסופות שלו הן בעצם רמקול ומיקרופון. אחת משדרת פעימת קול, השנייה מקשיבה לה חוזרת. יש לו ארבע רגליים: VCC (מתח), Trig (שדר), Echo (הד) ו-GND (אפס).

מנוע הסרוו

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

⚠️ שימו לב: החיישן והסרוו שניהם צריכים 5V, לא 3.3V. אם תחברו אותם לפין הלא נכון החיישן יחזיר מספרים מוזרים והסרוו ירעד.


מרכיבים את הפח

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

שלב 1 — מתקינים את החיישן האולטרסוני

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

פירוק החיישן האולטרסוני והלוח עם שני החורים

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

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

שלב 2 — מתקינים את הסרוו

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

פירוק הסרוו והברגים אל תוך לוח הצד

הסרוו מוברג במקומו בלוח הצד

שלב 3 — הזרוע של הסרוו והלוח התחתון

עצרו רגע. זה השלב הכי חשוב בכל ההרכבה.

לפני שמחברים את זרוע הפלסטיק (ה"הגה") לסרוו, חייבים לאפס את הסרוו ל-90 מעלות. למה? כי הסרוו יכול להסתובב רק בטווח של 0 עד 180 מעלות. אם תרכיבו את הזרוע כשהסרוו נמצא במקום אקראי, המכסה יתחיל את חייו בזווית הלא נכונה ופשוט לא יסגר — או גרוע מזה, ינסה להמשיך להסתובב ויישרף.

הורידו את הקובץ, גררו אותו ל-ACECode ולחצו Upload. הסרוו יקפוץ ל-90 מעלות ויישאר שם. רק אז חברו את הזרוע.

⬇ להורדת הקובץ Servo Initialize.sb3 — מאפס את הסרוו ל-90 מעלות לפני ההרכבה.

פירוק זרוע הסרוו והבורג הקטן

הזרוע מחוברת לציר הסרוו

הבורג שמחזיק את הזרוע הוא M2.5 באורך 4 מ״מ, והוא מגיע בשקית הברגים הקטנה של הסרוו עצמו — לא בערכת העץ.

חיבור הלוח התחתון של הפח

הלוח התחתון במקומו

שלב 4 — לוחות הצד

עכשיו הפח מתחיל להיראות כמו פח. הלוחות נכנסים בלשוניות אל תוך החריצים של הלוח התחתון.

פירוק לוחות הצד של הפח

לוח הצד הראשון מורכב

שני לוחות הצד במקומם

שלב 5 — המכסה

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

פירוק חלקי המכסה

המכסה מחובר לזרוע הסרוו

המכסה מונח על גוף הפח

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

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

פירוק לוח החזית עם החיישן

לוח החזית נכנס לחריצים

הפח סגור עם החיישן מציץ מהחזית

שלב 7 — מגביל המכסה

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

פירוק מגביל המכסה

המגביל מותקן והפח מוכן


החיבור

התרשים החשמלי מראה את המעגל בצורה "נקייה", בלי לוח ובלי חוטים מסתלסלים:

תרשים חשמלי — סרוו על IO05, חיישן אולטרסוני על IO16 ו-IO17

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

חיבור בפועל — הסרוו והחיישן מחוברים ללוח ESP32

מאיפה לאן בלוח
סרוו — חוט אות (כתום) פין 5
סרוו — אדום 5V
סרוו — חום/שחור GND
אולטרסוני — VCC 5V
אולטרסוני — Trig פין 16
אולטרסוני — Echo פין 17
אולטרסוני — GND GND

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


הבלוקים

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

תוכנית הבלוקים המלאה של הפח החכם ב-ACECode

ההכנות שלמעלה

מתחת לכובע הצהוב start the program יש ארבעה בלוקים כתומים שרצים פעם אחת בלבד:

  • set [distance] data type [float] — מכינים משתנה בשם distance ואומרים ללוח שהוא יחזיק מספר עם נקודה עשרונית. מרחק הוא לא תמיד מספר שלם — 23.7 ס״מ זה מרחק לגיטימי.
  • set [distance] to (0) — מתחילים מאפס.
  • set [angle] to (90) — המשתנה angle יחזיק את הזווית הנוכחית של המכסה. 90 מעלות = מכסה סגור.
  • servo [5] angle (angle) — הבלוק הכחול שמזיז את הסרוו. מספר הפין בתיבה הראשונה, הזווית בתיבה השנייה. כאן הוא מקבל את המשתנה angle, כלומר שולח את הסרוו ל-90 ומוודא שהמכסה סגור ברגע ההדלקה.

הלולאה הגדולה

הבלוק forever הוא בלוק עוטף — יש לו פה פתוח וכל מה שנכנס לתוכו רץ שוב ושוב בלי סוף. כל מה שנשאר בתוכנית יושב בתוכו.

שורה ראשונה בפנים: serial print [115200] (ultrasonic(cm) trig [16] echo [17]) — שולחת את המרחק למסך המחשב. זה לא נחוץ לפעולה של הפח, אבל זה הכלי הכי טוב לבדוק שהחיישן עובד. פתחו את חלון המסך הטורי ותראו מספרים משתנים כשאתם מזיזים את היד.

שורה שנייה: set [distance] to (ultrasonic(cm) trig [16] echo [17]) — אותה מדידה בדיוק, רק שהפעם היא נשמרת במשתנה כדי שנוכל להשוות אותה.

שימו לב לצורה: הבלוק ultrasonic(cm) הוא בלוק עגלגל — הוא לא פקודה, הוא ערך. לכן הוא יושב בתוך בלוק אחר, בחור העגול. בלוק עגלגל תמיד עונה על שאלה "כמה?".

התנאי שפותח

if <(distance) > (0) and (distance) < (25) and (isOpened) = (0)> then

הבלוק if הוא הבלוק המקבל החלטות, ויש לו חריץ משושה (בצורת יהלום מוארך) שמקבל רק תנאים. כאן נכנסו לתוכו שלושה תנאים מחוברים בבלוקי and — כולם חייבים להתקיים:

  1. distance > 0 — למה בכלל? כי לפעמים החיישן מפספס את ההד ומחזיר 0. אם לא נסנן את זה, הפח ייפתח סתם.
  2. distance < 25 — מישהו קרוב מ-25 ס״מ.
  3. isOpened = 0 — המכסה כרגע סגור.

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

פתיחה איטית — repeat until

בתוך התנאי יושב repeat until <(angle) <= (10)> — לולאה שחוזרת עד ש... בתוכה שלושה בלוקים:

  • servo [5] angle (angle) — הזז את הסרוו לזווית הנוכחית
  • change [angle] by (-1) — הורד את הזווית במעלה אחת
  • wait (5) milliseconds — חכה חמש אלפיות שנייה

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

אחרי הלולאה: set [isOpened] to (1) — מרימים את הדגל. פתחנו.

התנאי שסוגר

if <(distance) > (25) and (isOpened) = (1)> then

המרחק גדל מעל 25 ס״מ והמכסה פתוח. אז:

  • wait (500) milliseconds — חצי שנייה של סבלנות. אולי היד רק זזה רגע הצידה וכבר חוזרת.
  • repeat until <(angle) >= (90)> עם change [angle] by (1) — אותה תנועה איטית, רק בכיוון ההפוך, מ-10 בחזרה ל-90.
  • set [isOpened] to (0) — מורידים את הדגל. סגרנו.

מריצים

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

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

  • Servo Initialize.sb3 — צורבים אותו פעם אחת, לפני ההרכבה. הוא רק מעמיד את הסרוו על 90 מעלות.
  • Smart_Trash_Can.sb3 — זאת התוכנית האמיתית של הפח, וזאת שנשארת על הלוח.

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

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

הפח החכם המוכן

לא עובד? עברו על הרשימה:

  • המכסה לא זז בכלל → בדקו שחוט האות של הסרוו נמצא בפין 5 ושהאדום ב-5V.
  • המכסה רועד ולא מפסיק → הזרוע כנראה הורכבה בלי איפוס ל-90. חזרו לשלב 3.
  • הפח נפתח לבד בלי שאף אחד מתקרב → החיישן "רואה" את לוח העץ שמולו. בדקו שהוא מיושר קדימה.
  • שום דבר לא קורה → פתחו את המסך הטורי. אם המספרים תקועים על 0, Trig ו-Echo כנראה התחלפו.

מה קרה כאן

חיברנו ארבעה רעיונות לכדי מכשיר אחד:

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

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


תרגילים

  1. פח רגיש יותר. שנו את המספר בבלוק if <(distance) < (25)> מ-25 ל-10. עכשיו צריך להתקרב ממש. אל תשכחו לשנות גם את ה-25 בתנאי הסגירה — אחרת המכסה ייפתח ולא יידע מתי להיסגר.
  2. פתיחה מהירה, סגירה איטית. בלולאת הפתיחה שנו את wait (5) milliseconds ל-2, ובלולאת הסגירה ל-15. תקבלו מכסה שקופץ למעלה ויורד בעדינות.
  3. מכסה שנשאר פתוח יותר זמן. הגדילו את wait (500) milliseconds שבתחילת תנאי הסגירה ל-3000. עכשיו יש לכם שלוש שניות שלמות לזרוק את הזבל.
  4. אתגר — פח שמודיע. הוסיפו זמזם לפין פנוי, ובתוך תנאי הפתיחה, מיד אחרי set [isOpened] to (1), שתלו בלוק buzzer frequency קצר. הפח יצפצף "שלום" בכל פתיחה. רמז: תצטרכו גם בלוק buzzer stop אחרי המתנה קצרה.

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

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

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