蓝桥杯单片机快速开发笔记——超声波测距

一、原理分析

        超声波测距是一种常见的测距方法,其原理是利用超声波在空气中传播的速度恒定且较快的特性,通过发送超声波信号并接收回波,计算出物体与传感器之间的距离。以下是超声波测距的原理和应用:

原理:

  1. 发送超声波信号:超声波传感器发送一个短脉冲的超声波信号。
  2. 接收回波:超声波信号遇到物体后会被反射回来,传感器接收到回波信号。
  3. 计算时间差:通过测量发送超声波和接收回波之间的时间差,可以计算出超声波在空气中传播的时间。
  4. 计算距离:利用声波在空气中的传播速度(约为340m/s),将时间差转换为距离,即距离 = 速度 x 时间差。

应用:

  1. 测距应用:超声波测距广泛应用于机器人导航、智能车辆、无人机等领域,用于测量物体与传感器之间的距离,实现避障、定位等功能。
  2. 液位检测:超声波传感器可以用于检测液体的液位高度,常见于水箱、油箱等液位监测系统中。
  3. 智能家居:超声波传感器可以用于智能家居系统中,如智能灯光控制、智能门窗感应等。
  4. 工业自动化:在工业自动化领域,超声波传感器常用于测量物体的距禋、检测物体的存在等。

  注意事项:

        超声波模块的TX引脚接到单片机的P1.0端口RX引脚接到单片机的P1.1端口,注意按照上图连接好。

二、思维导图

三、示例框架

#include "intrins.h"
#include "stc15.h"
#include "smg.h"sbit TX = P1^0;
sbit RX = P1^1;extern unsigned int dat_f;void Delay12us()                  //@12.000MHz 延时12us
{unsigned char i;_nop_();_nop_();i = 33;while (--i);
}void Send_Wave()                 //产生8个40KHx超声波信号
{unsigned char i;for(i = 0; i < 8; i++){TX = 1;           //将 TX 端口置为高电平,表示开始发送超声波信号。Delay12us();	    //调用延时函数 Delay12us(),延时12微秒。TX = 0;           //将 TX 端口置为低电平,表示停止发送超声波信号。Delay12us();}
}void Measure_Distance()	        //超声波测距
{unsigned int time = 0;    //定义了一个无符号整型变量 time,用于存储测量到的时间。//将 TMOD 寄存器的高四位清零,保留低四位不变。这样可以确保只修改定时器1的工作模式,而不影响其他位。TMOD &= 0x0f;	            //定时器1模式0,13位定时器,最大8192个计数脉冲								TL1 = 0x00;										TH1 = 0x00;		Send_Wave();		    //发送超声波信号							TR1 = 1;            //启动定时器1						while((RX == 1) && (TF1 == 0));    //在循环中等待接收到超声波信号的回波且没有超出测量范围。//TF1 是一个标识符,用于表示定时器1的溢出标志TR1 = 0;            //停止定时器				if(TF1 == 0)	            //正常测量范围							{time = TH1;			                        //将定时器1的值 TH1 读取到 time 变量中。						time = (time << 8) | TL1;		            //将定时器1的值 TL1 读取并与 TH1 合并,得到完整的时间值。dat_f = ((time / 10) * 17) / 100 + 3;   //根据计算公式将测量到的时间转换为距离,并存储在 dat_f 变量中。}else                        //超出测量范围			{TF1 = 0;dat_f = 999;}
}
  1. unsigned int dat_f;:定义一个无符号整型变量 dat_f,用于存储测量到的距离。

  2. void Delay12us():定义一个延时函数,用于实现12微秒的延时。

  3. void Send_Wave():定义一个函数,用于产生8个40KHz的超声波信号。在循环中,先将 TX 端口置为高电平,然后调用 Delay12us() 函数实现延时,再将 TX 端口置为低电平,再次调用 Delay12us() 函数实现延时。

  4. void Measure_Distance():定义一个超声波测距函数。在函数中:

    • 清零定时器1的模式位,设置为模式0,13位,最大8192个计数脉冲。
    • 将定时器1的低8位寄存器 TL1 和高8位寄存器 TH1 初始化为0。
    • 调用 Send_Wave() 函数发送超声波信号。
    • 启动定时器1。
    • 在 while 循环中,等待接收到超声波信号的回波或者超出测量范围。
    • 停止定时器1。
    • 如果测量在正常范围内,将定时器1的值读取到 time 变量中,然后根据一定的计算公式将测量到的时间转换为距离,并存储在 dat_f 变量中。
    • 如果超出测量范围,将 dat_f 设为999。

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

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

相关文章

gma 2.0.7 (2024.03.16) 更新日志

安装 gma 2.0.7 pip install gma2.0.7网盘下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1P0nmZUPMJaPEmYgixoL2QQ?pwd1pc8 提取码&#xff1a;1pc8 注意&#xff1a;此版本没有Linux版&#xff01; 编译gma的Linux虚拟机没有时间修复&#xff0c;本期Linux版继…

hadoop分布式环境搭建

准备三台centos虚拟机 。&#xff08;master&#xff0c;slave1&#xff0c;slave2&#xff09; (hadoop、jdk文件链接&#xff1a;https://pan.baidu.com/s/1wal1CSF1oO2h4dkSbceODg 提取码&#xff1a;4zra) 前四步可参考hadoop伪分布式环境搭建详解-CSDN博客 1.修改主机名…

论文阅读——MoCo

Momentum Contrast for Unsupervised Visual Representation Learning 动量在数学上理解为加权移动平均&#xff1a; yt-1是上一时刻输出&#xff0c;xt是当前时刻输入&#xff0c;m是动量&#xff0c;不想让当前时刻输出只依赖于当前时刻的输入&#xff0c;m很大时&#xff0…

pytorch升级打怪(六)

自动分化 torch.autograd张量、函数和计算图计算梯度禁用梯度跟踪 torch.autograd 在训练神经网络时&#xff0c;最常用的算法是反向传播。在该算法中&#xff0c;根据损失函数相对于给定参数的梯度调整参数&#xff08;模型权重&#xff09;。 为了计算这些梯度&#xff0c;…

电商数据API接口开发一键接入1688阿里巴巴api接口item_get-获得1688阿里巴巴商品详情api演示

要接入阿里巴巴1688 API接口获取商品详情&#xff0c;首先需要在开放平台注册一个账号并创建应用。创建应用后&#xff0c;你会得到Api Key和Api Secret&#xff0c;这两个参数将用于调用API接口。 接下来&#xff0c;你需要选择一个合适的阿里巴巴1688 API接口&#xff0c;例…

Linux操作系统-09-Tcpdump流量监控工具

从防火墙的角度来看&#xff0c;从入侵攻击的特征来看&#xff0c;从入侵检测的防护手段来看&#xff0c;从流量分析预警的来看&#xff0c;几乎所有的网络安全攻防的一些行为都可以通过流量来进行处理。 一、流量监控特征 对一个通信过程分析&#xff0c;首先需要把握5个最基…

软件测试6年,我的心路历程。。。

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 现在的大环境下&#xff0c;各行各业都开始内卷起来&#xff0c;测试也不例外&#xff0c;企业要…

LeetCode——两数相加

目录 一、两数相加 1、题目 2、题目解读 3、代码 二、反转链表 1、题目 2、题目解读 3、代码 三、两数相加 II 1、题目 2、题目解读 3、代码 反转链表再进行计算 借助栈 一、两数相加 1、题目 2. 两数相加 - 力扣&#xff08;Leetcode&#xff09; 给你两个 非…

【ES6】字符串新增方法

目录 1.String.fromCharCode() 2.String.raw() 3.实例方法&#xff1a;codePointAt() 4.实例方法&#xff1a;normalize() 5.实例方法&#xff1a;includes()、startWith()、endWith() 6.实例方法&#xff1a;padStart()、padEnd() 7.实例方法&#xff1a;repeat() 8.实…

MS16_016 漏洞利用与安全加固

文章目录 环境说明1 MS16_016 简介2 MS16_016 复现过程3 MS16_016 安全加固 环境说明 渗透机操作系统&#xff1a;kali-linux-2024.1-installer-amd64漏洞复现操作系&#xff1a;cn_windows_7_professional_with_sp1_x64_dvd_u_677031 1 MS16_016 简介 MS16_016 漏洞产生的原因…

华为机试题-最小矩阵

题目 给定一个矩阵&#xff0c;包含 N∗M 个整数&#xff0c;和一个包含 K 个整数的数组。现在要求在这个矩阵中找一个宽度最小的子矩阵&#xff0c;要求子矩阵包含数组中所有的整数。 输入描述: 第一行输入两个正整数N&#xff0c;M&#xff0c;表示矩阵大小。 接下来 N 行 M …

蓝桥杯数论基础知识Java代码

数论 欧几里得算法求最大公约数 import java.util.*; class Main {public static void main(String[] args){Scanner sc new Scanner(System.in);int asc.nextInt();int bsc.nextInt();System.out.print(gcd(a,b));}public static int gcd(int a,int b){return b!0 ? gcd(b…

WebServer -- 八股(终章)

&#x1f442; Honey Honey - 孙燕姿 - 单曲 - 网易云音乐 目录 &#x1f33c;触类旁通 &#x1f6a9;线程 && 进程 线程与进程的区别 多线程锁是什么 进程 / 线程 / 协程 的区别 线程切换时&#xff0c;需要切换的状态 &#x1f382;并发 && 并行 并…

Java基础夯实——八股文【2024面试题案例代码】

1、Java当中的基本数据类型 Java中常见的数据类型及其对应的字节长度和取值范围如下&#xff1a; byte&#xff1a;1字节&#xff0c;取值范围为-128到127。short&#xff1a;2字节&#xff0c;取值范围为-32,768到32,767。int&#xff1a;4字节&#xff0c;取值范围为-2,147…

【数据挖掘】练习2:数据管理2

课后作业2&#xff1a;数据管理2 一&#xff1a;上机实验2 # 编写函数stat&#xff0c;要求该函数同时计算均值&#xff0c;最大值&#xff0c;最小值&#xff0c;标准差&#xff0c;峰度和偏度。 install.packages("timeDate") library(timeDate) stat <- func…

Swagger Array 使用指南:详解与实践

Swagger 允许开发者定义 API 的路径、请求参数、响应和其他相关信息&#xff0c;以便生成可读性较高的文档和自动生成客户端代码。而 Array &#xff08;数组&#xff09;是一种常见的数据结构&#xff0c;用于存储和组织多个相同类型的数据元素。数组可以有不同的维度和大小&a…

windows平台Qt5连接wifi

文章目录 Windows WLAN API的使用代码中的关键点代码WifiHelper类的功能注意事项Windows WLAN API的使用 WlanOpenHandle:打开一个WLAN客户端句柄,用于后续的WLAN操作。WlanCloseHandle:关闭WLAN客户端句柄。WlanRegisterNotification:注册一个函数,该函数会在指定的WLAN接…

腾讯钟学丹:人工智能成为汽车行业新质生产力 推动数智化升级

近日&#xff0c;在中国电动汽车百人会论坛&#xff08;2024&#xff09;新质生产力分论坛上&#xff0c;腾讯智慧出行副总裁钟学丹发表了题为《AI驱动汽车“新智能”》的主题演讲&#xff0c;分享了腾讯AI大模型等新技术在汽车产业的创新应用成果。 腾讯智慧出行副总裁钟学丹 …

【鸿蒙HarmonyOS开发笔记】如何使用图片插帧将低像素图片清晰放大

开发UI时&#xff0c;当我们的原图分辨率较低并且需要放大显示时&#xff0c;图片会模糊并出现锯齿。如下图所示 这时可以使用interpolation()方法对图片进行插值&#xff0c;使图片显示得更清晰。该方法的参数为ImageInterpolation枚举类型&#xff0c;可选的值有: ImageInte…

预防诈骗之兼职,赚钱App的弊端

前言&#xff1a; 本期文章是我一个民警朋友让我发布的一期关于诈骗的文章&#xff0c;在2024年3月某日&#xff0c;一人在某某兼职赚钱类app被骗200元&#xff0c;所以请认真详细的观看完&#xff0c;实实预防诈骗&#xff0c;诈骗一直存在于身边&#xff0c;随着科技的发展&…