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

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

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

לטמפרטורה משתמשים בתרמיסטור NTC — נגד שההתנגדות שלו משתנה עם החום:
- טמפרטורה עולה → התנגדות יורדת
- טמפרטורה יורדת → התנגדות עולה
מזכיר את הפוטו-רזיסטור משיעור 6? אותו רעיון בדיוק — נגד שמשתנה לפי תנאי הסביבה. שם זה היה אור, כאן זה חום.
וההבדל החשוב: בשיעור 6 היינו צריכים לבנות מחלק מתח ולקרוא ADC בעצמנו. כאן השבב עושה את זה בפנים ומוציא מספר מוכן. זה מה שהופך את החיישן ל"דיגיטלי".
2. המפרט — וגבולות הדיוק
| פרמטר | ערך |
|---|---|
| מתח עבודה | 3.3-5.5V |
| טווח טמפרטורה | -20°C עד 60°C |
| טווח לחות | 5% עד 95% RH |
| דיוק טמפרטורה | ±2°C |
| דיוק לחות | ±5% RH |
| יציבות | ±1°C, ±1%RH לשנה |
⚠️ שימו לב לדיוק. ±2 מעלות זה לא מדחום רפואי. ה-DHT11 מצוין לניטור סביבתי ולפרויקטים לימודיים, אבל אל תבנו עליו מערכת שדורשת מדידה מדויקת.
⚠️ והוא איטי. קריאה אחת לוקחת כ-250 מילי-שניות, והערך שמוחזר יכול להיות "ישן" בעד 2 שניות. לכן בקוד יש
delay(2000)— לא בגלל שרצינו, אלא בגלל שהחיישן דורש את זה.
הניסוי
המטרה: להציג טמפרטורה ולחות ב-Serial Monitor בזמן אמת.
רשימת רכיבים
| הרכיב | כמות |
|---|---|
| לוח ESP32 | 1 |
| לוח ניסוי 400 נקודות | 1 |
| חיישן DHT11 | 1 |
התרשים החשמלי

החיבור

הקוד
#include <DHT.h>
#define DHTPIN 5 // הפין שאליו מחובר החיישן
#define DHTTYPE DHT11 // דגם החיישן
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(115200);
Serial.println("DHT11 test!");
dht.begin();
}
void loop() {
delay(2000); // החיישן איטי — חייבים להמתין בין מדידות
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
// בדיקה שהקריאה הצליחה
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" °C");
}
הקטע החשוב ביותר בקוד
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
isnan בודקת אם הערך הוא "לא מספר" (Not a Number) — כלומר הקריאה נכשלה. זה קורה: חוט רופף, תזמון לא מוצלח, רעש.
return יוצאת מהפונקציה מיד ומדלגת על שאר הקוד. בלי הבדיקה הזו, כישלון קריאה היה מדפיס nan או מספר שטותי — ואם היה מחובר לזה מנגנון החלטה, הוא היה מקבל החלטה על סמך זבל.
זה הרגל שכדאי לאמץ מעכשיו: כל קריאה מחיישן יכולה להיכשל. תבדקו. זו ההבדל בין קוד הדגמה לקוד שעובד באמת.
מה אמור לקרות

הפקודות שלמדנו
| הפקודה | מה היא עושה |
|---|---|
#include <DHT.h> |
מייבאת את הספרייה |
DHT dht(pin, type) |
יוצרת אובייקט חיישן |
dht.begin() |
מאתחלת אותו |
dht.readHumidity() |
לחות ב-%RH |
dht.readTemperature() |
טמפרטורה ב-°C (או true לפרנהייט) |
isnan(value) |
בודקת אם הקריאה נכשלה |
נסו בעצמכם
- נשפו על החיישן. מה קורה ללחות, וכמה זמן לוקח לה לחזור?
- השוו למדחום אמיתי. כמה הפער, והאם הוא בתוך ±2 המעלות?
- הורידו את ה-
delay(2000)ל-100. כמה קריאות נכשלות עכשיו? - שלבו עם שיעור 8: אזעקה כשהטמפרטורה חורגת.
- הוסיפו
dht.readTemperature(true)והדפיסו גם בפרנהייט.


