dht11是一种电容式的温度湿度测量器件,可以和单片机直接通信。应该也属于是一种比较经典的芯片。但是直插封装的温湿度测量元件貌似产量都很少,用的更多的是aht20,sht30这样gba封装的芯片,当然这些芯片的性能也更强一些。

性能特性

数据来源于奥松电子产的dht11的手册,嘉立创商城商品页面。但是在个玩意是tm新款的,我写博客的时候才发现网上其他资料用的dht11已经停产了,在通信和量程上有区别虽然及时更换停产元件也是硬件工程师要做的。那接下来就写这个手册的东西我还得改我的项目代码摩洛哥烧饼

说真的,这玩意性能真不咋地。

相对湿度性能

单位是RH,表示的是

空气中的绝对湿度和同温度下水汽的饱和绝对湿度的比值

器件量程在5%RH到95%RH,精度在正负5真高吧,随着器件的年份每年会有以内的漂移

温度性能

测量范围在-20到60摄氏度,精度在正负2真高吧,随着器件的年份每年会有以内的漂移

电气特性

供电电压和符合数字电路的常规,最小3.3V,最大5.5V,典型值在5V。电流不会超过1mA,每两次测量的时间不能短于2S

电路连接

每一次读取的是上次测量的结果,VCC波动会影响测量,io线很短时上要加4.7k的上拉电阻尼玛旧版的用的10K电阻,只好说影响不大就是了,这个电阻用来拉高电平,所以初始的时候应该保持高电平不要拉低。

通信

单线通信。一共会传输40次数据,每次8bit,依次为湿度整数,湿度小数手册上说只会是0,好好好,温度整数,温度小数,以及前面所谓数和的末8位(用于校验)。

温度的小数也只有低位表示数值,高位是用来指示正负的,最高位为1则为负。

时序

上电后需要等一秒

开始测量信号

拉底电平18ms到30ms,然后等待dht11拉低一次(8sus)然后拉高一次(87us)电平

读取

每次输出信号会先拉低54us然后拉高信号,区别在与0拉高23到27毫秒之后会拉低,1会拉高68到74秒然后拉低。

结束

输出54us低电平然后电平会拉高等待输入。

应用数据

存放

正常人生活的环境,bro我没有开玩笑,我不指望这玩意能用于工业。

设计注意

远离发热器件,信号线材质会影响通信质量

焊接

要求手动焊接,高于300度的接触需要少于3秒md要求还挺高

一些函数实现

这里有一些简单实现(延迟函数需要你自己实现)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void Dht11Start()
{
DHT11_DATA = 0;
//20us
Delay10ms();
Delay10ms();
DHT11_DATA = 1;
while (DHT11_DATA)
;
while (!DHT11_DATA)
;
while (DHT11_DATA)//也可用直接用延时跳过这一段
;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
unsigned char Dht11ReadByte()
{
unsigned char res = 0;
for (int i = 0; i < 8; i++)
{
// 等待拉高
while (!DHT11_DATA)
;
// 等待50us
for (int i = 0; i < 5; i++)
Delay10us();
res <<= 1;
res |= DHT11_DATA;
}
return res;
}