به پروژه آردوینو بعدی خود این توانایی را بدهید که دنیای اطراف خود را با حسگر دیجیتال ارزان قیمت و دما و رطوبت DHT11 یا DHT22 از AOSONG حس کند.
این سنسورها از پیش کالیبره شده اند و به اجزای اضافی نیاز ندارند، بنابراین می توانید بلافاصله اندازه گیری رطوبت و دما را شروع کنید.
یکی از بزرگترین ویژگی هایی که آنها ارائه می دهند این است که دما و رطوبت هر دو به یک دهم اندازه گیری می شوند. یعنی به یک رقم اعشار. تنها نقطه ضعف این سنسور این است که می توانید هر یا دو ثانیه یک بار اطلاعات جدیدی از آن دریافت کنید. اما با توجه به عملکرد و قیمت آن نمی توان شکایت کرد.
DHT11 در مقابل DHT22/AM2302
ما دو نسخه از سری سنسورهای DHTxx داریم. آنها کمی شبیه به هم هستند و پین اوت یکسانی دارند، اما ویژگی های متفاوتی دارند. در اینجا جزئیات آمده است:
DHT22 نسخه گرانتر است که مشخصاً مشخصات بهتری دارد. محدوده اندازه گیری دمای آن از -40 درجه سانتی گراد تا +125 درجه سانتی گراد با دقت +0.5 درجه است، در حالی که محدوده دمایی DHT11 از 0 درجه سانتی گراد تا 50 درجه سانتی گراد با دقت +-2 درجه است. همچنین سنسور DHT22 محدوده اندازه گیری رطوبت بهتری از 0 تا 100 درصد با دقت 2-5 درصد دارد، در حالی که محدوده رطوبت DHT11 از 20 تا 80 درصد با دقت 5 درصد است.
DHT11 | DHT22 | |
ولتاژ بهره برداری | 3 تا 5 ولت | 3 تا 5 ولت |
حداکثر جریان عملیاتی | حداکثر 2.5 میلی آمپر | حداکثر 2.5 میلی آمپر |
محدوده رطوبت | 20-80٪ / 5٪ | 0-100٪ / 2-5٪ |
محدوده دما | 0-50 درجه سانتی گراد / ± 2 درجه سانتی گراد | -40 تا 80 درجه سانتی گراد / 0.5 ± درجه سانتی گراد |
نرخ نمونهبرداری | 1 هرتز (خواندن هر ثانیه) | 0.5 هرتز (خواندن هر 2 ثانیه) |
اندازه بدن | 15.5mm x 12mm x 5.5mm | 15.1mm x 25mm x 7.7mm |
مزیت – فایده – سود – منفعت | هزینه فوق العاده کم | دقیق تر |
اگرچه DHT22 دقیق تر، دقیق تر است و در محدوده بزرگتری از دما و رطوبت کار می کند. سه چیز وجود دارد که DHT11 در جهنم DHT22 را شکست می دهد. ارزانتر است، اندازه کوچکتر است و نرخ نمونه برداری بالاتری دارد. نرخ نمونه برداری از DHT11 1 هرتز است، یعنی یک خواندن در هر ثانیه، در حالی که نرخ نمونه برداری از DHT22 0.5 هرتز است، یعنی یک خواندن در هر دو ثانیه.
با این حال، ولتاژ کاری هر دو سنسور از 3 تا 5 ولت است، در حالی که حداکثر جریان مورد استفاده در هنگام تبدیل (در هنگام درخواست داده) 2.5 میلی آمپر است. و بهترین چیز این است که سنسورهای DHT11 و DHT22 “قابل تعویض” هستند – به این معنی که اگر پروژه خود را با یکی بسازید، فقط می توانید آن را جدا کرده و از دیگری استفاده کنید. کد شما ممکن است کمی تنظیم شود اما حداقل سیم کشی یکسان است!
بررسی اجمالی سخت افزار
حالا بریم سراغ مطالب جالب. بیایید هر دو سنسور DHT11 و DHT22 را از بین ببریم و ببینیم داخل آن چیست.
بدنه از دو قسمت تشکیل شده است، بنابراین برای ورود به داخل آن فقط باید یک چاقوی تیز تهیه کنید و کیس را از هم جدا کنید. در داخل کیس، در سمت حسگر، یک جزء حسگر رطوبت به همراه یک سنسور دمای NTC (یا ترمیستور) وجود دارد.
از جزء حسگر رطوبت استفاده می شود، البته برای اندازه گیری رطوبت، که دارای دو الکترود با بستر نگهدارنده رطوبت (معمولاً یک پلیمر نمکی یا پلاستیکی رسانا) بین آنها قرار گرفته است. یون ها توسط بستر آزاد می شوند زیرا بخار آب توسط آن جذب می شود که به نوبه خود باعث افزایش رسانایی بین الکترودها می شود. تغییر مقاومت بین دو الکترود متناسب با رطوبت نسبی است. رطوبت نسبی بیشتر باعث کاهش مقاومت بین الکترودها می شود، در حالی که رطوبت نسبی کمتر باعث افزایش مقاومت بین الکترودها می شود.
علاوه بر این، آنها از یک سنسور دمای NTC / ترمیستور برای اندازه گیری دما تشکیل شده اند. ترمیستور یک مقاومت حرارتی است – مقاومتی که مقاومت خود را با دما تغییر می دهد. از نظر فنی، همه مقاومت ها ترمیستور هستند – مقاومت آنها کمی با دما تغییر می کند – اما این تغییر معمولاً بسیار کوچک است و اندازه گیری آن دشوار است.
ترمیستورها طوری ساخته شده اند که مقاومت به شدت با دما تغییر می کند به طوری که می تواند 100 اهم یا بیشتر در هر درجه تغییر کند! عبارت NTC به معنای ضریب دمایی منفی است، به این معنی که با افزایش دما مقاومت کاهش می یابد.
در طرف دیگر، یک PCB کوچک با یک آی سی بسته بندی شده 8 بیتی SOIC-14 وجود دارد. این آی سی سیگنال آنالوگ را با ضرایب کالیبراسیون ذخیره شده اندازه گیری و پردازش می کند، تبدیل آنالوگ به دیجیتال را انجام می دهد و سیگنال دیجیتال را با دما و رطوبت خارج می کند.
DHT11 و DHT22 Pinout
اتصال سنسورهای DHT11 و DHT22 نسبتاً آسان است. آنها چهار پین دارند:
VCCپین برق سنسور را تامین می کند. اگرچه ولتاژ منبع تغذیه از 3.3 ولت تا 5.5 ولت متغیر است، منبع تغذیه 5 ولت توصیه می شود. در صورت برق 5 ولت می توانید سنسور را تا 20 متر نگه دارید. با این حال، با ولتاژ تغذیه 3.3 ولت، طول کابل نباید بیشتر از 1 متر باشد. در غیر این صورت، افت ولتاژ خط منجر به خطا در اندازه گیری می شود.
داده هاپین برای ارتباط بین سنسور و میکروکنترلر استفاده می شود.
NCمتصل نیست
GNDباید به زمین آردوینو متصل شود.
سیم کشی – اتصال DHT11 و DHT22 به Arduino UNO
اکنون که درک کاملی از نحوه عملکرد سنسورهای DHT داریم، میتوانیم آن را به آردوینو خود متصل کنیم!
خوشبختانه، اتصال سنسورهای DHT11، DHT22 به آردوینو امری بی اهمیت است. آنها دارای پین های نسبتاً بلند 0.1 اینچی هستند، بنابراین می توانید به راحتی آنها را به هر تخته نان وصل کنید. سنسور را با ولتاژ 5 ولت تغذیه کنید و زمین را به زمین وصل کنید. در نهایت، پین Data را به پین دیجیتال شماره 2 وصل کنید.
همچنین باید یک مقاومت کششی 10KΩ بین VCC و خط داده قرار دهیم تا برای برقراری ارتباط مناسب بین سنسور و MCU، آن را بالا نگه داریم. اگر به طور اتفاقی یک برد سنسور دارید، نیازی به اضافه کردن کشش خارجی ندارید. دارای یک مقاومت کششی داخلی است.
با این کار، اکنون آماده هستید تا مقداری کد را آپلود کنید و آن را فعال کنید.
کد آردوینو – چاپ مقادیر روی نمایشگر سریال
سنسورهای DHT11 و DHT22 پروتکل تک سیم خود را دارند که برای انتقال داده ها استفاده می شود. این پروتکل نیاز به زمان بندی دقیق دارد. خوشبختانه، لازم نیست زیاد نگران این موضوع باشیم، زیرا از کتابخانه DHT استفاده می کنیم که تقریباً از همه چیز مراقبت می کند.
ابتدا کتابخانه را دانلود کنید، با مراجعه به مخزن GitHub یا فقط روی این دکمه کلیک کنید تا فایل فشرده را دانلود کنید:
برای نصب آن، Arduino IDE را باز کنید، به Sketch > Include Library > Add .ZIP Library بروید و سپس فایل ZIP 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(9600);
}
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)176);//shows degrees character
Serial.print("C | ");
Serial.print((t * 9.0) / 5.0 + 32.0);//print the temperature in Fahrenheit
Serial.print(" ");
Serial.print((char)176);//shows degrees character
Serial.println("F ");
Serial.print("Humidity = ");
Serial.print(h);
Serial.println(" % ");
Serial.println("");
delay(2000); // Delays 2 secods
}
پس از آپلود طرح، یک پنجره سریال مانیتور را باز کنید تا خروجی آردوینو را ببینید.
توضیح کد:
طرح با گنجاندن کتابخانه DHT شروع می شود. در مرحله بعد، باید شماره پین آردوینو را که پین Data سنسور ما به آن متصل است، تعریف کنیم و یک شی 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(9600);
}
در تابع “حلقه”؛ ما از read22()
تابعی استفاده خواهیم کرد که داده ها را از DHT22 می خواند. شماره پین داده سنسور را به عنوان پارامتر می گیرد. اگر در حال سرهم کردن با DHT11 هستید، باید از read11()
تابع استفاده کنید. می توانید این کار را با حذف کامنت خط دوم انجام دهید.
//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
جسم DHT مقدار دما را بر حسب سانتیگراد (درجه سانتیگراد) برمی گرداند. با استفاده از یک فرمول ساده می توان آن را به فارنهایت (°F) تبدیل کرد:
T (°F) = T (°C) × 9/5 + 32
//print the temperature in Fahrenheit
Serial.print((t * 9.0) / 5.0 + 32.0);
کد آردوینو – DHT11 و DHT22 با LCD
گاهی اوقات به این فکر میکنید که میخواهید سطح دما و رطوبت را در انکوباتور DIY خود کنترل کنید. پس احتمالاً به جای نمایشگر سریال، به LCD کاراکتری 16×2 برای نمایش شرایط حاکم در انکوباتور خود نیاز خواهید داشت. بنابراین، در این مثال، ال سی دی را به همراه سنسورهای DHT11 و DHT22 به آردوینو متصل می کنیم.
در صورتی که با LCD های کاراکتری 16×2 آشنایی ندارید، مطالعه (حداقل اسکیمینگ) زیر آموزش را در نظر بگیرید.
در مرحله بعد، باید مطابق شکل زیر به LCD متصل شویم.
طرح زیر مقادیر دما و رطوبت نسبی را روی LCD کاراکتری 16×2 چاپ می کند. از همان کد استفاده می کند به جز اینکه ما مقادیر را روی LCD چاپ می کنیم.
#include <LiquidCrystal.h> // includes the LiquidCrystal Library
#include <dht.h>
#define dataPin 8
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Creates an LCD object. Parameters: (rs, enable, d4, d5, d6, d7)
dht DHT;
bool showcelciusorfarenheit = false;
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
//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)223);//shows degrees character
lcd.print("C");
showcelciusorfarenheit = false;
}
else
{
lcd.print((t * 9.0) / 5.0 + 32.0); // print the temperature in Fahrenheit
lcd.print(" ");
lcd.print((char)223);//shows degrees character
lcd.print("F");
showcelciusorfarenheit = true;
}
lcd.setCursor(0,1);
lcd.print("Humi.: ");
lcd.print(h);
lcd.print(" %");
delay(5000);
}
ترجمه از : https://lastminuteengineers.com/dht11-dht22-arduino-tutorial/
آخرین دیدگاهها