超声波障碍物测距
使用的软硬件设备与应用:
- 硬件:STM32F103C8T6、HC-SR04、LED灯
- 软件:Keil5、CubeMX、串口助手
一、HC-SR04超声波模块
(一)什么是HC-SR04?
HC-SR04是一款常用的超声波测距模块,它能够通过发送超声波脉冲并接收其回波来测量物体与传感器之间的距离。这种模块广泛应用于机器人、智能小车、智能家居等领域,可以用于测量墙壁距离、障碍物距离、物品距离。
(二)HC-SR04工作原理
HC-SR04模块的工作原理是,通过IO口TRIG触发测距,给至少10us的高电平信号,模块自动发送8个40kHz的方波,并自动检测是否有信号返回。如果有信号返回,通过IO口ECHO输出一个高电平,高电平持续的时间即为超声波从发射到返回的时间。通过测量这个时间,可以计算出距离,公式为:测试距离 = (高电平时间 × 声速(340m/s)) / 2。
(三)如何使用HC-SR04
模块的电气连接通常包括四个引脚:VCC、Trig、Echo、GND。VCC和GND分别为正负电源引脚,Trig为触发引脚,Echo为回波引脚。在使用时,需要给Trig引脚发送一个10us以上的高电平信号,然后在Echo引脚等待高电平输出,当Echo引脚变为低电平时,读取定时器的值,即为此次测距的时间。
(四)注意事项
- 不宜带电连接模块,如果要带电连接,则先让模块的GND端先连接,否则会影响模块工作。
- 测距时,被测物体的面积不少于0.5平方米且要尽量平整,否则会影响测试结果。
- HC-SR04模块的典型工作电压为5V,静态工作电流小于2mA,感应角度不大于15度,探测距离为2cm-400cm,精度可达0.3cm,存在一个2cm的盲区。2020版本的HC-SR04支持GPIO、UART和IIC三种模式接口,工作电压3-5.5V,测量范围2cm-450cm。
二、程序编写
(一)CubeMX配置
1.芯片选择
2.配置RCC、SYS、时钟树
3.配置GPIO
A1连接的是ECHO,B9为LED
4.配置串口1
5.配置定时器
6.开启定时器中断
7.设置路径、生成代码工程
(二)代码编写
main.c
:
/* USER CODE BEGIN Header */
/**
******************************************************************************
* @file : main.c
* @brief : Main program body
******************************************************************************
* @attention
*
* <h2><center>© Copyright (c) 2022 STMicroelectronics.
* All rights reserved.</center></h2>
*
* This software component is licensed by ST under BSD 3-Clause license,
* the "License"; You may not use this file except in compliance with the
* License. You may obtain a copy of the License at:
* opensource.org/licenses/BSD-3-Clause
*
******************************************************************************
*/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "tim.h"
#include "usart.h"
#include "gpio.h"
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "SR04.h"
#include "led.h"
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
/* USER CODE END PTD */
/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
/* USER CODE END PD */
/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */
/* USER CODE END PM */
/* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN PV */
/* USER CODE END PV */
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */
/* USER CODE END PFP */
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
/* USER CODE END 0 */
/**
* @brief The application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config(