0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

超声波模块测距的使用方法

CW32生态社区 来源:CW32生态社区 2023-08-28 14:14 次阅读

一、简介

1.C-SR04超声波模块是一种常用的测距模块,其通过发射超声波并接收其反射信号来实现测距功能。因其成本低、精度高、使用简便等特点,被广泛应用于以下场景:

(1)避障机器人:HC-SR04超声波模块可以用于避障机器人的距离测量,通过检测障碍物与机器人的距离,实现避障控制。

(2)智能家居:HC-SR04超声波模块可用于智能家居中的人体检测和距离测量。例如,在门口安装超声波模块,可以检测人的接近并触发开门动作,或者用于室内的距离测量和触发自动照明等。

2.本实验用到了CW32F030C8T6小蓝板、0.96寸OLED显示屏、HC-SR04超声波模块及Keil5开发环境。

二、超声波模块测距的使用方法

使用流程 连接电源 将VCC引脚连接到+5V,GND引脚连接到GND。

连接触发引脚

将Trig引脚连接到单片机的数字输出引脚。

连接回波引脚

将Echo引脚连接到单片机的数字输入引脚。

发送信号

通过向Trig引脚发送一个至少10微秒的高电平触发信号来启动测距过程

接收信号

模块发送触发信号后,自动发射超声波,并等待接收反射信号。当接收到反射信号时,Echo引脚会输出一个高电平信号,持续时间与超声波的往返时间成正比。

计算距离

通过测量Echo引脚输出高电平信号的持续时间,可以计算得到距离,一般使用以下公式计算:

距离= 高电平持续时间 × 声波在空气中传播的速度 / 2。

重复测量

根据需要可定时测量距离,以实现连续的距离监测。

需要注意的是,HC-SR04超声波模块的测距精度受到多种因素的影响,如温度、超声波传播介质等。在使用过程中,需要结合具体的应用场景和需求进行参数调整和校准,以获得准确的距离测量结果。

三、核心代码

HC_SR04.c:
#include "HC_SR04.h"


extern unsigned int time;


void HC_GPIO_Init(void)  
{
  __RCC_GPIOB_CLK_ENABLE();
  
  GPIO_InitTypeDef GPIO_InitStruct; 
  GPIO_InitStruct.IT=GPIO_IT_NONE;
  GPIO_InitStruct.Mode=GPIO_MODE_INPUT_PULLDOWN;//下拉输入
  GPIO_InitStruct.Pins=GPIO_PIN_8;               //Echo
  GPIO_Init(CW_GPIOB,&GPIO_InitStruct);
  
  GPIO_InitStruct.Speed=GPIO_SPEED_HIGH;
  GPIO_InitStruct.Mode=GPIO_MODE_OUTPUT_PP;     //推挽输出
  GPIO_InitStruct.Pins=GPIO_PIN_9;               //Trig 
  GPIO_Init(CW_GPIOB,&GPIO_InitStruct);
  
  PB09_SETLOW();   //Trig拉低,为输出脉冲触发信号做准备
}


unsigned int Measure_Distance(void) //测距
{
  unsigned int distance=0;
  
  SetTrig();     //10us的脉冲触发信号
  Delay_us(10);
  ResetTrig();
  while(ReadEcho()==0); //等待Echo输出高电平
  time=0;               //开始记录回波信号脉宽
  while(ReadEcho()==1); //等待Echo输出低电平     
  distance=time*1.7;//根据声速和时间计算距离,即distance=time*340/2/100
  /*
      关于分辨力(mm):
          定时器每次对time加1是10us,10us=0.01ms,340m/s=340mm/ms
          计算距离时,最小分辨力为:0.01(ms) * 340(mm/ms) / 2 = 1.7(mm)
          小于模块标准精度3mm,故测距结果十分精准
  */
  return distance; //返回距离,单位mm
}
main.c:
#include "HC_SR04.h"


extern unsigned int time;


void HC_GPIO_Init(void)  
{
  __RCC_GPIOB_CLK_ENABLE();
  
  GPIO_InitTypeDef GPIO_InitStruct; 
  GPIO_InitStruct.IT=GPIO_IT_NONE;
  GPIO_InitStruct.Mode=GPIO_MODE_INPUT_PULLDOWN;//下拉输入
  GPIO_InitStruct.Pins=GPIO_PIN_8;               //Echo
  GPIO_Init(CW_GPIOB,&GPIO_InitStruct);
  
  GPIO_InitStruct.Speed=GPIO_SPEED_HIGH;
  GPIO_InitStruct.Mode=GPIO_MODE_OUTPUT_PP;     //推挽输出
  GPIO_InitStruct.Pins=GPIO_PIN_9;               //Trig 
  GPIO_Init(CW_GPIOB,&GPIO_InitStruct);
  
  PB09_SETLOW();   //Trig拉低,为输出脉冲触发信号做准备
}


unsigned int Measure_Distance(void) //测距
{
  unsigned int distance=0;
  
  SetTrig();     //10us的脉冲触发信号
  Delay_us(10);
  ResetTrig();
  while(ReadEcho()==0); //等待Echo输出高电平
  time=0;               //开始记录回波信号脉宽
  while(ReadEcho()==1); //等待Echo输出低电平     
  distance=time*1.7;//根据声速和时间计算距离,即distance=time*340/2/100
  /*
      关于分辨力(mm):
          定时器每次对time加1是10us,10us=0.01ms,340m/s=340mm/ms
          计算距离时,最小分辨力为:0.01(ms) * 340(mm/ms) / 2 = 1.7(mm)
          小于模块标准精度3mm,故测距结果十分精准
  */
  return distance; //返回距离,单位mm
}

四、实验最终现象

fd3123fa-4555-11ee-a2ef-92fbcf53809c.png fd8321aa-4555-11ee-a2ef-92fbcf53809c.png

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6001

    文章

    43973

    浏览量

    620830
  • 模块
    +关注

    关注

    7

    文章

    2484

    浏览量

    46530
  • 超声波
    +关注

    关注

    63

    文章

    2808

    浏览量

    136711
  • CW32
    +关注

    关注

    1

    文章

    122

    浏览量

    225

原文标题:【CW32】基于CW32的超声波模块的应用

文章出处:【微信号:CW32生态社区,微信公众号:CW32生态社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    超声波模块参考

    说明: DYP-ME007超声波模块AVRmega16程序 DYP-ME007 超声波模块DYP-ME007和89c51的数据资料 超声波模块参考
    发表于 08-12 10:27

    msp430f149控制超声波测距模块超声波模块似乎没有反应 ?

    哥哥们 小弟在用msp430f149控制超声波测距模块超声波模块似乎没有反应求指教
    发表于 05-26 20:24

    超声波模块测距问题

    ·新上手一块HC-SR04超声波模块写了一个数码管测距显示,问题来了缓慢移动模块可以近距离测试显示,可是超过一米时,时灵时不灵,显示乱码,为嘛呢??,求解
    发表于 03-15 11:41

    【NanoPi M2试用体验】安装超声波模块测距

    本帖最后由 可乐丸子 于 2016-6-9 13:45 编辑 下面介绍在友善NanoPi M2上连接超声波模块HY-SRF05测距方法首先需要连接NanoPi M2开发板和超声波模块
    发表于 06-09 13:42

    勇敢的芯伴你玩转Altera FPGA连载73:基于SignalTap II的超声波测距调试之超声波测距原理

    测试距离为2cm~400cm,测距精度可以达到2mm。假设超声波模块与障碍物间的距离为S(单位:m),ECHO输出的高脉冲宽度为T(单位:s),声速在25°C条件下定义为346(单位:m/s)。那么
    发表于 05-28 22:09

    超声波模块测距不算精准

    哪位用过超声波模块的?淘宝上买回来,调试,发现测距不算精准,只有对着平面还好,对着人的话,数据不稳定,有解决方法吗?还是制作工艺已经决定了?
    发表于 04-10 20:54

    超声波测距原理

    到达障碍物后被反射回来,传感器接收到反射脉冲后立即停止计时,然后根据超声波的传播速度和计时时间就能计算出两端的距离。2.超声波模块此次采用的是市面上常用的超声波模块HC-SR04;HC-SR04参数...
    发表于 07-21 07:01

    基于STM32的超声波测距设计

    基于STM32F103的超声波测距(定时器)使用的硬件设备:stm32f103c8t6,0.96寸OLED,超声波模块HC-SR04废话不多说,上程序就对了(亲测有效)超声波模块
    发表于 07-22 08:53

    如何使用超声波模块实现测距功能?

    超声波测距原理是什么?如何使用超声波模块实现测距功能?
    发表于 10-27 06:35

    超声波测距的相关资料分享

    超声波测距超声波测距原理超声波模块说明书代码解析超声波测距
    发表于 12-08 08:06

    如何通过HC-SR04超声波模块去实现测距功能呢

    HC-SR04超声波模块是什么?如何通过HC-SR04超声波模块去实现测距功能呢?
    发表于 12-13 06:00

    超声波模块测量距离防碰撞分析

    超声波模块测量距离防碰撞1.超声波测距:原理:超声测距其实就是通过单片机控制超声波模块发出一系列
    发表于 01-05 06:02

    超声波模块为什么测距不准?

    超声波模块为什么测距不准,只有在拿一本书靠近模块时,测得比较准,但是测到人的距离就不怎么准
    发表于 10-31 07:23

    STM32_超声波测距

    超声波测距超声波测距原理超声波模块说明书代码解析超声波测距
    发表于 11-25 10:51 163次下载
    STM32_<b class='flag-5'>超声波</b><b class='flag-5'>测距</b>

    基于CW32的超声波模块的应用

    C-SR04超声波模块是一种常用的测距模块,其通过发射超声波并接收其反射信号来实现测距功能。
    的头像 发表于 09-06 09:13 603次阅读