דלגו לתוכן המרכזי
KitLab
שיעור קודם
חיישן DHT11 ו-try/except· 15 / 41
חיישן DHT11 ו-try/except
🎬

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

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

חיישן DHT11 ו-try/except

מה בשיעור?

  • מדידת לחות בשיטה קיבולית
  • תרמיסטור NTC לטמפרטורה
  • מגבלות הדיוק והמהירות
  • try/except במקום בדיקת isnan
  • measure נפרדת מהקריאה

מה נלמד כאן

  • חיישן DHT11 ושתי שיטות המדידה שבו
  • try / except — טיפול בשגיאות בדרך של פייתון

לחוש את הסביבה

ניטור סביבתי

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


הידע שצריך

1. DHT11 — שתי מדידות, שתי שיטות

חיישן ה-DHT11

לחות — קיבול: בתוך החיישן חומר סופג מים. כשהלחות משתנה, הקיבול החשמלי משתנה איתה. היחידה: %RH.

טמפרטורה — תרמיסטור NTC:

עקרון המדידה

נגד שההתנגדות שלו משתנה עם החום — חם יותר = התנגדות נמוכה יותר.

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

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

2. המפרט ומגבלותיו

פרמטר ערך
טווח טמפרטורה ‎-20°C עד 60°C
טווח לחות 5% עד 95% RH
דיוק טמפרטורה ±2°C
דיוק לחות ±5% RH

⚠️ ±2 מעלות זה לא מדחום רפואי. מצוין לניטור ולפרויקטים, לא למדידה מדויקת.

⚠️ והוא איטי: קריאה לוקחת כ-250 מילי-שניות, והערך יכול להיות "ישן" בעד 2 שניות. לכן time.sleep(2) בקוד — לא כי רצינו, אלא כי החיישן דורש.

3. try / except — הדרך של פייתון

try:
    dht_sensor.measure()
    tem = dht_sensor.temperature()
except:
    print("Failed to read from DHT sensor!")

קריאה מחיישן יכולה להיכשל — חוט רופף, תזמון, רעש.

try אומר "נסה להריץ את זה". except אומר "ואם נכשל — עשה את זה במקום".

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

זה הרגל שכדאי לאמץ: כל קריאה מחיישן עוטפים ב-try. זה ההבדל בין קוד הדגמה לקוד שעובד.


הניסוי

המטרה: להציג טמפרטורה ולחות ב-Shell.

רשימת רכיבים

הרכיב כמות
לוח ESP32 1
לוח ניסוי 400 נקודות 1
חיישן DHT11 1

התרשים החשמלי

התרשים החשמלי

החיבור

חיבור הרכיבים


הקוד

import dht
from machine import Pin
import time

dht_sensor = dht.DHT11(Pin(5))

while True:
    try:
        dht_sensor.measure()               # מבצעים מדידה
        tem = dht_sensor.temperature()
        hum = dht_sensor.humidity()
        print("Temperature:", tem, "℃", "Humidity:", hum, "%")
    except:
        print("Failed to read from DHT sensor!")

    time.sleep(2)                          # החיישן איטי

שימו לב ש-dht מובנה ב-MicroPython — אין צורך להתקין שום דבר. import dht וזהו.

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

מה אמור לקרות

הפלט ב-Shell


נסו בעצמכם

  • נשפו על החיישן. כמה זמן לוקח ללחות לחזור?
  • השוו למדחום אמיתי. הפער בתוך ±2 מעלות?
  • שנו את sleep(2) ל-sleep(0.1). כמה קריאות נכשלות עכשיו? ה-except עובד?
  • נתקו את חוט הנתונים תוך כדי ריצה. התוכנית קרסה או הודיעה יפה?
  • שלבו עם שיעור 8: אזעקה כשהטמפרטורה חורגת.

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

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

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