سنسور DHT-22 (که با نام AM2302 نیز شناخته میشود)، یک سنسور عالی جهت سنجش دما و رطوبت با خروجی دیجتال میباشد. این سنسور از دو سنسور تشکیل شده است:
- سنسور رطوبت خازنی
- سنسور دمای ترمیستوری (مقاومت وابسته به دما)
این سنسور در قالب یک ماژول عرضه میگردد که دارای یک مبدل A/D داخلی نیز میباشد و خروجی این ماژول یک سیگنال دیجیتال است.
مشخصات فنی سنسور:
- تغذیه 3V تا 5V
- حداکثر جریان تغذیه 5mA
- اندازه گیری رطوبت از 0% تا 100% با دقت 2 تا 5 درصد
- اندازه گیری دما از منفی 40 درجه سانتی گراد تا مثبت 80 درجه سانتی گراد با دقت مثبت/منفی نیم درجه سانتی گراد
شکل زیر این ماژول را به همراه ترتیب پایهها نشان میدهد:
مطابق شکل، پایه اول این ماژول به تغذیه VCC (بین 3V تا 5V) و پایه چهارم این ماژول به زمین GND متصل میشود و پایه دوم این تراشه خروجی سنسور ما خواهد بود که باید به برد متصل کنیم. پایه سوم نیازی به اتصال به جایی ندارد.
در ادامه مجموعه پروژههای آردوینو، در این آموزش نحوه کار با این سنسور و چاپ رطوبت و دمای محیط در خروجی سریال را توسط برد Arduino UNO توضیح میدهیم.
اجزای مورد نیاز :
- برد بورد
- برد Arduino Uno R3
- سنسور DHT22
- یک عدد مقاومت 10K اهم
سخت افزار :
مطابق شکل زیر، تغذیه و زمین ماژول را به ترتیب توضیح داده شده در بالا به تغذیه و زمین میکروکنترلر (و یا در صورت نیاز به تغذیه جداگانه) متصل کنید و پایه خروجی ماژول (پایه دوم) را به پایه D2 (یا پایه ی دلخواه دیگر) برد آردوینو متصل کنید.
یک مقاومت 10K اهم بین پایه دوم و اول (پایه خروجی و تغذیه VCC) ماژول متصل کنید.
نکته مهم : اگر از برد آردوینو با تغذیه 3.3V استفاده میکنید (مانند برد Arduino Due)، حتما تغذیه ماژول هم باید به 3.3V متصل شود.
نرم افزار :
وارد محیط برنامه نویسی آردوینو شوید و مطابق آموزشهای آردوینو، با زدن گزینه New یا فایل sketch جدید بسازید.
کدهای زیر را وارد کنید :
// Testing DHT-22 humidity/temperature sensor //Melec.ir Arduino Toturial Project
#include "DHT.h" #define DHTPIN 2 #define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321 DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); Serial.println("DHT22 test!"); dht.begin(); } void loop() { delay(2000); float h = dht.readHumidity(); float t = dht.readTemperature(); // Read temperature as Celsius (the default) float f = dht.readTemperature(true); if (isnan(h) || isnan(t) || isnan(f)) { Serial.println("Failed to read from DHT sensor!"); return; } float hif = dht.computeHeatIndex(f, h); float hic = dht.computeHeatIndex(t, h, false); Serial.print ("Humidity: ");
Serial.print (h); Serial.print (" %\t"); Serial.print ("Temperature: "); Serial.print (t); Serial.print (" *C "); Serial.print (f); Serial.print (" *F\t"); Serial.print ("Heat index: "); Serial.print (hic); Serial.print (" *C "); Serial.print (hif); Serial.println (" *F"); }
توضیح برنامه:
توسط دستور #define پایه دوم برای اتصال سنسور در نظر گرفته شده است. در صورتی که سنسور را به پایهی دیگری متصل کرده اید این بخش را تغییر دهید.
در ابتدا در تابع setup عبارت “DHT22 test!” را به خروجی سریال ارسال میکنیم و سپس توسط تابع dht.begin سنسور را راه اندازی میکنیم.
در ادامه در حلقه loop توسط تابع dht.readhumidity مقدار رطوبت را از مبدل آنالوگ به دیجیتال خروجی سنسور میخوانیم ( این فرایند حدود 250ms زمان لازم دارد) و در متغیر h ذخیره میکنیم.
توسط تابع dht.readtemperature مقدار دما برحسب درجه سلسیوس را در متغیر t ذخیره میکنیم و مقدار دما بر حسب فارنهایت را در متغیر f ذخیره میکنیم.
توسط عبارت شرطی if صحیح بودن مقادیر خوانده شده از سنسور را بررسی و اگر مشکلی وجود داشت عبارت “Failed to read from DHT sensor!” را به خروجی سریال ارسال میکنیم.
در ادامه مقدار دما و رطوبت را به خروجی سریال ارسال میکنیم.
تست برنامه :
با اجرای برنامه، در خروجی سریال مقدار دما و مقدار رطوبت محیط نمایش داده میشود و به مدت هر 2 ثانیه یکبار این مقادیر با مقادیر جدید جایگزین میشوند.
منابع:
tutorialspoint.com