HC-SR04超声波传感器详解(STM32)
HC-SR04是一款广泛使用的超声波传感器,它通过发射和接收超声波来测量距离。本文将详细介绍HC-SR04的工作原理、引脚描述、STM32的接线方式以及如何通过STM32控制HC-SR04来测量距离。
一、HC-SR04传感器介绍
HC-SR04超声波传感器的主要参数如下:
- 工作电压:DC 5V
- 工作电流:3.3mA
- 工作温度:-40~85℃
- 输出方式:GPIO
- 探测距离:2cm~600cm
- 探测精度:3mm
二、传感器原理
HC-SR04模块包括一个超声波发射器和一个接收器。发射器向一个方向发射超声波,当超声波碰到障碍物后会反射回来,接收器接收反射波。通过计算发射到接收的时间差,结合声速,可以计算出距离。
三、硬件连接
HC-SR04与STM32的连接如下:
- VCC:连接到STM32的3.3V或5V电源。
- GND:连接到STM32的地。
- TRIG(触发):连接到STM32的一个GPIO引脚,用于发送触发信号。
- ECHO(回声):连接到STM32的另一个GPIO引脚,用于接收回声信号。
四、软件编程
1. 初始化GPIO
首先,需要初始化STM32的GPIO引脚,用于控制TRIG和读取ECHO信号。
#include "stm32f1xx_hal.h"#define TRIG_PIN GPIO_PIN_6
#define ECHO_PIN GPIO_PIN_7
#define TRIG_PORT GPIOA
#define ECHO_PORT GPIOAvoid GPIO_Init(void) {GPIO_InitTypeDef GPIO_InitStruct = {0};__HAL_RCC_GPIOA_CLK_ENABLE();GPIO_InitStruct.Pin = TRIG_PIN | ECHO_PIN;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(TRIG_PORT, &GPIO_InitStruct);
}
2. 测量距离函数
实现测量距离的函数,通过控制TRIG引脚发送触发信号,并通过ECHO引脚读取回声信号。
#include "stm32f1xx_hal.h"
#include "tim.h"uint32_t HCSR04_GetDistance(void) {uint32_t distance;uint32_t pulse_time = 0;// 发送触发信号HAL_GPIO_WritePin(TRIG_PORT, TRIG_PIN, GPIO_PIN_SET);HAL_Delay(10); // 至少10us的高电平HAL_GPIO_WritePin(TRIG_PORT, TRIG_PIN, GPIO_PIN_RESET);// 等待ECHO引脚变为高电平while(HAL_GPIO_ReadPin(ECHO_PORT, ECHO_PIN) == GPIO_PIN_RESET);// 记录高电平开始时间uint32_t start_time = HAL_GetTick();// 等待ECHO引脚变为低电平while(HAL_GPIO_ReadPin(ECHO_PORT, ECHO_PIN) == GPIO_PIN_SET);// 记录高电平结束时间uint32_t end_time = HAL_GetTick();// 计算高电平持续时间pulse_time = end_time - start_time;// 计算距离distance = (pulse_time * 34300) / 2; // 声速约为34300cm/sreturn distance;
}
3. 主函数
在主函数中,初始化硬件并循环测量距离。
int main(void) {HAL_Init();SystemClock_Config();GPIO_Init();TIM2_Init(); // 初始化定时器,用于测量时间while (1) {uint32_t distance = HCSR04_GetDistance();printf("Distance: %lu cm\n", distance);HAL_Delay(1000);}
}
五、注意事项
- 触发信号:确保TRIG引脚发送的触发信号至少持续10us。
- 回声信号:ECHO引脚读取的是回声信号的高电平持续时间,用于计算距离。
- 声速:声速在不同介质中的速度不同,本例中假设声速为34300cm/s。
通过上述步骤,我们可以在STM32上成功驱动HC-SR04超声波传感器,并实现距离的测量。这为开发需要距离测量功能的嵌入式系统提供了基础。
✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进
❤欢迎关注我的知乎:对error视而不见
代码获取、问题探讨及文章转载可私信。
☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。
🍎获取更多嵌入式资料可点击链接进群领取,谢谢支持!👇
点击领取更多详细资料
相关文章:
HC-SR04超声波传感器详解(STM32)
HC-SR04是一款广泛使用的超声波传感器,它通过发射和接收超声波来测量距离。本文将详细介绍HC-SR04的工作原理、引脚描述、STM32的接线方式以及如何通过STM32控制HC-SR04来测量距离。 一、HC-SR04传感器介绍 HC-SR04超声波传感器的主要参数如下: 工作电…...
如何在BSV区块链上实现可验证AI
发表时间:2024年10月2日 nChain的顶尖专家们已经找到并成功测试了一种方法:通过区块链技术来验证AI(人工智能)系统的输出结果。这种方法可以确保AI模型既按照规范运行,避免严重错误,遵守诸如公平、透明…...
Python快速安装软件包到环境的方案
问题描述 直接在终端输入,显示安装numpy包要20分钟, pip install numpyxxx.whl解决方案 直接搜索pip install 后在终端显示的.whl文件,在pypi.org官网下载, 之后在终端进入下载目录,从.whl文件安装软件包即可 pip …...
npm入门教程17:准备发布的npm包
一、环境准备 安装Node.js和npm: 确保你的计算机上已安装Node.js和npm。可以通过运行node -v和npm -v命令来检查它们的版本。如果没有安装,可以从Node.js官方网站下载并安装最新版本。 注册npm账号: 访问npm官网,点击“Sign Up”…...
协程1 --- 发展历史
文章目录 一个编译器问题背景解决 协程为什么一开始没发展成一等公民?自顶向下、逐步求精(Top-down, stepwise refinement)线程的出现 协程的雄起IO密集型同步语义实现异步发展史 线程和协程的关系并发性调度方式资源占用 一个编译器问题 协…...
VBA10-处理Excel的动态数据区域
end获取数据边界 1、基本语法 1-1、示例: 2、配合row和column使用 2-1、示例1 2-2、示例2 此时,不管这个有数值的区域,怎么增加边界,对应的统计数据也会跟着变的!...
【git】使用记录
一、安装 参考:Git2.45.2下载安装记录(windows 11)_win11安装git-CSDN博客...
代码随想录算法训练营第三十八天|Day38 动态规划
322. 零钱兑换 视频讲解:https://www.bilibili.com/video/BV14K411R7yv https://programmercarl.com/0322.%E9%9B%B6%E9%92%B1%E5%85%91%E6%8D%A2.html 思路 #define min(a, b) ((a) > (b) ? (b) : (a)) int coinChange(int* coins, int coinsSize, int amount…...
使用C++和libcurl库实现HTTP请求(GET、POST、文件上传)
在现代软件开发中,与外部API服务进行通信已成为常见需求。本文将展示如何使用C和libcurl库实现基本的HTTP请求,包括GET请求、POST请求(带JSON数据)以及包含文件上传的POST请求。 准备工作 首先,需要确保已安装libcur…...
makefile例子
$指代当前目标,就是Make命令当前构建的那个目标。比如,make foo的 $ 就指代foo。 $< 指代第一个前置条件。比如,规则为 t: p1 p2,那么$< 就指代p1。 $? 指代比目标更新的所有前置条件,之间以空格分隔。比如&a…...
用环形数组实现队列(多种高级方法,由浅入深)
同普通数组实现的队列相比,普通数组的头结点和尾节点都是固定的,在进行移除的时候如果移除了一个节点,后面所有节点都需要进行移除操作,需要的时间复杂度更高 在环形数组中,确定了头尾指针的环形数组很好地解决了这一…...
springboot框架使用RabbitMQ举例代码
以前分享过一个理论有兴趣的小伙伴可以看下 https://blog.csdn.net/Drug_/article/details/138164180 不多说 还是直接上代码 第一步:引入依赖 可以不指定版本 <!-- amqp --><dependency><groupId>org.springframework.boot</groupId…...
Java实现一个延时队列
文章目录 前言正文一、基本概念1.1 延时队列的特点1.2 常见的实现方式 二、Java原生的内存型延时队列2.1 定义延时元素DelayedElement2.2 定义延时队列管理器DelayedQueueManager2.3 消费元素2.4 调试2.5 调试结果2.6 精髓之 DelayQueue.poll() 三、基于Redisson的延时队列3.1 …...
为什么说vue是双向数据流
Vue.js 被称为 双向数据绑定(two-way data binding),是因为它支持数据在 视图(View) 和 模型(Model) 之间双向流动。这意味着,当 数据变化 时,视图会自动更新;…...
创造属于你的 Claude Prompt 和个性化 SVG 卡片|对李继刚老师提示词的浅浅解析与总结
❤️ 如果你也关注大模型与 AI 的发展现状,且对大模型应用开发非常感兴趣,我会快速跟你分享最新的感兴趣的 AI 应用和热点信息,也会不定期分享自己的想法和开源实例,欢迎关注我哦! 🥦 微信公众号ÿ…...
redis与本地缓存
本地缓存是将数据存储在应用程序所在的本地内存中的缓存方式。既然,已经有了 Redis 可以实现分布式缓存了,为什么还需要本地缓存呢?接下来,我们一起来看。 为什么需要本地缓存? 尽管已经有 Redis 缓存了,但…...
git撤销commit和add
撤销commit git reset --soft HEAD^撤销add git reset .查看状态 git status...
【361】基于springboot的招生宣传管理系统
摘 要 使用旧方法对招生宣传管理系统的信息进行系统化管理已经不再让人们信赖了,把现在的网络信息技术运用在招生宣传管理系统的管理上面可以解决许多信息管理上面的难题,比如处理数据时间很长,数据存在错误不能及时纠正等问题。这次开发的招…...
【一些关于Python的信息和帮助】
Python是一种广泛使用的高级编程语言,它的设计哲学强调代码的可读性和简洁的语法(尤其是使用空格缩进划分代码块,而不是使用大括号或关键字)。Python支持多种编程范式,包括面向对象、命令式、函数式和过程式编程。 以…...
creo toolkit二次开发学习之程序集(ProAsmcomp)和装配体组件路径对象(ProAsmcomppath)
程序集ProAsmcomp可以理解为装配体组件对象。 对象ProAssembly是ProSolid的一个实例,并共享相同的声明。因此,ProAssembly对象可以作为适用于装配体的任何ProSolid和ProMdl函数的输入。特别是,因为你可以使用函数ProSolidFeatVisit()来遍历特…...
效率翻倍!用VSCode和SumatraPDF打造你的LaTeX论文写作‘双向传送门’
效率翻倍!用VSCode和SumatraPDF打造你的LaTeX论文写作‘双向传送门’ 学术写作从来不是一件轻松的事,尤其是当你需要处理大量公式、图表和参考文献时。传统的LaTeX写作流程往往需要在编辑器、编译器和PDF阅读器之间反复切换,这种割裂的体验让…...
Purple Pi OH开发板Android 11系统ROOT权限获取与Magisk实战指南
1. 项目概述:为什么我们需要对Purple Pi OH进行ROOT?拿到一块Purple Pi OH开发板,刷上Android 11系统,对于开发者或极客玩家来说,最常遇到的第一个“痒点”可能就是权限不足。系统默认运行在“用户模式”下,…...
5大技术突破:Unity Figma Bridge如何革命性改变游戏UI开发流程
5大技术突破:Unity Figma Bridge如何革命性改变游戏UI开发流程 【免费下载链接】UnityFigmaBridge Easily bring your Figma Documents, Components, Assets and Prototypes to Unity 项目地址: https://gitcode.com/gh_mirrors/un/UnityFigmaBridge Unity F…...
手把手教你学Simulink——电动汽车防溜坡功能中的电机零扭矩闭环保持控制仿真
目录 手把手教你学Simulink——电动汽车防溜坡功能中的电机零扭矩闭环保持控制仿真 一、背景与挑战 1.1 为什么“关断电机”不等于“刹住车”? 1.2 核心痛点与防溜坡设计目标 二、系统架构与核心控制推导 2.1 整体架构:从“驾驶意图”到“零速电磁抱死” 2.2 核心数学推…...
告别智能插座!用Python和nilmtk库,5分钟入门非侵入式用电分析
告别智能插座!用Python和nilmtk库,5分钟入门非侵入式用电分析 你是否曾好奇家中每台电器究竟消耗了多少电量?传统方案需要在每个插座安装智能电表,成本高昂且部署复杂。现在,借助**非侵入式负载监控(NILM&…...
保姆级教程:用Arduino IDE从零配置ESP32-CAM,5分钟搞定网络摄像头
零基础玩转ESP32-CAM:5分钟搭建智能网络摄像头的完整指南 第一次拿到ESP32-CAM这块小巧的开发板时,很多人都会被它丰富的功能所吸引——Wi-Fi连接、摄像头拍摄、甚至还能进行简单的人脸识别。但当你真正开始尝试用它搭建一个网络摄像头时,各种…...
eLabFTW:开源电子实验笔记本如何重塑科研数据管理流程
eLabFTW:开源电子实验笔记本如何重塑科研数据管理流程 【免费下载链接】elabftw :notebook: eLabFTW is the most popular open source electronic lab notebook for research labs. 项目地址: https://gitcode.com/gh_mirrors/el/elabftw 在数字化科研时代&…...
BIN文件操作指南:从字节视角到实战应用
1. 项目概述:为什么我们需要系统性地掌握BIN文件操作?在嵌入式开发、固件逆向、游戏修改乃至数据恢复这些领域里,我们经常会遇到一个后缀名为.bin的文件。很多新手朋友第一次接触时可能会有点懵,这既不是文本文件可以直接打开看&a…...
前端正则表达式(?:pattern)的具体使用和介绍
文章目录一、官方解释二、js代码例子解释参考文档一、官方解释 (?:pattern) 是正则表达式中的一种结构,称为“非捕获组”(Non-Capturing Group)。它允许您将多个字符或子表达式组合在一起,作为一个整体对待,而不捕获…...
别再只盯着Transformer了!用PyTorch手把手复现加性注意力(Additive Attention),理解注意力机制的起点
从加性注意力到Transformer:PyTorch实战与演进逻辑解析 在Transformer架构横扫NLP领域的今天,回望2014年提出的加性注意力机制(Additive Attention),犹如在摩天大楼顶端俯瞰地基。这个由Bahdanau在神经机器翻译中首次提…...
