零基础STM32单片机编程入门(十二) HC-SR04超声波模块测距实战含源码

文章目录

    • 一.概要
    • 二.HC-SR04主要参数
      • 1.模块引脚定义
      • 2.模块电气参数
      • 3.模块通讯时序
      • 4.模块原理图
    • 三.STM32单片机超声波模块测距实验
    • 四.CubeMX工程源代码下载
    • 五.小结

一.概要

HC-SR04超声波模块常用于机器人避障、物体测距、液位检测、公共安防、停车场检测等场所。HC-SR04超声波模块主要是由两个通用的压电陶瓷超声传感器,并加外围信号处理电路构成的。
两个压电陶瓷超声波传感器,一个用于发出超声波信号,一个用于接收反射回来的超声波信号。由于发出信号和接收信号都比较微弱,所以需要通过外围信号放大器提高发出信号的功率,和将反射回来信号进行放大,以能更稳定地将信号传输给单片机。
模块如图所示:

在这里插入图片描述

二.HC-SR04主要参数

1.模块引脚定义

在这里插入图片描述

2.模块电气参数

在这里插入图片描述

3.模块通讯时序

在这里插入图片描述

以上时序图表明单片机只需要提供一个10uS以上脉冲触发信号给模块的TRIG引脚,该模块内部将发出8个40kHz周期电平并检测回波。模块一旦检测到有回波信号则输出回响信号到模块ECHO引脚。回响信号的脉冲宽度与所测的距离成正比。单片机通过采集收到的输出回响信号的宽度时间就可以计算得到距离。
距离公式:距离=回响高电平时间*声速(340M/S)/2

4.模块原理图

在这里插入图片描述

三.STM32单片机超声波模块测距实验

硬件准备:

STLINK接STM32F103C8T6小系统板,STLINK接电脑USB口。

板子与OLED用杜邦线连接:
板子G----液晶GND
板子3.3–液晶VCC
板子B10—液晶SCL
板子B11—液晶SDA

板子与超声波模块用杜邦线连接:
板子A0----模块Trig
板子A1----模块Echo
板子3.3—模块VCC
板子G-----模块GND

在这里插入图片描述

打开STM32CubeMX软件,新建工程
在这里插入图片描述
Part Number处输入STM32F103C8,再双击就创建新的工程
在这里插入图片描述
配置下载口引脚
在这里插入图片描述
配置外部晶振引脚
在这里插入图片描述
配置系统主频
在这里插入图片描述
配置PA0为输出,PA1为输入,PA1管脚选择下拉
在这里插入图片描述

配置定时器2,10us产生中断一次,用来统计后续采集超声波返回的脉冲宽度时间
在这里插入图片描述
在这里插入图片描述

配置工程文件名,保存路径,KEIL5工程输出方式
在这里插入图片描述
生成工程
在这里插入图片描述
用Keil5打开工程
在这里插入图片描述

添加OLED驱动文件
在这里插入图片描述

添加超声波相关代码
在这里插入图片描述

主要代码

void TIM2_IRQHandler(void)
{/* USER CODE BEGIN TIM2_IRQn 0 *//* USER CODE END TIM2_IRQn 0 */HAL_TIM_IRQHandler(&htim2);/* USER CODE BEGIN TIM2_IRQn 1 */TimeCounter++;//10us计数一次/* USER CODE END TIM2_IRQn 1 */
}
uint32_t Distance_Calculate(uint32_t count)//传入时间单位10us
{uint32_t Distance = 0;Distance = (uint32_t)(((float)count *17)/100);//距离单位cm,声速340M/S,时间*速度/2=距离return Distance;
}
//等待us级别
void Delay_us(unsigned long i)
{unsigned long j;for(;i>0;i--){for(j=12;j>0;j--);}
}
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();//8M外部晶振,72M系统主频/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_TIM2_Init();//定时器2初始化,配置成10us,溢出一次/* USER CODE BEGIN 2 */if (HAL_TIM_Base_Start_IT(&htim2) != HAL_OK)//启动定时器2,10us进入中断一次{while(1);}OLED_Init();			       //初始化OLED  		OLED_Clear();            //清屏while(1) {		HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0,GPIO_PIN_RESET);//预先拉低Trig引脚HAL_Delay(5);HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0,GPIO_PIN_SET);//拉高Trig引脚Delay_us(20);HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0,GPIO_PIN_RESET);//拉低Trig引脚Delay_us(20);while(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1) == 0);//如果是低电平,一直等HalTime1= TimeCounter;while(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1) == 1);//如果是高电平,一直等if(TimeCounter>HalTime1){HalTime2 = TimeCounter-HalTime1;if(HalTime2<0x300){Distance = Distance_Calculate(HalTime2);//计算距离}}OLED_Clear();OLED_ShowCHinese(18,0,0);//光OLED_ShowCHinese(36,0,1);//子OLED_ShowCHinese(54,0,2);//物OLED_ShowCHinese(72,0,3);//联OLED_ShowCHinese(90,0,4);//网OLED_ShowString(24,3,"SR04 TEST");OLED_ShowString(0,6,"Dis: ");  OLED_ShowNum(30,6,Distance,3,16);//显示距离值,单位cm	   OLED_ShowString(60,6,"cm"); HAL_Delay(1000);		}	  /* USER CODE END 3 */
}

四.CubeMX工程源代码下载

链接:https://pan.baidu.com/s/1Km6ioytkj1S7QWQDif-h1Q
提取码:7y10
如果链接失效,可以联系博主给最新链接
程序下载下来之后解压就行

五.小结

超声波模块基于声音传播的速度和时间差来计算模块到前方障碍物的距离,可用于人体检测,机器人避障,距离测量等,例如在门口安装超声波模块可以检测人的接近并触发开门动作,或者用于室内的距离测量和自动照明等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/44516.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

泛型

背景 优点 类型绝对安全避免强制类型转换 泛型类 定义 使用 举例 泛型类 // 泛型类 T就是类型参数 public class Generic<T>{// key这个成员变量的类型为T,T的类型由外部指定private T t;public void set(T t){this.t t;}public T get(){return t;} }使用 // 创建一个泛…

k8s 部署RuoYi-Vue-Plus之server部署

1.先使用项目编排构建镜像, 修改prod使用的mysql, redis地址 获取运行的服务 kubectl get svc -n ruoyi对应连接修改 然后运行打包package命令, 生成jar包, 再打包为docker容器, 上传到所有节点上, 也可以上传到个人私有仓库 2.部署server-deploy.yaml 镜像名自行修改, apiV…

el-input-number @input.native触发,修改值失效

试过在方法里用this.$set()、this.$next(()>{})没生效 解决方案&#xff1a;如下

DDL也会有undo吗?模拟Oracle中DML、DDL与undo的关系,10046跟踪DDL语句

已经有两个月没有更新博客了&#xff0c;主要实在忙毕设和毕业的一些事情&#xff01;这两个月也是非常的精彩呀&#xff0c;充分体会到了职场的和校园的不同&#xff0c;作为一名刚毕业就满 1 年工作经验的牛马人&#xff0c;在两个月期间经历了两次调岗、两次降薪&#xff0c…

VScode 格式化插件Prettier设置无效

VScode在配置格式化代码的插件的时候&#xff0c;可以选择Prettier或者ESlint等插件 比如选择Prettier格式化代码 在某文件修改代码之后&#xff0c;ctrls 保存代码&#xff0c;保存之后会自动格式化代码&#xff0c;但是我们发现控制台有报错 为什么已经设置了格式化插件为Pr…

使用 MinIO 赢得 RAG 权利

人们常说&#xff0c;在人工智能时代&#xff0c;数据是你的护城河。为此&#xff0c;构建生产级 RAG 应用程序需要合适的数据基础架构来存储、版本控制、处理、评估和查询构成专有语料库的数据块。由于 MinIO 采用数据优先的 AI 方法&#xff0c;因此对于此类项目&#xff0c;…

skywalking-1-服务端安装

skywalking很优秀。 安装服务端 skywalking的服务端主要是aop服务&#xff0c;为了方便查看使用还需要安装ui。另外采集的数据我们肯定要存起来&#xff0c;这个数据库就直接用官方的banyandb。也就是aop、ui、banyandb都使用官方包。 我们的目的是快速使用和体验&#xff0c…

Xshell配置ssh免密码登录(密钥登陆)

文章目录 一、Xshell登陆步骤 一、Xshell登陆步骤 1.生成客户端的公钥私钥 2.生成公钥文件 3.生成私钥文件 4.将公钥传输进要登录的服务器中 5.修改公钥文件名为authorized_keys (authorized_keys是用于存储公钥的特殊文件,如果已经有了这份文件,可以在末尾追加) 6.连…

时序预测 | Matlab实现TCN-Transformer的时间序列预测

时序预测 | Matlab实现TCN-Transformer的时间序列预测 目录 时序预测 | Matlab实现TCN-Transformer的时间序列预测效果一览基本介绍程序设计 效果一览 基本介绍 基于TCN-Transformer模型的时间序列预测&#xff0c;可以用于做光伏发电功率预测&#xff0c;风速预测&#xff0c;…

引用计数器(kref)

1、什么是引用计数器 如果我们写了一个字符驱动&#xff0c;当硬件设备插上时&#xff0c;系统会生成一个设备节点。用户在应用空间操作这个设备节点就可以操作设备。如果此时将硬件断开&#xff0c;驱动是不是就要立刻释放呢&#xff1f;如果立刻释放&#xff0c;应用程序是不…

docker-compose构建、运行多容器简介

&#xff08;1&#xff09;准备依赖的镜像&#xff0c;包括mariadb、jdk1.8、nginx&#xff0c;配置docker-compose.yml文件 services:mariadb:image: mariadbports:- "3314:3306"environment:- MARIADB_ROOT_PASSWORD123456volumes:- ./mysql:/var/lib/mysqlnetwor…

PLC数采网关在实际应用中有哪些效能?天拓四方

在工业自动化领域中&#xff0c;PLC扮演着至关重要的角色&#xff0c;它负责控制和监测生产线的各个环节。然而&#xff0c;随着工业4.0的推进和智能制造的快速发展&#xff0c;单纯依靠PLC进行现场控制已无法满足企业对数据集中管理、远程监控和智能分析的需求。因此&#xff…

Efficient Estimation of Word Representations in Vector Space论文笔记解读

基本信息 作者TomasMikolovdoi10.48550发表时间2013期刊ICLR网址http://arxiv.org/abs/1301.3781 研究背景 1. What’s known 既往研究已证实 前馈神经网络语言模型(NNLM) 循环神经网络语言模型(RNNLM) 2. What’s new 创新点 Word2vec有两种模型&#xff1a;CBOW和Skip-gr…

AJAX-个人版2.0

AJAX&#xff08;Asynchronous Javascript And Xml&#xff09; 传统请求及缺点 传统的请求都有哪些&#xff1f; 直接在浏览器地址栏上输入URL。点击超链接提交form表单使用JS代码发送请求 window.open(url)document.location.href urlwindow.location.href url… 传统请…

AbyssFish单连通周期边界多孔结构2D软件

软件介绍 AbyssFish单连通周期边界多孔结构2D软件&#xff08;以下简称软件&#xff09;可用于生成具备周期性边界条件的单连通域多孔结构PNG图片&#xff0c;软件可设置生成模型的尺寸、孔隙率、孔隙尺寸、孔喉尺寸等参数&#xff0c;并且具备孔隙形态控制功能。 软件生成的…

视频号热门视频数据分析工具,快速查看同行数据创作者必看!

每天排行榜是帮助创作者查看同行数据为自己提供创作灵感&#xff0c;此外每天排行榜热门的视频收集了用户喜欢看的类型。 灵感分类了解当前社会关注的热点内容。该工具通过监测和分析视频号全网舆情&#xff0c;选取热门话题进行排序&#xff0c;形成一个每日热点排行榜。 这…

华为防火墙上的配置(1)

实验拓扑图 实验要求&#xff1a; 1、DMZ区内的服务器&#xff0c;生产区仅能在办公时间内&#xff08;9&#xff1a;00-18:00)可以访问&#xff0c;办公区的设备全天可以访问 2、生产区不允许访问互联网&#xff0c;办公区和游客区允许访问互联网 3、办公区设备10.0.2.10不…

00:HAL库的认识

一&#xff1a;HAL库 开发现状&#xff1a; 1&#xff1a;下载 网站&#xff1a; https://www.st.com/zh/embedded-software/stm32cube-mcu-mpu-packages.html 去选择我们的系列 我们使用的是STM32F103C8t6的这个 继续一直向下拉点击这个&#xff1b;之后傻瓜步骤直接可以…

最新2023年行政区划、路网、土壤质地矢量数据

行政区划矢量数据是指用矢量格式表示的地理信息系统&#xff08;GIS&#xff09;数据&#xff0c;其中包含了行政区域的边界信息&#xff0c;如国家、省份、城市、区县、乡镇甚至村级的界限。这些数据通常以点、线、面的几何图形来表示具体的地理实体&#xff0c;并且每个实体都…

亚马逊erp跟卖采集之关键词采集

大家好&#xff0c;今天讲这款erp的跟卖采集关键词采集。 打开erp跟卖功能采集任务&#xff0c;点新增任务站点美国&#xff0c;有5种采集方式&#xff1a;关键词、店铺链接、类目ASIN。 选择关键词采集&#xff0c;这里我选择女童装&#xff0c;选择女童板鞋复制粘贴。页数我…