🌡️ سنسور دما و رطوبت DHT22 و DHT11 با آردوینو: سیم‌کشی، کد کامل و ترموستات کوچک

✍️ تیم ووکوی فارسی ·

دمای اتاق چند درجه است و هوا چقدر شرجی است؟ این دو عدد پایه‌ی خیلی از پروژه‌ها هستند: ایستگاه هواشناسی، گلخانه، جوجه‌کشی، کنترل کولر و حتی یک دماسنج ساده روی میز. محبوب‌ترین و ساده‌ترین راه برای خواندن هر دو با هم، سنسور DHT22 و برادر کوچکش DHT11 است. در این آموزش یاد می‌گیریم این سنسورها چطور کار می‌کنند، چطور به آردوینو اونو وصل می‌شوند، با کتابخانه‌ی DHT چه کدی بنویسیم و در آخر یک ترموستات کوچک با رله می‌سازیم. همه‌ی این‌ها را می‌شود رایگان در شبیه‌ساز فارسی امتحان کرد؛ همان کاری که خیلی‌ها با ووکوی (Wokwi) انجام می‌دهند.

سنسور DHT چطور کار می‌کند؟

داخل قاب سفید یا آبی DHT دو حسگر کوچک هست. یکی ترمیستور است؛ مقاومتی که با گرم و سرد شدن عوض می‌شود. دیگری یک لایه‌ی جاذب رطوبت بین دو الکترود است که هرچه هوا مرطوب‌تر باشد، رفتار الکتریکی‌اش تغییر می‌کند. یک تراشه‌ی کوچک داخل سنسور این دو را اندازه می‌گیرد، به عدد تبدیل می‌کند و از راه فقط یک سیم داده برای آردوینو می‌فرستد. پس برخلاف سنسورهای آنالوگ، این‌جا analogRead نداریم؛ آردوینو با یک پروتکل زمان‌بندی‌شده‌ی دیجیتال، چهل بیت داده از سنسور تحویل می‌گیرد. خبر خوب این است که کتابخانه همه‌ی این زمان‌بندی‌ها را خودش انجام می‌دهد و تو فقط می‌گویی «دما را بده».

DHT11 یا DHT22؟

ویژگیDHT11 (آبی)DHT22 / AM2302 (سفید)
بازه‌ی دما۰ تا ۵۰ درجه۴۰- تا ۸۰ درجه
دقت دماحدود ۲± درجهحدود ۰٫۵± درجه
بازه‌ی رطوبت۲۰ تا ۹۰ درصد۰ تا ۱۰۰ درصد
سرعت خواندنیک بار در ثانیهیک بار در هر دو ثانیه
ولتاژ کار۳٫۳ تا ۵ ولت۳٫۳ تا ۵ ولت

اگر فقط دمای اتاق را می‌خواهی، DHT11 کافی است. اگر بیرون از خانه، زیر صفر یا با دقت بیشتر کار داری، DHT22 بخر. نکته‌ی جالب: کد هر دو تقریباً یکی است.

پایه‌ها (پین اوت)

سنسور خام چهار پایه دارد. اگر جلوی سنسور (سمت مشبک) را ببینی، از چپ به راست: VCC، DATA، NC (وصل نمی‌شود) و GND. روی سنسور خام باید یک مقاومت ۱۰ کیلواهم بین DATA و VCC بگذاری؛ این همان مقاومت پول‌آپ است که خط داده را در حالت بیکار بالا نگه می‌دارد. ماژول‌های سه‌پایه که روی یک برد کوچک لحیم شده‌اند، این مقاومت را از قبل دارند و فقط سه پایه‌ی +، OUT و − دارند.

قطعه‌ها و سیم‌کشی

پایه‌ی سنسورآردوینوتوضیح
VCC (+)5Vتغذیه
DATA (OUT)پین دیجیتال 2با مقاومت ۱۰k به 5V، اگر ماژول نیست
NCهیچ‌جافقط در سنسور خام
GND (−)GNDزمین مشترک

کد کامل

// DHT22 / DHT11 on an Arduino Uno: temperature, humidity and heat index.
#include <DHT.h>

#define DHTPIN 2        // DATA pin of the sensor
#define DHTTYPE DHT22   // change to DHT11 if that is what you have

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  dht.begin();
  Serial.println("DHT test starting...");
}

void loop() {
  delay(2000);                       // DHT22 needs 2 s between reads

  float h = dht.readHumidity();      // percent
  float t = dht.readTemperature();   // Celsius

  if (isnan(h) || isnan(t)) {        // NaN = the read failed
    Serial.println("Read failed - check wiring and DHTTYPE");
    return;
  }

  float feels = dht.computeHeatIndex(t, h, false);  // false = Celsius

  Serial.print("temp:");
  Serial.print(t, 1);
  Serial.print(" humidity:");
  Serial.print(h, 0);
  Serial.print(" feels:");
  Serial.println(feels, 1);
}

توضیح خط‌های مهم

💡 عدد دوم در Serial.print(t, 1) تعداد رقم اعشار است. برای رطوبت صفر گذاشتیم چون دقت سنسور اجازه‌ی اعشار معنادار نمی‌دهد.

اجرا در شبیه‌ساز، رایگان

سنسور DHT در تینکرکد فارسی روی آردوینو اونو کاملاً رایگان است. وقتی سنسور را انتخاب می‌کنی، در پنل ویژگی‌ها دو دکمه‌ی DHT11 و DHT22 و دو اسلایدر برای «دمای هوا» و «رطوبت هوا» می‌بینی؛ بازه‌ی اسلایدرها هم مثل سنسور واقعی است، یعنی برای DHT11 زیر صفر نمی‌رود. اسلایدر را بکش و ببین عدد سریال مانیتور و نمودار چطور عوض می‌شوند. مثال آماده‌ی «دما و رطوبت با DHT11» با پیام راحتی («گرم است، آب بخور») را باز کن و اگر درس‌محور جلو می‌روی، درس دما و رطوبت با DHT قدم‌به‌قدم همراهت است. برای فهم بهتر خود رطوبت‌سنج هم توضیح سنسور رطوبت در واژه‌نامه خواندنی است.

پروژه‌ی کوچک: ترموستات فن با رله

حالا عدد را به کار تبدیل کنیم. می‌خواهیم وقتی اتاق از ۲۸ درجه گرم‌تر شد، یک فن (از راه یک رله) روشن شود و وقتی زیر ۲۶ درجه آمد خاموش شود. فاصله‌ی دو درجه‌ای بین روشن و خاموش اسم دارد: هیسترزیس. بدون آن، وقتی دما دقیقاً حول ۲۸ درجه بالا و پایین برود، رله مدام تق‌تق روشن و خاموش می‌شود و هم خودش و هم فن خراب می‌شوند. یک LED هم روی پین ۱۳ هشدار رطوبت بالای ۷۰ درصد می‌دهد.

// Mini project: a fan on a relay with hysteresis, controlled by a DHT22.
#include <DHT.h>

DHT dht(2, DHT22);
const int RELAY_PIN = 7;
const int LED_PIN = 13;
const float ON_AT  = 28.0;   // fan on above this
const float OFF_AT = 26.0;   // fan off below this
bool fanOn = false;
unsigned long lastRead = 0;

void setup() {
  Serial.begin(9600);
  dht.begin();
  pinMode(RELAY_PIN, OUTPUT);
  pinMode(LED_PIN, OUTPUT);
}

void loop() {
  if (millis() - lastRead < 2000) return;   // read every 2 s without delay()
  lastRead = millis();

  float t = dht.readTemperature();
  float h = dht.readHumidity();
  if (isnan(t) || isnan(h)) return;

  if (!fanOn && t > ON_AT) fanOn = true;
  if (fanOn && t < OFF_AT) fanOn = false;

  digitalWrite(RELAY_PIN, fanOn ? HIGH : LOW);
  digitalWrite(LED_PIN, h > 70 ? HIGH : LOW);   // humid warning

  Serial.print("temp:");
  Serial.print(t);
  Serial.print(" fan:");
  Serial.println(fanOn ? 1 : 0);
}

این بار به‌جای delay از millis استفاده کردیم تا loop هیچ‌وقت قفل نشود و بعداً بتوانی دکمه یا نمایشگر هم اضافه کنی. در شبیه‌ساز اسلایدر دما را از ۲۵ تا ۳۰ بکش و ببین رله دقیقاً کجا روشن و کجا خاموش می‌شود. درباره‌ی سیم‌کشی امن خود رله و فن ۲۲۰ ولتی، آموزش ماژول رله با آردوینو را بخوان.

اشکال‌های رایج

می‌خواهی همین عددها را در مرورگر گوشی ببینی؟ نسخه‌ی وای‌فای‌دارش را در ایستگاه هواشناسی ESP32 با DHT ساخته‌ایم و اگر میکروپایتون دوست داری، DHT با رزبری پای پیکو را ببین. بقیه‌ی سنسورها هم در بخش سنسورها و ماژول‌ها جمع شده‌اند.

دماسنج DHT را رایگان اجرا کن 🌡️

سؤال‌های رایج

DHT11 بهتر است یا DHT22؟

برای یادگیری و دمای اتاق هر دو کافی‌اند. DHT22 دقیق‌تر است (حدود نیم درجه)، بازه‌ی بزرگ‌تری دارد و زیر صفر را هم می‌خواند؛ DHT11 ارزان‌تر است ولی فقط صفر تا پنجاه درجه را با خطای حدود دو درجه می‌دهد. کد هر دو یکی است و فقط نوع سنسور در سازنده عوض می‌شود.

چرا سنسور DHT عدد nan برمی‌گرداند؟

یعنی خواندن شکست خورده است. معمولاً پایه‌ی DATA به پین دیگری وصل است، مقاومت پول‌آپ روی سنسور خام جا افتاده، نوع سنسور در کد اشتباه است یا سریع‌تر از هر دو ثانیه یک بار خوانده‌ای.

برای DHT22 کدام کتابخانه را نصب کنم؟

کتابخانه‌ی DHT sensor library از Adafruit را از Library Manager نصب کن؛ آردوینو IDE پیشنهاد می‌کند وابستگی‌اش Adafruit Unified Sensor را هم نصب کنی که باید قبول کنی. در شبیه‌ساز فارسی این کتابخانه از قبل آماده است.

مقاله‌های مرتبط

🚶

سنسور حرکت PIR با آردوینو: از دزدگیر ساده تا چراغ راهروی هوشمند

☀️

سنسور نور LDR (فتوسل) با آردوینو: مقسم ولتاژ، کد کامل و چراغ خواب خودکار

🪴

سنسور رطوبت خاک با آردوینو و ساخت سیستم آبیاری خودکار گلدان

🔧

کد آردوینو کار نمی‌کند؟ ۱۵ علت رایج، از سیم‌کشی تا تغذیه، با راه‌حل هر کدام

همه‌ی آموزش‌های سنسورها و ماژول‌ها ← · همه‌ی مقاله‌ها