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;
}

四、实验效果 

五、资料获取

项目分享

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

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

相关文章

带你深入了解C语言指针(四)

目录 前言一、回调函数是什么?二、qsort使用1.什么是qsort2.qsort函数的语法解析3.回顾冒泡排序4.使用qsort函数排序整型数据4.1 思路分析4.2 完整代码:4.3 总体逻辑展现 5.使用qsort函数排序结构数据5.1 strcmp( )函数5.2 思路分析5.2.1 按名字比较5.2.…

力扣每日一题 公交站间的距离

环形公交路线上有 n 个站,按次序从 0 到 n - 1 进行编号。我们已知每一对相邻公交站之间的距离,distance[i] 表示编号为 i 的车站和编号为 (i 1) % n 的车站之间的距离。 环线上的公交车都可以按顺时针和逆时针的方向行驶。 返回乘客从出发点 start 到目…

探索人工智能的未来趋势

本文探讨了人工智能(AI)的未来趋势,包括深度学习、自然语言处理、计算机视觉和机器人技术等领域的最新进展。通过对当前技术的分析,本文预测了AI未来的发展方向,并讨论了这些技术对社会的影响。 引言 随着技术的飞速…

C# 使用Socket通信,新建WinForm服务端、客户端程序

一、新建WinForm Socket服务端程序 注:rtbReceviceMsg为RichTextBox控件 服务端程序、界面 服务端代码 public partial class Form1 : Form {public Form1(){InitializeComponent();}public virtual void TriggerOnUpdateUI(string message){if (this.InvokeRequir…

P2847 [USACO16DEC] Moocast G

P2847 [USACO16DEC] Moocast G [USACO16DEC] Moocast G 题面翻译 Farmer John 的 N N N 头牛 ( 1 ≤ N ≤ 1000 1 \leq N \leq 1000 1≤N≤1000) 为了在他们之间传播信息,想要组织一个"哞哞广播"系统。奶牛们决定去用步话机装备自己而不是在很远的距离…

Oracle发送邮件功能:配置自动化发信指南?

Oracle发送邮件服务设置方法?怎么用Oracle数据库发信? Oracle数据库作为企业级应用的核心,其内置的发送邮件功能为企业提供了强大的自动化工具。AokSend将详细介绍如何配置Oracle发送邮件功能,以实现自动化发信,从而提…

leetcode 2576.求出最多标记下标

2576.求出最多标记下标 题意: 解析: 数组长为 n n n,因为一次标记两个,所以数组中最多有 ⌊ n 2 ⌋ \lfloor \frac{n}{2}\rfloor ⌊2n​⌋ 对标记。 贪心的考虑,一个数 x 一定优先与满足 y ≥ 2 x y \ge 2x y≥2…

visual studio2015安装番茄助手

VS2015安装使用番茄助手Visual Assist_vs2015番茄助手-CSDN博客 【VS和番茄助手的安装步骤】https://www.bilibili.com/video/BV1K24y1n7Xk?vd_sourcefad0750b8c666dbeaf016e547f99a602 【番茄助手VS2019安装】https://www.bilibili.com/video/BV13p4y1v7bG?vd_sourcefad0…

[网络][CISCO]CISCO IOS升级

CISCO IOS升级-(转)2008-06-27 15:35IOS 升级 在介绍CISCO路由器IOS升级方法前,有必要对Cisco路由器的存储器的相关知识作以简单介绍。路由器与计算机相似,它也有内存和操作系统。在Cisco路由器中,其操作系统叫做互连…

【LeetCode 算法笔记】155. 最小栈

目录 问题描述单个栈实现双栈实现不开辟额外空间 问题描述 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。 void push(int val) 将元素val推入堆栈。 void pop()…

上海泗博EtherNet/IP转PROFIBUS DP网关EPS-320IP成都地铁项目应用案例

背景: 地铁,作为城市的活力脉搏,不仅是衔接城市生活的关键纽带,更是现代城市交通体系中不可或缺的核心组成部分。因此,确保地铁的稳定运行对任何一座城市都至关重要。 上海泗博自动化,作为与成都地铁项目合…

使用ENVI之辐射定标

将下载好的遥感影像导入遥感影像处理软件ENVI 5.6中 使用ENVI 5.6的Toolbox中的Radiometric Calibration工具 跳出的Date Input File界面中选中要进行辐射定标的文件选中 再在跳出的Radiometric Calibration界面中将Output Interleave改为BIL再点击Apply FLAASH Settings Soale…

写作神器!推荐4款AI免费的写论文的文献网站

在当今学术研究和论文写作领域,AI技术的应用越来越广泛。为了帮助研究人员和学生提高写作效率、提升论文质量,以下推荐四款免费的AI写论文文献网站,并特别介绍千笔-AIPassPaper。 1. 千笔-AIPassPaper 千笔-AIPassPaper是一款功能强大且全面…

【iOS】push和present的区别

【iOS】push和present的区别 文章目录 【iOS】push和present的区别前言pushpop presentdismiss简单小demo来展示dismiss和presentdismiss多级 push和present的区别区别相同点 前言 在iOS开发中,我们经常性的会用到界面的一个切换的问题,这里我们需要理清…

网络(四)——HTTP协议

文章目录 认识urlurlencode和urldecodeHTTP协议格式HTTP的方法HTTP的状态码HTTP常见Header 虽然应用层的协议是由人为规定的,但是已经有大佬们定义了一些现成的,又非常好用的应用层协议,供我们直接参考使用. HTTP(超文本传输协议)就是其中之一…

适合骑行的开放式耳机哪个品牌好?四款开放式蓝牙耳机推荐

骑行时是否有必要佩戴耳机是一个需要权衡安全与便利的问题。因为虽然耳机能提供音乐、导航等功能,但也可能分散注意力,影响骑行安全。而且这也是需要看个人需求决定的,骑行戴耳机的需求是什么,我想大部分人应该就是为了接听电话&a…

C++:用类实现链表,队列,栈

用类实现链表&#xff1a; #include<iostream> using namespace std;class List {struct Node{int Nval;Node* pNext;}; private:Node* pHead NULL;Node* pEnd NULL; public:void AddNode(int n);void DelNode(int n);void walk(); }; void List::AddNode(int k) {Nod…

[数据集][目标检测]无人机识别检测数据集VOC+YOLO格式6986张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;6986 标注数量(xml文件个数)&#xff1a;6986 标注数量(txt文件个数)&#xff1a;6986 标注…

MySQL —— 视图

概念 视图是一张虚拟的表&#xff0c;它是基于一个或多个基本表或其他视图的查询结果集。 视图本身不存储数据&#xff0c;而是通过执行查询来动态生成数据&#xff0c;用户可以像操作普通表一样使用视图来进行查询更新与管理等操作。 视图本身也不占用物理存储空间&#xf…

Redis基础数据结构之 Sorted Set 有序集合 源码解读

目录标题 Sorted Set 是什么?Sorted Set 数据结构跳表&#xff08;skiplist&#xff09;跳表节点的结构定义跳表的定义跳表节点查询层数设置 Sorted Set 基本操作 Sorted Set 是什么? 有序集合&#xff08;Sorted Set&#xff09;是 Redis 中一种重要的数据类型&#xff0c;…