传感器介绍之DHT11
一.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
最新文章
- oracle应用启动时常会报未知服务名
- Linux命令详解之–cd命令
- java基础之数据类型转换
- ECSHOP 订单状态 记录
- PHP漏洞全解(五)-SQL注入攻击
- JS之路——Math数学对象
- POJ2431 Expedition(排序+优先队列)
- 总结:spring 的ioc 知识点
- 删除MySQL二进制日志
- Codeforces Gym 100269E Energy Tycoon 贪心
- 【基础】26个命令玩转linux,菜鸟及面试必备
- 借腾讯开源 VasDolly,谈谈 Android 签名和多渠道打包的原理!
- Linux操作系统log日志日志分别指什么
- [面试]中高级测试工程师必备,月薪15K+
- Cinder模块学习
- UTF8编码的Base64解密 MSSQL实现
- PostMan 使用Interceptor 发送带cookie的请求一直loading
- Nginx安装配置详解
- UVA-11865 Stream My Contest (朱-刘 算法+二分)
- Unity内存优化技术测试案例
热门文章
- canvas简单处理图片(反色处理)
- [转载]Difference between <;context:annotation-config>; vs <;context:component-scan>;
- SqlServer触发器判断对表操作类型(增、删、改)并将修改后的数据映射到新表
- [原创]如何在Parcelable中使用泛型
- trunk 的坑
- Java语言程序设计(基础篇) 第四章 数学函数、字符和字符串
- kafka集群搭建和使用Java写kafka生产者消费者
- 实现一个小目标,动动小指,分享可得iphone7/ipad/U盘|奥威软件
- 使用T4模板生成代码的学习
- 基于Java Mina 通信框架的JT/T809转发服务器设计