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

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

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

מחסום חכם — השער שמזהה מכונית ומרים את הזרוע

מה בשיעור?

  • להסביר איך מחסום חניון יודע שהגיעה מכונית
  • להרכיב דגם מחסום שלם כולל זרוע מתרוממת
  • לחבר חיישן אולטרסוני, סרוו ונורית לאותו לוח
  • להפעיל נורית חיווי עם הבלוק set digital pin
  • לשלב שלושה תנאים יחד עם בלוקי and
  • להבין למה צריך משתנה flag ומה קורה בלעדיו
  • לשנות את מרחק הזיהוי ואת כיוון פתיחת הזרוע

מה נלמד כאן

  • איך מחסום חכם "רואה" מכונית מתקרבת
  • להרכיב דגם מחסום מלא — בסיס, עמוד, זרוע ונורית
  • להוסיף נורית חיווי שמספרת לנהג מה קורה
  • לשלב חיישן, מנוע ונורית בתוכנית אחת
  • מה זה flag ולמה בלעדיו הזרוע תרעד במקום

מי פותח את המחסום?

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

איור של מחסום חכם בכניסה לחניון

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

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


איך מחסום חכם עובד

שוב אותם שלושה שלבים שמפעילים כל מכשיר חכם — רק שהפעם נוסיף להם שלב רביעי:

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

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


הרכיבים

לוח ה-ESP32

המוח. מודד, משווה, ומחליט מה קורה עכשיו.

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

מודד מרחק בעזרת קול. ארבע רגליים: VCC, Trig (שדר), Echo (מקשיב) ו-GND.

מנוע הסרוו

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

נורית LED ונגד 220Ω

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

לוח ניסוי 400 חורים

עליו נרכיב את הנורית והנגד, בלי הלחמה.


מרכיבים את המחסום

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

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

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

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

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

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

הסרוו מתברג לגוף המחסום בשני ברגי M2 באורך 14 מ״מ ושני אומי M2.

פירוק הסרוו והברגים אל גוף המחסום

הסרוו מוברג במקומו

שלב 3 — גוף המחסום

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

פירוק לוחות גוף המחסום

הלוחות מתחברים לעמוד

גוף המחסום מורכב

שלב 4 — מכסה המחסום

פירוק מכסה העמוד

המכסה נכנס לחריצים

העמוד סגור עם המכסה

שלב 5 — זרוע הסרוו

זרוע חצי-עגולה מתחברת לציר הסרוו בבורג עצמי M1.7 באורך 6 מ״מ.

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

הזרוע מונחת על הציר

הזרוע מוברגת לסרוו

שלב 6 — מוט ההרמה

עצרו. זה השלב שאסור לפספס.

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

⬇ להורדת הקובץ Servo Initialize.sb3 — גוררים אותו לתוך ACECode, לוחצים Upload, והסרוו קופץ ל-90 מעלות.

פירוק מוט ההרמה והבורג M2.5

המוט מונח על זרוע הסרוו

מוט ההרמה מקובע במקומו

שלב 7 — בסיס המחסום

פירוק לוחות הבסיס

העמוד ניצב על הבסיס

הבסיס מורכב במלואו

שלב 8 — מיקום הנורית

פירוק הנורית ומקומה בלוח

הנורית במקומה

שלב 9 — לוח הניסוי

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

פירוק לוח הניסוי והמדבקה הדו-צדדית

לוח הניסוי מודבק לבסיס

שלב 10 — הנורית והנגד על לוח הניסוי

כופפו בעדינות את רגלי הנורית והכניסו אותה ללוח הניסוי. הנגד של 220Ω נכנס בטור לרגל אחת שלה.

פירוק הנורית והנגד 220 אוהם

הנורית והנגד נעוצים בלוח הניסוי


החיבור

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

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

וכך זה נראה על השולחן:

חיבור בפועל — סרוו, חיישן אולטרסוני ונורית על לוח ניסוי

מאיפה לאן בלוח
סרוו — חוט אות (כתום) פין 5
סרוו — אדום / חום 5V / GND
אולטרסוני — Trig פין 16
אולטרסוני — Echo פין 17
אולטרסוני — VCC / GND 5V / GND
נורית — רגל ארוכה דרך נגד 220Ω פין 18
נורית — רגל קצרה GND

ארבעה מספרים לזכור: 16 שולח, 17 מקשיב, 5 מזיז, 18 מאיר.


הבלוקים

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

התוכנית נראית ארוכה, אבל היא בנויה משני תנאים בלבד: אחד מרים, אחד מוריד.

ההכנות

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

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

הלולאה

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) < (14) and (flag) = (0)> then

לבלוק if יש חריץ משושה שמקבל רק תנאים, וכאן נדחסו לתוכו שלושה תנאים מחוברים בבלוקי and. כולם חייבים להתקיים יחד:

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

ואז קורים שלושה דברים:

set digital pin [18] to [high] — הבלוק שמדליק את הנורית. בתיבה הראשונה מספר הפין, בתיבה השנייה ערך שנבחר מרשימה נפתחת: high = מתח גבוה = נדלק, low = מתח נמוך = כבוי. זה כל הסיפור של פלט דיגיטלי — או הכול, או כלום.

repeat until <(angle) <= (0)> — לולאה שחוזרת עד ש... בתוכה שלושה בלוקים: servo [5] angle (angle), change [angle] by (-1), ו-wait (5) milliseconds. הזווית יורדת מ-90 עד 0, מעלה אחת כל פעם, עם חמש אלפיות שנייה בין צעד לצעד. התוצאה: הזרוע עולה בזרימה במקום להיזרק במכה אחת. המחסום האמיתי בחניון עושה בדיוק אותו דבר, ומאותה סיבה.

set [flag] to (1) — מרימים את הדגל. "המחסום פתוח, כבר טיפלתי בזה."

התנאי שמוריד

if <(distance) > (14) and (flag) = (1)> then

המכונית התרחקה והמחסום פתוח. ואז:

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

למה בכלל צריך flag

נסו לדמיין את התוכנית בלי התנאי flag = 0. המכונית עומדת מול החיישן; התוכנית מודדת 12 ס״מ ומרימה. עוברת אלפית שנייה, היא מודדת שוב 12 ס״מ — ומרימה שוב, ממצב שכבר מורם. הזרוע תרעד במקום והסרוו יתחמם.

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


מריצים

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

שני הקבצים של השיעור עושים דברים שונים לגמרי:

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

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

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

המחסום החכם המוכן

לא עובד?

  • הזרוע לא זזה → חוט האות של הסרוו חייב להיות בפין 5, והאדום ב-5V ולא ב-3.3V.
  • הנורית לא נדלקת → כנראה הפכתם אותה. רגל ארוכה לצד הנגד ופין 18, רגל קצרה ל-GND.
  • הזרוע רועדת בלי הפסקה → הזרוע הורכבה בלי איפוס ל-90. חזרו לשלב 6.
  • המחסום נפתח לבד → החיישן "רואה" קיר או לוח קרוב. סובבו אותו לכיוון פנוי.

מה קרה כאן

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

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


תרגילים

  1. מחסום רגיש יותר. שנו את המספר בתנאי הפתיחה מ-14 ל-25, וגם את ה-14 בתנאי הסגירה. עכשיו המחסום יזהה מכונית מרחוק יותר.
  2. פתיחה חלקית. בתוך repeat until <(angle) <= (0)> שנו את ה-0 ל-45. הזרוע תעלה רק חצי דרך — בדיוק כמו מחסום שנתקע באמצע.
  3. נורית מהבהבת. במקום set digital pin [18] to [high] אחד, שימו זוג בלוקים set digital pin [18] to [high] ו-set digital pin [18] to [low] עם wait (200) milliseconds ביניהם, בתוך לולאה קצרה. תקבלו נורית אזהרה מהבהבת כמו במחסום אמיתי.
  4. אתגר — מחסום עם צליל. חברו זמזם לפין פנוי והוסיפו לו צפצוף קצר בדיוק לפני שהזרוע מתחילה לעלות. במחסומים אמיתיים הצפצוף בא לפני התנועה, לא אחריה — תחשבו למה.

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

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

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