嵌入式进阶——温湿度传感器

news2024/11/15 23:55:44

🎬 秋野酱:《个人主页》
🔥 个人专栏:《Java专栏》《Python专栏》

⛺️心若有所向往,何惧道阻且长

文章目录

    • DHT11温湿度模块
    • 原理图
    • 官方参考电路
    • 数据线通讯协议
      • 单总线传送数据位定义
      • 数据格式:
      • 校验位数据定义
    • 协议实现

DHT11温湿度模块

DHT11 数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有枀高的可靠性与卓越的长期稳定性。传感器包括一个电容式感湿元件和一个 NTC 测温元件,并与一个高性能 8 位单片机相连接。

原理图

在这里插入图片描述
● VCC: 电源。供电3v3-5v5
● GND: 接地
● DATA: 数据线

官方参考电路

在这里插入图片描述
微处理器与 DHT11 的连接典型应用电路如上图所示,DATA 上拉后与微处理器的 I/O 端口相连。

  1. 典型应用电路中建议连接线长度短于 5m 时用 4.7K 上拉电阻,大于 5m 时根据实际情况降低上拉电 阻的阻值。
  2. 使用 3.3V 电压供电时连接线尽量短,接线过长会导致传感器供电不足,造成测量偏差。
  3. 每次读出的温湿度数值是上一次测量的结果,欲获取实时数据,需连续读取 2 次,但不建议连续多次 读取传感器,每次读取传感器间隔大于 2 秒即可获得准确的数据。
  4. 电源部分如有波动,会影响到温度。如使用开关电源纹波过大,温度会出现跳动。

数据线通讯协议

DHT11 器件采用简化的单总线通信。单总线即只有一根数据线,系统中的数据交换、控制均由单总线
完成。设备(主机或从机)通过一个漏极开路或三态端口连至该数据线,以允许设备在不发送数据时能够
释放总线,而让其它设备使用总线;单总线通常要求外接一个约 4.7kΩ 的上拉电阻,这样,当总线闲置时,
其状态为高电平。由于它们是主从结极,只有主机呼叫从机时,从机才能应答,因此主机访问器件都必须
严格遵循单总线序列,如果出现序列混乱,器件将不响应主机。

在这里插入图片描述

单总线传送数据位定义

DATA 用于微处理器与 DHT11 之间的通讯和同步,采用单总线数据格式,一次传送 40 位数据,高位先 出。

数据格式:

8bit 湿度整数数据 + 8bit 湿度小数数据 + 8bit 温度整数数据 + 8bit 温度小数数据 + 8bit 校验位。
注:其中湿度小数部分为 0。

校验位数据定义

8bit 湿度整数数据 + 8bit 湿度小数数据 + 8bit 温度整数数据 + 8bit 温度小数数据”8bit 校验位等于 所得结果的末 8 位。
响应的数据时序
在这里插入图片描述

协议实现

u8 DHT11_read_data(u8* dat) {
	u16 count; 
	u8 i, j;
	// 主机: 总线拉低至少18ms
	// 主机发起
	DHT = 0;
	delay_ms(19);
	DHT = 1;
	count = 0;
	while(DHT == 1 && count < 25) {
		count++;
		delay1us();
	}
	if(count > 25) return 1;
	
	count = 0;
	while(DHT == 0 && count < 83) {
		count++;
		delay1us();
	}
	if(count > 83) return 2;
	
	count = 0;
	while(DHT == 1 && count < 87) {
		count++;
		delay1us();
	}
	if(count > 87) return 3;
	
	// 开始接收数据
	for(i = 0; i < 5; i++) {
		for(j = 0; j < 8; j++) {
			dat[i] <<= 1;
			// 54us低 23-27高电平 表示0
			// 54us低 68-74高电平 表示1
			count = 0;
			//等待变为高电平
			while(DHT == 0 && count <= 54) {
				count++;
				delay1us();
			}
			if(count > 54) return 4;
			count = 0;
			// 等待变为低电平
			while(DHT == 1 && count <= 74) {
				count++;
				delay1us();
			}
			if(count > 27) {
				dat[i] |= 1;
			}
		}
	}
	if(dat[0] + dat[1] + dat[2] + dat[3] != dat[4]) {
		return 5;
	}
	return 0;
}

实现业务需要参考逻辑分析仪,安装步骤完成数据的解析和分析,大概流程如下

  1. 主机发起起始信号。先拉低电平18ms,然后拉高。
DHT = 0;
delay_ms(19);
DHT = 1;
count = 0;
while(DHT == 1 && count < 25) {
	count++;
	delay1us();
}
if(count > 25) return 1;

握手响应。确定传感器是否发出响应信号,信号先低电平83us,然后高电平87us

count = 0;
while(DHT == 0 && count < 83) {
    count++;
    delay1us();
}
if(count > 83) return 2;
count = 0;
while(DHT == 1 && count < 87) {
    count++;
	delay1us();
}
if(count > 87) return 3;

握手响应。确定传感器是否发出响应信号,信号先低电平83us,然后高电平87us

count = 0;
while(DHT == 0 && count < 83) {
    count++;
    delay1us();
}
if(count > 83) return 2;
count = 0;
while(DHT == 1 && count < 87) {
    count++;
	delay1us();
}
if(count > 87) return 3;

数据接收阶段。进行高低电平的判断,将高低电平的变化转换为 数字的0和1。54us低 23-27高电平 表示0。54us低 68-74高电平 表示1。结果是先高位后低位的形式。

for(i = 0; i < 5; i++) {
    for(j = 0; j < 8; j++) {
        // 54us低 23-27高电平 表示0
        // 54us低 68-74高电平 表示1
        count = 0;
        //等待变为高电平
        while(DHT == 0 && count <= 54) {
            count++;
            delay1us();
        }
        
        count = 0;
        // 等待变为低电平
        while(DHT == 1 && count <= 74) {
            count++;
            delay1us();
        }
        // 先移位
        dat[i] <<= 1;
        // 后赋值
        if(count > 27) {
            dat[i] |= 1;
        }
	}
}

数据校验

if(dat[0] + dat[1] + dat[2] + dat[3] != dat[4]) {
    return 5;
}

原始数据获得后,就是将数据转化为温湿度数据。
温度转化:

u8 DHT11_get_temperature(u8 *humidity, float *temperature) {
	u8 dat[5];
	u8 ret;
	u8 retry = 0;
	while((ret = DHT11_read_data(dat)) && retry < 10) {
		retry++;
	}
	
	*humidity = dat[0];// 获得正数部分
    
	*temperature = dat[2] & 0x7F;// 获得正数部分
	*temperature += (dat[3] * 0.1);//加上小数部分
	if(dat[2] & 0x80) {
		//表示负数
		*temperature *= -1;
	}
	return ret;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1705387.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

哇!数据中台竟是企业数字化转型的关键力量!

在当今数字化浪潮席卷的时代&#xff0c;数据中台正成为企业实现数字化转型的关键力量。那么&#xff0c;究竟什么是数据中台呢&#xff1f;它乃是一种持续让企业数据活跃起来的机制&#xff0c;能够将企业内各部分数据汇聚至一个平台&#xff0c;达成数据的统一化管理。 数据中…

idea中快速找到当前git地址

idea中快速找到当前git地址 然后双击就可以看到地址了

apexcharts数据可视化之饼图

apexcharts数据可视化之饼图 有完整配套的Python后端代码。 本教程主要会介绍如下图形绘制方式&#xff1a; 基础饼图单色饼图图片饼图 基础饼图 import ApexChart from react-apexcharts;export function SimplePie() {// 数据序列const series [44, 55, 13, 43, 22]// …

IEEE Account个人姓名修改方法,5分钟解决!

一、背景 之前在注册IEEE Account时&#xff0c;最基础的first name是名&#xff0c;last name是姓都搞错了&#xff0c;太粗心了。然后发现IEEE账户的姓名不能随便修改&#xff0c;需要联系IEEE support center&#xff0c;然后经过一系列探索&#xff0c;发现下面两种方法可…

微软如何打造数字零售力航母系列科普11 - 什么是Microsoft Fabric中的数据工程?

什么是Microsoft Fabric中的数据工程&#xff1f; 目录 1. Lakehouse(湖边小屋) 2. Apache Spark Job Definition (作业定义) 3. Notebook(笔记本) 4. Data Pipeline (数据管道) Microsoft Fabric中的数据工程使用户能够设计、构建和维护基础架构和系统&#xff0c;使其组…

电机控制系列模块解析(24)—— 飞车转速跟踪

转速跟踪启动&#xff1a;又名顺风&&逆风启动、或者飞车启动、或者启动前转速检测。应用背景见附录。 转速跟踪 也可以理解为 对正在高速运行的电机 进行初始位置辨识。 一、转速跟踪方案 转速跟踪是电机控制中的一项关键技术&#xff0c;尤其在变频驱动、伺服系统等…

WebGIS 智慧城市三维可视化综合管控

智慧城市可视化建设不仅提升了城市管理的科技含量和效率&#xff0c;还促进了城市可持续发展&#xff0c;提升了居民的生活质量。随着技术的不断发展和应用&#xff0c;智慧城市可视化建设将会更加丰富和完善&#xff0c;为城市发展带来更加广阔的前景。 图扑应用自研 HT for W…

推荐一个实用的ETF短线交易策略

就短线交易策略来说&#xff0c;ETF是一种很好的工具&#xff0c;流动性充足&#xff0c;交易成本低廉&#xff0c;没有印花税&#xff0c;买卖一个回合的手续费0.02%就够了&#xff0c;甚至更低&#xff0c;而股票卖出时&#xff0c;光印花税就要收0.1%&#xff0c;买卖一个回…

MyBatis多数据源配置与使用,基于ThreadLocal+AOP

导读 MyBatis多数据源配置与使用其一其二1. 引依赖2. 配置文件3. 编写测试代码4. 自定义DynamicDataSource类5. DataSourceConfig配置类6. AOP与ThreadLocal结合7. 引入AOP依赖8. DataSourceContextHolder9. 自定义注解UseDB10. 创建切面类UseDBAspect11. 修改DynamicDataSourc…

Spark Sql写代码方式(yarn)以及 spark sql整合hive详解

引入部分&#xff1a;通常我们在IDEA中写spark代码中如果设置了loacl参数&#xff0c;基本都是在IDEA本地运行&#xff0c;不会提交到 standalone或yarn上运行&#xff0c;在前几篇文章中写的大多数都是该种形式的spark代码&#xff0c;但也写到了如何将spark代码提交到standal…

如何防止锂电池反充

锂电池通常用于许多需要备用电源的设备应用中&#xff0c;例如实时时钟 (RTC) 和存储设备。当锂电池不是电路中的单一电源时&#xff0c;如果电池意外连接到可为电池充电的电源&#xff0c;则存在火灾或爆炸的风险。本应用笔记提供了在备用电源开关电路中连接锂电池所需的信息&…

springboot实现多开发环境匹配置

首先logbok-spring.xml里面的内容 <?xml version"1.0" encoding"UTF-8"?> <configuration><!-- 开发、测试环境 --><springProfile name"dev,test"><include resource"org/springframework/boot/logging/log…

MouseBoost Pro for Mac v3.4.7 鼠标右键助手 安装教程【支持M芯片】

MouseBoost Pro for Mac v3.4.7 鼠标右键助手 安装教程【支持M芯片】 原文地址&#xff1a;https://blog.csdn.net/weixin_48311847/article/details/139201501

Midjourney进阶篇 | 10大高阶风格,内附关键词

MJ绘画10大高阶风格&#xff0c;内附关键词&#xff01; 前言迪士尼风格 Disney style水彩画 watercolor paint波普艺术 pop art全息色彩风格 Holographic电影风格 film still二次元风格 Anime style赛博朋克风格 cyberpunk style极简主义风格 Minimalist design提示词&#xf…

【权威出版】2024年电气工程与传感检测技术国际会议(EESDT 2024)

2024年电气工程与传感检测技术国际会议 2024 International Conference on Electrical Engineering and Sensing Detection Technology 【1】会议简介 2024年电气工程与传感检测技术国际会议即将召开&#xff0c;这是一场汇聚全球电气工程与传感检测技术领域精英的学术盛会。 本…

832. 翻转图像 - 力扣

1. 题目 给定一个 n x n 的二进制矩阵 image &#xff0c;先 水平 翻转图像&#xff0c;然后 反转 图像并返回 结果 。 水平翻转图片就是将图片的每一行都进行翻转&#xff0c;即逆序。 例如&#xff0c;水平翻转 [1,1,0] 的结果是 [0,1,1]。 反转图片的意思是图片中的 0 全部被…

AT32F415 使用embedded studio笔记

由于Embedded Studio还没有支持雅特力的支持包&#xff0c;因此通过MDK的工程无法直接导入到embedded studio中。需要自己新建一个工程。 新建的时候是可以选择雅特力的单片机的。 工程新建好后&#xff0c;默认会包含3个文件。如下图所示。其中两个汇编文件的作用是之前MDK的…

Linux-----sed案例练习

1.数据准备 准备数据如下&#xff1a; [rootopenEuler ~]# cat openlab.txt My name is jock. I teach linux. I like play computer game. My qq is 24523452 My website is http://www.xianoupeng.com My website is http://www.xianoupeng.com My website is http://www.…

成都爱尔眼科巫雷院长教你在家“自查”白内障

检查以下自己&#xff08;或者父母、亲属&#xff09;是否有发生以下情况&#xff1a; 视物模糊视物模糊是白内障的主要症状。2、眼前暗影白内障早期&#xff0c;有的患者眼前会出现阴影&#xff0c;这是因为晶状体发生浑浊。晶状体混浊在眼前固定位置&#xff0c;患者会“看到…

PID传感器在光电显示行业VOC气体检测的应用

随着光电显示技术的飞速发展&#xff0c;液晶显示器等显示器件产品已经成为我们日常生活和工作中不可或缺的一部分。然而&#xff0c;在生产过程中&#xff0c;液晶显示器会释放大量的挥发性有机物&#xff08;VOC&#xff09;气体&#xff0c;对生产环境及工作人员的健康构成威…