ویژگی های سنسور دما و رطوبت DHT22
سنسور دما و رطوبت DHT22، یک انتخاب بسیار خوب برای اندازه گیری دما و رطوبت محیط است. این سنسور در حقیقت از یک سنسور رطوبت خازنی و یک مقاومت گرمایی تشکیل شده است. سنسور آب و هوای DHT22 بازه اندازهگیری دما و رطوبت وسیعی دارد. توانایی اندازهگیری دمای این سنسور در بازه 40- تا 125+ درجه سلیسیوس و با دقت 0.5 درجه سلیسیوس است. رطوبت هوا را نیز در محدوده 0 تا 100% و با دقت 2.5% اندازه میگیرد. این سنسور اطلاعات را از طریق یک پایه دیجیتال منتقل میکند، که همین موضوع کار با آن را توسط میکروکنترلرهای گوناگون آسان کرده است. فرکانس نمونهبرداری این سنسور نیز 0.5Hz است، که به معنای آن است که اطلاعات دما و رطوبت را هر دو ثانیه به روزرسانی میکند.
معرفی پایه ها (Pinout) سنسور دما و رطوبت DHT22
سنسور دما و رطوبت DHT22 دارای 4 پایه به شرح زیر است:
- VCC: تغذیه ماژول –5 ولت
- DATA: پایه داده
- NC: متصل نمیشود
- GND: زمین
پین اوت (Pinout) این سنسور را میتوانید در تصویر زیر مشاهده کنید.
لوازمی که به آن احتیاج دارید
قطعات مورد نیاز
نرم افزارهای مورد نیاز
راه اندازی سنسور دما و رطوبت 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="“Home” — 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.
}
در کد بالا، اطلاعات دما و رطوبت در هر دو ثانیه از سنسور دریافت شده و در پنجرهی Serial Monitor نمایش داده میشود.
خروجی کد به شکل زیر است.
Comments (10)
خدااااا خیرتون بده
خیلییییییییییی خیلییییییییییی ممنون
عالییییی
ممنووووون ممنون
خب اگر حالا بخوایم دستور بدیم رطوبت از n و دما اگر از بازه )x,g) خارج شد به عملگر هایی مثل اسپری و هیتر و فن دستور روشن و خاموش بده با چطور در مدار قرار بدیم و کدشو چی بنویسسم ؟
با سلام
داخل حلقه loop از دستور های if برای این موضوع استفاده میکنیم که در صورتی که این شرایط برقرار بود پایه های مشخص شده توسط شما به حالت HIGH یا LOW در بیاید که آن پایه را می توانید به رله یا هر قطعه دیگری که برای کنترل قرار دادید وصل کنید.
سلام خیلی ممنونم از مقاله کامل و دقیقتون . اما اگر بخوام یه سیستم بسازم که در صورتی که دما در بازه ای مشخصی پایینتر رفت هیتر روشن کنه و اگر بالا تر رفت فن روشن کنه و اگر رطوبت کمتر از یک حدی شد دوشک روشن کنه چکار باید بکنم
با سلام
برای ایجاد شرط که در هر شرایطی چه کاری انجام شود از دستور if استفاده میکنیم. پیشنهاد میکنم رفرنس های آردوینو و برنامه نویسی را مطالعه کنید.
دستتون درد نکنه من این کد رو کامل تر کردم و تونستم یک پروژه کامل بسازم
کد:
/*
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);
}
چگونه میتوانیم این داده ها را. روی یک نمایشگر نشان دهیم من برای پروژه مدرسه میخواهم
با سلام
با توجه به نمایشگری که انتخاب میکنید. همان نمایشگر یک نمونه کد مانند همین آموزش دارد. در آن آموزش یک تابع برای نمایش متن دارد.
خروجی این آموزش را به آن آموزش وصل بکنید و متن ها برای شما نمایش داده میشود.
بین vcc و data نیاز به مقاومت داره؟ چه اتفاقی میافته اگر مقاومت را بذاری و چه اتفاقی میافته اگر نذریم؟
با سلام
به صورت نرمال پایه میکروکنترلر به صورت داخلی دارای مقاومت داخلی می باشد که ضعیف می باشد و از مقاومت خارجی برای تقویت این مقاومت استفاده میشود و در صورت عدم استفاده از این مقاومت بر روی لاین دیتا نویز شدید ایجاد میشود و بسته به کد شما (تعریف پایه ها) دیتا خوانده میشود ولی گاهی وقت ها نویز نیز قاطی دیتا میشود و در بعضی از شرایط اصلا هیچ دیتایی دریافت نخواهید کرد.