[PIC®/AVR®/dsPIC®产品] 【CuriosityNano测评报告】10.温湿度传感器DHT11的读取实验

[复制链接]
 楼主| hu9jj 发表于 2021-6-19 13:26 | 显示全部楼层 |阅读模式
#申请原创#

    温湿度传感器DHT11模块是常见的传感器,其湿度的测量范围是5~95%,温度的测量范围是-20~60℃,尽管其精度低,误差大,但对普通家用来说是可以满足的。这个传感器在之前也做过测试,本次测试则是按照传感器的通讯方式重新编写代码,读取数据的过程在一个函数内完成,程序简洁明了,执行的效率也提高了。
    DHT11传感器是单线通讯协议,平时DHT11模块处于低功耗休眠状态,主机将数据线拉低20ms,然后拉高数据线,DHT11模块便开始响应,首先给出83毫秒的低电平和87毫秒的高电平应答信号,随后便输入40位‘0’或‘1’数据,包含2个字节的湿度数据、2个字节的湿度数据以及1个字节的和校验数据。完整的时序如下:


    DHT11的应答信号及数据时序如下:


    通讯协议的特征如下:


    本次的代码就是按照这些数据编写的,其中判断‘0’和‘1’的方法是通过检查循环次数多少来判断的,而之前的代码则是通过高电平开始后延时40微秒后再读取数据线的电平来判断。
    按照上表,信号‘0’的高电平时间为24毫秒左右,信号‘0’的高电平时间为71毫秒左右,而我的读取循环是从100开始每毫秒递减,代码如下:
  1. retry = 100;
  2.             while((DHT11_GetValue()>0)&&retry>0){
  3.     retry--;
  4.     delay_us(1);
  5.             }


    开始我没有考虑其它代码执行需要的时间,简单地以retry变量数据50为分界线,低于50认为是信号‘0’,高于50则认为是信号‘0’,可实际执行却是读取的全是0。在测试过程中我用一个LED引脚来模拟DHT11信号,即根据DHT11信号线的状态来改变LED引脚的电平,从时序图上看除了稍有滞后外模拟基本正确,但均未读取到有效数据。下面时序图的第一行是DHT11的数据线,第二行则是模拟的LED引脚电平:


    最后我只好通过数组将每个信号保存下来,最后发送到串口调试助手来观看,发现上述代码的循环时间远远超过1毫秒,信号‘0’时只循环了2次左右,信号‘1’也仅循环了5次左右。下图为各个信号的retry数值:


    最后我将retry值的分界点定在97,才成功地读取出数据。下面是完整的读取函数:
  1. /*********************************************
  2. * 函数名称:DHT11_Read_Val()
  3. * 函数功能:读取温湿度传感器数据
  4. * 入口参数:无
  5. * 出口参数:无
  6. * 备注:数据存放在全局变量DHT中,DHT[0]=湿度整数部分,DHT[1]=湿度小数部分,DHT[2]=温度整数部分,DHT[3]=温度小数部分,
  7. *      湿度值(范围:20% RH ~ 90% RH 分辨率:0.1%RH 精度:±5% RH (25℃))
  8. *      温度值(范围:0℃ ~ 50℃ 分辨率:0.1℃ 精度:±2)
  9. *********************************************/
  10. void DHT11_Read_Val(void)
  11. {
  12.     uint8_t i,j,dat,retry;
  13.     DHT11_SetDigitalOutput();
  14.     DHT11_SetLow();               //拉低DQ,发送启动信号
  15.     delay_ms(20);                    //等待18~30ms
  16.     DHT11_SetHigh();              //DQ=1
  17.     delay_us(20);                    //主机拉高20~40us
  18.     DHT11_SetDigitalInput();    //总线切换到输入模式
  19.     retry = 100;
  20.     while((!DHT11_GetValue())&&retry){
  21.         retry--;
  22.         delay_us(1);
  23.     }
  24.     if(retry==0){                     //低电平响应信号超时
  25.         return;
  26.     }
  27.     retry = 100;
  28.     while((DHT11_GetValue())&&retry){
  29.         retry--;
  30.         delay_us(1);
  31.     }
  32.     if(retry==0){                     //高电平响应信号超时
  33.         return;
  34.     }
  35.     for(j=0; j<5; j++){            //持续读入五个字节数据
  36.         dat = 0;
  37.         for(i=0; i<8; i++){
  38.             retry = 100;
  39.             while((0==DHT11_GetValue())&&retry>0){
  40.                 retry--;
  41.                 delay_us(1);
  42.             }
  43.             retry = 100;
  44.             while((DHT11_GetValue()>0)&&retry>0){
  45.                 retry--;
  46.                 delay_us(1);
  47.             }
  48.             dat<<=1;                 //左移一位
  49.             if(retry<97)
  50.                 dat|=0x01;
  51.         }
  52.         DHT[j] = dat;
  53.     }
  54.     if(DHT[4]==DHT[0]+DHT[1]+DHT[2]+DHT[3])
  55.          DHT[4] = 0;
  56.     else
  57.          DHT[4] = 1;
  58. }


    下图为测试的过程:


    这是屏幕中显示读取的数据,前面是湿度值,后面是温度值:



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
51xlf 发表于 2021-7-3 16:04 | 显示全部楼层
OLED能学得快些  
ccook11 发表于 2021-7-10 13:56 | 显示全部楼层
dht11与ds18b20哪个测温度更精确
maudlu 发表于 2021-7-10 13:57 | 显示全部楼层
误差怎么那么大?
earlmax 发表于 2021-7-10 13:57 | 显示全部楼层
温湿度测量准确吗  
mattlincoln 发表于 2021-7-10 13:58 | 显示全部楼层
dht11型号的元器件怎么样?  
mollylawrence 发表于 2021-7-10 13:58 | 显示全部楼层
SHT11和DHT11可以互换吗?  
geraldbetty 发表于 2021-7-10 14:00 | 显示全部楼层
DHT11上面用的是湿敏电阻
macpherson 发表于 2021-7-10 14:00 | 显示全部楼层
延时时间怎么确定的      
jonas222 发表于 2021-7-10 14:01 | 显示全部楼层
精度高一些用AD590  
claretttt 发表于 2021-7-10 14:02 | 显示全部楼层
需要上拉电阻吗   
everyrobin 发表于 2021-7-10 14:02 | 显示全部楼层
这个是逻辑分析仪吗  
geraldbetty 发表于 2021-7-10 14:03 | 显示全部楼层
温湿度传感器的价格跟精度有很大关系  
mollylawrence 发表于 2021-7-10 14:03 | 显示全部楼层
如何同时使用两个dht11原理   
mattlincoln 发表于 2021-7-10 14:03 | 显示全部楼层
am2302与dht11哪个更好  
maudlu 发表于 2021-7-10 14:03 | 显示全部楼层
dht21与sht11区别是什么?  
earlmax 发表于 2021-7-10 14:03 | 显示全部楼层
测试的效果怎么样   
ccook11 发表于 2021-7-10 14:03 | 显示全部楼层
DHT11与SHT11选哪个?  
everyrobin 发表于 2021-7-10 14:03 | 显示全部楼层
这个仪器在哪里购买的?  
claretttt 发表于 2021-7-10 14:03 | 显示全部楼层
有完整的工程文件吗  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:Microchip
简介:让我们来为您提供帮助。我们可提供各种资源来帮助您解决一切问题。是否需要与我们的客户支持团队联系?您可以通过电话、在线聊天功能或电子邮件与他们联系。

151

主题

1063

帖子

11

粉丝
快速回复 在线客服 返回列表 返回顶部
认证:Microchip
简介:让我们来为您提供帮助。我们可提供各种资源来帮助您解决一切问题。是否需要与我们的客户支持团队联系?您可以通过电话、在线聊天功能或电子邮件与他们联系。

151

主题

1063

帖子

11

粉丝
快速回复 在线客服 返回列表 返回顶部