آموزش راه اندازی سنسور دما و رطوبت DHT22 با آردوینو

ویژگی های سنسور دما و رطوبت DHT22

سنسور دما و رطوبت DHT22، یک انتخاب بسیار خوب برای اندازه گیری دما و رطوبت محیط است. این سنسور در حقیقت از یک سنسور رطوبت خازنی و یک مقاومت گرمایی تشکیل شده است. سنسور آب و هوای DHT22 بازه اندازه‌گیری دما و رطوبت وسیعی دارد. توانایی اندازه‌گیری دمای این سنسور در بازه 40- تا 125+ درجه سلیسیوس و با دقت 0.5 درجه سلیسیوس است. رطوبت هوا را نیز در محدوده 0 تا 100% و با دقت 2.5% اندازه می‌گیرد. این سنسور اطلاعات را از طریق یک پایه دیجیتال منتقل می‌کند، که همین موضوع کار با آن را توسط میکروکنترلرهای گوناگون آسان کرده است. فرکانس نمونه‌برداری این سنسور نیز 0.5Hz است، که به معنای آن است که اطلاعات دما و رطوبت را هر دو ثانیه به روزرسانی می‌کند.

معرفی پایه ها (Pinout) سنسور دما و رطوبت DHT22

سنسور دما و رطوبت DHT22 دارای 4 پایه به شرح زیر است:

  • VCC: تغذیه ماژول –5 ولت
  • DATA: پایه داده
  • NC: متصل نمی‌شود
  • GND: زمین

پین اوت (Pinout) این سنسور را می‌توانید در تصویر زیر مشاهده کنید.

لوازمی که به آن احتیاج دارید

قطعات مورد نیاز

آردوینو UNO R3 × 1
سنسور دما و رطوبت - سنسور آب و هوا DHT22 × 1
سیم جامپر × 1

نرم افزارهای مورد نیاز

آردوینو IDE

راه اندازی سنسور دما و رطوبت DHT22

گام اول: سیم بندی

مطابق مدار زیر، ماژول را به آردوینو وصل کنید.

گام دوم: نصب کتابخانه

به Library manager رفته و کتابخانه DHT sensor library را نصب کنید.

توجه

اگر برای نصب کتابخانه نیاز به راهنمایی بیشتر دارید، به اینجا مراجعه کنید.

گام سوم: کد

کد زیر را روی برد آردوینو آپلود کنید. پس از آپلود کد، پنجره Serial Monitor را باز کنید.

  /*
modified on Dec 28, 2020
Modified by MehranMaleki from Arduino Examples
Home<iframe class="wp-embedded-content" sandbox="allow-scripts" security="restricted" style="position: absolute; clip: rect(1px, 1px, 1px, 1px);" title="&#8220;Home&#8221; &#8212; Electropeak" src="https://electropeak.com/learn/embed/#?secret=oUvb8AFr5o" data-secret="oUvb8AFr5o" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
*/


//Libraries
#include <DHT.h>;

//Constants
#define DHTPIN 2            //what pin we're connected to
#define DHTTYPE DHT22       //DHT 22  (AM2302)
DHT dht(DHTPIN, DHTTYPE);   //Initialize DHT sensor for normal 16mhz Arduino


//Variables
float hum;  //Stores humidity value
float temp; //Stores temperature value

void setup()
{
  Serial.begin(9600);
  dht.begin();
}

void loop()
{
  //Read data and store it to variables hum and temp
  hum = dht.readHumidity();
  temp= dht.readTemperature();
  
  //Print temp and humidity values to serial monitor
  Serial.print("Humidity: ");
  Serial.print(hum);
  Serial.print(" %, Temp: ");
  Serial.print(temp);
  Serial.println(" Celsius");
  
  delay(2000); //Delay 2 sec.
}
Arduino

در کد بالا، اطلاعات دما و رطوبت در هر دو ثانیه از سنسور دریافت شده و در پنجره­ی Serial Monitor نمایش داده می­‌شود.

خروجی کد به شکل زیر است.

آموزش های مشابه

Comments (10)

  • Eli Reply

    خدااااا خیرتون بده
    خیلییییییییییی خیلییییییییییی ممنون
    عالییییی
    ممنووووون ممنون

    ژانویه 17, 2024 at 12:58 ب.ظ
  • مهران Reply

    خب اگر حالا بخوایم دستور بدیم رطوبت از n و دما اگر از بازه )x,g) خارج شد به عملگر هایی مثل اسپری و هیتر و فن دستور روشن و خاموش بده با چطور در مدار قرار بدیم و کدشو چی بنویسسم ؟

    فوریه 16, 2024 at 7:14 ب.ظ
    • محمد دمیرچی Reply

      با سلام
      داخل حلقه loop از دستور های if برای این موضوع استفاده میکنیم که در صورتی که این شرایط برقرار بود پایه های مشخص شده توسط شما به حالت HIGH یا LOW در بیاید که آن پایه را می توانید به رله یا هر قطعه دیگری که برای کنترل قرار دادید وصل کنید.

      فوریه 21, 2024 at 11:48 ق.ظ
  • Norik Reply

    سلام خیلی ممنونم از مقاله کامل و دقیقتون . اما اگر بخوام یه سیستم بسازم که در صورتی که دما در بازه ای مشخصی پایینتر رفت هیتر روشن کنه و اگر بالا تر رفت فن روشن کنه و اگر رطوبت کمتر از یک حدی شد دوشک روشن کنه چکار باید بکنم

    فوریه 27, 2024 at 1:56 ق.ظ
    • محمد دمیرچی Reply

      با سلام
      برای ایجاد شرط که در هر شرایطی چه کاری انجام شود از دستور if استفاده میکنیم. پیشنهاد میکنم رفرنس های آردوینو و برنامه نویسی را مطالعه کنید.

      فوریه 27, 2024 at 10:02 ق.ظ
      • محمد فرهام Reply

        دستتون درد نکنه من این کد رو کامل تر کردم و تونستم یک پروژه کامل بسازم
        کد:

        /*
        Home
        */

        #include "DHT.h"

        #define DHTPIN A0

        #define DHTTYPE DHT22

        DHT dht(DHTPIN, DHTTYPE);

        void setup() {
        Serial.begin(9600);
        dht.begin();
        Serial.println("Testing... Please wait.");
        delay(2500);
        }

        void loop() {
        float h = dht.readHumidity();
        float t = dht.readTemperature();
        float f = dht.readTemperature(true);

        if (isnan(h) || isnan(t) || isnan(f)) {
        Serial.println(F("Failed to read from DHT sensor!"));
        return;
        }
        float hif = dht.computeHeatIndex(f, h);
        float hic = dht.computeHeatIndex(t, h, false);

        Serial.print(F("Humidity: "));
        Serial.print(h);
        Serial.print(F("% Temperature: "));
        Serial.print(t);
        Serial.print(F("°C "));
        Serial.print(f);
        Serial.print(" *F/t");
        Serial.print("Heat index: ");
        Serial.print(hic);
        Serial.print(" *C ");
        Serial.print(hif);
        Serial.println(" *F ");

        delay(2500);
        }

        نوامبر 30, 2024 at 11:06 ب.ظ
  • محمدحسین حسین پور Reply

    چگونه می‌توانیم این داده ها را. روی یک نمایشگر نشان دهیم من برای پروژه مدرسه میخواهم

    نوامبر 10, 2024 at 12:37 ق.ظ
    • محمد دمیرچی Reply

      با سلام
      با توجه به نمایشگری که انتخاب میکنید. همان نمایشگر یک نمونه کد مانند همین آموزش دارد. در آن آموزش یک تابع برای نمایش متن دارد.
      خروجی این آموزش را به آن آموزش وصل بکنید و متن ها برای شما نمایش داده میشود.

      نوامبر 17, 2024 at 12:28 ب.ظ
  • سلام Reply

    بین vcc و data نیاز به مقاومت داره؟ چه اتفاقی میافته اگر مقاومت را بذاری و چه اتفاقی میافته اگر نذریم؟

    ژانویه 7, 2025 at 5:33 ب.ظ
    • محمد دمیرچی Reply

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

      ژانویه 11, 2025 at 10:07 ق.ظ

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.