第一次写博客——超声波模块心得

一、模块简介

本文主要讲解的是HC-SR04超声波模块以及其工作原理。此模块具有性能稳定,测度距离精确,模块高精度,盲区小等特点。
此模块可用于机器人与小车避障,物体测距等,是现在高校比赛中常用的一款避障传感器。

二、超声波测距原理

超声波测距原理是利用超声波在空气中的传播速度为已知,测量声波在发射后遇到障碍物反射回来的时间,根据发射和接收的时间差计算出发射点到障碍物的实际距离。
其测距公式为: L = V ∗ T {L}={V*T} L=VT,其中 L {L} L为测量的长度; V {V} V为超声波在空气中的传播速度; T {T} T为测量距离传播的时间差。且已知超声波速度 V {V} V= 340 m/s {340\text{m/s}} 340m/s(20°C室温)。
超声波测距图片


三、模块工作原理

  1. 采用 IO 触发测距,给至少10us 的高电平信号。
  2. 模块自动发送8 个40khz 的方波,自动检测是否有信号返回。
  3. 有信号返回,通过IO 输出一高电平,高电平持续的时间就是超声波从发射到返回的时间。
  4. 测试距离= 高电平时间 ∗ 声速 2 {\frac{\text{高电平时间}*\text{声速}}{2}} 2高电平时间声速

四、接线方式

  1. VCC:DC 5 V {5V} 5V 3.3 V {3.3V} 3.3V
  2. Trig: 控制端 (发送信号)
  3. Echo:发送端(接收信号)
  4. GND:地线

五、时序图

时序图是对传感器模块最好的参考。

超声波传感器时序图


六、程序源码

						51 单片机程序
					 (晶振频率:12MHz)

引用头文件并定义51单片机引脚(这里假设P2.1与P2.2引脚):

#inluce"reg52.h"
sbit Trig=P2^1;		// 定义超声波发送端的接口
sbit Echo=P2^0;		// 定义超声波接收端的接口

设置延时函数(用来设置时钟时序):

// 延时1us
void delay_nus(unsigned int n)
{
	i=i*16/21;
	while(--i);
}

定义初始化函数:

// 对定时器0初始化
void Init_timer0()
{
	TMOD = 0x01;	// 设置工作模式1
	TH0 = 0;        // 定时器高八位赋初值    
    TL0  = 0;       // 定时器低八位赋初值
    ET0  = 1// 定时器0中断开启允许位:允许
    TR0  = 0 ;      // 定时器0小开关 :关闭  
}

// 超声波初始化
void Init_Chaoshengbo()
{
	Trig=0;			// 发送端置低电平
	Echo=0;			// 接收端置低电平
}

调用主函数:

void main()
{
	unsigned int distance,time;	// 定义距离和计数
	int x,y;
	Init_timer0();                  // 定时器0 初始化
	Init_Chaoshengbo();				// 超声波初始化
	
	// 发送端时序
	Trig=1;
	delay_nus(10);					// 给trig发送至少10 us的高电平脉冲 
	Trig=0;
	
	// 接收端时序
	while(Echo==0);					// 等待回声
	if(Echo==1)						// 捕捉echo端输出上升沿
		TR0=1;						// 打开定时器
	while(Echo);                    // 等待Echo下降为0,检测下降沿
    TR0 = 0;                        // 关闭定时器(定时器的值保存在寄存器中)
    
    // 取寄存器的值
    x = TH0;						// 取寄存器高位
    y = TL0;						// 取寄存器低位
	
	// 计算总时间与折算后的路程
	time= x*256 + y;             	// 计算时间
    distance = (0.34/2)*((1/12)*12)*time;   // 计算距离(单位 mm),机器周期为(1/12)*12
}

以上便是51单片机控制超声波模块的程序。
其中x*256表示将x左移8位并加上低8位y构成16位的时间。
烧录入单片机便可以获得数据。

HC-SR04超声波测距模块是一种常用的测距传感器,可以通过发送超声波脉冲并接收回波信号来测量距离。在STM32库函数版中,可以通过以下步骤来使用HC-SR04超声波测距模块: 1. 首先,需要包含"sys.h"头文件,并初始化HC_SR04超声波模块,可以使用HC_SR04_Init()函数进行初始化。\[1\] 2. 在测距之前,需要向Trig控制端输入至少10us的高电平触发信号,可以使用HC_SR04_start()函数发送20us的脉冲触发信号。\[1\] 3. HC-SR04模块内部会发送8个40KHz的方波并检测回波信号,一旦检测到回波信号,Echo接收端会输出高电平回响信号,高电平的持续时间就是超声波从发射到返回的时间。根据公式:距离=高电平时间*声速(340M/S)/2,可以计算出测得的距离。\[2\] 总结来说,使用STM32库函数版的HC-SR04超声波测距模块,需要初始化模块并发送触发信号,然后根据回响信号的高电平时间计算出距离。 #### 引用[.reference_title] - *1* *2* [STM32——库函数版——超声波测距模块](https://blog.csdn.net/qq_45844792/article/details/111215858)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [STM32连接HC-SR04超声波测距(结合STM32CubeMX和HAL库函数)](https://blog.csdn.net/wuwenbin12/article/details/118575989)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值