传感器介绍之DHT11

摘要:
1、 DHT11引入了DHT11数字温度和湿度传感器,如图所示,这是一个具有校准数字信号输出的温度和湿度复合传感器。每个DHT11传感器都在极其精确的湿度校准室中进行校准。主机应首先向DHT11发送新的启动号码,等待DHT11响应,然后发送和传输温度和湿度检测。接下来,让我们通过一张图来了解DHT11的传输过程。

一.DHT11介绍

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

传感器介绍之DHT11第1张

二.编程分析

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

传感器介绍之DHT11第2张传感器介绍之DHT11第3张

     从图上我们可以看出,主机要先把应答线拉低,因为空闲的时候是高状态,然后再次拉高,等待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》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Opencv处理鼠标事件-OpenCV步步精深从源码看Spring Boot 2.0.1下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Arduino I2C + 温湿度传感器HTS221

主要特性 HTS221是意法半导体(STMicroelectronics)生产的小体积、数字式温湿度传感器IC。该IC目前在官网仍处在“评估”状态。其主要特性: 工作电压:1.7~3.6V 数据输出频率(ODR)可设:1Hz ~ 12.5Hz 低功耗:2μA@1Hz ODR 温度精度:给出误差典型值+/-0.5°C, 15~40°C;但注明“Typic...

3D数据采集和重建

3D数据采集和重建是从传感器数据生成三维或时空模型。一般而言,这些技术和理论适用于大多数或所有传感器类型,包括光学,声学,激光扫描,[1]雷达,热学,[2]地震。[3] [4] 内容 ·        1收购 1.1从2D图像中获取 1.2从获得的传感器数据中获取 1.3从现场传感器获取 1.4软件 1.5成本 2对象重建 2.1软件 3另见 4参...

【雕爷学编程】Arduino动手做(55)--DHT11温湿度传感器

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和模块,依照实践(动手试试)出真知的理念,以学习和交流为目的,这里准备逐一做做实验,不管能否成功,都会记录下来---小小的进步或是搞不掂的问题,希望能够抛砖引玉。  【Arduino】168种传感器模块系列实验(资料+代码+图形...

Vim Clutch | 面向脚踏板编程

简评:这是使用硬件制作的一个离合器踏板,控制 Vim 的 insert mode 和 normal mode ~ Github 上有个关于 Vim 的项目,项目作者 Aleksandr Levchuk 可以说是非常有趣了。 他为了改善 Vim 的文本编辑速度,亲自动手为 Vim 制作了脚踏板离合器。当踩下踏板时,就会让 Vim 进入插入模式(效果如按一样)...

无锡美新赵阳:创业18年,一辈子做好一家企业(创业是一种生活方式;为了赚钱而创业,那是扯淡”。最重要的是做自己喜欢做的事情)

  会议室的门开了,赵阳大步迈了进来,带着一身的仆仆风尘——助理说,他才和客户谈好业务便匆匆往回赶——这场景,仿佛和七年前重叠起来。  那年,无锡日报记者采访了创新创业人物、身为美新半导体董事长兼CEO的赵阳;如今,还是在高新区新辉环路2号,还是那个头衔,我们的话题却有了更多的延展性。  一晃,当年北大物理系高才生、后赴美国普林斯顿大学攻读物理和电子工程并...

Android 方向传感器

一般情况下,在Android系统中获取手机的方位信息在api中有TYPE_ORIENTATION常量,可以像得到加速度传感器那样得到方向传感器sm.getDefaultSensor(Sensor.TYPE_ORIENTATION);然而我们这样做的话在最新版的SDK中就会看到这么一句话:“TYPE_ORIENTATION   This constant i...