数字温湿度传感器
DHT11DHT11DHT11DHT11
►相对湿度和温度测量
►全部校准,数字输出
►卓越的长期稳定性
►无需额外部件
►超长的信号传输距离
►超低能耗
►4 引脚安装
►完全互换
DHT11DHT11DHT11DHT11产品概述
DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合
传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极
高的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC
测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超
快响应、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为精确
的湿度校验室中进行校准。校准系数以程序的形式储存在OTP内存中,传感器
内部在检测信号的处理过程中要调用这些校准系数。单线制串行接口,使系统
集成变得简易快捷。超小的体积、极低的功耗,信号传输距离可达20米以上,
使其成为各类应用甚至最为苛刻的应用场合的最佳选则。产品为 4 针单排引
脚封装。连接方便,特殊封装形式可根据用户需求而提供。
应用领域
►暖通空调 ►测试及检测设备
►汽车 ►数据
记录
混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载
器
►消费品 ►自动控制
►气象站 ►家电
►湿度调节器 ►医疗
►除湿器
订货信息
型号 测量范围 测湿精度 测温精度 分辨力 封装
DHT11 20-90%RH 0-50℃ ±5%RH ±2℃ 1 4针单排直插
1111、传感器性能说明
参数 条件 Min Typ Max 单位
湿度
分辨率 1111 1111 1111 %RH
16161616 Bit
重复性 ±±±±1111 %RH
精度 25252525℃ ±±±±4444 %RH
0000-50505050℃ ±±±±5555 %RH
互换性 可完全互换
量程范围 0000℃ 30303030 90909090 %RH
25252525℃ 20202020 90909090 %RH
50505050℃ 20202020 80808080 %RH
响应时间 1/e(63%)251/e(63%)251/e(63%)251/e(63%)25℃,
1m/s1m/s1m/s1m/s 空气
6666 10101010 15151515 S
迟滞 ±±±±1111 %RH
长期稳定性 典型值 ±±±±1111 %RH/yr
温度
分辨率 1111 1111 1111 ℃
16161616 16161616 16161616 Bit
重复性 ±±±±1111 ℃
精度 ±±±±1111 ±±±±2222 ℃
量程范围 0000 50505050 ℃
响应时间 1/e(63%)1/e(63%)1/e(63%)1/e(63%) 6666 30303030 S
2222、 接口说明
建议连接线长度短于20202020米时用5K5K5K5K上拉电阻,,,,大于20202020米时根据实际情况使
用合适的上拉电阻
3333、 电源引脚
DHT11的供电电压为 3-5.5V。传感器上电后,要等待 1s 以越过不稳定状态在此
期间无需发送任何指令。电源引脚(VDD,GND)之间可增加一个100nF 的电容,用
以去耦滤波。
4444、串行接口 ((((单线双向))))
DATA 用于微处理器与 DHT11之间的通讯和同步,采用单总线数据格式,一
次通讯时间4ms左右,数据分小数部分和整数部分,具体格式在下面说明,当前小数
部分用于以后扩展,现读出为零.操作流程如下:
一次完整的数据传输为40bit,高位先出。
数据格式:8bit湿度整数数据+8bit湿度小数数据
+8bi温度整数数据+8bit温度小数数据
+8bit校验和
数据传送正确时校验和数据等于“8bit8bit8bit8bit湿度整数数据+8bit+8bit+8bit+8bit湿度小数数据+8bi+8bi+8bi+8bi
温度整数数据+8bit+8bit+8bit+8bit温度小数数据””””所得结果的末8位。
用户MCU发送一次开始信号后,DHT11从低功耗模式转换到高速模式,等待
主机开始信号结束后,DHT11发送响应信号,送出40bit的数据,并触发一次信号采
集,用户可选择读取部分数据.从模式下,DHT11接收到开始信号触发一次温湿度
采集,如果没有接收到主机发送开始信号,DHT11不会主动进行温湿度采集.采集
数据后转换到低速模式。
1.通讯过程如图1所示
图1
总线空闲状态为高电平,主机把总线拉低等待DHT11响应,主机把总线拉低必
须大于18毫秒,保证DHT11能检测到起始信号。DHT11接收到主机的开始信号后,
等待主机开始信号结束,然后发送80us低电平响应信号.主机发送开始信号结束后,
延时等待20-40us后, 读取DHT11的响应信号,主机发送开始信号后,可以切换到输
入模式,或者输出高电平均可, 总线由上拉电阻拉高。
图2
总线为低电平,说明DHT11发送响应信号,DHT11发送响应信号后,再把总线
拉高80us,准备发送数据,每一bit数据都以50us低电平时隙开始,高电平的长短定了
数据位是0还是1.格式见下面图示.如果读取响应信号为高电平,则DHT11没有响
应,请检查线路是否连接正常.当最后一bit数据传送完毕后,DHT11拉低总线50us,
随后总线由上拉电阻拉高进入空闲状态。
数字0信号表示方法如图4所示
图4
数字1信号表示方法.如图5所示
图5
5555、 测量分辨率
测量分辨率分别为 8bit(温度)、8bit(湿度)。
6666、电气特性
VDD=5V,T = 25℃,除非特殊标注
参数 条件 minminminmin typtyptyptyp maxmaxmaxmax 单位
供电 DC 3 5 5.5 V
供电电流 测量 0.5 2.5 mA
平均 0.2 1 mA
待机 100 150 uA
采样周期 秒 1 次
注:采样周期间隔不得低于1秒钟。
7777、应用信息
7.17.17.17.1工作与贮存条件
超出建议的工作范围可能导致高达3%RH的临时性漂移信号。返回正常工
作条后,传感器会缓慢地向校准状态恢复。要加速恢复进程/可参阅7.3小节的“恢
复处理”。在非正常工作条件下长时间使用会加速产品的老化过程。
7.27.27.27.2暴露在化学物质中
电阻式湿度传感器的感应层会受到化学蒸汽的干扰,化学物质在感应层中
的扩散可能导致测量值漂移和灵敏度下降。在一个纯净的环境中,污染物质会缓
慢地释放出去。下文所述的恢复处理将加速实现这一过程。高浓度的化学污染会
导致传感器感应层的彻底损坏。
7.37.37.37.3恢复处理
置于极限工作条件下或化学蒸汽中的传感器,通过如下处理程序,可使其
恢复到校准时的状态。在50-60℃和< 10%RH的湿度条件下保持2 小时(烘干);
随后在20-30℃和>70%RH的湿度条件下保持 5小时以上。
7.47.47.47.4温度影响
气体的相对湿度,在很大程度上依赖于温度。因此在测量湿度时,应尽可能
保证湿度传感器在同一温度下工作。如果与释放热量的电子元件共用一个印刷线
路板,在安装时应尽可能将DHT11远离电子元件,并安装在热源下方,同时保持
外壳的良好通风。为降低热传导,DHT11与印刷电路板其它部分的铜镀层应尽可
能最小,并在两者之间留出一道缝隙。
7.57.57.57.5光线
长时间暴露在太阳光下或强烈的紫外线辐射中,会使性能降低。
7.67.67.67.6配线注意事项
DATA信号线材质量会影响通讯距离和通讯质量,推荐使用高质量屏蔽线。
8888、封装信息
1111 2222 3333 4444
9999、 DHT11DHT11DHT11DHT11引脚说明
Pin 名称 注释
1 VDD 供电 3-5.5VDC
2 DATA 串行数据,单总线
3 NC 空脚,请悬空
4 GND 接地,电源负极
10101010、 焊接信息
手动焊接,在最高260℃的温度条件下接触时间须少于10秒。
11111111、注意事项
(1)避免结露情况下使用。
(2)长期保存条件:温度10-40℃,湿度60%以下。
以下是小弟自己写的而一个应用程序,希望对大家有用O(∩_∩)O~
/********* 这 个 程 序 是 运 行 在 89C52 上 的 , 晶 振 频 率 11.0592M
*********************************************************************
******************************************/
#include
#include
#define uint unsigned int
#define uchar unsigned char
/********************************************************************
****************************************************/
sbit dp = P2^0; /*DHT11的数据线接入口*/
/********************************************************************
****************************************************/
uchar Data[5]={0,0,0,0,0}; /*从DHT11中读出的数据,8bit湿度整数数据,
8bit湿度小数据,8bit温度整数数据,8bit温度小数数据,8bitCRC数数据*/
uchar flag = 1; /*数据读取正确标志位,0错误,1正确*/
uchar Character[13] = {'0'}; /*字符数据*/
/********************************************************************
****************************************************/
/********************************************************************
****************************************************/
void delay_10us() /*延时 10 us*/
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
/********************************************************************
****************************************************/
/********************************************************************
****************************************************/
void delay(uchar i) /*延时 i/10 ms*/
{
uchar y;
for(;i>0;i--)
for(y=0;y<28;y++);
}
/********************************************************************
****************************************************/
/********************************************************************
****************************************************/
void Read(uchar * Data) /*读取DHT11数据*/
{
uchar x,m,n,Time_out;
for(n=0;n<5;n++)
{
for(m=0;m<8;m++)
{
while (!dp); /*每一bit数据都以50us低电平时隙开始,这里直
接等待DHT11把数据线拉到高电平*/
delay_10us(); /*高电平的长短决定了数据是0或是1,数据0 的
高电平时间是26us-28us,这里取30us*/
delay_10us();
delay_10us();
x = 0; /*先把数据x置0*/
if(dp) /*如果高电平时间大于30us,则把数据x置1*/
x = 1;
Time_out = 2;
while (dp&&Time_out++); /*等待下一数据位的触发低电平,当有
不确定原因造成DHT11无法把数据线拉低时,在这里程序会死机*/
if(Time_out==1) /*于是加入超时检测变量,当Time_out加了
一圈(原先定义的是8bit无符号变量),得到值1,此时得*/
break; /*到超时判断,退出循环*/
*Data <<= 1; /*DHT11数据是从高位开始传的,于是用左
移,进行数据处理*/
if(x)
*Data |= 0x01; /*根据前面高电平时间长短得到的x值,赋给
读取数据的最低位*/
}
Data++;
}
}
/********************************************************************
****************************************************/
/********************************************************************
****************************************************/
uchar Get_data() /*DHT11的握手
协议
离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载
模拟和数据读取*/
{
uchar o,sum;
dp = 0; /*拉低数据位须大于18ms,保证DHT11能检测到起始信号*/
delay(180); /*延时略大于18ms*/
dp = 1; /*拉高数据位20-40us,延时等待DHT11响应*/
delay_10us();
delay_10us();
delay_10us();
delay_10us();
if(dp==0) /*DHT11发送响应,拉低数据线电平80us*/
{
while (!dp); /*等待DHT11把数据线拉高80us,准备发送数据*/
while (dp); /*检测DHT11把数据线拉低,开始发送数据*/
Read(Data); /*调用读取数据子程序*/
for(o=0;o<4;o++) /*将读到的湿度和温度,一共32bit数据相加,只取和的
最后8bit*/
sum+=Data[o];
if(sum!=Data[4]) /*CRC检测*/
return 0;
else
return 1; /*无错,则返回 1; 有错,返回 0*/
}
return 0;
}
/********************************************************************
****************************************************/
/***接下来就是我自己的串口显示了,大家参考上面的子程序就可以了
*********************************************************************
****************************************/
void Uart_init() /*串口初始化*/
{
TMOD = 0x20; /*T1定时器工作方式2,8位自动重装*/
TH1 = 0xFD; /*波特率9600*/
TL1 = 0xFD;
SCON = 0x40; /*串口方式1,10位可变波特率,不允许接收*/
TR1 = 1;
ES = 1;
EA = 1;
}
/********************************************************************
****************************************************/
/********************************************************************
****************************************************/
void Data_manage(uchar * Character,uchar * Data) /*采集数据转化成字符量*/
{
Character[0] = Data[0]/10+0x30;
Character[1] = Data[0]%10+0x30;
Character[2] = '.';
Character[3] = Data[1]/10+0x30;
Character[4] = Data[1]%10+0x30;
Character[5] = '%';
Character[6] = Data[2]/10+0x30;
Character[7] = Data[2]%10+0x30;
Character[8] = '.';
Character[9] = Data[3]/10+0x30;
Character[10]= Data[3]%10+0x30;
Character[11]= 'C';
Character[12]= '\0';
}
/********************************************************************
****************************************************/
/********************************************************************
****************************************************/
void main()
{
uchar t;
Uart_init();
while (1)
{
do
{
flag = Get_data();
delay(1000);
}
while (!flag);
Data_manage(Character,Data);
P0 = Data[2];
for(t=0;t<12;t++)
{
SBUF = Character[t];
while (!TI);
TI = 0;
}
}
}