ماژول سنسور دما و رطوبت

ماژول سنسور دما و رطوبت DHT11 – دقیق و مقرون به‌صرفه

ماژول سنسور DHT11 یک سنسور دمای دیجیتال و رطوبت‌سنج با کالیبراسیون دیجیتال است که برای اندازه‌گیری همزمان دما و رطوبت محیط با دقت مناسب طراحی شده است. این ماژول با رابط دیجیتال تک‌سیم، انتخاب ایده‌آلی برای پروژه‌های IoT، خانه هوشمند و سیستم‌های مانیتورینگ است.


🌡️ ویژگی‌های اصلی

🔹 اندازه‌گیری همزمان دما و رطوبت نسبی
🔹 خروجی دیجیتال – رابط تک‌سیم ساده
🔹 کالیبراسیون دیجیتال – بدون نیاز به کالیبره دستی
🔹 مصرف برق پایین – مناسب سیستم‌های باتری‌دار
🔹 قیمت مناسب – اقتصادی برای پروژه‌های دانشجویی
🔹 نصب آسان – پایه‌های استاندارد 2.54mm


📊 مشخصات فنی دقیق

مشخصات اندازه‌گیری:

  • دمای کاری: 0°C تا 50°C (±2°C دقت)

  • رطوبت کاری: 20% تا 90% RH (±5% دقت)

  • رزولوشن دما: 1°C (8-bit)

  • رزولوشن رطوبت: 1% RH (8-bit)

  • زمان نمونه‌برداری: 1 هرتز (1 بار در ثانیه)

مشخصات الکتریکی:

  • ولتاژ کاری: 3.3V تا 5.5V DC

  • جریان کاری: 0.5mA تا 2.5mA

  • جریان standby: 40µA تا 100µA

  • پروتکل ارتباطی: Single-wire دوطرفه

  • طول کابل مجاز: تا 20 متر

مشخصات فیزیکی:

  • ابعاد ماژول: 15.5mm × 12mm × 5.5mm

  • ابعاد سنسور: 12mm × 12mm × 5.5mm

  • وزن: 1.5 گرم

  • پایه‌ها: 3 پین (VCC, DATA, GND)

  • فاصله پایه: استاندارد 2.54mm

  • سوراخ نصب: قطر 3mm

اجزای ماژول:

  1. سنسور DHT11 اصلی

  2. مقاومت Pull-up 4.7KΩ

  3. خازن فیلتر 100nF

  4. LED نشانگر تغذیه

  5. هدر 3 پین نری


🔌 پیکربندی پایه‌ها

پین‌های ماژول:

پین 1 (چپ): VCC (3.3V - 5.5V)
پین 2 (وسط): DATA (خروجی داده)
پین 3 (راست): GND (زمین)

اتصال به آردوینو Uno/Nano:

ماژول DHT11 → آردوینو
VCC  → 5V یا 3.3V
DATA → پین دیجیتال (مثلاً D2)
GND  → GND

*نیاز به مقاومت Pull-up 4.7KΩ بین DATA و VCC
*(معمولاً روی ماژول موجود است)

💻 کتابخانه و کد نمونه

نصب کتابخانه DHT:

  1. در Arduino IDE به مسیر بروید: Tools → Manage Libraries

  2. جستجو کنید: “DHT sensor library” by Adafruit

  3. روی Install کلیک کنید

  4. کتابخانه “Adafruit Unified Sensor” را نیز نصب کنید

کد پایه خواندن داده‌ها:

#include <DHT.h>

// تعریف پین و نوع سنسور
#define DHTPIN 2      // پین اتصال داده
#define DHTTYPE DHT11 // نوع سنسور

// ایجاد شیء سنسور
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(9600);
  Serial.println("آزمایش سنسور DHT11");
  
  // راه‌اندازی سنسور
  dht.begin();
  
  delay(2000); // منتظر تثبیت سنسور
}

void loop() {
  // تاخیر بین خواندن‌ها (حداقل 2 ثانیه)
  delay(2000);
  
  // خواندن رطوبت
  float humidity = dht.readHumidity();
  
  // خواندن دما به سلسیوس
  float temperature = dht.readTemperature();
  
  // خواندن دما به فارنهایت
  float fahrenheit = dht.readTemperature(true);
  
  // بررسی خطای خواندن
  if (isnan(humidity) || isnan(temperature) || isnan(fahrenheit)) {
    Serial.println("خطا در خواندن از سنسور!");
    return;
  }
  
  // محاسبه حرارت لحاظ‌شده (Heat Index)
  float heatIndex = dht.computeHeatIndex(temperature, humidity, false);
  
  // نمایش نتایج
  Serial.println("======================");
  Serial.print("رطوبت: ");
  Serial.print(humidity);
  Serial.println(" %");
  
  Serial.print("دما: ");
  Serial.print(temperature);
  Serial.println(" °C");
  
  Serial.print("دما: ");
  Serial.print(fahrenheit);
  Serial.println(" °F");
  
  Serial.print("حرارت لحاظ‌شده: ");
  Serial.print(heatIndex);
  Serial.println(" °C");
}

کد پیشرفته با نمایشگر LCD:

#include <DHT.h>
#include <LiquidCrystal.h>

#define DHTPIN 2
#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);

// اتصال LCD: RS=12, EN=11, D4=5, D5=4, D6=3, D7=2
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
  lcd.begin(16, 2);
  dht.begin();
  
  lcd.print("سنسور DHT11");
  lcd.setCursor(0, 1);
  lcd.print("در حال راه‌اندازی");
  delay(2000);
}

void loop() {
  delay(2000);
  
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  
  if (isnan(h) || isnan(t)) {
    lcd.clear();
    lcd.print("خطا در سنسور");
    return;
  }
  
  // نمایش روی LCD
  lcd.clear();
  lcd.print("T:");
  lcd.print(t, 1);
  lcd.print("C H:");
  lcd.print(h, 0);
  lcd.print("%");
  
  // نمایش وضعیت آسایش
  lcd.setCursor(0, 1);
  if (t >= 30) {
    lcd.print("گرم!");
  } else if (t <= 10) {
    lcd.print("سرد!");
  } else if (h >= 70) {
    lcd.print("مرطوب!");
  } else if (h <= 30) {
    lcd.print("خشک!");
  } else {
    lcd.print("مطلوب");
  }
}

کلاس مدیریت سنسور با آلارم:

class DHTMonitor {
  private:
    DHT* dhtSensor;
    float tempThresholdHigh;
    float tempThresholdLow;
    float humidThresholdHigh;
    float humidThresholdLow;
    int alarmPin;
    
  public:
    DHTMonitor(int pin, float tempHigh, float tempLow, 
               float humidHigh, float humidLow, int alarm) {
      dhtSensor = new DHT(pin, DHT11);
      tempThresholdHigh = tempHigh;
      tempThresholdLow = tempLow;
      humidThresholdHigh = humidHigh;
      humidThresholdLow = humidLow;
      alarmPin = alarm;
      
      pinMode(alarmPin, OUTPUT);
      dhtSensor->begin();
    }
    
    void readAndCheck() {
      delay(2000);
      
      float temp = dhtSensor->readTemperature();
      float humid = dhtSensor->readHumidity();
      
      if (isnan(temp) || isnan(humid)) {
        triggerAlarm(3); // 3 بوق برای خطای سنسور
        return;
      }
      
      bool alarm = false;
      
      // بررسی دمای بالا
      if (temp > tempThresholdHigh) {
        Serial.println("هشدار: دمای بالا!");
        alarm = true;
      }
      
      // بررسی دمای پایین
      if (temp < tempThresholdLow) {
        Serial.println("هشدار: دمای پایین!");
        alarm = true;
      }
      
      // بررسی رطوبت بالا
      if (humid > humidThresholdHigh) {
        Serial.println("هشدار: رطوبت بالا!");
        alarm = true;
      }
      
      // بررسی رطوبت پایین
      if (humid < humidThresholdLow) {
        Serial.println("هشدار: رطوبت پایین!");
        alarm = true;
      }
      
      if (alarm) {
        triggerAlarm(2); // 2 بوق برای هشدار
      } else {
        digitalWrite(alarmPin, LOW);
      }
      
      // چاپ اطلاعات
      Serial.print("دما: ");
      Serial.print(temp);
      Serial.print(" °C | رطوبت: ");
      Serial.print(humid);
      Serial.println(" %");
    }
    
    void triggerAlarm(int beeps) {
      for (int i = 0; i < beeps; i++) {
        digitalWrite(alarmPin, HIGH);
        delay(200);
        digitalWrite(alarmPin, LOW);
        delay(200);
      }
    }
};

// استفاده از کلاس
DHTMonitor monitor(2, 35.0, 10.0, 80.0, 20.0, 8);

void setup() {
  Serial.begin(9600);
  Serial.println("سیستم مانیتورینگ دما و رطوبت");
}

void loop() {
  monitor.readAndCheck();
}

🎯 کاربردهای عملی

1. خانه هوشمند:

  • کنترل سیستم تهویه مطبوع

  • مدیریت رطوبت‌ساز و دستگاه‌های خشک‌کن

  • مانیتورینگ اتاق سرور

  • کنترل گلخانه خانگی

2. کشاورزی و گلخانه:

  • کنترل رطوبت خاک و هوا

  • اتوماسیون آبیاری

  • مانیتورینگ شرایط رشد گیاهان

  • هشدار یخ‌زدگی

3. ذخیره‌سازی:

  • انبار مواد غذایی

  • داروخانه و آزمایشگاه

  • موزه و آرشیو

  • کتابخانه

4. پروژه‌های آموزشی:

  • آزمایش‌های علمی مدارس

  • پروژه‌های دانشگاهی

  • کارگاه‌های الکترونیک

  • مسابقات رباتیک

5. صنعت:

  • خطوط تولید مواد غذایی

  • صنایع دارویی

  • سالن‌های رنگ و پوشش

  • آزمایشگاه‌های کنترل کیفیت


⚠️ نکات مهم و عیب‌یابی

نکات نصب:

  1. سنسور را دور از منابع حرارتی مستقیم نصب کنید

  2. از تابش مستقیم نور خورشید جلوگیری کنید

  3. سنسور را در جریان هوای آزاد قرار دهید

  4. از تماس مستقیم با آب خودداری کنید

مشکلات رایج و راه‌حل:

مشکل علت احتمالی راه‌حل
خواندن NaN اتصال نامناسب پایه‌ها را بررسی کنید
داده‌های نادرست نویز الکتریکی از خازن 100µF روی VCC استفاده کنید
پاسخ ندادن سنسور کابل بلند کابل را کوتاه‌تر کنید (≤20m)
دقت پایین کالیبراسیون سنسور را 24 ساعت در محیط بگذارید

افزایش دقت:

// خواندن میانگین 5 نمونه
float readAverageTemperature() {
  float sum = 0;
  int validReadings = 0;
  
  for(int i = 0; i < 5; i++) {
    float temp = dht.readTemperature();
    if(!isnan(temp)) {
      sum += temp;
      validReadings++;
    }
    delay(250);
  }
  
  return (validReadings > 0) ? (sum / validReadings) : NAN;
}

📈 مقایسه با سنسورهای مشابه

سنسور دما رطوبت قیمت رابط توضیح
DHT11 0-50°C (±2°C) 20-90% (±5%) کم Digital 1-wire اقتصادی، پایه‌ای
DHT22 -40-80°C (±0.5°C) 0-100% (±2%) متوسط Digital 1-wire دقیق‌تر، محدوده وسیع‌تر
AM2302 -40-80°C (±0.5°C) 0-100% (±2%) متوسط Digital 1-wire مشابه DHT22 با کابل
SHT31 -40-125°C (±0.3°C) 0-100% (±2%) بالا I2C حرفه‌ای، دقت بالا
BME280 -40-85°C (±1°C) 0-100% (±3%) بالا I2C/SPI فشارسنج هم دارد

🔧 پروژه‌های پیشنهادی

پروژه 1: ایستگاه هواشناسی مینیاتوری

// با DHT11 + فشارسنج BMP180 + نمایشگر OLED

پروژه 2: سیستم هشدار نشت آب

// DHT11 برای رطوبت + سنسور آب + بوزر

پروژه 3: کنترلر فن اتوماتیک

// DHT11 + رله + فن کامپیوتر

پروژه 4: داده‌برداری با SD Card

// DHT11 + ماژول SD Card + RTC


💡 نکات نگهداری و کالیبراسیون

نگهداری صحیح:

  1. هر 6 ماه سنسور را با هوای فشرده تمیز کنید

  2. از تماس با مواد شیمیایی خودداری کنید

  3. در دمای زیر 0°C و بالای 60°C استفاده نکنید

  4. در محیط‌های با رطوبت زیر 20% و بالای 90% به صورت مداوم استفاده نکنید

کالیبراسیون دورهای:

  • هر 12 ماه با یک دماسنج و رطوبت‌سنج مرجع مقایسه کنید

  • اگر خطای بیش از 3°C یا 7% RH داشت، سنسور را تعویض کنید


🔥 نکته حرفه‌ای: برای پروژه‌های حساس، از میانگین‌گیری 10 نمونه‌گیری با فاصله 200ms استفاده کنید.

🎯 بهترین انتخاب برای: دانشجویان، علاقه‌مندان به الکترونیک، توسعه‌دهندگان IoT، کشاورزان، صاحبان گلخانه، مهندسین کنترل


📞 پشتیبانی فنی

  • راهنمای نصب گام به گام

  • کمک در عیب‌یابی پروژه

  • مشاوره انتخاب سنسور مناسب

  • طراحی مدار اختصاصی