سنسور DHT11/DHT22 یکی از پرکاربردترین سنسورهای دما و رطوبت است. این سنسور با یک پروتکل دیجیتالِ زمانبندیشدهٔ اختصاصی روی یک سیم داده کار میکند؛ در دنیای آردوینو، کتابخانهٔ محبوب DHT sensor library (ساختهٔ Adafruit) همهٔ این پیچیدگی را مدیریت میکند.
نصب کتابخانه
از منوی Sketch > Include Library > Manage Libraries، عبارت «DHT sensor library» (نوشتهٔ Adafruit) را جستجو و نصب کنید؛ Arduino IDE بهطور خودکار وابستگی «Adafruit Unified Sensor» را هم پیشنهاد میدهد که باید آن را هم نصب کنید.
#include <DHT.h>
#define DHT_PIN 15
#define DHT_TYPE DHT22 // یا DHT11 اگر از آن مدل استفاده میکنید
DHT dht(DHT_PIN, DHT_TYPE);
void setup() {
Serial.begin(115200);
dht.begin();
}
void loop() {
float temp = dht.readTemperature();
float hum = dht.readHumidity();
if (isnan(temp) || isnan(hum)) {
Serial.println("خطا در خواندن سنسور!");
} else {
Serial.print("دما: ");
Serial.print(temp);
Serial.print("°C رطوبت: ");
Serial.print(hum);
Serial.println("%");
}
delay(2000);
}سنسور DHT حداکثر هر ۲ ثانیه یکبار قابل خواندن است. خواندن سریعتر از این باعث دریافت مقدار نامعتبر (NaN) میشود.
مدیریت خطا با isnan()
وقتی خواندن سنسور با خطا مواجه شود (نویز، اتصال شل، تایماوت)، کتابخانه مقدار NaN («عدد نیست») برمیگرداند. تابع استاندارد C++ بهنام isnan() این حالت را تشخیص میدهد — معادل مفهومی try/except OSError در نسخهٔ میکروپایتون.
کارگاه عملی: مقادیر دما و رطوبت را در دو متغیر جداگانه ذخیره کنید و اگر دما از ۳۰ درجه بیشتر شد، پیام هشدار «گرم است!» چاپ کنید.