示例七、超声波传感器测距

简介: 示例七、超声波传感器测距

通过以下几个示例来具体展开学习,了解超声波传感器原理及特性,学习超声波传感器的应用:

示例七、超声波传感器测距

一、基本原理:

1、超声波测距仪的系统结构

利用超声测距原理测量物体之间的距离,当此距离小于某一设定值时,及时提醒系统以AT89C51单片机为控制核心,用HC-SRO4超声波测距模块测量距离,经温度补偿后,用液晶显示距离,超过指定距离,用蜂鸣器报警提示,如图8-22所示。系统分为五个模块:单片机、超声模块、温度传感器、液晶显示、声音播报。


2、超声波测距仪的硬件设计

1)超声波测距模块

超声波测距仪系统选用HC-SRO4超声测距模块,如图8-23所示。测量范围为2-450cm,精度可达0.3cm。当单片机给TRIG引脚提供至少10s的高电平时,模块会自动发送八个40kHz的方波,并自动检测是否有信号返回:当有信号返回时,通过ECHO端输出一个高电平,该高电平持续的时间为超声波发射到返回的时间测试距离=(ECHO高电平时间×声速(340m/s)

1)结构及引脚

引脚说明如下。

Uc:供5V电源。

GND:地线。

TRIG:触发控制信号输入。

ECHO:回响信号输出。

+5V

HC-SR4模块的工作时序如图8-24所示。只需要提供持续10s以上的脉冲触发信号,此模块就会自动发出八个40kIz周期的电平并检测回波。当检测到有回波信号,就设置出回呼信号为高电平。回响信号的脉冲宽度与所测的距离成正比。根据从发射信号到收到回响信号的时间间隔可以计算得到距离。建议测量周期为60ms以上,以防止发射信号的影响。

图8-24 HC-SRO4模块的时序

此模块不宜带电连接,若要带电连接,则先让模块的GND端接地,否则会影响模块的正常工作。测距时,被测物体的面积不能小于0.5m2,且要求平面尽量平整,否则将影响测量的结果。

2)超声波测距仪系统电路原理

超声波测距仪系统电路原理如图8-25所示,HC-SRO4超声波测距模块的测距信号ECHO为高电平时,启动单片机定时器定时, ECHO为低电平时,停止定时。根据式(8-5)即可计算出距离,发给液晶显示模块显示,单片机将计算出的距离和警戒距离作比较,当物体距离小于警戒距离时,驱动蜂鸣器报警。

二、超声波测距仪的软件设计

1.主程序

系统启动后,首先进行初始化,然后进行距离测量。最后将测量结果送到LCD1602上显示。如果测量距离超出规定范围,则报警提示。单片机定时器T0用于测距定时,距离计算公式为:

s=(334.1m/s)time(ms)/1,000,000/2 (8-7)
s=1.7
time/100 (单位:cm)

超声波测距仪的主程序流程如图8-26所示。

2.HC-SRO4测距仪的流程

单片机的P3.3口接HC-SRO4的Tig端口,P3.2口接HC-SRO4的Echo端口,HC-SRO4模块收到测试回波信号后,Echo口输出一个高电平,并开始测试距离,单片机检测到Echo口高电平后即启动计数器开始计数,直到单片机检测到Echo口变成低电平时,停止计数,计数器的计数值乘以单片机计数周期就是超声波从发射到接收的往返时间,即距离s=V*t/2。

3.超声波测距仪的源程序:

#include <reg52.H>//器件配置文件
#include <intrins.h>
//传感器接口
sbit RX  = P3^2;
sbit TX  = P3^3;
//按键声明
sbit S1  = P1^4;
sbit S2  = P1^5;
sbit S3  = P1^6;
//蜂鸣器
sbit Feng= P2^0;

sbit W1=P1^0;
sbit W2=P1^1;
sbit W3=P1^2;
sbit W4=P1^3;
//变量声明
unsigned int  time=0;
unsigned int  timer=0;
unsigned char posit=0;
unsigned long S=0;
unsigned long BJS=200;//报警距离200CM
//模式 0正常模式 1调整
char Mode=0;
bit  flag=0;
bit flag_KEY=0;

//距离的计算
void Conut(void)
{
  time=TH0*256+TL0;   //读出T0的计时数值
  TH0=0;
  TL0=0;          //清空计时器
  S=(time*1.7)/100;     //算出来是CM
  //声音的速度是340m/s,时间的单位是us,计算到秒需要将时间数据/1000000,
  //长度=速度*时间,340*time/1000000,长度数据单位是m转换成cm需要乘以100得到340*time/10000,
  //小数点都向左移两位得到3.4*time/100,因为超声波是往返了,所以再除以2,得到距离数据(time*1.7)/100
  if(Mode==0)       //非设置状态时
  {
    if((S>=700)||flag==1) //超出测量范围显示“-”
    { 
      Feng=0;        //蜂鸣器报警
      flag=0;
      disbuff[1]=10;     //“-”
      disbuff[2]=10;     //“-”
      disbuff[3]=10;     //“-”
    }
    else
    {
      //距离小于报警距
      if(S<=BJS)
      {
        Feng=0; //报警
      }
      else  //大于
      {
        Feng=1;   //关闭报警  
      }
      disbuff[1]=S%1000/100;     //将距离数据拆成单个位赋值
      disbuff[2]=S%1000%100/10;
      disbuff[3]=S%1000%10 %10;
    }
  }
  else
  {
      Feng=1;
      disbuff_BJ[1]=BJS%1000/100;
      disbuff_BJ[2]=BJS%1000%100/10;
      disbuff_BJ[3]=BJS%1000%10 %10;
  }
}

三、数据记录:


1、减小传感器距离,查看系统的报警阈值;把阈值调整到150,在进行验证。

当距离小于200cm时警报器发生警报,大于200cm时不会警报。

同理,当阈值为150cm时小于150cm时警报器发生警报,大于150cm时不会警报。


2、从示波器中读出激活超声波传感器的脉冲周期,并分析传感器输入输出信号的时序关系(显示距离为1.50时,输出信号高电平的时长有何关系)。

11.820.17=2.0094
8.82
0.17=1.499

11.820.17=2.0094
8.82
0.17=1.499


四、思考:

proteus系统元件库中暂时没有HC-SRO4超声测距模块的数据,为了能在系统仿真时使用,实际由8051微处理器机器接口模拟了超声测距模块功能和接口,trig、echo,VCC、GND,以及虚拟的+、-按钮,试分析他们的逻辑关系。

单片机的P3.3口接HC-SRO4的Tig端口,P3.2口接HC-SRO4的Echo端口,HC-SRO4模块收到测试回波信号后,Echo口输出一个高电平,并开始测试距离,单片机检测到Echo口高电平后即启动计数器开始计数,直到单片机检测到Echo口变成低电平时,停止计数,计数器的计数值乘以单片机计数周期就是超声波从发射到接收的往返时间,即距离s=V*t/2。


目录
相关文章
|
SQL druid Java
java mysql druid mybatis-plus里使用多表删除出错的一种处理方式
java mysql druid mybatis-plus里使用多表删除出错的一种处理方式
495 0
|
Kubernetes Java Android开发
用 Quarkus 框架优化 Java 微服务架构的设计与实现
Quarkus 是专为 GraalVM 和 OpenJDK HotSpot 设计的 Kubernetes Native Java 框架,提供快速启动、低内存占用及高效开发体验,显著优化了 Java 在微服务架构中的表现。它采用提前编译和懒加载技术实现毫秒级启动,通过优化类加载机制降低内存消耗,并支持多种技术和框架集成,如 Kubernetes、Docker 及 Eclipse MicroProfile,助力开发者轻松构建强大微服务应用。例如,在电商场景中,可利用 Quarkus 快速搭建商品管理和订单管理等微服务,提升系统响应速度与稳定性。
673 5
|
前端开发 JavaScript Serverless
揭秘CSS布局神器:vw/vh、rem、%与px大PK,掌握它们,让你的网页设计秒变高大上,面试难题迎刃而解!
【8月更文挑战第4天】在Web开发中,合理选择CSS单位对响应式布局至关重要。本文探索viewport单位(vw/vh)、rem、百分比(%)及像素(px)的基础知识与应用场景。通过代码示例,展示如何运用这些单位实现全屏布局、尺寸比例调整、灵活的元素大小及固定尺寸。最后,模拟面试题,介绍如何仅用CSS实现一个元素的高度为其宽度两倍且响应视口变化的方法。
890 8
|
文字识别 算法 API
文档解析(大模型版)能力测评
文档解析(大模型版)能力测评
827 8
|
传感器 机器人
|
机器学习/深度学习 Python
sigmoid函数
本文探讨了高等数学中的sigmoid函数,它在神经网络中的应用,特别是在二分类问题的输出层。sigmoid函数公式为 $\frac{1}{1 + e^{-x}}$,其导数为 $sigmoid(x)\cdot(1-sigmoid(x))$。文章还展示了sigmoid函数的图像,并提供了一个使用Python绘制函数及其导数的代码示例。
1665 2
|
存储 测试技术 虚拟化
|
Web App开发 JavaScript 前端开发
Vis.js – 基于浏览器的动态 JavaScript 可视化库
  Vis.js 是一个动态的,基于浏览器的可视化库。该库被设计为易于使用,能处理大量的动态数据。该库由以下几部分组成:一是数据集和数据视图,基于灵活的键/值数据集,可以添加,更新和删除项目,订阅数据集变化;二是时间轴,用于显示不同类型的时间轴数据,在时间轴上项目可以交互移动,缩放和操纵;三是图形,使用节点和边显示一个交互式图形或网络。
2747 0
|
Java 开发工具 git

热门文章

最新文章