فهرست مطالب
هدف از این آموزش راه اندازی سنسور DHT22 و نمایش مقادیر دما و رطوبت بر روی LCD می باشد.
قطعات مورد نیاز:
سنسور DHT22 با توجه به برگه اطلاعاتی خود ، قادر به اندازه گیری رطوبت نسبی 0 تا 100٪ با رزولوشن 0.1 و درجه حرارت از 40- تا 125 درجه سانتیگراد است. دقت سنسور DHT22 برای رطوبت + 2 / و برای دما + / 0.3 می باشد.
این سنسور از یک بخش سنجش رطوبت ، یک سنسور دمای NTC یا ( ترمیستور ) و یک IC در قسمت پشتی سنسور تشکیل شده است. قسمت سنجش رطوبت که برای اندازه گیری رطوبت استفاده می شود دارای دو الکترود با لایه نگهدارنده رطوبت (معمولاً یک پلیمر پلاستیکی،نمکی یا رسانا) بین آنها می باشد. با جذب بخار آب توسط لایه نگهدارنده رطوبت یونها آزاد می شوند ، که به نوبه خود باعث افزایش هدایت بین الکترودها می شود. تغییر مقاومت بین دو الکترود متناسب با رطوبت نسبی است. رطوبت نسبی بالاتر مقاومت بین الکترودها را کاهش می دهد، در حالی که رطوبت نسبی پایین مقاومت بین الکترودها را افزایش میدهد.
علاوه بر این ، سنسور DHT22 برای اندازه گیری دما از یک سنسور دما یا NTC تشکیل شده اند. ترمیستور مقاومت حرارتی است – مقاومتی که مقاومت خود را با دما تغییر می دهد. از نظر فنی ، همه مقاومت ها ترمیستور هستند – مقاومت آنها کمی با درجه حرارت تغییر می کند – این تغییر معمولاً بسیار کوچک و اندازه گیری آن دشوار است.
ترمیستورها به گونه ای ساخته شده اند که مقاومت آنها با درجه حرارت به شدت تغییر می کند به طوری که می تواند 100 درجه یا بیشتر از تغییر در هر درجه باشد! اصطلاح NTC به معنای “ضریب دمای منفی” است ، بدین معنی که با افزایش دما مقاومت کاهش می یابد.
نحوه اتصال ماژول DHT22 به برد SENSOR SHIELD مجموعه آموزشی AVR WIZARD
در برد شیلد سنسور موسوم به SENSOR SHIELD سوکت ماژول DHT22 بر روی برد موجود بوده و کاربر می تواند به راحتی شروع به کدنویسی کند.
نحوه برنامه نویسی و خواندن مقادیر دما و رطوبت از سنسور DHT22
به دلیل پروتکل ارتباطی تک سیم “single-bus” سنسور DHT22، به نام تک اتوبوس، میتوانید خروجی ماژول را به هر پین دیجیتال میکروکنترلر وصل کنید.
برای شروع ، ابتدا میکروکنترلر باید برای درخواست داده ها ی رطوبت و دما سیگنال شروع را را ارسال کند.بدین صورت که منطق 0 ( LOW ) برای حداقل 500 میکرو ثانیه و به دنبال آن منطق 1 ( HIGH ). سپس DHT22 باید با پایین کشیدن ( LOW ) باس داده برای 80 میکروثانیه به میکروکنترلر پاسخ دهد و سپس باس داده را قبل از آنکه دوباره (LOW) کند ، برای 80 میکرو ثانیه دیگر در سطح لاجیک 1 ( HIGH ) نگه دارد.
ابتدا مقادیر رطوبت و به دنبال آن مقادیر دما را ارسال می کند. هر دو داده 16 بیتی هستند ، اما 8 بیت ( 1 بایت ) به طور همزمان ارسال می شوند. MSB مهمترین بیت در ابتدا ارسال می شود. MSB در بایت درجه حرارت بیت نشانه است. اگر این بیت 1 باشد ، درجه حرارت منفی است. در غیر این صورت درجه حرارت مثبت است.
منطق 1، یک پالس LOW به طول 50 میکروثانیه که به دنبال آن یک پالس HIGH به طول 70 میکروثانیه است. در همین حال ، منطق 0 یک پالس LOW به طول 50 میکروثانیه که به دنبال آن یک پالس HIGH به طول 26 میکروثانیه است. نمودار زمان بندی در زیر نشان داده شده است:
سپس توجه داشته باشید که طول واقعی پالس ممکن است دقیقاً مقادیری نباشد که اینجا گفته شد. در واقع ، دیتاشیت می گوید که LOW PULSE در هر دو منطق 0 و 1 ( 50 ما ) بین 48 تا 55 است. علاوه بر این ،در منطق 1 HIGH PULSE 68 تا 75 بوده و در منطق 0 HIGH PULSE بین 22 تا 30 می باشد.
سنسور پس از ارسال دو بایت برای رطوبت و دو بایت برای دما ، قبل از HIGH کردن باس داده ، انتقال را با یک بایت parity خاتمه می دهد. بایت parity فقط مجموع چهار بایت داده است:
حال با یک محاسبات ریاضی ، یک انتقال تقریباً 5 میلی ثانیه طول می کشد. با این وجود توصیه می شود که به دلیل ماهیت سنسورهای مورد استفاده حداقل بین هر خواندن دیتا 2 ثانیه منتظر بمانید. بنابراین ، DHT22 برای قرائت دمای سریع توصیه نمی شود.
حال پس از اضافه کردن کتابخانه راه انداز DHT22.h در ابتدای برنامه که بر اساس توضیحات بالا نوشته شده است ، مقادیر دما ورطوبت را بر روی LCD نمایش می دهیم:
#include
#include
#include
#include
#include
#include
#include "DHT22.h"
// Declare your global variables here
void main(void)
{
float temperature,humidity;
char str[10],temp[10],hum[10];
lcd_init(16);
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRA=(0<38) //if temp goes higher than 38 the buzzer and relay will be on
{
PORTC.7=1;
PORTC.6=1;
PORTD.5= 1;
}
else
{
PORTC.7=0;
PORTC.6=0;
PORTD.5= 0;
}
if(humidity>50) //if humidity goes higher than 50 the buzzer and relay will be on
{
PORTC.7=1;
PORTC.5=1;
PORTB.5= 1;
}
else
{
PORTC.7=0;
PORTC.5=0;
PORTB.5= 0;
}
delay_ms(2000);
} }
سلام طلوع غروب مصنوعی اموزشی دارید؟