当前位置: 首页 > news >正文

HC-SR04超声波传感器详解(STM32)

目录

一、介绍

二、传感器原理

1.原理图

2.引脚描述

3.工作原理介绍

三、程序设计

main.c文件

ultrasonic.h文件

ultrasonic.c文件

四、实验效果 

五、资料获取

项目分享


一、介绍

        HC-SR04超声波传感器是通过发送和接收超声波,利用时间差和声音传播速度,计算出模块到前方障碍物的距离的一种传感器模块。与蝙蝠寻找猎物的回声定位基本原理相同,可以广泛应用于无损测量、水文液位测量、工业场地等领域。

以下是超声波传感器的参数:

型号

HC-SR04

工作电压

DC 5V

工作电流

3.3mA

工作温度

-40~85

输出方式

GPIO

探测距离

2cm~600cm

探测精度

3mm

哔哩哔哩视频链接:

HC-SR04超声波传感器详解(STM32)

(资料分享见文末) 

二、传感器原理

1.原理图

模块包括超声波发射器、接收器与控制电路。

2.引脚描述

引脚名称

描述

VCC

供给电压DC 5V

GND

地线

TRIG

触发控制信号输入

ECHO

回响信号输出

3.工作原理介绍

    传感器发射器向某一个确定的方向发射超声波的同时进行计时,超声波在碰触到障碍物之后会返回给超声波接收器一个反射波,此时停止计时,将时间纪录为 t。根据速度距离公式,结合超声波的传播速度与时间 t,可以推算出超声波发射点与所测量障碍物之间的距离为S=340t/2

1. 采用 IO TRIG 触发测距,给最少 10us 的高电平
2. 模块自动发送 8 40khz 的方波,自动检测是否有信号返回
3. 有信号返回,通过 IO ECHO 输出一个高电平,高电平持续的时间就是超声波从发射到返回的时间。
测试距离 =( 高电平时间*声速 (343M/S))/2;
distance_cm= us)/58

注意:测量周期应为60ms以上,以防止发射信号对回响信号的影响,被测物体的面积应不小于0.5平方米且尽量要求平整,否则影响结果

三、程序设计

1.使用STM32F103C8T6读取HC-SR04超声波传感器采集的距离数据,通过串口发送至电脑

2.将读取得到距离信息数据同时在OLED上显示

TRIG

PA0

ECHO

PA1

OLED_SCL

PB11

OLED_SDA

PB10

串口

串口1

main.c文件

#include "stm32f10x.h"
#include "led.h"
#include "usart.h"
#include "delay.h"
#include "oled.h"
#include "ultrasonic.h"
#include "timer.h"/*****************辰哥单片机设计******************STM32* 项目			:	HC-SR04超声波传感器实验                     * 版本			:   V1.0* 日期			:   2024.8.27* MCU			:	STM32F103C8T6* 接口			:	参看ultrasonic.h							* BILIBILI	    :	辰哥单片机设计* CSDN			:	辰哥单片机设计* 作者			:	辰哥 **********************BEGIN***********************/float distance;int main(void)
{ SystemInit();//配置系统时钟为72M	delay_init(72);LED_Init();LED_On();Ultrasonic_Init();USART1_Config();//串口初始化OLED_Init();printf("Start \n");delay_ms(1000);OLED_Clear();//显示“距离:”OLED_ShowChinese(0,0,0,16,1);OLED_ShowChinese(16,0,1,16,1);OLED_ShowChar(32,0,':',16,1);OLED_ShowString(60,20,"cm",16,1);while (1){LED_Toggle();distance = UltrasonicGetLength();OLED_ShowNum(40,20,distance,2,16,1);delay_ms(50);	//延时50ms}
}

ultrasonic.h文件

#ifndef __ULTRASONIC_H
#define	__ULTRASONIC_H
#include "stm32f10x.h"
#include "adcx.h"
#include "delay.h"
#include "math.h"/*****************辰哥单片机设计******************STM32* 文件			:	HC-SR04超声波传感器h文件                   * 版本			:   V1.0* 日期			:   2024.8.27* MCU			:	STM32F103C8T6* 接口			:	见代码							* BILIBILI	    :	辰哥单片机设计* CSDN			:	辰哥单片机设计* 作者			:	辰哥**********************BEGIN***********************//***************根据自己需求更改****************/
// ULTRASONIC GPIO宏定义#define		ULTRASONIC_GPIO_CLK								RCC_APB2Periph_GPIOA
#define 	ULTRASONIC_GPIO_PORT							GPIOA
#define 	ULTRASONIC_TRIG_GPIO_PIN					GPIO_Pin_0	
#define 	ULTRASONIC_ECHO_GPIO_PIN					GPIO_Pin_1	#define 	TRIG_Send  PAout(0)
#define 	ECHO_Reci  PAin(1)/*********************END**********************/void Ultrasonic_Init(void);
float UltrasonicGetLength(void);void OpenTimerForHc(void);
void CloseTimerForHc(void); 
u32 GetEchoTimer(void);#endif /* __ADC_H */

ultrasonic.c文件

#include "ultrasonic.h"
#include "timer.h"/*****************辰哥单片机设计******************STM32* 文件			:	HC-SR04超声波传感器c文件                   * 版本			:   V1.0* 日期			:   2024.8.27* MCU			:	STM32F103C8T6* 接口			:	见代码							* BILIBILI	    :	辰哥单片机设计* CSDN			:	辰哥单片机设计* 作者			:	辰哥**********************BEGIN***********************///超声波计数
u16 msHcCount;void Ultrasonic_Init(void)
{GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd (ULTRASONIC_GPIO_CLK, ENABLE );			// 打开连接 超声波传感器 的单片机引脚端口时钟GPIO_InitStructure.GPIO_Pin = ULTRASONIC_TRIG_GPIO_PIN;			// 配置连接 传感器TRIG 的单片机引脚模式GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;						// 设置为推挽输出GPIO_Init(ULTRASONIC_GPIO_PORT, &GPIO_InitStructure);				// 初始化 GPIO_InitStructure.GPIO_Pin = ULTRASONIC_ECHO_GPIO_PIN;			// 配置连接 传感器ECHO 的单片机引脚模式GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;				// 设置为浮空输入输入GPIO_Init(ULTRASONIC_GPIO_PORT, &GPIO_InitStructure);				// 初始化 TIM4_Int_Init(1000-1,72-1);
}//打开定时器4
static void OpenTimerForHc()  
{TIM_SetCounter(TIM4,0);msHcCount = 0;TIM_Cmd(TIM4, ENABLE); 
}//关闭定时器4
static void CloseTimerForHc()    
{TIM_Cmd(TIM4, DISABLE); 
}//获取定时器4计数器值
u32 GetEchoTimer(void)
{u32 t = 0;t = msHcCount*1000;t += TIM_GetCounter(TIM4);TIM4->CNT = 0;  delay_ms(50);return t;
}//通过定时器4计数器值推算距离
float UltrasonicGetLength(void)
{u32 t = 0;int i = 0;float lengthTemp = 0;float sum = 0;while(i!=5){TRIG_Send = 1;      delay_us(20);TRIG_Send = 0;while(ECHO_Reci == 0);      OpenTimerForHc();        i = i + 1;while(ECHO_Reci == 1);CloseTimerForHc();        t = GetEchoTimer();        lengthTemp = ((float)t/58.0);//cmsum = lengthTemp + sum ;}lengthTemp = sum/5.0;return lengthTemp;
}

四、实验效果 

五、资料获取

项目分享

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • scantf
  • k8s介绍及部署
  • 【Kubernetes】常见面试题汇总(二十四)
  • PWN二进制安全修仙秘籍【第一章#工具篇01】WLS配置tmux分屏、oh-my-zsh命令补全
  • SOCKS4和SOCKS5的区别是什么?
  • Redis Universe: 探索无边界的数据处理星系
  • 上线跨境电商商城的步骤
  • 百度起诉知名站长工具5118
  • SEAFARING靶场漏洞攻略
  • STM32中的计时与延时
  • 多旅行商问题:鹈鹕优化算法(Pelican Optimization Algorithm,POA)求解多仓库多旅行商问题MD-MTSP(提供Matlab代码)
  • 1. 如何在Java中连接MySQL数据库?请解释使用JDBC连接的步骤。
  • 模拟+分类讨论,LeetCode 2332. 坐上公交的最晚时间
  • 前后端分离Vue美容店会员信息管理系统o7grs
  • Kubernetes中pod版本回滚相关的命令?
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • HashMap剖析之内部结构
  • nginx 负载服务器优化
  • v-if和v-for连用出现的问题
  • 记一次删除Git记录中的大文件的过程
  • 前端技术周刊 2019-02-11 Serverless
  • 前端学习笔记之观察者模式
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 我的zsh配置, 2019最新方案
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • 7行Python代码的人脸识别
  • 阿里云服务器如何修改远程端口?
  • #stm32驱动外设模块总结w5500模块
  • #数据结构 笔记一
  • (9)目标检测_SSD的原理
  • (C#)获取字符编码的类
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (Ruby)Ubuntu12.04安装Rails环境
  • (层次遍历)104. 二叉树的最大深度
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (七)glDrawArry绘制
  • (十三)Maven插件解析运行机制
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • .apk文件,IIS不支持下载解决
  • .chm格式文件如何阅读
  • .NET IoC 容器(三)Autofac
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • .Net实现SCrypt Hash加密
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • /etc/fstab 只读无法修改的解决办法
  • @ModelAttribute注解使用
  • [1]从概念到实践:电商智能助手在AI Agent技术驱动下的落地实战案例深度剖析(AI Agent技术打造个性化、智能化的用户助手)
  • [BUUCTF]-PWN:[极客大挑战 2019]Not Bad解析
  • [bzoj2957]楼房重建
  • [CC2642R1][VSCODE+Embedded IDE+IAR Build+Cortex-Debug] TI CC2642R1基于VsCode的开发环境
  • [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-controller-manager失败
  • [Flutter]打包IPA
  • [Golang] go-kit 介绍和使用 (微服务实现工具)