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

לחות גבוהה מביאה עובש, אוויר יבש מייבש. בחממות ובמחסני מזון אלה הגורמים הקריטיים.
הידע שצריך
1. 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(): קודם מבצעים מדידה אחת, ואז קוראים ממנה שני ערכים. זה חוסך פנייה כפולה לחיישן האיטי.
מה אמור לקרות

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


