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

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

时间:2024-07-10 21:27:04浏览次数:19  
标签:HAL SR04 CODE STM32 OLED 源码 USER 模块 GPIO

文章目录

一.概要

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
如果链接失效,可以联系博主给最新链接
程序下载下来之后解压就行

五.小结

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

标签:HAL,SR04,CODE,STM32,OLED,源码,USER,模块,GPIO
From: https://blog.csdn.net/zy2232652/article/details/140295774

相关文章

  • 基于JSP的大学新生报到管理系统毕设(源码+使用文档+LW)
    系统介绍基于JSP的大学新生报到管理系统是一个专为大学新生报到流程设计的Web应用程序,旨在简化新生报到、信息收集、宿舍分配等管理工作。以下是对这样一个系统的介绍,包括系统概述、主要功能、技术架构、开发优势、结论以及示例的源码和使用文档。系统概述大学新生报到管......
  • 基于JSP的工会会员管理系统毕设(源码+部署+使用说明)
    系统介绍基于JSP的工会会员管理系统是一个用于工会组织内部管理会员信息、活动、费用和通知的Web应用程序。本课题的目的是使工会会员信息管理清晰化,透明化,便于操作,易于管理。通过功能模块的优化组合实现不同的管理细节,使管理过程实现最大程度的自动化与信息化,并能自动对......
  • 基于JSP的大学生综合评测系统毕设(源码+使用文档+LW+部署)
    系统介绍基于JSP的工会会员管理系统是一个用于工会组织内部管理会员信息、活动、费用和通知的Web应用程序。以下是对这样一个系统的介绍,包括系统概述、主要功能、技术架构、开发优势、结论以及示例的源码和使用文档。系统概述工会会员管理系统旨在帮助工会组织高效地管理......
  • 讲解一下Axios源码中,拦截器是怎么实现的
    面试中我们经常会被问道Axios的原理是怎么样的,它的拦截器是怎么实现的?下面我们来简单讲一下Axios的拦截器是如何实现的。Axios的拦截器实现基于Axios的核心原理,即Axios实例是一个包含请求和响应拦截器堆栈的对象。当发出请求或接收响应时,Axios会遍历这些拦截器,并按照添加......
  • 无人直播/ai自动直播-APP源码开发
    无人直播APP的源码开发通常涉及到几个关键技术和组件:实时流媒体处理:使用WebRTC(WebReal-TimeCommunication)技术,它允许在浏览器或移动端实现实时音视频通信。开发者需要理解和集成相关的SDK,如Agora、Kurento等。用户认证和权限管理:通过OAuth或其他身份验证机制,确保只有注册......
  • STM32开发实例_基于Zigbee的智能路灯系统(电路图+程序+流程图)24-32-64
    一.系统概述1.智能组网与数据传输:利用Zigbee技术自由灵活地组网小区智能路灯。小区与监控中心通过WiFi实现实时数据传输。2.人工模式下的路灯控制:可手动调节路灯亮度等级(一级、二级、三级)。能切换定时、自动、手动三种控制模式。3.定时模式控制:通过小程序设定路灯的定时......
  • 基于springboot牙科就诊管理系统源码
    现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本牙科就诊管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事......
  • 基于springboot滑雪场管理系统源码和论文
    滑雪场管理系统的设计与实现摘要近年来,信息化管理行业的不断兴起,使得人们的日常生活越来越离不开计算机和互联网技术。首先,根据收集到的用户需求分析,对设计系统有一个初步的认识与了解,确定滑雪场管理系统的总体功能模块。然后,详细设计系统的主要功能模块,通过数据库设计过程......
  • 撸包小游戏对接广告联盟APP系统开发源码搭建
    “撸包小游戏广告联盟APP”源码搭建涉及多个关键步骤,以下是一个简化的流程:市场调研与需求分析:对市场进行深入调研,了解目标用户群体和他们的需求。分析竞争对手的小游戏和广告策略,确定自己小游戏的特色和定位。游戏开发:根据市场调研的结果,设计并开发具有吸引力的撸包小......
  • springboot公寓租赁系统-计算机毕业设计源码03822
    目 录摘要1绪论1.1研究背景与意义1.2选题背景1.3论文结构与章节安排2 公寓租赁系统系统分析2.1可行性分析2.1.1技术可行性分析2.1.2经济可行性分析2.1.3法律可行性分析2.2系统功能分析2.2.1功能性分析2.2.2非功能性分析2.3系统用例分......