小工具知识网

当前位置: 首页 > 行业知识 > HC-SR04超声波测距模块使用方法和例程(STM32)

行业知识

HC-SR04超声波测距模块使用方法和例程(STM32)

2026-11-07 03:32:26 来源:互联网转载

基于STM32和HC-SR04模块实现超声波测距功能

最近在学STM32做个简单的应用实践一下,顺便水一篇文章。

本文用的单片机是STM32F103C8T6,超声波测距模块是HC-SR04,显示测距结果用的是0.96寸OLED屏模块。

效果展示

下图中小于10cm时的显示结果有点问题,代码已修复并更新

修复后的结果:

视频演示:https://www.bilibili.com/video/BV1Sg411Z7ex/

基于STM32和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毫米

HC-SR04超声波传感器引脚

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

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的时序图如下:

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

距离=速度x时间

接线

将HC-SR04和0.96寸OLED屏连接到STM32。

HC-SR04STM32
VCC5V
TrigGPIO PB5
EchoGPIO PB6
GndGnd
OLEDSTM32
VCC3.3V
GNDGND
SCLGPIO PB12
SDAGPIO PB13

温度对距离测量的影响

尽管HC-SR04对于我们的大多数项目来说都相当准确,例如入侵者检测或接近警报;但是有时候您可能想设计一种要在户外或在异常炎热或寒冷的环境中使用的设备。在这种情况下,您可能要考虑到空气中的声速随温度,气压和湿度而变化的事实。

由于声音因素进入HC-SR04距离计算的速度,因此可能会影响我们的读数。如果已知温度(°C)和湿度,请考虑以下公式:

声速 m/s = 331.4 +(0.606 * 温度)+(0.0124 * 湿度)

购买地址

本文所用到的模块购买地址如下:

STM32F103C8T6开发板:https://s.click.taobao.com/8SoQMVu

ST-LINK V2仿真器:https://s.click.taobao.com/FEuPMVu

HC-SR04模块:https://s.click.taobao.com/Ing88Vu

0.96寸OLED模块:https://s.click.taobao.com/o4fPMVu

面包板:https://s.click.taobao.com/dBjPMVu

面包板专用跳线:https://s.click.taobao.com/7eG88Vu

程序

我是用的的ST标准库写的程序,文章中放出主要的程序,完整的工程文件请点下面链接下载。

完整工程文件下载:https://url.zeruns.tech/HCSR04

提取码:d9xr

main.c

#include "stm32f10x.h"                  // Device header#include "Delay.h"#include "OLED.h"#include "Timer.h"#include "HCSR04.h"uint64_t numlen(uint64_t num)//计算数字的长度{    uint64_t len = 1;        // 初始长度为1    for(; num > 9; ++len)    // 判断num是否大于9,否则长度+1        num /= 10;         // 使用除法进行运算,直到num小于1    return len;              // 返回长度的值}int main(void){OLED_Init();//初始化OLED屏Timer_Init();//初始化定时器HC_SR04_Init();//初始化超声波测距模块OLED_ShowString(1, 1, "Distance:");//OLED屏输出字符串while (1){int Distance_mm=sonar_mm();//获取距离测量结果,单位毫米(mm)int Distance_m=Distance_mm/1000;//转换为米(m)为单位,将整数部分放入Distance_mint Distance_m_p=Distance_mm%1000;//转换为米(m)为单位,将小数部分放入Distance_m_pOLED_Clear_Part(2,1,16);//将OLDE屏第2行清屏OLED_ShowNum(2, 1,Distance_m,numlen(Distance_m));//显示测量结果的整数部分OLED_ShowChar(2, 1+numlen(Distance_m), '.');//显示小数点if(Distance_m_p

上一篇:怎么删除云服务器连接信息?

下一篇:苹果服务器地址怎么查询?