راه-انداری-سنسور-DHT22-باAVR

پروژه راه اندازی سنسور دما و رطوبت DHT22 با استفاده از مجموعه آموزشی AVR WIZARD توسط برد پلاریس به زبان C

0

راهنمای راه اندازی سنسور دما و رطوبت  DHT22 با استفاده از مجموعه آموزشی AVR WIZARD به زبان C

هدف از این آموزش راه اندازی سنسور DHT22 و نمایش مقادیر دما و رطوبت بر روی LCD می باشد.

لوازم مورد نیاز:

  1. برد اصلی AVR WIZARD
  2. برد جانبی SENSOR SHIELD
  3. LCD2X16
  4. تغذیه 9 ولت
  5. سنسور دیجیتال دما و رطوبت DHT22

سنسور DHT22 با توجه به برگه اطلاعاتی خود ، قادر به اندازه گیری رطوبت نسبی 0 تا 100٪ با رزولوشن 0.1 و درجه حرارت از 40- تا 125 درجه سانتیگراد است. دقت سنسور DHT22 برای رطوبت + 2 / و برای دما + / 0.3 می باشد.

سنسور DHT22

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

الکترود های سنسور DHT22

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

DHT22 داخل سنسور

ترمیستورها به گونه ای ساخته شده اند که مقاومت آنها با درجه حرارت به شدت تغییر می کند به طوری که می تواند 100 درجه یا بیشتر از تغییر در هر درجه باشد! اصطلاح NTC به معنای “ضریب دمای منفی” است ، بدین معنی که با افزایش دما مقاومت کاهش می یابد.

نمودار ترمیستور DHT22

نحوه اتصال  ماژول DHT22 به برد SENSOR_SHIELD مجموعه آموزشی AVR WIZARD

در برد شیلد سنسور موسوم به  SENSOR_SHIELD سوکت ماژول DHT22 بر روی برد موجود بوده و کاربر می تواند به راحتی شروع به کدنویسی کند.

محل قرار گیری سنسور DHT22

نحوه برنامه نویسی و خواندن مقادیر دما و رطوبت از سنسور DHT22

به دلیل پروتکل ارتباطی تک سیم “single-bus” سنسور DHT22، به نام تک اتوبوس،می توانید خروجی ماژول را به هر پین دیجیتال میکروکنترلر وصل کنید.

پایه های سنسور DHT22

برای شروع ، ابتدا میکروکنترلر باید برای درخواست داده ها ی رطوبت و دما سیگنال شروع را را ارسال کند.بدین صورت که منطق 0 (LOW) برای حداقل 500 میکرو ثانیه و به دنبال آن منطق 1 (HIGH).سپس DHT22 باید با  پایین کشیدن  (LOW) باس داده برای 80 میکروثانیه به میکروکنترلر پاسخ دهد و سپس باس داده را قبل از آنکه دوباره (LOW) کند ، برای 80 میکرو ثانیه دیگر در سطح لاجیک 1 (HIGH) نگه دارد.

داده های خروجی DHT22

DHT22 ابتدا  مقادیر رطوبت و به دنبال آن مقادیر دما را ارسال می کند. هر دو داده 16 بیتی هستند ، اما 8 بیت (1 بایت) به طور همزمان ارسال می شوند. MSB مهمترین بیت در ابتدا ارسال می شود.  MSB در بایت درجه حرارت بیت نشانه است. اگر این بیت 1 باشد ، درجه حرارت منفی است. در غیر این صورت درجه حرارت مثبت است.

منطق 1 ،یک پالس LOW  به طول 50 میکروثانیه که به دنبال آن یک پالس HIGH به طول 70 میکروثانیه است. در همین حال ، منطق 0 یک پالس LOW  به طول 50 میکروثانیه که به دنبال آن یک پالس HIGH به طول 26 میکروثانیه است. نمودار زمان بندی در زیر نشان داده شده است:

زمان بندی DHT22

سپس توجه داشته باشید که طول واقعی پالس ممکن است دقیقاً مقادیری نباشد که اینجا گفته شد. در واقع ، دیتاشیت می گوید که LOW PULSE در هر دو منطق 0 و 1 (50 ما) بین 48 تا 55 است. علاوه بر این ،در منطق 1 HIGH PULSE 68 تا 75 بوده و در منطق 0 HIGH PULSE بین 22 تا 30 می باشد.

سنسور پس از ارسال دو بایت برای رطوبت و دو بایت برای دما ، قبل از HIGH کردن باس داده ، انتقال را با یک بایت parity خاتمه می دهد. بایت parity فقط مجموع چهار بایت داده است:

بایت PARITYسنسور DHT22

سیگنال دما و رطوبت DHT22

حال  با یک محاسبات ریاضی ، یک انتقال تقریباً 5 میلی ثانیه طول می کشد. با این وجود توصیه می شود که به دلیل ماهیت سنسورهای مورد استفاده حداقل بین هر خواندن دیتا 2 ثانیه منتظر بمانید. بنابراین ، DHT22 برای قرائت دمای سریع توصیه نمی شود.

حال پس از اضافه کردن کتابخانه راه انداز DHT22.h در ابتدای برنامه که بر اساس توضیحات بالا نوشته شده است ، مقادیر دما ورطوبت را بر روی LCD نمایش می دهیم:

[cpp]

This program was created by the
CodeWizardAVR V3.12 Advanced
Automatic Program Generator
© Copyright 1998-2014 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project :
Version :
Date : 05/07/2019
Author :
:
Comments:

Chip type : ATmega16A
Program type : Application
AVR Core Clock frequency: 16.000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
*******************************************************/

#include <mega16a.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <delay.h>
#include <alcd.h>
#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<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0);

// Port B initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRB=(0<<DDB7) | (0<<DDB6) | (1<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);

// Port C initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRC=(1<<DDC7) | (1<<DDC6) | (1<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);

// Port D initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRD=(0<<DDD7) | (0<<DDD6) | (1<<DDD5) | (0<<DDD4) | (0<<DDD3) | (0<<DDD2) | (0<<DDD1) | (0<<DDD0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) | (0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);
lcd_init(16);
lcd_putsf( " HI Wellcom " ) ;
lcd_putsf( "TO REDRONIC.COM" ) ;
delay_ms(2000);
lcd_clear();
// Global enable interrupts
#asm("sei")
while (1)
{
lcd_putsf("www.redronic.com");
if(dht22_read(&temperature,&humidity) == -40)
{
lcd_putsf("DHT22 ERROR");
}
else
{
ftoa(temperature,1,temp);
ftoa(humidity,1,hum);
lcd_gotoxy(0,1);
sprintf(str,"Tmp=%sHum=%s %",temp,hum); // cast temprature and humidity value to char
// lcd_clear();
//lcd_gotoxy(0,0);
lcd_puts(str);
}
if(temperature>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);
} }
[/cpp]

خروجی برنامه:
راه انداری سنسور DHT22با AVR.jpeg

Choose your Reaction!
دیدگاه خود را بنویسید

آدرس ایمیل شما منتشر نخواهد شد.

redronic.com