דלגו לתוכן המרכזי
KitLab
שיעור קודם
תחנת מזג אוויר קטנה — חום, לחות ואור על מסך אחד· 33 / 41
תחנת מזג אוויר קטנה — חום, לחות ואור על מסך אחד
🎬

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

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

תחנת מזג אוויר קטנה — חום, לחות ואור על מסך אחד

מה בשיעור?

  • להסביר מה עושה מערכת ניטור ולמה חממות ובתים חכמים צריכים אחת
  • לחבר שלושה רכיבים שונים ללוח אחד בלי שיפריעו זה לזה
  • להשתמש בבלוק LCD show string עם קואורדינטות x ו-y
  • לשלב טקסט ומספר עם הבלוק join, וגם join בתוך join
  • להבין מה הפוטורזיסטור באמת מחזיר ולמה זה לא ״לוקס״ אמיתי
  • לתכנן פריסה של 16 תווים בשתי שורות בלי שהטקסט ייחתך

מה נלמד כאן

  • מה זו מערכת ניטור ולמה היא עומדת בבסיס כל בית חכם
  • איך מחברים שלושה רכיבים שונים ללוח אחד
  • איך הבלוק LCD show string יודע איפה בדיוק לכתוב על המסך
  • מה עושה הבלוק join ואיך שמים join בתוך join
  • למה המספר שמופיע ליד המילה Lux הוא לא באמת לוקס

המסך שמספר לכם מה קורה

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

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

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

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

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


הרכיבים

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

חיישן DHT11

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

פוטורזיסטור

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

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

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

מסך LCD1602

נלמד בשיעור 17. השם מסגיר את הגודל: 16 תווים ברוחב, 2 שורות בגובה. סך הכול 32 משבצות, כל אחת יכולה להכיל אות אחת או ספרה אחת.

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

זה מעט מאוד מקום, ולכן כל תו נחשב. בגלל זה התוכנית כותבת T: במקום Temperature ו-H: במקום Humidity. אין לנו מקום למילים ארוכות.

המסך מתחבר ללוח בשני חוטי נתונים בלבד (SDA ו-SCL) בנוסף למתח ולהארקה, כי מאחוריו יש שבב קטן שמתרגם בשבילנו.


החיבור

סכמת חיבורים: מסך LCD עם VCC ל-5 וולט ו-GND להארקה, חיישן DHT11 שרגל ה-Data שלו מחוברת לפין IO05, ומימין פוטורזיסטור עם נגד 10 קילואוהם שנקודת האמצע ביניהם מחוברת לפין IO32

רכיב חיבור לאן
DHT11 Data פין 5
DHT11 Vcc / GND 5V / GND
פוטורזיסטור נקודת האמצע עם הנגד פין 32
LCD1602 SDA / SCL פיני ה-SDA וה-SCL בלוח
LCD1602 VCC / GND 5V / GND

תרשים חיבורים מלא: לוח ESP32 מחובר בחוטים צבעוניים למסך LCD1602 כחול מצד שמאל, ולברדבורד שעליו פוטורזיסטור ונגד, וחיישן DHT11 כחול בפינה

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

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

הבלוקים

תוכנית בלוקים: בלוק start the program, ובתוך forever שלושה בלוקי LCD show string עם קואורדינטות שונות, בכל אחד בלוק join המחבר טקסט לקריאת חיישן, ובסוף המתנה של אלף אלפיות שנייה

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

הבלוק שכותב על המסך

LCD x [0] y [0] show string ( ... )

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

  • x הוא העמודה — מ-0 (הקצה השמאלי) עד 15 (הקצה הימני).
  • y הוא השורה — 0 היא העליונה, 1 היא התחתונה.

תחשבו על המסך כמו על דף משבצות קטן. x ו-y הם המשבצת שבה מניחים את האות הראשונה, וכל השאר נמשך משם ימינה.

יש כאן דבר שחשוב להבין: הבלוק הזה לא מוחק את מה שהיה לפניו. הוא רק כותב מעל המשבצות שהוא צריך. ולכן אם בסבב אחד כתבתם ״27.1״ ובסבב הבא הטמפרטורה ירדה ל״9.0״, המשבצת הרביעית עדיין תכיל את ה-1 הישן ותראו ״9.01״. זה מקור מספר אחת לתצוגות משונות במסכים כאלה.

הבלוק join

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

בשורה הראשונה:

join ( T: ) ( humiture [5] temperature )

בחור השמאלי יושב הטקסט T: ובימני יושב בלוק החיישן שמחזיר את הטמפרטורה. התוצאה על המסך: T:27.1

למה בכלל צריך את זה? כי הבלוק show string מקבל דבר אחד, לא שניים. אם היינו רוצים לכתוב את המילה ואת המספר בנפרד, היינו צריכים שני בלוקי LCD עם חישוב ידני של המיקום. join חוסך לנו את זה.

שלוש השורות

LCD x [0] y [0] show string ( join (T:) (humiture [5] temperature) )

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

LCD x [8] y [0] show string ( join (H:) (humiture [5] humidity) )

אותה שורה, אבל מתחילים בעמודה 8 — כלומר בדיוק באמצע השורה העליונה. ככה שתי המדידות חולקות שורה אחת: החום בחצי השמאלי, הלחות בחצי הימני. שימו לב שזה אותו בלוק humiture בדיוק, רק שתיבת הבחירה השנייה שלו שונתה מ-temperature ל-humidity.

LCD x [0] y [1] show string ( join (Light:) ( join (read analog pin [32]) (Lux) ) )

זו השורה המעניינת. תסתכלו טוב: יש כאן join בתוך join.

הפנימי מדביק את המספר מהפוטורזיסטור למילה Lux, ומייצר למשל ״956 Lux״. החיצוני מדביק לפני זה את המילה Light:, ומייצר את הרצף השלם.

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

והשורה הזאת יושבת על y = 1, כלומר בשורה התחתונה, כי היא ארוכה וצריכה שורה שלמה לעצמה.

המספר שהוא לא באמת לוקס

כאן צריך לומר משהו כן. הבלוק read analog pin [32] מחזיר מספר בין 0 ל-4095, שהוא פשוט מדידה של מתח. זה לא לוקס. לוקס היא יחידת מידה אמיתית של תאורה שמודדים במכשיר מכויל, והמספר שאנחנו מציגים הוא רק ערך גולמי שהמילה ״Lux״ הודבקה לידו.

אז מה כן עושים איתו? משווים. המספר הזה שימושי מאוד כדי לדעת ״עכשיו חשוך יותר מלפני רגע״ או ״הערך ירד מתחת ל-500, תדליק אור״. זה בדיוק מה שעשיתם בשיעור 21.

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

ההמתנה

wait [1000] milliseconds — שנייה שלמה בין סבב לסבב.

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


מריצים

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

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

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

המערכת המורכבת במציאות: לוח ESP32 מחובר לברדבורד עם DHT11, ולמסך LCD1602 שמציג ״T:27.1C H:54.8%״ בשורה העליונה ו״Light: 956 Lux״ בתחתונה

עכשיו תשחקו איתה:

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

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


מה קרה כאן

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

הלולאה עושה שלוש פעמים את אותו דבר: קוראת ערך מחיישן, מדביקה לו תווית בעזרת join, ושולחת אותו למשבצת מסוימת על המסך עם LCD show string. ואז ממתינה שנייה ומתחילה מחדש.

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


תרגילים

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

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

  3. הוסיפו יחידה. הוסיפו בלוק join נוסף לשורת הטמפרטורה כך שאחרי המספר תופיע האות C. רמז: תצטרכו join בתוך join, בדיוק כמו בשורת האור.

  4. עדכון מהיר יותר. שנו את wait מ-1000 ל-200. מה קורה למספרי החום והלחות? נסו להסביר למה, בעזרת מה שלמדתם על מהירות ה-DHT11.

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

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

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

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