DHT11 数字温湿度传感器实验

DHT11技术性能特征

工作电压范围:3.3V-5.5V

工作电流 :平均0.5mA

输出:单总线数字信号

测量范围:湿度20~90%RH,温度0~50℃

精度 :湿度±5%,温度±2℃

分辨率 :湿度1%,温度1℃ 

DHT11数字湿温度传感器采用单总线数据格式。单个数据引脚端口完成输入输出双向传输。其数据包由5Byte(40Bit)组成。数据分小数部分和整数部分,一次完整的数据传输为40bit,高位先出。

DHT11的数据格式为:8bit湿度整数数据+8bit湿度小数数据+8bit温度整数数据+8bit温度小数数据+8bit校验和。

其中校验和数据为前四个字节相加。 传感器数据输出的是未编码的二进制数据。数据(湿度、温度、整数、小数)之间应该分开处理。

例如,某次从DHT11读到的数据如图所示:

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

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

温度= byte2 . byte1=28.0 ( ℃)

校验= byte4+ byte3+ byte2+ byte1=73(校验正确) 

数据发送流程:

首先主机发送开始信号,即:拉低数据线,保持t1(至少18ms)时间,然后拉高数据线t2(20~40us)时间,然后读取DHT11的响应,正常的话,DHT11会拉低数据线,保持t3(40~50us)时间,作为响应信号,然后DHT11拉高数据线,保持t4(40~50us)时间后,开始输出数据。 

DHT11输出数字‘0’的时序如图

DHT11输出数字‘1’的时序如图 

硬件连接

 软件设计

打开 dht11.c:

该部分代码就是根据我们前面介绍的单总线操作时序来读取 DHT11 的温湿度值的,DHT11 的温湿度值通过 DHT11_Read_Data 函数读取,如果返回 0,则说明读取成功,返回 1,则说明 读取失败。

main函数

int main(void)
{ 
u8 t=0,temperature,humidity; 
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组 2
delay_init(168); //初始化延时函数
uart_init(115200);//初始化串口波特率为 115200
LED_Init(); //初始化 LED 
LCD_Init(); //LCD 初始化 
POINT_COLOR=RED;//设置字体为红色
LCD_ShowString(30,50,200,16,16,"Explorer STM32F4");
LCD_ShowString(30,70,200,16,16,"DHT11 TEST");
LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
LCD_ShowString(30,110,200,16,16,"2014/5/7");
while(DHT11_Init()) //DHT11 初始化
{
LCD_ShowString(30,130,200,16,16,"DHT11 Error");
delay_ms(200);
LCD_Fill(30,130,239,130+16,WHITE);
delay_ms(200);
} 
LCD_ShowString(30,130,200,16,16,"DHT11 OK");
POINT_COLOR=BLUE;//设置字体为蓝色
LCD_ShowString(30,150,200,16,16,"Temp: C");
LCD_ShowString(30,170,200,16,16,"Humi: %");
while(1)
{ 
if(t%10==0)//每 100ms 读取一次
{ 
DHT11_Read_Data(&temperature,&humidity); //读取温湿度值
LCD_ShowNum(30+40,150,temperature,2,16); //显示温度 
LCD_ShowNum(30+40,170,humidity,2,16); //显示湿度 
} 
delay_ms(10);t++;
if(t==20)
{
t=0;LED0=!LED0;
}
}
}

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值