数字温湿度传感器DHT11详解及例程利用串口显示.docx

上传人:b****4 文档编号:5951132 上传时间:2023-05-09 格式:DOCX 页数:17 大小:22.60KB
下载 相关 举报
数字温湿度传感器DHT11详解及例程利用串口显示.docx_第1页
第1页 / 共17页
数字温湿度传感器DHT11详解及例程利用串口显示.docx_第2页
第2页 / 共17页
数字温湿度传感器DHT11详解及例程利用串口显示.docx_第3页
第3页 / 共17页
数字温湿度传感器DHT11详解及例程利用串口显示.docx_第4页
第4页 / 共17页
数字温湿度传感器DHT11详解及例程利用串口显示.docx_第5页
第5页 / 共17页
数字温湿度传感器DHT11详解及例程利用串口显示.docx_第6页
第6页 / 共17页
数字温湿度传感器DHT11详解及例程利用串口显示.docx_第7页
第7页 / 共17页
数字温湿度传感器DHT11详解及例程利用串口显示.docx_第8页
第8页 / 共17页
数字温湿度传感器DHT11详解及例程利用串口显示.docx_第9页
第9页 / 共17页
数字温湿度传感器DHT11详解及例程利用串口显示.docx_第10页
第10页 / 共17页
数字温湿度传感器DHT11详解及例程利用串口显示.docx_第11页
第11页 / 共17页
数字温湿度传感器DHT11详解及例程利用串口显示.docx_第12页
第12页 / 共17页
数字温湿度传感器DHT11详解及例程利用串口显示.docx_第13页
第13页 / 共17页
数字温湿度传感器DHT11详解及例程利用串口显示.docx_第14页
第14页 / 共17页
数字温湿度传感器DHT11详解及例程利用串口显示.docx_第15页
第15页 / 共17页
数字温湿度传感器DHT11详解及例程利用串口显示.docx_第16页
第16页 / 共17页
数字温湿度传感器DHT11详解及例程利用串口显示.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

数字温湿度传感器DHT11详解及例程利用串口显示.docx

《数字温湿度传感器DHT11详解及例程利用串口显示.docx》由会员分享,可在线阅读,更多相关《数字温湿度传感器DHT11详解及例程利用串口显示.docx(17页珍藏版)》请在冰点文库上搜索。

数字温湿度传感器DHT11详解及例程利用串口显示.docx

数字温湿度传感器DHT11详解及例程利用串口显示

数字温湿度传感器DHT11

1、概述

DHT**系列数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。

它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。

传感器包括一个电阻式测湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。

因此,该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。

每个DHT**传感器都在极为准确的湿度校验室中进展校准。

校准系数以程序的形式储存在OTP存中,传感器部在检测信号的处理过程中要调用这些校准系数。

单线制串行输出接口,使系统集成变得简易快捷。

超小的体积、极低的功耗,使其成为各类应用甚至最为苛刻的应用场合的最正确选那么。

本产品为4针单排引脚封装,特殊封装形式可根据用户需求而提供。

2、产品特性

􀁺湿温度传感器的一体化构造能相对的同时对相对湿度和温度进展测量。

􀁺数字信号输出,从而减少用户信号的预处理负担。

􀁺单总线构造输出有效的节省用户控制器的I/O口资源。

并且,不需要额外电器元件。

􀁺独特的单总数据传输线协议使得读取传感器的数据更加便捷。

􀁺全部校准。

编码方式为8位二进制数。

􀁺40bit二进制数据输出。

其中湿度整数局部占1Byte,小数局部1Byte;温度整数局部1Byte,小数局部1Byte。

其中,湿度为高16位。

最后1Byte为校验和。

􀁺卓越的长期稳定性,超低功耗。

􀁺4引脚安装,超小尺寸。

􀁺各型号管脚完全可以互换。

􀁺测量湿度围从20%RH到90%RH;测量温度围从0℃到50℃。

􀁺适用围包括恒湿控制,消费家电类产品,温湿度计等领域。

3、外型与引脚排列

引脚说明:

Vcc正电源

Dout输出

NC空脚

GND地-1-

图3.0DHT外型及管脚

4、详细引脚说明:

传感器管脚方向识别:

正面〔有通气孔的一面〕看过去,从左到右依次为1、2、3、4脚。

表4.0:

引脚说明

引脚号

引脚名称

类型

引脚说明

1

VCC

电源

正电源输入,3V-5.5VDC

2

Dout

输出

单总线。

数据输入/输出引脚

3

NC

空脚。

扩展未用

4

GND

电源地

电源引脚,DHT**的供电电压为3.5~5.5V。

传感器上电后,要等待1s以越过不稳定状态在此期间不要发送任何指令。

电源引脚〔VDD,GND〕之间可增加一个100nF的电容,用以去耦滤波。

5、订货信息

型号

测量围

测湿精度

测温精度

分辨力

封装

DHT11

20-90%RH0-50℃

±5%RH

±2℃

1

4针单排直插

6、传感器性能说明

参数

条件

Min

Typ

Max

单位

湿度

分辨率

1

1

1

%RH

8

Bit

重复性

±1

%RH

精度

25℃

±4

%RH

0-50℃

±5

%RH

互换性

可完全互换

量程围

0℃

30

90

%RH

25℃

20

90

%RH

50℃

20

80

%RH

响应时间

1/e(63%)25℃,1m/s空气

6

10

15

S

迟滞

±1

%RH

长期稳定性

典型值

±1

%RH/yr

温度

分辨率

1

1

1

8

8

8

Bit

重复性

±1

精度

±1

±2

量程围

0

50

响应时间

1/e(63%)

6

30

S

7、连接接口说明

DHT**数字湿温度传感器连接电路简单,只需要占用控制器一个I/O口即可完成上下位的连接。

典型应用电路如下列图所示。

另外,建议连接线长度短于20时用5K上拉电阻,大于20米时根据实际情况使用适宜的上拉电阻,如图5.0所示。

图5.0典型电路连接

8、数据格式及处理

8.1、格式

数字湿温度传感器采用单总线数据格式。

即,单个数据引脚端口完成输入输出双向传输。

其数据包由5Byte〔40Bit〕组成。

一次通讯时间最大3ms,数据分小数局部和整数局部,具体格式在下面说明。

DATA用于微处理器与DHT**之间的通讯和同步,采用单总线数据格式,当前小数局部用于以后扩展,现读出为0。

操作流程如下:

一次完整的数据传输为40bit,高位先出。

数据格式:

8bit湿度整数数据+8bit湿度小数数据

+8bit温度整数数据+8bit温度小数数据

+8bit校验和

校验和数据为前四个字节相加。

具体见表6.1:

湿度

温度

校验

整数

小数

整数

小数

8Bit

8Bit

8Bit

8Bit

8Bit

8.2、数据编码及处理

传感器数据输出的是未编码的二进制数据。

数据(湿度、温度、整数、小数)之间应该分开处理。

如果,某次从传感器中读取如下5Byte数据:

byte4byte3byte2byte1byte0

0010110100000000000111000000000001001001

整数小数整数小数校验和

湿度温度校验和

由以上数据就可得到湿度和温度的值,计算方法:

humi(湿度)=byte4.byte3=45.0(%RH)

temp(温度)=byte2.byte1=28.0(℃)

jiaoyan(校验)=byte4+byte3+byte2+byte1=73

9、时序

DHT**传感器是通过奥松电子开发的单总线协议和上位机〔控制器〕进展数据通信。

DHT**传感器需要严格的读写协议来确保数据的完整性。

整个读写分为,上位机发送起始信号,上位机接收下位机发来的握手响应信号,读‘0’,和读‘1’四个步骤。

所有的信号除主机启动复位信号外,全部都由DHT**产生。

通过单总线访问DHT**顺序归纳如下:

􀁺主机发开场信号

􀁺主机等待接收DHT**响应信号

􀁺主机连续接收40Bit的数据和校验和

􀁺数据处理

9.1、主机复位信号和DHT响应信号

图7.1DHT复位时序

用户主机发送一次开场信号〔低电平〕DHT从低速模式转换到高速模式,等待主机开场信号完毕〔拉高〕后,DHT发送响应信号,送出40bit的数据,并触发一次信号采集,用户可选择读取局部数据。

注意:

总线线空闲状态为高电平,主机把总线线拉低等待DHT响应,主机把总线线拉低必须大于18毫秒,保证DHT能检测到起始信号。

DHT接收到主机的开场信号后,等待主机开场信号完毕,然后发送低电平响应信号。

主机发送开场信号完毕后,延时等待20-40us后,读取DHT的回应信号,主机发送开场信号后,可以切换到输入模式,或者输出高电平均可,总线线由上拉电阻拉高。

9.2、DHT开场发送数据流程

图7.2读DHT数据流程

主机发送开场信号后,延时等待20us-40us后读取DHT的回应信号,读取总线为低电平,说明DHT发送响应信号,DHT发送响应信号后,再把总线拉高,准备发送数据,每一bit数据都以低电平开场,格式见下面图示。

如果读取响应信号为高电平,那么DHT没有响应,请检查线路是否连接正常。

9.3、数字‘0’信号表示方法

图7.3信号‘0’时序图

数字‘0’表示方法为,首先DHT把总线拉低12-14us然后拉高,高电平保持时间在26-28us这个围。

那么此比特为‘0’电平。

9.4、数字‘1’信号表示方法

图7.4信号‘1’时序图

数字‘1’表示方法为,首先DHT把总线拉低12-14us然后拉高,高电平保持时间在116-118us这个围。

那么此比特为‘1’电平。

10、测量分辨率

测量分辨率分别为8bit〔温度〕、8bit〔湿度〕。

11、电气特性

VDD=5V,T=25℃,除非特殊标注

参数

条件

min

typ

max

单位

供电

DC

3

5

5.5

V

供电电流

测量

0.5

2.5

mA

平均

0.2

0.5

mA

待机

100

150

uA

采样周期

1

注:

采样周期间隔不得低于1秒钟。

12、应用信息

12.1工作与贮存条件

超出建议的工作围可能导致高达3%RH的临时性漂移信号。

返回正常工作条后,传感器会缓慢地向校准状态恢复。

要加速恢复进程/可参阅7.3小节的"恢复处理〞。

在非正常工作条件下长时间使用会加速产品的老化过程。

12.2暴露在化学物质中

电阻式湿度传感器的感应层会受到化学蒸汽的干扰,化学物质在感应层中的扩散可能导致测量值漂移和灵敏度下降。

在一个纯洁的环境中,污染物质会缓慢地释放出去。

下文所述的恢复处理将加速实现这一过程。

高浓度的化学污染会导致传感器感应层的彻底损坏。

12.3恢复处理

置于极限工作条件下或化学蒸汽中的传感器,通过如下处理程序,可使其恢复到校准时的状态。

在50-60℃和<10%RH的湿度条件下保持2小时〔烘干〕;随后在20-30℃和>70%RH的湿度条件下保持5小时以上。

12.4温度影响

气体的相对湿度,在很大程度上依赖于温度。

因此在测量湿度时,应尽可能保证湿度传感器在同一温度下工作。

如果与释放热量的电子元件共用一个印刷线路板,在安装时应尽可能将DHT11远离电子元件,并安装在热源下方,同时保持外壳的良好通风。

为降低热传导,DHT11与印刷电路板其它局部的铜镀层应尽可能最小,并在两者之间留出一道缝隙。

12.5光线

长时间暴露在太下或强烈的紫外线辐射中,会使性能降低。

12.6配线考前须知

DATA信号线材质量会影响通讯距离和通讯质量,推荐使用高质量屏蔽线。

13、封装信息

14、焊接信息

手动焊接,在最高260℃的温度条件下接触时间须少于10秒。

15、考前须知

(1)防止结露情况下使用。

(2)长期保存条件:

温度10-40℃,湿度60%以下。

例程:

//****************************************************************//

//DHT21使用例

//单片机:

AT89S52或STC89C52RC

//功能:

串口发送温湿度数据波特率9600

//硬件连接:

P2.0口为通讯口连接DHT11,DHT11的电源和地连接单片机的电源和地,单片机串口加MAX232连接电脑

//****************************************************************//

#include

#include

//

typedefunsignedcharU8;/*definedforunsigned8-bitsintegervariable无符号8位整型变量*/

typedefsignedcharS8;/*definedforsigned8-bitsintegervariable有符号8位整型变量*/

typedefunsignedintU16;/*definedforunsigned16-bitsintegervariable无符号16位整型变量*/

typedefsignedintS16;/*definedforsigned16-bitsintegervariable有符号16位整型变量*/

typedefunsignedlongU32;/*definedforunsigned32-bitsintegervariable无符号32位整型变量*/

typedefsignedlongS32;/*definedforsigned32-bitsintegervariable有符号32位整型变量*/

typedeffloatF32;/*singleprecisionfloatingpointvariable(32bits)单精度浮点数〔32位长度〕*/

typedefdoubleF64;/*doubleprecisionfloatingpointvariable(64bits)双精度浮点数〔64位长度〕*/

//

#defineucharunsignedchar

#defineuintunsignedint

#defineData_0_time4

//----------------------------------------------//

//----------------IO口定义区--------------------//

//----------------------------------------------//

sbitP2_0=P2^0;

sbitP2_1=P2^1;

sbitP2_2=P2^2;

sbitP2_3=P2^3;

//----------------------------------------------//

//----------------定义区--------------------//

//----------------------------------------------//

U8U8FLAG,k;

U8U8count,U8temp;

U8U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;

U8U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;

U8U8data;

U8outdata[5];//定义发送的字节数

U8indata[5];

U8count,count_r=0;

U8str[5]={"RS232"};

U16U16temp1,U16temp2;

SendData(U8*a)

{

outdata[0]=a[0];

outdata[1]=a[1];

outdata[2]=a[2];

outdata[3]=a[3];

outdata[4]=a[4];

count=1;

SBUF=outdata[0];

}

voidDelay(U16j)

{U8i;

for(;j>0;j--)

{

for(i=0;i<27;i++);

}

}

voidDelay_10us(void)

{

U8i;

i--;

i--;

i--;

i--;

i--;

i--;

}

void(void)

{

U8i;

for(i=0;i<8;i++)

{

U8FLAG=2;

//----------------------

P2_1=0;//T

P2_1=1;//T

//----------------------

while((!

P2_0)&&U8FLAG++);

Delay_10us();

Delay_10us();

//Delay_10us();

U8temp=0;

if(P2_0)U8temp=1;

U8FLAG=2;

while((P2_0)&&U8FLAG++);

//----------------------

P2_1=0;//T

P2_1=1;//T

//----------------------

//超时那么跳出for循环

if(U8FLAG==1)break;

//判断数据位是0还是1

//如果高电平高过预定0高电平值那么数据位为1

U8data<<=1;

U8data|=U8temp;//0

}//rof

}

//--------------------------------

//-----湿度读取子程序------------

//--------------------------------

//----以下变量均为全局变量--------

//----温度高8位==U8T_data_H------

//----温度低8位==U8T_data_L------

//----湿度高8位==U8RH_data_H-----

//----湿度低8位==U8RH_data_L-----

//----校验8位==U8checkdata-----

//----调用相关子程序如下----------

//----Delay();,Delay_10us();,();

//--------------------------------

voidRH(void)

{

//主机拉低18ms

P2_0=0;

Delay(180);

P2_0=1;

//总线由上拉电阻拉高主机延时20us

Delay_10us();

Delay_10us();

Delay_10us();

Delay_10us();

//主机设为输入判断从机响应信号

P2_0=1;

//判断从机是否有低电平响应信号如不响应那么跳出,响应那么向下运行

if(!

P2_0)//T!

{

U8FLAG=2;

//判断从机是否发出80us的低电平响应信号是否完毕

while((!

P2_0)&&U8FLAG++);

U8FLAG=2;

//判断从机是否发出80us的高电平,如发出那么进入数据接收状态

while((P2_0)&&U8FLAG++);

//数据接收状态

();

U8RH_data_H_temp=U8data;

();

U8RH_data_L_temp=U8data;

();

U8T_data_H_temp=U8data;

();

U8T_data_L_temp=U8data;

();

U8checkdata_temp=U8data;

P2_0=1;

//数据校验

U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);

if(U8temp==U8checkdata_temp)

{

U8RH_data_H=U8RH_data_H_temp;

U8RH_data_L=U8RH_data_L_temp;

U8T_data_H=U8T_data_H_temp;

U8T_data_L=U8T_data_L_temp;

U8checkdata=U8checkdata_temp;

}//fi

}//fi

}

//----------------------------------------------

//main()功能描述:

AT89C5111.0592MHz串口发

//送温湿度数据,波特率9600

//----------------------------------------------

voidmain()

{

U8i,j;

//ucharstr[6]={"RS232"};

/*系统初始化*/

TMOD=0x20;//定时器T1使用工作方式2

TH1=253;//设置初值

TL1=253;

TR1=1;//开场计时

SCON=0x50;//工作方式1,波特率9600bps,允许接收

ES=1;

EA=1;//翻开所以中断

TI=0;

RI=0;

SendData(str);//发送到串口

Delay

(1);//延时100US〔12M晶振)

while

(1)

{

//------------------------

//调用温湿度读取子程序

RH();

//串口显示程序

//--------------------------

str[0]=U8RH_data_H;

str[1]=U8RH_data_L;

str[2]=U8T_data_H;

str[3]=U8T_data_L;

str[4]=U8checkdata;

SendData(str);//发送到串口

//读取模块数据周期不易小于2S

Delay(20000);

}//elihw

}//main

voidRSINTR()interrupt4using2

{

U8InPut3;

if(TI==1)//发送中断

{

TI=0;

if(count!

=5)//发送完5位数据

{

SBUF=outdata[count];

count++;

}

}

if(RI==1)//接收中断

{

InPut3=SBUF;

indata[count_r]=InPut3;

count_r++;

RI=0;

if(count_r==5)//接收完4位数据

{

//数据接收完毕处理。

count_r=0;

str[0]=indata[0];

str[1]=indata[1];

str[2]=indata[2];

str[3]=indata[3];

str[4]=indata[4];

P0=0;

}

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2