前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >超声波测距模块

超声波测距模块

作者头像
跋扈洋
发布2021-01-28 22:33:20
发布2021-01-28 22:33:20
1K00
代码可运行
举报
文章被收录于专栏:物联网知识物联网知识
运行总次数:0
代码可运行

硬件介绍 1.使用场景 超声波测距模块在平时做电子产品、机器人、智能设备中的应用里还是非常常用的,使用非常简单,但是代码的编写和理解其实并不容易,在这里想和大家交流一下。有不同的意见和建议可以给我留言或者私信我。 2. 工作原理

超声波测距模块是用来测量距离的一种产品,通过发送和就接收超声波,利用时间差和声音传播速度,计算出模块到前方障碍物的距离。

HC-SR04这个模块是2线制的(不包含电源线),Echo与Trig,Trig负责接收10us以上的触发信号,Echo则是输出距离信号;下面是时序图:

3.

(1)采用 IO 触发测距,给至少 10us 的高电平信号; (2)模块自动发送 8 个 40khz 的方波,自动检测是否有信号返回; (3)有信号返回,通过 IO 输出一高电平 (4)超声波从发射到返回的时间.测试距离=(高电平时间*声速(340M/S))/2;

总的来说就是: 控制口发一个 10US 以上的高电平,就可以在接收口等待高电平输出.一有输出就可以开定时器计时,当此口变为低电平时就可以读定时器的值,此时就为此次测距的时间,方可算出距离.如此不断的周期测,就可以达到你移动测量的值了。

  1. 接口定义: Vcc、 Trig(控制端)、 Echo(接收端)、 Gnd
  2. 调节最大距离

上图标志电阻即 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、定义引脚

代码语言:javascript
代码运行次数:0
运行
复制
#include<reg52.h>sbit Trig = P2^0;sbit Echo = P2^1;

2、定义时间

代码语言:javascript
代码运行次数:0
运行
复制
void Delay10us(){ TMOD |= 0x1; TH0 = 0xFF; TL0 = 0xF6; TR0 = 1; while(!TF0); TF0 = 0;}void Rstart()  { Trig=0; Trig=1; Delay10us(); Trig=0;}

3、获取时间和距离

代码语言:javascript
代码运行次数:0
运行
复制
int gettime(){ unsigned int time = 0; time = TH0*256+TL0// TH0<<8 | TL0; return time;}float Getdis(unsigned int time)  { float distance; distance = (float)time * 0.0017; TH0=0; TL0=0;· return distance;}void star(){ TH0 = 0; TL0 = 0; TR0 = 1;}void end(){ TR0 = 0;}void GetOnce()  { Rstart(); while(!Echo); star(); while(Echo); end();}

4.主函数

代码语言:javascript
代码运行次数:0
运行
复制
 void main(){ unsigned int time = 0; float dis;while(1) {    GetOnce();  time = gettime();  dis = Getdis(time);}
}

5.延时函数

代码语言:javascript
代码运行次数:0
运行
复制
void delay(){ int i; int j; for(i=0;i<100;i++)  for(j = 0;j<2000;j++);}

结尾

这就是超声波模块的介绍和代码分析了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 物联网知识 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 结尾
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档