超声波模块

HAL库-STM32和HC-SR04模块实现超声波测距

引言:

HC-SR04是一款非常常见的超声波测距模块,它通过发射和接收超声波实现非接触距离测量。该模块采用低成本,结构简单的设计,接口简单,驱动方便,广泛应用于各种测距和检测距离的项目中。
·
本实验将利用HC-SR04模块和单片机,实现简单的距离测量功能。首先了解HC-SR04模块的工作原理及接口定义,然后通过单片机的定时器和GPIO口驱动模块,发送超声波脉冲和接收反射回来的脉冲。通过测量发送和接收脉冲之间的时间差,就可以通过声速计算出测量距离。

该实验操作简单,且结果直观,能帮助读者快速掌握HC-SR04模块的使用方法。掌握了这个基础,还可以在此基础上扩展更多应用,如移动机器人避障、智能家居安防等。希望本实验对读者有所帮助。
·
目的:实现测距,并且将信息利用串口发送到电脑展示
·
沉顿的心,依旧为天空大地跳动。——鬼谷子

╭ ( `∀´ )╯ ╰ ( ’ ’ )╮

一、HC-SR04介绍

HC-SR04硬件概述

HC-SR04超声波距离传感器的核心是两个超声波传感器。一个用作发射器,将电信号转换为40 KHz超声波脉冲。接收器监听发射的脉冲。如果接收到它们,它将产生一个输出脉冲,其宽度可用于确定脉冲传播的距离。就是如此简单!

该传感器体积小,易于在任何机器人项目中使用,并提供2厘米至400厘米(约1英寸至13英尺)之间出色的非接触范围检测,精度为3mm。

Operating Voltage工作电压直流5V
Operating Current工作电流15毫安
Operating Frequency运行频率40K赫兹
Max Range最大范围4m
Min Range最小范围2厘米
Ranging Accuracy测距精度3毫米
Measuring Angle测量角度15度
Trigger Input Signal触发输入信号10µS TTL脉冲
Dimension尺寸45 x 20 x 15毫米

img

HC-SR04超声波传感器引脚

img

让我们看一下它的引脚排列。

*VCC* 是HC-SR04超声波距离传感器的电源,我们连接了5V的供电。

*Trig* (Trigger) 引脚用于触发超声波脉冲,下面例程中用的GPIOB5,所以连接STM32的GPIOB5。

*Echo* 回声当接收到反射信号时,引脚产生一个脉冲。脉冲的长度与检测发射信号所需的时间成正比,下面例程中用的GPIOB6,所以连接STM32的GPIOB6。

*GND* 应该连接到STM32的地。

HC-SR0如何工作

当持续时间至少为10 µS(10微秒)的脉冲施加到触发引脚时,一切就开始了。响应于此,传感器以40 KHz发射八个脉冲的声音脉冲。这种8脉冲模式使设备的“超声特征”变得独一无二,从而使接收器能够将发射模式与环境超声噪声区分开。

八个超声波脉冲通过空气传播,远离发射器。同时,回声引脚变为高电平,开始形成回声信号的开始。

如果这些脉冲没有被反射回来,则回波信号将在38毫秒(38毫秒)后超时并返回低电平。因此38 ms的脉冲表示在传感器范围内没有阻塞。

动图封面

如果这些脉冲被反射回去,则在收到信号后,Echo引脚就会变低。这会产生一个脉冲,其宽度在150 µS至25 mS之间变化,具体取决于接收信号所花费时间。

动图封面

HC-SR04的时序图如下:

img

然后,将接收到的脉冲的宽度用于计算到反射物体的距离。这可以通过我们在初中学到的简单的距离-速度-时间方程来解决。

距离=速度x时间

接线

将HC-SR04连接到STM32。

HC-SR04STM32
VCC5V
TrigGPIO PB 10
EchoGPIO PB 11
GndGnd

二、测距功能实现思路

​ 1、 首先给应当触发HC-SR04模块进行工作,因此,我们需要给 t r i g端口(GPIO-PB10)一个高电平持续 20 微秒

​ 2、设置定时器的捕获模式 设置变量Flag 初始为0 也就是上升沿触发

​ 3、上升沿触发过后,将对应的捕获值保存在变量一中,然后再修改为下降沿触发。同时,修改flag的值为1

​ 4、下降沿触发过后,对应的时间为当前捕获的值减去变量一的值,乘上0.017**(340 * 0.5 * 0.000 001 * 100)即可得到距离(cm)**,在修改变量,Flag的值为 0,同时设置为上升沿触发。

​ 5、将得到的结果通过串口输出,同时计数值清零。

三、工程建立

CubeMX配置

基本的配置在我之前的文章中有,这里我们直接跳到对应端口的配置

	1. 芯片端口配置

在这里插入图片描述

  1. Trig配置

在这里插入图片描述

  1. Echo配置
  • 定时器配置

在这里插入图片描述

  • 中断配置

在这里插入图片描述

函数撰写

main.c文件

#include "main.h"
#include "tim.h"
#include "usart.h"
#include "gpio.h"

float Distance = 0;
uint16_t Cap_val = 0;  // 变量1
uint8_t flag;

void SystemClock_Config(void);

int main(void)
{
    HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init();
    MX_TIM2_Init();
    MX_USART1_UART_Init();
    /* USER CODE BEGIN 2 */

    HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_4); // 使能定时器以及其中断
    HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_3); // 使能定时器以及其中断
    printf("开始超声波传感器测距!!!\r\n");
    /* USER CODE END 2 */

    /* Infinite loop */
    /* USER CODE BEGIN WHILE */
    while (1)
    {
        /* USER CODE END WHILE */

        /* USER CODE BEGIN 3 */
        Start_Trig(); // 触发信号
        Test3(500);
    }
    /* USER CODE END 3 */
}

/* USER CODE BEGIN 4 */
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
    if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_4)
    {
        if (flag == 0)
        {
            Cap_val = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_4);
            __HAL_TIM_SET_CAPTUREPOLARITY(&htim2, TIM_CHANNEL_4, TIM_INPUTCHANNELPOLARITY_FALLING);
            flag = 1;
        }
        else if (flag == 1)
        {
            Distance = (HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_4) - Cap_val) * 0.017;
            __HAL_TIM_SET_CAPTUREPOLARITY(&htim2, TIM_CHANNEL_4, TIM_INPUTCHANNELPOLARITY_RISING);
            flag = 0;
            __HAL_TIM_SET_COUNTER(&htim2, 0);
            printf("Distance = %.2f cm\r\n", Distance);
        }
    }
}

四、效果展示

实验效果

Video:

超声波测距

五、总结

本次实验涉及到HC-SR04超声波测距模块的使用。

该模块利用超声波的特性进行测距,通过发送超声波脉冲并接收回波来计算距离。实验中,我们首先连接好模块的引脚,包括触发引脚、回波引脚、电源引脚和地引脚。

然后,我们编写代码来控制模块的工作流程,包括发送触发信号、接收回波信号并计算距离。

在实验过程中,我们可以通过改变触发信号的频率和周期来调整测距的精度和范围。

通过实验,我们可以验证HC-SR04超声波测距模块的功能和性能,了解超声波测距的原理和应用。这对于物体测距、避障等项目具有重要的实际意义。

最后感谢大佬友情链接:

  • https://zhuanlan.zhihu.com/p/546833349
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LX很爱吃葱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值