جدیترین مقالات

نحوه کار و رابط سنسورهای DHT11 DHT22 با آردوینو

به پروژه آردوینو بعدی خود این توانایی را بدهید که دنیای اطراف خود را با حسگر دیجیتال ارزان قیمت و دما و رطوبت 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 درصد است.

DHT22 Temperature Humidity Sensor Fritzing part Illustration 1 1
DHT11 Temperature Humidity Sensor Fritzing part Illustration 1 1
DHT11DHT22
ولتاژ بهره برداری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.5mm15.1mm x 25mm x 7.7mm
مزیت – فایده – سود – منفعتهزینه فوق العاده کمدقیق تر

اگرچه DHT22 دقیق تر، دقیق تر است و در محدوده بزرگتری از دما و رطوبت کار می کند. سه چیز وجود دارد که DHT11 در جهنم DHT22 را شکست می دهد. ارزانتر است، اندازه کوچکتر است و نرخ نمونه برداری بالاتری دارد. نرخ نمونه برداری از DHT11 1 هرتز است، یعنی یک خواندن در هر ثانیه، در حالی که نرخ نمونه برداری از DHT22 0.5 هرتز است، یعنی یک خواندن در هر دو ثانیه.

با این حال، ولتاژ کاری هر دو سنسور از 3 تا 5 ولت است، در حالی که حداکثر جریان مورد استفاده در هنگام تبدیل (در هنگام درخواست داده) 2.5 میلی آمپر است. و بهترین چیز این است که سنسورهای DHT11 و DHT22 “قابل تعویض” هستند – به این معنی که اگر پروژه خود را با یکی بسازید، فقط می توانید آن را جدا کرده و از دیگری استفاده کنید. کد شما ممکن است کمی تنظیم شود اما حداقل سیم کشی یکسان است!

بررسی اجمالی سخت افزار

حالا بریم سراغ مطالب جالب. بیایید هر دو سنسور DHT11 و DHT22 را از بین ببریم و ببینیم داخل آن چیست.

بدنه از دو قسمت تشکیل شده است، بنابراین برای ورود به داخل آن فقط باید یک چاقوی تیز تهیه کنید و کیس را از هم جدا کنید. در داخل کیس، در سمت حسگر، یک جزء حسگر رطوبت به همراه یک سنسور دمای NTC (یا ترمیستور) وجود دارد.

Inside DHT11 DHT22 AM2302 Temperature Humidity Sensor 1 1

از جزء حسگر رطوبت استفاده می شود، البته برای اندازه گیری رطوبت، که دارای دو الکترود با بستر نگهدارنده رطوبت (معمولاً یک پلیمر نمکی یا پلاستیکی رسانا) بین آنها قرار گرفته است. یون ها توسط بستر آزاد می شوند زیرا بخار آب توسط آن جذب می شود که به نوبه خود باعث افزایش رسانایی بین الکترودها می شود. تغییر مقاومت بین دو الکترود متناسب با رطوبت نسبی است. رطوبت نسبی بیشتر باعث کاهش مقاومت بین الکترودها می شود، در حالی که رطوبت نسبی کمتر باعث افزایش مقاومت بین الکترودها می شود.

Internal Structure of Humidity Sensor in DHT11 DHT22 1 1
ساختار داخلی سنسور رطوبت

علاوه بر این، آنها از یک سنسور دمای NTC / ترمیستور برای اندازه گیری دما تشکیل شده اند. ترمیستور یک مقاومت حرارتی است – مقاومتی که مقاومت خود را با دما تغییر می دهد. از نظر فنی، همه مقاومت ها ترمیستور هستند – مقاومت آنها کمی با دما تغییر می کند – اما این تغییر معمولاً بسیار کوچک است و اندازه گیری آن دشوار است.

ترمیستورها طوری ساخته شده اند که مقاومت به شدت با دما تغییر می کند به طوری که می تواند 100 اهم یا بیشتر در هر درجه تغییر کند! عبارت NTC به معنای ضریب دمایی منفی است، به این معنی که با افزایش دما مقاومت کاهش می یابد.

NTC Thermistor Temperature Resistance Characteristic Curve 1 1
ترمیستور NTC با منحنی مشخصه

در طرف دیگر، یک PCB کوچک با یک آی سی بسته بندی شده 8 بیتی SOIC-14 وجود دارد. این آی سی سیگنال آنالوگ را با ضرایب کالیبراسیون ذخیره شده اندازه گیری و پردازش می کند، تبدیل آنالوگ به دیجیتال را انجام می دهد و سیگنال دیجیتال را با دما و رطوبت خارج می کند.

DHT11 و DHT22 Pinout

اتصال سنسورهای DHT11 و DHT22 نسبتاً آسان است. آنها چهار پین دارند:

DHT11 DHT22 AM2302 Temperature Humidity Sensor Pinout 1 1

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، آن را بالا نگه داریم. اگر به طور اتفاقی یک برد سنسور دارید، نیازی به اضافه کردن کشش خارجی ندارید. دارای یک مقاومت کششی داخلی است.

A 1rduino Wiring Fritzing Connections with DHT11 1 1
سیم کشی DHT11 به آردوینو UNO
A 1rduino Wiring Fritzing Connections with DHT22 1 1
سیم کشی DHT22 به Arduino UNO

با این کار، اکنون آماده هستید تا مقداری کد را آپلود کنید و آن را فعال کنید.

کد آردوینو – چاپ مقادیر روی نمایشگر سریال

سنسورهای DHT11 و DHT22 پروتکل تک سیم خود را دارند که برای انتقال داده ها استفاده می شود. این پروتکل نیاز به زمان بندی دقیق دارد. خوشبختانه، لازم نیست زیاد نگران این موضوع باشیم، زیرا از کتابخانه DHT استفاده می کنیم که تقریباً از همه چیز مراقبت می کند.

ابتدا کتابخانه را دانلود کنید، با مراجعه به مخزن GitHub یا فقط روی این دکمه کلیک کنید تا فایل فشرده را دانلود کنید:

DHTlib.zip

برای نصب آن، 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
}

پس از آپلود طرح، یک پنجره سریال مانیتور را باز کنید تا خروجی آردوینو را ببینید.

DHT11 DHT22 AM2302 Sensor DHTlib library Output on Serial Monitor 1 1
خروجی در مانیتور سریال

توضیح کد:

طرح با گنجاندن کتابخانه 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) تبدیل کرد:

(°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 متصل شویم.

A 1rduino Wiring Fritzing Connections with DHT11 1 and 16x2 Character LCD 1 1
سیم کشی DHT11 و LCD کاراکتری 16×2 به آردوینو UNO
A 1rduino Wiring Fritzing Connections with DHT22 1 and 16x2 Character LCD 1 1
سیم کشی DHT22 و LCD کاراکتری 16×2 به آردوینو UNO

طرح زیر مقادیر دما و رطوبت نسبی را روی 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);
}
DHT11 DHT22 Arduino Sketch Temperature Humidity Measurements Output on LCD 1 1
اندازه گیری دما و رطوبت در LCD

ترجمه از : https://lastminuteengineers.com/dht11-dht22-arduino-tutorial/

WhatsApp
Email
LinkedIn

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *