码迷,mamicode.com
首页 > 其他好文 > 详细

传感器介绍之DHT11

时间:2016-04-04 11:46:52      阅读:393      评论:0      收藏:0      [点我收藏+]

标签:

一.DHT11介绍

     DHT11 数字温湿度传感器,如图所示,是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC 测温元件,并与一个高性能8 位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个DHT11 传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式储存在OTP 内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,信号传输距离可达20 米以上,使其成为各类应用甚至最为苛刻的应用场合的最佳选则。产品为4 针单排引脚封装。连接方便,特殊封装形式可根据用户需求而提供。

技术分享

二.编程分析

      DHT11是通过单总线与单片机进行通信的,这样做的好处就是占用资源少,编程实现简单,发送数据的具体格式为 8bit 湿度整数数据+8bit 湿度小数数据+8bi 温度整数数据+8bit 温度小数数据+8bit校验和。主机先要给DHT11发送一个启动新号,等待DHT11做出响应,然后再进行检测温湿度的发送及传输,下面通过一张图来了解一下DHT11的传输过程。

技术分享技术分享

     从图上我们可以看出,主机要先把应答线拉低,因为空闲的时候是高状态,然后再次拉高,等待DHT11的响应,也就是等待数据线被拉低,当DHT11准备输出数据时,再把数据线拉低,输出数据给单片机,单片机可以根据高电平时间的长短来判别输出的数据是0还是1,最后在进行校验位的检查,从而成传输。

三.程序

   下面给出DHT11读数据的程序

  

uchar DhtReadByte(void)

{    

bit bit_i;  

uchar j;  

uchar dat=0;  

for(j=0;j<8;j++)     

{  

 while(!TRH);   // 等待低电平结束    

Delay5us();    // 延时   Delay5us();  

 Delay5us();   Delay5us();    // 延时   

Delay5us();   Delay5us();  

 if(TRH)     // 检测数据线是高电平还是低电平  

 {    bit_i=1;    while(TRH);   }

  else   {    bit_i=0;   }   

dat<<=1;       // 将该位移位保存到dat变量中   

dat|=bit_i;     }    

return(dat);  }

/**************  函数:void ReadTrh(void)  ---------------------------    说明:将读取到的温湿度通过串口发送出去    参数:  返回值:读取到的字节内容 ***********/

void ReadTrh(void)

{     uchar check;    // 校验字节  

uchar TemHig,TemLow,HumiHig,HumiLow;        

TRH=0;      // 主机拉低18ms  DelayMs(18);  

TRH=1;      // DATA总线由上拉电阻拉高 主机延时20us

 Delay5us();    Delay5us();  Delay5us();  Delay5us();     // 主机设为输入 判断从机响应信号

 while(!TRH);    // 等待DHT 80us的低电平结束  

while(TRH);     // 等待DHT 80us的高电平结束  

HumiHig = DhtReadByte(); // 湿度高8位  

HumiLow = DhtReadByte();  // 湿度低8为,总为0

 TemHig  = DhtReadByte(); // 温度高8位  

TemLow  = DhtReadByte();  // 温度低8为,总为0

 check   = DhtReadByte(); // 8位校验码,其值等于读出的四个字节相加之和的低8位  TRH=1;    // 释放总线

 if(check==HumiHig + HumiLow + TemHig + TemLow)    // 如果收到的数据无误

 {   Send(TemHig);   Send(HumiHig);  } }  

四.总结

   上述程序是从DHT11温湿度传感器读出数并发送给串口值的程序,要学这一类传感器的程序,大家要记得,学会看懂时序图,会用就可以了,需要DHT11的pdf的小伙伴,请留下联系方式或私聊我0.0

 

传感器介绍之DHT11

标签:

原文地址:http://www.cnblogs.com/sjsxk/p/5351525.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!