در این مقاله قصد داریم نحوه استفاده از سنسورهای محبوب دما و رطوبت DHT11 و DHT22 با آردوینو را آموزش دهیم. نحوه عملکرد و مشخصات این سنسور را توضیح خواهیم داد سپس یک مثال از پروژه آردوینو را قرار می دهیم که شما با تغییرات مد نظرتان می توانید به عنوان پروژه خودتان استفاده کنید.
برای آموزش های بیشتر راجع به دیگر سنسورهای پرکاربرد به مرکز جامع آموزش الکترونیک مراجعه کنید.
معرفی سنسور های DHT11 و DHT22
همانطور که تا به الان متوجه شدید از این سنسور یا ماژول برای اندازه گیری دما و رطوبت نسبی استفاده می شود. جالب است بدانید این سنسورها از محبوبیت خاصی بین مخترعان و علاقه مندان به الکترونیک برخوردار هستند.
سنسور DHT11 دارای یک چیپ (تراشه) هستند که مقدار آنالوگ را به دیجیتال تبدیل کرده و سیگنال دیجیتال را همراه با پارامترهای دما و رطوبت ارائه می دهد، که باعث می شود استفاده ازاین سنسور در کنار هر میکروکنترلری برای شما آسان تر شود.
مقایسه سنسور DHT11 و DHT22
این دو ماژول بسیار مشابه هم هستند، تفاوت آنها در برخی ویژگی های خاص می باشد. در جدول زیر مهم ترین ویژگی های این دو سنسور DHT11 و DHT22 با هم مقایسه شده اما شما می توانید برای اطلاع بیشتر از مشخصات آن ها به دیتاشیت هر یک مراجعه نمایید.
جهت تهیه قطعات الکترونیک با قیمت مناسب می توانید به فروشگاه اینترنتی ایوینک مراجعه نمایید.
- نتایج حاصل از DHT22 به دلیل بازه گسترده ای که از اندازه دما و رطوبت ارائه می دهد،به نسبت بهتر می باشد همچنین رزولوشن اندازه گیری 10 برابر بهتر از DHT11 می باشد .اگرچه از نظر هزینه گران تر بوده و زمان بیشتری جهت ارایه نتیجه نیاز دارند.( 2 ثانیه )
- سنسور DHT11 بازه کمتری را ارائه می دهد و دقت به نسبت کمتری دارد اما شما می توانید هر ثانیه داده های خروجی را بخوانید و قیمت به نسبت ارزان تری دارد.
پایه های سنسور DHT
همانطور که در شکل زیر مشاهده می کنید؛ DHT sensor داری 4 پین می باشد. اگر شما سنسور DHT را در یک برد توسعه خریداری کرده اید یا در اختیار دارید، تنها با سه پایه و یک مقاوت pull-up داخلی روی پین 2 اتصال انجام می شود.
نحوه اتصال پین ها را به صورت شماره گذاری شده برای شما در متن ذیل قرار دادیم و شما همانطور که سنسور DHT11 و DHT22 را مقابلتان دارید از شماره 1 از سمت چپ به راست اتصال را شروع کنید.
از کجا ماژول DHT را تهیه کنیم ؟
جهت تهیه تمام قطعات الکترونیک با قیمت مناسب از جمله خرید سنسور DHT11 و خرید سنسور DHT22 میتوانید از فروشگاه الکترونیک ایوینک استفاده کنید.
DHT11 با برد Arduino
در این بخش از آموزش، یک پروژه ساده و کلیدی را با آردوینو پیش می بریم سپس دما و رطوبت را روی سریال مانیتور می خوانیم.
قطعات مورد نیاز
برای تکیمل آموخته هایتان در این مقاله و شروع پروژه تان به قطعات زیر نیاز دارید:
- Arduino UNO / آردوینو uno
- DHT11/ ماژول دما و رطوبت DHT11
- Breadboard
- 4.7k Ohm Resistor /مقاومت 4.7 کیلو اهم
- جامپر وایر یا سیم جامپر
شماتیک مدار
در شمای مدار زیر شما اتصال سنسور DHT11 (یا DHT22) به برد Arduino را ملاحظه می کنید.
اتصال سنسور DHT به Arduino-uno
اتصال این سنسور به برد آردوینو بسیار ساده است.🙂
نصب libraries
برای نصب سنسور DHT از کتابخانه DHT موجود در گیت هاب DHT library استفاده می کنیم. در ادامه مراحل نصب را به ترتیب برایتان شرح خواهیم داد:
- نرم افزار Arduino IDE را باز کنید به منوی Sketch بروید سپس به زیر منوی Include Library پس از آن به Manage Libraries وارد شوید،عبارت “DHT” را در باکس جستجو تایپ کنید و نصب کتابخانه DHT را از توسعه دهنده Adafruit شروع کنید.
- پس از نصب عبارت “Adafruit Unified Sensor” را سرچ کنید و صفحه مقابلتان را اسکرول کرده تا کتابخانه را پیدا کنید.
در مرحله آخر Arduino IDE خود را ببندید و دوباره بازکنید.
شرح کد
پس از نصب library، شما میتوانید کد پروژه را آپلود کنید.
در Arduino IDE به File بروید، پس از آن به زیر منوی examples و پس از آن به DHT Sensor library و سپس به DHTtester بروید.
پس از بارگذاری کد زیر، دما و رطوبت در سریال مانیتور نمایش داده می شود.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
// Example testing sketch for various DHT humidity/temperature sensors // Written by ladyada, public domain</p> <p style="text-align: center;">#include "DHT.h"</p> <p style="text-align: center;">#define DHTPIN 2 // what pin we're connected to</p> <p style="text-align: center;">// Uncomment whatever type you're using! #define DHTTYPE DHT11 // DHT 11 //#define DHTTYPE DHT22 // DHT 22 (AM2302) //#define DHTTYPE DHT21 // DHT 21 (AM2301)</p> <p style="text-align: center;">// Initialize DHT sensor for normal 16mhz Arduino DHT dht(DHTPIN, DHTTYPE);</p> <p style="text-align: center;">void setup() { Serial.begin(9600); Serial.println("DHTxx test!");</p> <p style="text-align: center;">dht.begin(); }</p> <p style="text-align: center;">void loop() { // Wait a few seconds between measurements. delay(2000);</p> <p style="text-align: center;">// Reading temperature or humidity takes about 250 milliseconds! // Sensor readings may also be up to 2 seconds 'old' //(its a very slow sensor) float h = dht.readHumidity(); // Read temperature as Celsius float t = dht.readTemperature(); // Read temperature as Fahrenheit float f = dht.readTemperature(true);</p> <p style="text-align: center;">// Check if any reads failed and exit early (to try again). if (isnan(h) || isnan(t) || isnan(f)) { Serial.println("Failed to read from DHT sensor!"); return; }</p> <p style="text-align: center;">// Compute heat index // Must send in temp in Fahrenheit! float hi = dht.computeHeatIndex(f, h);</p> <p style="text-align: center;">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(hi); Serial.println(" *F"); } |
شرح کد
کتابخانه DHT را فراخوانی می کنیم:
1 |
#include "DHT.h" |
سپس شما پایه ای که سنسور DHT به آن متصل است، را تعریف کنید در اینجا به پین 2 دیجیتال وصل شده است :
1 |
#define DHTPIN 2 // what digital pin we're connected to |
شما باید نوع سنسوری را که استفاده می کنید تعریف کنید. به عنوان مثال در این پروژه ما از سنسور DHT11 استفاده کردیم:
1 |
#define DHTTYPE DHT11 // DHT 11 |
اگر شما از مدل دیگری از سنسورهای DHT استفاده می کنید، باید خط دستوری قبلی را کامنت و دستور زیر را uncomment کنید:
1 2 |
//#define DHTTYPE DHT22 // DHT 22 (AM2302) //#define DHTTYPE DHT21 // DHT 21 (AM2301) |
شی DHT که dht نام دارد، با دستور زیر مقدار دهی می شود:(تعریف پین و مدل سنسور را در مراحل فوق انجام داده اید.)
1 |
DHT dht(DHTPIN, DHTTYPE); |
در ()setup, مانیتور سریال را با بادریت 9600 مقدار دهی اولیه می کنیم:
1 2 |
erial.begin(9600); Serial.println("DHTxx test!"); |
برای شروع کار سنسور DHT از متد ()begin. استفاده کنید:
1 |
dht.begin(); |
در ()loop, با دو ثانبه تاخیر مواجه می شوید. به دلیل اینکه سنسور نیاز به زمان برای برای خواندن مقادیر را دارد!که ماکزیمم 2 ثانیه برای DHT22 و 1 ثانیه برای سنسور DHT11 است .
1 |
delay(2000); |
خواندن دما و رطوبت بسیار کار ساده ای است. از متد ()readhumidity در شی dht استفاده می کنیم.اینجا ما humidity را در متغیر h ذخیره کرده ایم. متد ()readhumidity از نوع float می باشد:
1 |
float h = dht.readHumidity(); |
به طور مشابه برای خواندن دما ()readTemperature دستور را وارد کنید:
1 |
float t = dht.readTemperature(); |
اگر می خواهید دما برحسب درجه فارنهایت برای شما نمایش داده شود. دستور زیر را وارد کنید:
1 |
float f = dht.readTemperature(true); |
در این کتابخانه متدهایی برای محاسبه دما بر حسب درجه فارنهایت و سلسیوس وجود دارد:
1 2 3 4 |
// Compute heat index in Fahrenheit (the default) float hif = dht.computeHeatIndex(f, h); // Compute heat index in Celsius (isFahreheit = false) float hic = dht.computeHeatIndex(t, h, false); |
در آخر, نتایج در مانیتور سریال نمایش داده می شود:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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"); |
نمایش
بعد از آپلود کد در آردوینو، سریال مانیتور با بادریت 9600 را باز کنید. اگر این آموزش را کامل پیش گرفته باشید اکنون در سریال مانیتور Arduino IDE هر 2 ثانیه داده های دما و رطوبت را مشاهده می کنید.
رفع خطا
اگر شما تا این مرحله از پروژه پیش آمدید ولی برای دریافت اطلاعات دما و رطوبت از سنسورهای DHT11 و DHT22 با خطا در مانیتور سریال مواجه شدید، در ادامه آموزش نحوه فعال سازی ماژول را فرا خواهید گرفت.
“Failed to read from DHT sesnsor” یا Nan readings
اگر در کار با سنسور DHT مطابق شکل زیر با با خطای “Failed to read from DHT sensor!” یا “Nan” مواجه شدید.یکی از موارد زیر دلیل خطای شما است.سعی کنید هر کدام از دلایل زیر را در روند خود بررسی کنید،تا عیب پیدا و رفع شود:
wiring اتصال سیم های پایه : وقتی شما در حال ساختن یک پروژه الکترونیکی هستید، بدون شک نیاز هست که سیم و اتصالات پین (محل اتصال) را دوباره مورد بررسی قرار دهید.بعد از چک کردن و تست کردن مطعمن شوید مدار شما کاملاً وصل است! اگر همچنان خطا رفع نشد،به سراغ موارد بعدی رفع عیب بروید.
power (منبع تغذیه) : عملکرد سنسور DHT در بازه 3 تا 5.5 ولت برای DHT11 و 3 تا 6 ولت برای DHT22 است. اگر منبع تغذیه سنسور شما روی 3.3 ولت تنظیم شده باشد. در برخی موارد با تغییر منبع تغذیه به 5V مشکل رفع خواهد شد.
مشکل در کابل USB : در برخی مواقع برای تامین ولتاژ آردوینو اینکه فقط مستقیم به یک پورت PC USB وصل باشد کافی نیست! باید سعی کنید از یک منبع تغذیه جداگانه استفاده کنید، که این می تواند جایگیزن مناسبی برای کابل USB باشد. داشتن یک پورت USB که انرژی کافی را تولید می کند و یا استفاده از یک کابل USB خوب در اغلب مواقع مشکل شما را رفع می کند.
منبع تغذیه جداگانه : با توجه به پاراگراف قبلی آردوینو شما ممکن است انرژی کافی را برای خواندن سنسور DHT تامین نکند. در بعضی موارد شما باید آردوینو را با منبع تغذیه ای تامین کنید که جریان الکتریکی بیشتری را تولید کند.
نوع سنسور : در کدنویسی دوباره uncommented/commented را چک کنید،که سنسور را درست وارد کرده باشید. در این پروژه ما از DHT22 استفاده کردیم.
1 2 3 |
//#define DHTTYPE DHT11 // DHT 11 #define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321 //#define DHTTYPE DHT21 // DHT 21 (AM2301) |
سرعت نمایش نمونه داده ها ( نرخ نمونه برداری): سنسور DHT کُند داده ها را میخواند! ( بیش از 2 ثانیه طول بکشد.) در بعضی از موارد بالا بردن، زمان ارسال درخواست مقدار سنسور یا سرعت ریدینگ ( بخش delay ) می تواند مشکل شما را حل کند.
سنسور شما شکسته یا سوخته : متاسفانه ممکن است چیپ سنسورها به نظر کاملاً سالم بیایند اما در بعضی موارد سوخته یا شکسته اند. در نتیجه درسته که شما کد نویسی و مدار خود را به درستی انجام داده اید اما خواندن داده های دما و رطوبت به درستی انجام نخواهد شد! توصیه می شود برای رفع عیب سنسور خود یک ماژول جدید و سالم را امتحان کنید، که در اغلب موارد می تواند مشکل شما را رفع کند.
بادریت شما نادرست بوده و یا در آپلود کد موفق نبودید : اگر شما هیچ داده ای را از سنسور خود در سریال مانیتور Arduino IDE مشاهده نمی کنید، باد ریت، پورت COM یا فرآیند آپلود را دوباره چک کنید.
♦ تجربه پروژه های ساخته شده به ما ثابت کرده که در موارد مشابه ای که با DHT داشتیم،اجرای یکی از موارد فوق در پروژه تان مشکل شما را حل خواهد کرد.
خطای دردسر ساز! (Fatal error: Adafruit_Sensor.h: No such file or directory )
این خطا اغلب زمانی پیش می آید که می خواهید کد را آپلود کنید!
اگر شما با این خطا مواجه شدید، دستور زیر را اجرا کنید:
شما باید کتابخانه Adafruit Unified Sensor را در Arduino IDE نصب کنید. و عبارت “Adafruit Unified Sensor“ را سرچ کرده سپس library را پیدا و نصب کنید.
بعد از مراحل فوق و تکمیل نصب، Arduino IDE را ری استارت کنید. اکنون کد کامپایل شده و پیغام خطا از بین رفته است.
جمع بندی مطالب فوق
استفاده ازسنسور DHT11/DHT22 یک روش آسان و به صرفه برای اندازه گیری دما و رطوبت است که اندازه گیری های خود را با آردوینو انجام می دهد . وایرینگ آن (اتصال سیم ) بسیار ساده بوده و فقط باید پایه های دیتا DHT را به پایه های یک برد Arduino وصل کنید.
بعد از نصب کتابخانه DHT کدنویسی این سنسورها بسیار ساده تر صورت می گیرد. با اجرای دو متد ()readTemperature و ()readHumidity، دما و رطوبت به دست می آید.
امیدواریم که این آموزش برای شما مفید واقع شده باشد.
آیا نیاز به آموزش بیشتر جهت راه اندازی DHT11/DHT22 دارید؟ به آدرس ewink.ir/wiki مراجعه کنید.
جهت آموزش و راهنمایی های تکمیلی راجع به برد Arduino به لینک های زیر مراجعه کنید:
در قسمت نظرات ایده ها و مطالب پیشنهادی خود را با ما به اشتراک بگذارید.