דלגו לתוכן המרכזי
KitLab
שיעור קודם
מאוורר בשלט רחוק — לוחצים 0, 1 או 2· 32 / 41
מאוורר בשלט רחוק — לוחצים 0, 1 או 2
🎬

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

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

מאוורר בשלט רחוק — לוחצים 0, 1 או 2

מה בשיעור?

  • להסביר איך שלט רחוק מדבר עם מכשיר בעזרת אור שלא רואים
  • להבין למה לכל כפתור בשלט יש קוד משלו
  • לקרוא את הקוד עם הבלוק IR module ולשמור אותו במשתנה מסוג String
  • להבין למה משווים מחרוזות ולא מספרים
  • לזהות את קוד ה-0 שמסמן ״לא נלחץ כלום״ ולסנן אותו
  • לגלות את הקודים של הכפתורים שלכם ולשייך להם פעולות חדשות

מה נלמד כאן

  • איך שלט רחוק שולח פקודה בלי חוט ובלי אינטרנט
  • למה לכל כפתור בשלט יש קוד ייחודי
  • מה זה משתנה מסוג String ולמה משתמשים בו כאן
  • איך הבלוק IR module קורא את הקוד שהגיע
  • למה התוכנית מתעלמת מהערך ״0״ ואיך עושים את זה בבלוק אחד

הפקודה שנוסעת באור

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

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

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

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

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

בשיעור הזה נחבר מקלט IR ללוח, ניקח שלט אמיתי, ונשלוט בעזרתו במאוורר: 0 = עצור, 1 = איטי, 2 = מהיר.


הרכיבים

המקלט והשלט

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

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

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

שלושת הקודים שאנחנו צריכים:

כפתור בשלט הקוד מה יקרה
0 0xAD52FF00 המאוורר נעצר
1 0xE916FF00 מהירות נמוכה
2 0xE619FF00 מהירות מלאה

המנוע ומודול ההנעה

המנוע ומודול ההנעה L9119S נלמדו בשיעור 10, והחיבור כאן זהה למה שעשיתם בשיעור 27: שני פיני שליטה, A-1A שמקבל את המהירות ו-A-1B שנשאר על אפס כדי לקבע כיוון אחד.


החיבור

סכמת חיבורים: מנוע המחובר למודול הנעה L9119S עם A-1B לפין IO16, A-1A לפין IO05 ו-VCC ל-3.3 וולט, ומתחתיו מקלט אינפרא-אדום שרגל ה-S שלו מחוברת לפין IO17

חיבור לאן
A-1A (מודול הנעה) פין 5
A-1B (מודול הנעה) פין 16
VCC (מודול הנעה) 3.3V
GND (מודול הנעה) GND
S (מקלט IR) פין 17
+ (מקלט IR) 5V
- (מקלט IR) GND

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

תרשים חיבורים מלא: לוח ESP32 עם חוטים צבעוניים אל מודול הנעה כחול ומנוע עם מדחף, ואל ברדבורד שעליו יושב מקלט אינפרא-אדום

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


הבלוקים

תוכנית בלוקים: בלוק start the program, בלוק set data data type String, ובתוך forever בלוק המכניס את קריאת IR module למשתנה data ואחריו בלוקי if המשווים אותו לשלושה קודים

מגדירים משתנה שמחזיק טקסט

set [data] data type [String]

הבלוק הזה רץ פעם אחת, בהתחלה. הוא אומר: ״המשתנה בשם data יחזיק מחרוזת

מחרוזת (String) היא רצף של תווים — אותיות, ספרות וסימנים — ולא מספר שאפשר לחשב איתו. למה זה מה שאנחנו צריכים? כי קוד כמו 0xAD52FF00 הוא בעצם שם, לא כמות. אין שום היגיון בלחבר שני קודי כפתורים או לחלק אותם. אנחנו רק רוצים לשאול: ״האם הקוד שהגיע הוא בדיוק אותו רצף תווים?״

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

הלולאה

כל השאר בתוך forever — הבלוק הכתום הגדול שעוטף ומריץ בלי סוף.

set [data] to (IR module [17])

הבלוק הכחול IR module [17] הוא הכוכב של השיעור. הוא עגול, כלומר הוא ערך שנכנס לתוך חורים של בלוקים אחרים. תיבת הבחירה שלו היא מספר הפין שאליו מחובר המקלט.

מה הוא מחזיר? את הקוד של הכפתור האחרון שנקלט. ואם לא נקלט כלום — הוא מחזיר פשוט 0.

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

השומר בכניסה

if < data != string [0] > then

הסימן != אומר ״לא שווה״. אז התנאי קורא: ״אם data אינו 0 — כלומר אם באמת הגיע משהו — אז...״

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

בלי השומר הזה הקונסול היה מתמלא באלפי אפסים בשנייה ואי אפשר היה לראות בו כלום.

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

מדפיסים את מה שהגיע

serial print [115200] (data)

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

שלוש ההשוואות

עכשיו שלושה בלוקי if בזה אחר זה, כולם בתוך השומר:

if < data = string [0xAD52FF00] > then write analog pin [5] to [0] write analog pin [16] to [0]

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

if < data = string [0xE916FF00] > then write analog pin [5] to [220] write analog pin [16] to [0]

כפתור 1 — מהירות נמוכה.

if < data = string [0xE619FF00] > then write analog pin [5] to [255] write analog pin [16] to [0]

כפתור 2 — מהירות מלאה.

מה אומרים המספרים 220 ו-255

הבלוק write analog pin מקבל מספר בין 0 ל-255, והמספר הזה הוא כמה אחוז מהזמן הפין דלוק. הלוח מדליק ומכבה את הפין מאות פעמים בשנייה, והמנוע — שכבד מדי מכדי להגיב לכל הבהוב — מרגיש רק את הממוצע. השיטה נקראת PWM.

255 = דלוק כל הזמן, כוח מלא. 220 = בערך 86%, נשיבה עדינה יותר. 0 = כבוי.

למה שלושה if נפרדים ולא if-else

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


מריצים

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

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

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

המערכת המורכבת במציאות: לוח ESP32 מחובר בחוטים צבעוניים למודול הנעה ולמנוע עם מדחף, ולידם ברדבורד עם מקלט אינפרא-אדום

לא עובד? שלוש בדיקות לפי הסדר:

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

מה קרה כאן

בכל סבב של הלולאה הלוח שואל את המקלט: ״הגיע משהו?״ אם התשובה היא 0 — שום דבר לא קורה והסבב נגמר.

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

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


תרגילים

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

  2. הילוך שלישי. הוסיפו בלוק if רביעי עם הקוד של כפתור 3 מהטבלה שיצרתם, ו-write analog pin [5] to [120]. מה קורה — המנוע זז או רק מזמזם?

  3. כפתור כיוון. הוסיפו if לכפתור 4 שמחליף בין השניים: write analog pin [5] to [0] ו-write analog pin [16] to [255]. לאיזה כיוון מסתובב עכשיו המדחף?

  4. המאוורר גם מדליק אור. חברו נורית לפין 2 כמו בשיעור 1, והוסיפו בתוך כל אחד משלושת התנאים בלוק set digital pin [2] to [high] או [low] כך שהנורית דולקת רק כשהמאוורר עובד.

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

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

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

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