- 硬件介绍
- 1.使用场景
- 2. 工作原理
- 讲解代码
- 重点
- 1、定义引脚
- 2、定义时间
- 3、获取时间和距离
- 4、主函数
- 5、延时函数
- 结尾
超声波测距模块在平时做电子产品、机器人、智能设备中的应用里还是非常常用的,使用非常简单,但是代码的编写和理解其实并不容易,在这里想和大家交流一下。有不同的意见和建议可以给我留言或者私信我。
2. 工作原理-
超声波测距模块是用来测量距离的一种产品,通过发送和就接收超声波,利用时间差和声音传播速度,计算出模块到前方障碍物的距离。
-
HC-SR04这个模块是2线制的(不包含电源线),Echo与Trig,Trig负责接收10us以上的触发信号,Echo则是输出距离信号;下面是时序图:
(1)采用 IO 触发测距,给至少 10us 的高电平信号; (2)模块自动发送 8 个 40khz 的方波,自动检测是否有信号返回; (3)有信号返回,通过 IO 输出一高电平 (4)超声波从发射到返回的时间.测试距离=(高电平时间*声速(340M/S))/2;
-
总的来说就是: 控制口发一个 10US 以上的高电平,就可以在接收口等待高电平输出.一有输出就可以开定时器计时,当此口变为低电平时就可以读定时器的值,此时就为此次测距的时间,方可算出距离.如此不断的周期测,就可以达到你移动测量的值了。
-
接口定义: Vcc、 Trig(控制端)、 Echo(接收端)、 Gnd
-
调节最大距离
上图标志电阻即 R3,可以调节最大探测距离。R3 电阻为 392,探测距离最大 4.5M 左右,探测角度小于 15 度; R3 电阻为 472,探测距离最大 7M 左右,探测角度小于 30 度;出厂默认 392,即最大探测距离 4.5M 左右。 R3 电阻大,接收部分增益高,检测距离大,但检测角 度会相应变大,容易检测到前方旁边的物体。当然,客户在不要求很高的测试距离的条件下,可以改小 R3 来减小探测角度,这时最大测距会减小。
-
应用注意事项: 1:此模块不宜带电连接,如果要带电连接,则先让模块的 Gnd 端先连接。否则会影响 模块工作。 2:测距时,被测物体的面积不少于 0.5 平方米且要尽量平整。否则会影响测试结果。
代码的核心在于中断。这点很重要,超声波测距模块的重点就是在于中断, 定时器/计数器这部分需要有一定的理解。 初始化的同时打开了定时器,同时内部中断打开并开始计数操作, 待超声波的输入端接收到返回波之后关闭内部中断, 停止计数,接下来通过记到的时间计算被测物的距离(s=time*340/2m)
1、定义引脚#include
sbit Trig = P2^0;
sbit Echo = P2^1;
2、定义时间
void Delay10us()
{
TMOD |= 0x1;
TH0 = 0xFF;
TL0 = 0xF6;
TR0 = 1;
while(!TF0);
TF0 = 0;
}
void Rstart()
{
Trig=0;
Trig=1;
Delay10us();
Trig=0;
}
3、获取时间和距离
int gettime()
{
unsigned int time = 0;
time = TH0*256+TL0// TH0
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?