راه اندازی سنسورهای DHT11 و DHT22 | آیا میخواهید یک گزارش از اقلیم گلخانه خود نگهداری کنید، یک سیستم کنترل مرطوب ساز بسازید، یا دادههای دما و رطوبت را برای یک پروژه ایستگاه هواشناسی ردیابی کنید؟ حسگر دما و رطوبت DHT11 یا DHT22 مناسب شما است!
این حسگرها نیازی به هیچ قطعه خارجی برای عملکرد ندارند. با تنها چند اتصال و کد کمی اردوینو، میتوانید فوراً شروع به اندازه گیری رطوبت نسبی و دمای محیط کنید.
آنها دادههای دما و رطوبت دقیق تا یک رقم اعشاری ارائه میدهند، که امتیاز مثبتی است. تنها معایب آنها این است که تنها هر یک یا دو ثانیه داده های جدید ارائه میدهند، اما برای قیمت و عملکرد، سخنی برای گفتن وجود ندارد.
راه اندازی سنسورهای DHT11 و DHT22
DHT11 در مقابل DHT22
این دو حسگر بیشترین استفاده را در سری DHTxx دارند. آنها به نظر میرسد کمی مشابه هستند و همان پینهای خروجی را دارند، اما مشخصات آنها متفاوت است.
از بین این دو، DHT22 گرانتر است و بدون شک مشخصات بهتری دارد. DHT22 میتواند دما را از -۴۰°C تا +۱۲۵°C با دقت ±۰.۵°C اندازه گیری کند، در حالی که DHT11 میتواند دما را از ۰°C تا ۵۰°C با دقت ±۲°C اندازه گیری کند. به علاوه، حسگر DHT22 میتواند رطوبت نسبی را از ۰ تا ۱۰۰٪ با دقت ۲-۵٪ اندازه گیری کند، در حالی که حسگر DHT11 تنها میتواند رطوبت نسبی را از ۲۰ تا ۸۰٪ با دقت ۵٪ اندازه گیری کند.
در اینجا مشخصات آنها هستند:
DHT11 | DHT22 | |
ولتاژ عملیاتی | ۳ to 5V | ۳ to 5V |
جریان عملیاتی حداکثر | ۲.۵mA max | ۲.۵mA max |
محدوده رطوبت | ۲۰-۸۰% / ۵% | ۰-۱۰۰% / ۲-۵% |
محدوده دما | ۰-۵۰°C / ± ۲°C | -۴۰ to 80°C / ± ۰.۵°C |
نرخ نمونه برداری | ۱Hz (reading every second) | ۰.۵Hz (reading every 2 seconds) |
اندازه | ۱۵.۵mm x 12mm x 5.5mm | ۱۵.۱mm x 25mm x 7.7mm |
مزیت | Ultra low cost | More Accurate |
راه اندازی سنسورهای DHT11 و DHT22
با وجود اینکه DHT22 دقیقتر و قابلیت عملکرد در یک دامنه گسترده تر از دما و رطوبت را دارد، سه حوزه وجود دارد که DHT11 به طور کامل از DHT22 پیشی میگیرد – قیمت ارزانتر، فضای کمتر و نرخ نمونهبرداری بالاتر دارد. DHT11 در هر ثانیه یکبار (یا نرخ نمونهبرداری ۱ هرتز) اطلاعات را برمیدارد، در حالی که DHT22 هر دو ثانیه یکبار اطلاعات را برمیدارد (یا نرخ نمونهبرداری ۰.۵ هرتز).
با این تفاوتها، ولتاژ عملکردی هر دو سنسور از ۳ تا ۵ ولت متغیر است، با حداکثر جریان ۲.۵ میلیآمپر (در زمان تبدیل). بهترین قسمت این است که سنسورهای DHT11 و DHT22 قابل تعویض هستند، به این معنی که اگر پروژه خود را با یکی از آنها ایجاد کردهاید، میتوانید به آسانی آن را جدا کرده و با دیگری جایگزین کنید. شاید کد شما بخواهد کمی تنظیم شود، اما سیمکشی باقی مانده است!
آموزشگاه رباتیک ایران
در داخل سنسور DHT
اگر قابلیت راهانداز سنسور را بردارید، درون آن شمایل NTC و یک اجزای حسگر رطوبت را خواهید یافت.
قطعه “حسگر رطوبت” دارای دو الکترود با یک زیرسطح نگهدارنده رطوبت (معمولاً نمک یا پلیمر پلاستیکی هادی) بین آنهاست. با افزایش رطوبت، زیرسطح بخار آب را جذب کرده و منجر به انتشار یونها و کاهش مقاومت بین دو الکترود میشود. این تغییر در مقاومت به نسبت رطوبت بوده و میتوان آن را اندازهگیری کرد تا رطوبت نسبی را تخمین زد.
سنسور شامل یک ترمیستور NTC برای اندازه گیری دما نیز است. ترمیستور یک نوع مقاومت دهنده است که مقاومت آن با دما تغییر میکند.
ترمیستورها به گونهای طراحی شدهاند که مقاومت آنها به طور چشمگیر با دما تغییر کند (حداقل ۱۰۰ اهم یا بیشتر در هر درجه)، عبارت”NTC” برای “ضریب منفی دما” است که به این معنی است که مقاومت کاهش مییابد هر چه دما بالاتر رود.
سنسور شامل یک تراشهی بستهبندی شده ۸-بیتی SOIC-14 نیز میشود. این تراشه، سیگنال آنالوگ را با استفاده از ضرایب کالیبراسیون ذخیرهشده اندازهگیری و پردازش میکند، سیگنال آنالوگ را به دیجیتال تبدیل میکند و یک سیگنال دیجیتال شامل دما و رطوبت را خروجی میدهد.
پینهای DHT11 و DHT22
اتصال سنسورهای DHT11 و DHT22 نیز نسبتاً ساده است. آنها چهار پین دارند:
پین VCC تغذیه برق را به حسگر ارائه میدهد. با وجود اینکه ولتاژ تامین برق از ۳.۳ ولت تا ۵.۵ ولت متغیر است، تامین برق ۵ ولت توصیه میشود. با منبع تغذیه ۵ ولت، حسگر میتواند تا ۲۰ متر دور قرار گیرد. با ولتاژ تامین ۳.۳ ولت، حسگر میتواند تا ۱ متر دور قرار گیرد؛ در غیر این صورت، کاهش ولتاژ خط باعث ایجاد خطاهای اندازهگیری میشود.
پین داده برای ارتباط بین حسگر و میکروکنترلر استفاده میشود.
NC به پین های اتصال ندارد.
GND پین زمین است.
راه اندازی سنسورهای DHT11 و DHT22
اتصال سنسورهای DHT11 و DHT22 به یک آردوینو
حالا وقتشه که سنسور رو به آردوینو وصل کنیم!
اتصال سنسورهای DHT به آردوینو خیلی راحته. پینهایشون با pitch 0.1 اینچی هستند که به راحتی میتونند به هر بردبندی وصل بشن. پین VCC رو به ۵ ولت آردوینو و پین GND رو به زمین وصل کن. در نهایت، پین دیتا رو به پین دیجیتال #۸ وصل کن.
برای اطمینان از ارتباط صحیح بین سنسور و میکروکنترلر، باید همچنین یک مقاومت pull-up 10K بین خط دیتا و VCC اضافه کنی (تا سیگنال روی حالت HIGH باقی بمونه). اگر یک برد breakout برای سنسور دارید، نیازی به اضافه کردن یک مقاومت pull-up خارجی ندارید، زیرا از قبل یکی داره.
حالا آمادهای برای آپلود کد و اجرای آن هستی.
نصب کتابخانه
سنسورهای DHTxx پروتکل انتقال داده تک سیمی اختصاصی خود را دارند. این پروتکل به زمانبندی دقیق نیاز دارد. اما ما نیازی به نگرانی زیاد از این مورد نداریم، چون ما از کتابخانه DHTlib استفاده خواهیم کرد که تقریبا همه چیز را انجام میدهد.
برای نصب کتابخانه، به مسیر Sketch > Include Library > Manage Libraries… بروید و منتظر بمانید تا مدیر کتابخانه فهرست کتابخانههای نصب شده را بروزرسانی و دانلود کند.
پس از وارد کردن ‘dhtlib’ در جستجوی خود، فیلتر کنید. تنها باید یک مورد وجود داشته باشد. بر روی آن کلیک کنید و سپس انتخاب ‘نصب’ را برگزینید.
آموزشگاه رباتیک و الکترونیک ایران
مثال ۱ – نمایش خواندن در مانیتور سریال
بعد از نصب کتابخانه، این اسکچ را در محیط Arduino IDE کپی و پیست کنید. اسکچ آزمایشی زیر مقدار دما و رطوبت نسبی را در مانیتور سریال چاپ میکند. این اسکچ را امتحان کنید، و بعد به جزییات بیشتر آن میپردازیم.
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ ۱۵ ۱۶ ۱۷ ۱۸ ۱۹ ۲۰ ۲۱ ۲۲ ۲۳ ۲۴ ۲۵ ۲۶ ۲۷ ۲۸ ۲۹ ۳۰ ۳۱ ۳۲ ۳۳ ۳۴ |
#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(۹۶۰۰); } void loop() { //Uncomment whatever type you're using! int readData = DHT.read22(dataPin); // DHT22/AM2302 //int readData = DHT.read11(dataPin); // DHT11 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(" "); Serial.print((char)۱۷۶);//shows degrees character Serial.print("C | "); Serial.print((t * ۹.۰) / ۵.۰ + ۳۲.۰);//print the temperature in Fahrenheit Serial.print(" "); Serial.print((char)۱۷۶);//shows degrees character Serial.println("F "); Serial.print("Humidity = "); Serial.print(h); Serial.println(" % "); Serial.println(""); delay(۲۰۰۰); // Delays 2 secods } |
پس از آپلود کردن نقشه، باید خروجی زیر را در مانیتور سریال مشاهده کنید.
توضیح کد:
ابتدا کتابخانه DHT اضافه کنید. پس از آن، شماره پین آردوینو که پین داده سنسور ما به آن وصل شده است، مشخص میشود و یک شی DHT ایجاد میشود.
۱ ۲ ۳ |
#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(۹۶۰۰); } |
در حلقه، ما از تابع read22(dataPin) برای خواندن DHT22 استفاده می کنیم. این تابع با گرفتن شماره پین دیتای سنسور به عنوان پارامتر عمل می کند. هنگام کار با DHT11، شما باید از تابع read11() استفاده کنید؛ برای انجام این کار، تنها کافی است خط دوم را غیرفعال کنید.
۱ ۲ ۳ |
//Uncomment whatever type you're using! int readData = DHT.read22(dataPin); // DHT22/AM2302 //int readData = DHT.read11(dataPin); // DHT11 |
اکنون میتوانیم ارزشهای رطوبت و دما را با دسترسی به خصوصیتهای شیء DHT با استفاده از نمایش نقطه دسترسی دهیم.
۱ ۲ |
float t = DHT.temperature; // Gets the values of the temperature float h = DHT.humidity; // Gets the values of the humidity |
شیئ DHT دما را به درجه سلسیوس (°C) برمیگرداند. این راحت است که آن را به فارنهایت (°F) با استفاده از فرمول زیر تبدیل کنید:
T(°F) = T(°C) × ۹/۵ + ۳۲
۱ ۲ |
//print the temperature in Fahrenheit Serial.print((t * ۹.۰) / ۵.۰ + ۳۲.۰); |
در اینجا مثالی ارائه شده است که نشان دادن مقادیر خوانده شده بر روی نمایشگر مایع کریستالی ۱۶×۲ را نشان میدهد. اگر شما در حال ساخت یک دستگاه نگهدارنده یا یک پروژه مشابه هستید، به جای یک مانیتور سریال برای نمایش دما و رطوبت فعلی، نیاز به یک نمایشگر کاراکتری LCD 16×۲ دارید. بنابراین، در این مثال، ما همچنین نمایشگر LCD را به آردوینو به علاوه سنسورهای DHT11 و DHT22 متصل خواهیم کرد.
سیم کشی:
پس از آن، ال سی دی را به شکل زیر وصل کنید.
کد آردوینو:
کد زیر دما و رطوبت نسبی را بر روی نمایشگر متنی ۱۶×۲ نمایش میدهد. این کد مشابه کد قبلی است، به جز اینکه مقادیر بر روی نمایشگر چاپ میشود.
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ ۱۵ ۱۶ ۱۷ ۱۸ ۱۹ ۲۰ ۲۱ ۲۲ ۲۳ ۲۴ ۲۵ ۲۶ ۲۷ ۲۸ ۲۹ ۳۰ ۳۱ ۳۲ ۳۳ ۳۴ ۳۵ ۳۶ ۳۷ ۳۸ ۳۹ ۴۰ ۴۱ ۴۲ ۴۳ ۴۴ ۴۵ |
#include <LiquidCrystal.h> // includes the LiquidCrystal Library #include <dht.h> #define dataPin 8 LiquidCrystal lcd(۱۲, ۱۱, ۵, ۴, ۳, ۲); // Creates an LCD object. Parameters: (rs, enable, d4, d5, d6, d7) dht DHT; bool showcelciusorfarenheit = false; void setup() { lcd.begin(۱۶,۲); // 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(۰,۰); // Sets the location at which subsequent text written to the LCD will be displayed lcd.print("Temp.: "); // Prints string "Temp." on the LCD //Print temperature value in Celcius and Fahrenheit every alternate cycle if(showcelciusorfarenheit) { lcd.print(t); // Prints the temperature value from the sensor lcd.print(" "); lcd.print((char)۲۲۳);//shows degrees character lcd.print("C"); showcelciusorfarenheit = false; } else { lcd.print((t * ۹.۰) / ۵.۰ + ۳۲.۰); // print the temperature in Fahrenheit lcd.print(" "); lcd.print((char)۲۲۳);//shows degrees character lcd.print("F"); showcelciusorfarenheit = true; } lcd.setCursor(۰,۱); lcd.print("Humi.: "); lcd.print(h); lcd.print(" %"); delay(۵۰۰۰); } |
شعبه بابل: پل کارگر به سمت کشوری، روبروی ماکروویو، جنب فروشگاه جانبو
شعبه ساری: خیابان مهدیه، نبش بهمن شرقی