DHT11温湿度传感器
DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。
特点:
- 相对温度和湿度测量
- 全部校准,数字输出
- 长期稳定性
- 超长的信号输出距离:20米
- 超低耗能:休眠
- 4引脚安装:可以买封装好的
- 完全互换:直接出结果不用转化
电源引脚:
DHT11的供电电压为 3-5.5V。传感器上电后,要等待 1s 以越过不稳定状态在此期间无需发送任何指令。电源引脚(VDD,GND)之间可增加一个100nF 的电容,用以去耦滤波。
连接
(与c51连接)
DATA —— P3^3口
GND —— 地
VCC —— 5V
数据传输:
C51发送序列指令给到DHT11模块,模块一次完整的数据传输为40bit,高位先出。
数据格式:
8bit湿度整数数据 + 8bit湿度小数数据
+ 8bit温度整数数据 + 8bit温度小数数据
+ 8bit校验和
时序图:
通讯过程:
依据此时序图,做通信初始化,并检测模块是否存在,功能是否正常。
时序图分析:vcc刚开始处于 1 位 → vcc拉低至少18ms→vcc拉高20-40us→DHT响应信号,将高电平拉低持续80us(在40–80us之间读取:低电平——模块存在)→DHT拉高信号80us→DHT拉低信号开始传送数据。
#include "reg52.h"
#include <intrins.h>
sbit ledOne = P3^7;
sbit DHT = P3^3; //模块的data接在c51的P3.3口
void Delay1000ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
i = 8;
j = 1;
k = 243;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void Delay30ms() //@11.0592MHz
{
unsigned char i, j;
i = 54;
j = 199;
do
{
while (--j);
} while (--i);
}
void Delay60us() //@11.0592MHz
{
unsigned char i;
i = 25;
while (--i);
}
void check_DTH()
{
DHT = 1; //开始处于 1 位
DHT = 0; //拉低至少18ms,这里给它30ms
Delay30ms();
DHT = 1; //vcc拉高20-40us
//DHT响应信号,将高电平拉低持续80us(在40--80us之间读取:低电平——模块存在)
//所以在60us的时候读取
Delay60us();
if(DHT == 0){ //低电平——模块存在
ledOne = 0; //亮灯,说明模块存在
}
}
void main()
{
ledOne = 1; //灭灯
Delay1000ms();
Delay1000ms();
check_DTH();
while(1);
}