Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >4.9 51单片机-(HC-SR04)超声波测距模块

4.9 51单片机-(HC-SR04)超声波测距模块

作者头像
DS小龙哥
发布于 2022-01-12 05:48:35
发布于 2022-01-12 05:48:35
2.2K03
代码可运行
举报
运行总次数:3
代码可运行

4.9 (HC-SR04)超声波测距模块

4.9.1 超声波模块实物图

实验板上没有超声波测距模块,这里采用外接模块的形式使用。

图4-9-1

图4-9-2

超声波模块GPIO口功能介绍:

(1)、VCC供5V 电源

(2)、GND 为地线

(3)、TRIG 触发控制信号输入

(4)、ECHO 回响信号输出

4.9.2 超声波模块功能与工作原理介绍

HC-SR04 超声波测距模块可提供 2cm-400cm 的非接触式距离感测功能,测距精度可达高到 3mm;模块包括超声波发射器、 接收器与控制电路。

基本工作原理:

(1)、单片机控制超声波的TRIG 口至少给10us的高电平信号,触发测距;

(2)、模块会自动发送8个 40khz 的方波, 并自动检测是否有信号返回;

(3)、有信号返回, 模块会通过 ECHO 口输出一个高电平, 高电平持续的时间就是超声波从发射到返回的时间。 公式:uS/58=厘米 或者 uS/148=英寸 或是 距离=高电平时间*声速(340M/S)

图4-9-3 模块电气参数

图4-9-4 时序图

以上时序图表明,单片机只需要提供一个 10uS 以上脉冲触发信号, 该模块内部将发出 8 个 40kHz 周期电平并检测回波,模块一旦检测到有回波信号则输出回响信号,回响信号的脉冲宽度与所测的距离成正比。

由此通过发射信号到收到的回响信号时间间隔可以计算得到距离。

公式: uS/58=厘米或者 uS/148=英寸; 或 距离=高电平时间*声速(340M/S) /2;

建议测量周期为 60ms 以上, 以防止发射信号对回响信号的影响。

4.9.3 超声波测距示例代码

当前使用的实验板上没有超声波模块,当前采用外接模块的形式与实验板进行连接。

超声波模块型号是:HC-SR04。

由于当前51单片机(STC90C51)的中断没法配置成上升沿触发,主程序里采用阻塞判断的方式等待测距结束,使用定时器0记录经过的时间,定时器0开启了溢出中断,在中断里使用变量记录中断溢出的次数。当测距结束时,通过定时器的溢出次数和当前定时器的值得到记录的时间,计算测量的距离,最终将测量的距离通过串口打印到电脑终端查看。

(当前使用的测距模块最大测量的距离是4米,16位定时器完全足够计数,可以不用开启定时器溢出中断,下面程序设计的思路比较通用,如果其他测距模块测量的距离更加远,也可以使用)

图4-9-5 实物图

(硬件平台说明:CPU是STC90C516RD 、晶振频率12MHZ 、工作在12T模式下、一个机器周期为1us时间)

示例代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <reg51.h>
sbit ECHO=P1^0;  //超声波的回响信号输出脚
sbit TRIG=P1^1;  //触发超声波测距的引脚
u32 timt0_cnt=0; //记录定时器0溢出的次数
u16 time_val=0;
float distance=0.0; //保存测量的距离
void Timer0_16bit_Init(u16 us);
void DelayMs(u32 ms);
void delay20us(void);
int main()
{
    ECHO=0;  
    TRIG=0;
    UART_Init(); //初始化串口波特率为4800
    while(1)
    {
        TRIG=1;//触发测距
        delay20us(); //延时20us
        TRIG=0;          //停止触发
        while(ECHO==0){} //等待回响信号返回
        Timer0_16bit_Init(65535); //初始化定时器0,并开始计数
        while(ECHO==1){} //等待回响信号结束
        TR0=0;           //关闭定时器0
        time_val=(TH0<<8|TL0)+timt0_cnt*65535; //计算时间
        distance=time_val/58.0; //得到距离。单位是厘米
        printf("distance=%f CM\r\n",distance);
        timt0_cnt=0; //溢出次数清零  
        DelayMs(1000); //延时1秒
    }
}

u16 T0_Update_data;//定时器0的初始值
void Timer0_16bit_Init(u16 us)
{   
    //当前实验板上的晶振实际频率为: 12MHZ
    u16 val=us/(12/12); //得到计数的时间,只要整数部分
    T0_Update_data=65535-val; //得到重装载值
    TMOD&=0xF0;     //清除配置
    TMOD|=0x01;     //配置定时器0工作在16位定时器模式
    TH0=T0_Update_data>>8; //定时器0高位重装值
    TL0=T0_Update_data;    //定时器0低位重装值
    TR0=1;          //开启定时器0
}

extern timt0_cnt; //记录定时器0的溢出次数
//定时器0的重装值更新函数
void Timer0_Update(void)
{
    TH0=T0_Update_data>>8; //定时器0高位重装值
    TL0=T0_Update_data;    //定时器0低位重装值
    timt0_cnt++;           //记录定时器0的溢出次数
}

void DelayMs(u32 ms)
{
    u32 i;
    u8 a,b;
    for(i=0;i<ms;i++)
    {
    for(b=199;b>0;b--)
         for(a=1;a>0;a--);
    }
}
void delay20us(void)   //误差 0us
{
    unsigned char a,b;
    for(b=1;b>0;b--)
        for(a=7;a>0;a--);
}

图4-9-6 测量的距离

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/11/07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
超声波测距模块
硬件介绍 1.使用场景 超声波测距模块在平时做电子产品、机器人、智能设备中的应用里还是非常常用的,使用非常简单,但是代码的编写和理解其实并不容易,在这里想和大家交流一下。有不同的意见和建议可以给我留言或者私信我。 2. 工作原理
跋扈洋
2021/01/28
1.2K0
基于STM32的HC-SR04超声波测距模块实验
超声波测距是借助于超声脉冲回波渡越时间法来实现的。设超声波脉冲由传感器发出到接收所经历的时间为t,超声波在空气中的传播速度为c,则从传感器到目标物体的距离D可用下式求出:D = ct/2,图 2是相应的系统框图。
用户8913398
2021/08/16
6.8K0
基于STM32的HC-SR04超声波测距模块实验
C51 单片机开发认识超声波测距传感器
闲话:数学功底好的人,对于编程来说是真的好。高精尖的东西都涉及深厚的数学知识,算法的优化也涉及各种数学知识、……编译器对于除法的优化,数学不好都搞不明白,只能记个结论算啦!如果有大把的时间用来学习的程序员,比如还在学校当学生的准程序员,那么花时间研究数学是太值得了。
码农UP2U
2024/07/04
3130
C51 单片机开发认识超声波测距传感器
基于单片机设计的超声波测距仪(采用HC-SR04模块)
本项目是基于单片机设计的超声波测距仪,主要采用了STC89C52单片机和HC-SR04超声波测距模块。通过LCD1602液晶显示屏来展示测量的距离信息。
DS小龙哥
2023/11/28
8780
基于单片机设计的超声波测距仪(采用HC-SR04模块)
Linux驱动开发-编写超声波测距模块的驱动
当前采用的这种超声波测距模块在各大高校实验室、毕设、课设里用的很多,原理很简单,通过声波测距,发出的声音碰到障碍物会反弹,声音在空气里传播的速度是已知的,根据时间就能计算出测量的距离。这款超声波模块内部自带了时间计算电路,型号是HC-SR04 ,它可提供 2cm-400cm 的非接触式距离感测功能,距精度可达高到 3mm; 整个模块包括了超声波发射器、 接收器与控制电路。
DS小龙哥
2022/04/08
2K0
Linux驱动开发-编写超声波测距模块的驱动
超声波传感器模块
超声波传感器有很多种类的型号:HC-SR04、UC-025、UC-026、UC-015、US-100等等,但是他们都大同小异。他们的主要区别是工作参数有点不一样,像是工作的电压或者温度,探测距离或精度有点差别。引脚是一样的,都是4个引脚(us-100多了一个GND引脚),引脚的工作和作用也是一样的。
破晓的历程
2025/05/14
1570
超声波传感器模块
C51 单片机开发超声波测距传感器控制 LED 灯
上篇文章整理了关于超声波测距传感器 HC-SR04 这个模块,本篇文章来完成一个它的基本编程。
码农UP2U
2024/07/04
3260
C51 单片机开发超声波测距传感器控制 LED 灯
基于STC89C51/2的的超声波测距(1602A显示)「建议收藏」
8. D0 ~ D7我接入的是P 0 ^ 0~P 0 ^ 7(注意不要接到VCC管脚上去),还有接入P0口要接上拉电阻,否则会烧坏的。
全栈程序员站长
2022/09/29
4170
基于STC89C51/2的的超声波测距(1602A显示)「建议收藏」
基于STM32和HC-SR04模块实现超声波测距功能
本文用的单片机是STM32F103C8T6,超声波测距模块是HC-SR04,显示测距结果用的是0.96寸OLED屏模块。
zeruns
2022/11/11
2.5K0
基于STM32和HC-SR04模块实现超声波测距功能
stm32f103+HC-SR04+ssd1306实现超声波测距
如果你经常做一些嵌入式设备,HC-SR04应该不陌生,一款便宜简单的超声波测距装置,可以应用在智能小车测距壁障,航模飞行器定高等。这篇文章简单讲解,通过一个示例来揉和。
秋名山码神
2023/11/07
4650
stm32f103+HC-SR04+ssd1306实现超声波测距
树莓派基础实验24:超声波测距传感器实验
   超声波传感器使用超声波来准确检测物体并测量距离。他发出超声波并将它们转换成电信号,主要应用于汽车的倒车雷达、机器人自动避障行走、建筑施工工地以及一些工业现场。
张国平
2020/09/27
2.4K0
蓝桥杯单片机必备知识—–(9)超声波测距
超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。超声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离(s),即:s=340t/2 。这就是所谓的时间差测距法。 超声波测距的原理是利用超声波在空气中的传播速度为已知,测量声波在发射后遇到障碍物反射回来的时间,根据发射和接收的时间差计算出发射点到障碍物的实际距离。由此可见,超声波测距原理与雷达原理是一样的。 测距的公式表示为:L=C×T 式中L为测量的距离长度;C为超声波在空气中的传播速度;T为测量距离传播的时间差(T为发射到接收时间数值的一半)。 超声波测距主要应用于倒车提醒、建筑工地、工业现场等的距离测量,虽然目前的测距量程上能达到百米,但测量的精度往往只能达到厘米数量级。 由于超声波易于定向发射、方向性好、强度易控制、与被测量物体不需要直接接触的优点,是作为液体高度测量的理想手段。在精密的液位测量中需要达到毫米级的测量精度,但是目前国内的超声波测距专用集成电路都是只有厘米级的测量精度。
全栈程序员站长
2021/04/16
8260
蓝桥杯单片机必备知识—–(9)超声波测距
雷达测距和超声波测距_超声波测距的原理是什么
本实验是基于MSP430利用HC-SR04超声波传感器进行测距,测距范围是3-65cm,讲得到的数据显示在LCD 1602液晶屏上。
全栈程序员站长
2022/10/03
8410
雷达测距和超声波测距_超声波测距的原理是什么
STM32CubeMX-39 | 使用硬件定时器测算超声波模块数据(HC-SR04)
本篇详细的记录了如何使用STM32CubeMX配置STM32L431RCT6的通用定时器外设,捕获超声波模块的距离信号。
Mculover666
2021/05/18
1.4K0
STM32CubeMX-39 | 使用硬件定时器测算超声波模块数据(HC-SR04)
LabVIEW控制Arduino实现超声波测距(进阶篇—5)
超声波测距是一种传统而实用的非接触测量方法,与激光、涡流和无线电测距方法相比,具有不受外界光及电磁场等因素影响的优点,在比较恶劣的环境中也具有一定的适应能力,且结构简单、成本低,因此在工业控制、建筑测量、机器人定位方面有广泛的应用。
不脱发的程序猿
2022/06/12
1.7K0
LabVIEW控制Arduino实现超声波测距(进阶篇—5)
在全志H616核桃派开发板上实现超声波传感器测距
超声波传感器是一款测量距离的传感器。其原理是利用声波在遇到障碍物反射接收结合声波在空气中传播的速度计算的得出。在测量、避障小车,无人驾驶等领域都有相关应用。
阿志小管家
2024/05/13
1820
在全志H616核桃派开发板上实现超声波传感器测距
毕设_基于单片机的倒车雷达/超声波测距(HC-SR04+1602显示屏)
本课题以AT89C51单片机为核心设计一种超声波倒车雷达系统,同时兼顾车内温度测量。
蒋宇智
2024/04/10
3890
毕设_基于单片机的倒车雷达/超声波测距(HC-SR04+1602显示屏)
基于51单片机四路循迹小车
本系统以设计题目的要求为目的,采用STC89C52单片机为控制核心,利用红外传感器检测轨道,控制电动小汽车的自动循迹,快慢速行驶。
全栈程序员站长
2022/09/10
1.2K0
基于51单片机四路循迹小车
FPGA系统性学习笔记连载_Day21【模块实验】 之 《超声波测距》篇
本系列为FPGA系统性学习学员学习笔记整理分享,如有学习或者购买开发板意向,可加交流群联系群主。
FPGA技术江湖
2021/04/12
4640
FPGA系统性学习笔记连载_Day21【模块实验】 之 《超声波测距》篇
【参赛经验分享】智能导盲杖设计
摘 要:中国的盲人数量占全球盲人数量比重很大,盲人在日常交通和生活活动中都受到很大限制,盲人对于出行有很大的困扰。本篇论文利用超声波测距原理解决盲人出行问题。本文首先介绍了国内外定位的发展现状和发展趋势,其次对硬件进行选型和硬件外围电路设计,对硬件电路部分的各个模块做了详细设计说明,包括单片机最小系统、电源电路、超声波测距电路、GPS模块电路、GSM模块电路、报警电路、显示电路以及语音播放电路。根据所画流程框图编写程序,再通过仿真电路图进行调试。通过实验表明,本系统能实现距离的实时测量、语音播报、紧急报警的功能。经测试本系统具有硬件结构简单、成本低、工作可靠、流程清晰、精度高、易于推广的优点。
DRL DP-旺仔
2021/10/12
5.1K0
推荐阅读
相关推荐
超声波测距模块
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验