در این آموزش نحوهی استفاده از سنسور DHT11 و یا DHT22 برای اندازهگیری دما و رطوبت را با استفاده از برد آردوینو یاد خواهیم گرفت. شما میتوانید برای جزئیات بیشتر ویدئو زیر را مشاهده کرده و یا آموزش نوشته شدهی زیر را مطالعه کنید.
بررسی اجمالی
این سنسورها برای کارهای سرگرمکننده الکترونیکی بسیار محبوب هستند زیرا قیمت آنها پایین است اما همچنان عملکرد بسیار خوبی دارند. حال ویژگیها و تفاوتهای اساسی میان این دو سنسور را بررسی میکنیم.
سنسور DHT22 نسخه گرانتر میان این سنسورها است که قطعا مشخصههای بهتری نیز دارد. بازه قابل اندازهگیری دما توسط این سنسور از 40- تا 125+ درجه سلسیوس با دقت 0.5 درجه است. در حالی که این بازه برای DHT11 از صفر تا 50 درجه سلسیوس با دقت 2 درجه است. همچنین DHT22 بازه اندازهگیری رطوبت بهتری دارد و از صفر تا 100 درصد را با دقت 2-5 درصد اندازهگیری میکند. در حالی که مقدار متناظر برای DHT11 برابر 20 الی 80 درصد با دقت 5 درصد است .
در دو ویژگی خاص سنسور DHT11 نسبت به DHT22 بهتر است. یکی از آنها نرخ نمونهبرداری است که برای DHT11 برابر 1Hz و یا یک خواندن در هر ثانیه و برای DHT22 برابر 0.5Hz و یا یک بار خواندن در هر دو ثانیه است. همچنین DHT11 اندازه بدنه کوچکتری دارد. ولتاژ کاری برای هر دوی این سنسورها برابر 3 الی 5 ولت و بیشینه جریان مصرفی برابر 2.5 آمپر است .
شما میتوانید قطعات مورد نیاز برای این پروژه را از هر یک از سایتهای ذکر شده تهیه کنید.
- سنسور DHT11
- سنسور DHT22
- برد آردوینو
- بِرِد بورد و سیمهای اتصال
اساس عملکرد DHT11 / DHT22
در این بخش میخواهیم روش دقیق کارکرد این سنسورها را بررسی کنیم. آنها از اجزای تشخیصدهنده رطوبت، یک سنسور دمای NTC (و یا ترمیستور ) و یک تراشه در بخش پشتی سنسور، تشکیل شدهاند .
این سنسورها جهت اندازهگیری رطوبت از یک قطعه رطوبتسنج که دو الکترود به همراه یک لایه نگهدارنده رطوبت در میان آنها، استفاده میکنند. به اینصورت که هنگامیکه رطوبت تغییر میکند، مقدار رسانایی لایه نگهدارنده و یا مقدار رسانایی میان این دو الکترود تغییر خواهد کرد. این تغییر مقدار مقاومت توسط تراشه نصب شده روی سنسور اندازهگیری میشود. همچنین این تراشه مقدار اندازهگیری شده را برای میکروکنترلر های دیگر، آماده خواندن میسازد.
از طرف دیگر، برای اندازهگیری دما این سنسورها از یک سنسور دمای NTC یا یک ترمیستور استفاده میکنند.
ترمیستور در واقع یک مقاومت متغیر است که مقدار مقاومتش متناسب با تغییر دما، تغییر میکند. این سنسورها با پختن مواد نیمههادی مانند سرامیک یا پلیمر و با هدف ایجاد تغییرات بزرگتر در مقاومت فقط با تغییرات جزئی در دما ساخته میشوند. عبارت NTC به معنی «ضریب دمایی منفی» است. به این معنا که مقدار مقاومت با افزایش دما، کاهش مییابد.
شماتیک مدار
سنسورهای DHTxx چهار پین دارند. تغذیه Vcc، زمین GND، پین دادهها و یک پین استفاده نشده که به جایی متصل نمیشود. جهت نگه داشتن پایه دادهها در حالت فعال سیگنال و همچنین فعالسازی ارتباط بین سنسور و برد آردوینو، از یک مقاومت بالاکش با اندازهی 5 تا 10 کیلو اهم استفاده شده است.
برخی از نسخههای این سنسورها همراه یک برد جانبی که داخل آن مقاومت بالاکش نیز تعبیه شده است، عرضه میشوند. این سنسورها 3 پین دارند.
این سنسورهای DHTxx پروتکل تکسیم منحصر به فردی برای انتقال داده استفاده میکنند. این پروتکل نیازمند زمانبندی و نمودارهای زمانی بسیار دقیقی جهت دریافت دادهها از سنسورها میباشند که آنها را از دیتاشیت سنسورها بدست میآورند. هرچند نیاز نیست که ما نگران نودارهای مربوط به زمانبندیها باشیم زیرا از کتابخانه DHT استفاده میکنیم که تمام نیاز مارا برطرف میکند.
کد اصلی
در ابتدا باید کتابخانه DHT را اضافه کنیم که در وبسایت رسمی آردوینو موجود است. سپس شماره پینی که سنسور DHT ما به آن متصل است را تعریف کرده و یک شئ (object ) برای DHT میسازیم.
در بخش تنظیمات در ابتدا باید ارتباط سریال را معرفی نماییم. زیرا برای نمایش نتایج از نمایشگر سریال استفاده خواهیم کرد. با استفاده از تابع ()read22 دادهها را از سنسور میخوانیم و مقادیر دما و رطوبت را به ترتیب در متغیرهای t و h جایگذاری میکنیم. اگر از سنسور DHT11 استفاده میکنید باید از تابع ()read11 جهت خواندن دادههای سنسور استفاده نمایید و در آخر مقدار متغیرهای دما و رطوبت روی نمایشگر سریال نشان داده میشوند.
/* DHT11/ DHT22 Sensor Temperature and Humidity Tutorial * Program made by Dejan Nedelkovski, * www.HowToMechatronics.com */ /* * You can find the DHT Library from Arduino official website * https://playground.arduino.cc/Main/DHTLib */ #include <dht.h> #define dataPin 8 // Defines pin number to which the sensor is connected dht DHT; // Creats a DHT object void setup() { Serial.begin(9600); } void loop() { int readData = DHT.read22(dataPin); // Reads the data from the sensor float t = DHT.temperature; // Gets the values of the temperature float h = DHT.humidity; // Gets the values of the humidity // Printing the results on the serial monitor Serial.print("Temperature = "); Serial.print(t); Serial.print(" *C "); Serial.print(" Humidity = "); Serial.print(h); Serial.println(" % "); delay(2000); // Delays 2 secods, as the DHT22 sampling rate is 0.5Hz }
پس از اینکه این کد را روی برد آردوینو بارگزاری کردیم، نتایج دما و رطوبت خوانده شده توسط سنسور روی نمایشگر سریال قابل مشاهده است .
علاوه بر این، در مثال دیگری همین کار را با یک LCD انجام دادهایم . به اینصورت که نتایج خروجی در نهایت روی LCD نمایش داده خواهند شد.
/* DHT11/ DHT22 Sensor Temperature and Humidity Tutorial * Program made by Dejan Nedelkovski, * www.HowToMechatronics.com */ /* * You can find the DHT Library from Arduino official website * https://playground.arduino.cc/Main/DHTLib */ #include <LiquidCrystal.h> // includes the LiquidCrystal Library #include <dht.h> #define dataPin 8 LiquidCrystal lcd(1, 2, 4, 5, 6, 7); // Creates an LCD object. Parameters: (rs, enable, d4, d5, d6, d7) dht DHT; void setup() { lcd.begin(16,2); // Initializes the interface to the LCD screen, and specifies the dimensions (width and height) of the display } void loop() { int readData = DHT.read22(dataPin); float t = DHT.temperature; float h = DHT.humidity; lcd.setCursor(0,0); // Sets the location at which subsequent text written to the LCD will be displayed lcd.print("Temp.: "); // Prints string "Temp." on the LCD lcd.print(t); // Prints the temperature value from the sensor lcd.print(" C"); lcd.setCursor(0,1); lcd.print("Humi.: "); lcd.print(h); lcd.print(" %"); delay(2000); }
- منبع: ترجمه از سایت howtomechatronics.com
اگر آموزش کار با سنسورهای دما و رطوبت DHT11 و DHT22 با استفاده از آردوینو براتون مفید واقع شده ما را نیز دعا کنید و اگر خواستین میتوانید از محتوای رایگان آموزشی حمایت مالی کنید. همچنین نظرات، پیشنهادات و درخواستهای خود را در کامنتها ⇓ بنویسید.
اگر این نوشته برایتان مفید بود لطفا کامنت بنویسید.