کتابخانه DHT.h محبوب و از تمامی سنسورهای دمای DHT پشتیبانی میکند. در اجرای پروژه های سطح مبتدی تا متوسط بر اساس رنج تشخیص سنسور کاربرد ویژه ای دارد. در این آموزش به معرفی کتابخانه DHT و زیر شاخه های مورد نیاز میپردازیم. کتابخانه ی DHT Sensor Library توسط Adafruit توسعه یافته است. به واسطه ی این کتابخانه میتوانید دما و محیط را توسط سنسورهای مرتبط در دو پارامتر جداگانه دریافت و بخوانید. در ادامه با مرجع تخصصی آردوینو به زبان فارسی ، دیجی اسپارک همراه باشید. برای درک صحیحی از کتابخانه بایستی روش فراخوانی و تحلیل کدها را بیاموزید که پیشنیاز آن زبان برنامه نویسی C, C++ است. کتابخانه ی DHT sensor Library برای سنسورهای زیر طراحی و توسعه داده شده است.
- DHT11
- DHT22
- AM2301
- AM2302
نصب کتابخانه DHT
برای نصب نرم افزار از منو آردوینو بر روی Sketch / Include libraries کلیک کرده و سپس Manage libraries را انتخاب کنید. در صفحه ی باز شده برای یافتن کتابخانه عبارت dht را فیلتر کنید.
مطابق عکس بالا شماره ی یک، کتابخانه ی DHT sensor library از Adafruit جدیدترین ورژن را نصب کنید. جهت وارد کردن کتابخانه به برنامه دو روش وجود دارد.
- تایپ کتابخانه و رعایت حروف بزرگ و کوچک
- وارد کردن از طریق منو نرم افزار Arduino IDE از مسیر Sketch / Include Library
#include "DHT.h"
تعریف مقادیر اولیه
قبل از شروع برنامه بایستی مقادیر اولیه برای سنسور را در برنامه تعریف کنیم.
- پین انتخاب شده برای اتصال سنسور به میکرو
- نوع سنسور
DHT dht(DHTPIN, DHTTYPE);
انتخاب پایه دیجیتال سنسور
#define DHTPIN 2 // Digital pin connected to the DHT sensor
انتخاب نوع سنسور
#define DHTTYPE DHT11 // DHT 11 #define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321 #define DHTTYPE DHT21 // DHT 21 (AM2301)
و در نهایت پس از مشخص شدن پایه ی دیتا و نوع سنسور مورد استفاه در کد برنامه به صورت زیر تعریف میشود.
DHT dht(DHTPIN, DHTTYPE);
معرفی ساختمان کتابخانه DHT
در بخش Setup برنامه توابع اصلی کتابخانه تعریف میشود. برای سری سنسورهای DHT جهت فعال سازی تعاریف قبلی از دستور زیر استفاده میشود.
dht.begin();
در صورتیکه بخواهید پیام فعال شدن سنسور را در سریال مانیتور ببینید، کافیست از سریال مانیتور استفاده کنید.
Serial.begin(9600); Serial.println(F("DHTxx test!"));
معرفی عملکرد توابع
به واسطه ی کتابخانه DHT.h دما و رطوبت را به صورت جداگانه تحلیل شده و دیتا مجزا نمایش داده میشود. برای نمایش دما از تابع readTemperature استفاده میشود. زمان خواندن دما از سنسور در حدود ۲۵۰ میلی ثانیه است و حتی ممکن است تا ۲ ثانیه هم زمان ببرد. به صورت پیشفرض دما بر حسب سلسیوس خوانده میشود.
readTemperature;
جهت فراخوانی تابع readTemperature بایستی به صورت زیر و دخیره در متغیر مرتبط در برنامه تعریف شود.
float t = dht.readTemperature(); // دراین کد منظور از t نام متغیر دلخواه برای ذخیره ی دیتای دریافتی از سنسور برای اندازه گیری دما است.
همچنین دما را به صورت مجزا بر حسب فارنهایتFahrenheit هم میتوانید محاسبه کنید.
float f = dht.readTemperature(true); // منظور از f تعریف یک متغیر دلخواه برای محاسبه دما وذخیره آن در f بر حسب فارنهایت است.
برای نمایش دما از تابع readHumidity استفاده میشود. زمان خواندن رطوبت از سنسور در حدود ۲۵۰ میلی ثانیه است و حتی ممکن است تا ۲ ثانیه هم زمان ببرد.
readHumidity;
جهت فراخوانی تابع readHumidity بایستی به صورت زیر و دخیره در متغیر مرتبط در برنامه تعریف شود.
float h = dht.readHumidity(); // منظور از h تعریف یک منغیر به صورت دلخواه برای ذخیره دیتای رطوبت از سنسور در متغیر است.
بررسی خطا و قطع شدن ارتباط
در کد برنامه در صورتیکه ارتباط سنسور با میکرو قطع شود، تمامی شرط های برنامه تست شده و سپس در صورتیکه هیچ کدام اجرا نشده باشد، پیام قطع ارتباط را برای ما نمایش میدهد.
if (isnan(h) || isnan(t) || isnan(f)) { Serial.println(F("Failed to read from DHT sensor!")); return;
محاسبهی Heat index
منظور از Heat index اندازه گیری دما و رطوبت بر اساس مقدار گرما و رطوبت دریافتی و حس شده از محیط است. این موارد در کتابخانه DHT.h به صورت زیر است.
computeHeatIndex برای رطوبت;
برای محاسبهی رطوبت از دستور computeHeatIndex استفاده میشود که به صورت زیر در برنامه میتوانید تعریف کنید.
// Compute heat index in Fahrenheit (the default) float hif = dht.computeHeatIndex(f, h);
computeHeatIndex برای دما;
برای محاسبهی دما از دستور computeHeatIndex استفاده میشود که به صورت زیر در برنامه میتوانید تعریف کنید.
// Compute heat index in Celsius (isFahreheit = false) 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("°F Heat index: ")); Serial.print(hic); Serial.print(F("°C ")); Serial.print(hif); Serial.println(F("°F"));
سنسورهای قابل استفاده با کتابخانه DHT
سنسور دما و رطوبت AM2301 – DHT21
ماژول دما رطوبت AM2302B – DHT22
سنسور دما و رطوبت DHT22 برند Asair
سنسور دما و رطوبت DHT11 Humidity Sensor
ماژول دما رطوبت Digital Temperature AM2302
جمع بندی لیدی پای
از مزایای سری سنسورهای خانواده DHT تنوع بالا و قیمت ارزان تا گران بسته به مصرف و دقت اندازه گیری در پروژه است. سنسور DHT11 ارزان ترین سنسور و فقط مناسب اندازه گیری دمای مثبت محیط است که به دو صورت سنسور و ماژول مصرف عمومی دارد. در مقابل سنسور دمای DHT22 با همان ظاهر اما دمای منفی و مثبت را اندازه گیری میکند. دو سنسور AM2301 و AM2302 با دقت بالاتر و برای استفاده در محیط هایی که دقت بالاتر و اما نیاز به هزینه کمتر در مقابل سنسورهای صنعتی است، کاربرد دارد و استفاده میشود. با استفاده از این آموزش میتوانید تمامی سنسورهای لینک شده را راه اندازی و تست اولیه را انجام دهید. در نظر داشته باشید در کد برنامه نوع سنسور استفاده شده مثل DHT11, DHT22, AM2301, AM2302 را انتخاب کنید.
چنانچه در مراحل ارایه شده در این آموزش سوالی داشتید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد.
در پایان نظرات و پیشنهادات خود را با ما درمیان بگذارید و با اشتراک گذاری این آموزش در شبکه های اجتماعی از وبسایت دیجی اسپارک حمایت کنید.
سلام
از این کتابخانه برای میکرو های سری nod mcu هم میتوان استفاده کرد؟
با سلام بله هیچ تفاوتی ندارد و این کتابخانه در لایبرری آردوینو قرار دارد.
با سلام و تشکر از مطلب خوبتون
به گمانم در بخش computeHeatIndex ; منظور محاسبه دمای حس شده مبتنی بر میزان رطوبت است که با عبارت “real feel” عموماً شناخته می شود. که به ترتیب برای دمای بر حسب فارنهایت f و بر حسب سلسیوس t محاسبه می شود.
سلام و تشکر
از اینکه نظر و تجربه ی خود را با دیگر کاربران به اشتراک میگذارید، صمیمانه سپاسگزارم.
سلام ممنون از مطالب خوبتون. من میخوام با یه سنسور Ky-013 دما رو برداشت کنم کتابخانه مربوط رو پیدا نمیکنم چه کتابخانه ای برای این سنسور آنالوگ باید استفاده کنم؟
با سلام
نیاز به کتابخانه ندارید. توسط دستورات آنالوگ از سنسور دیتا دریافت کنید.