超声波模块使用介绍

本文详细介绍了超声波测距模块HC-SR04的工作原理、接口定义及应用注意事项。通过发送10us以上的高电平信号触发测距,并利用Echo引脚的高电平时间计算距离。提供的C语言代码示例展示了如何控制Trig和Echo引脚进行测距,并根据时间计算距离,适用于11.0592MHz晶振频率的系统。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

超声波模块

型号:HC-SR04

在这里插入图片描述

产品介绍:

超声波测距模块是用来测量距离的一种产品,通过发送和收超声波,利用时间差和声音传播速度, 计算出模块到前方障碍物的距离

在这里插入图片描述

手上的是老版本

应用注意事项:

1:此模块不宜带电连接,如果要带电连接,则先让模块的 GND 端先连接。否则会影响模块工作。

2:测距时,被测物体的面积不少于 0.5 平方米且要尽量平整。否则会影响测试结果。

接口定义:

VCC:5V电源

GND:接地

Trig:控制端

Echo:接收端

工作原理:

在这里插入图片描述

1、采用IO触发测距,给至少10us的高电平信号,实际40-50uS效果好
2、模块自动发送8个40KHz的方波
3、有信号返回,通过lO输出一高电平,高电平持续的时间就是超声波从发射到返回的时间
4、测试距离=(高电平时间*声速(340M/S))/2

本产品使用方法:控制口发一个 10US 以上的高电平,就可以在接收口等待高电平输出。一有输出就可以开定时器计时,当此口变为低电平时就可以读定时器的值,此时就为此次测距的时间,方可算出距离。如此不断的周期测,就可以达到你移动测量的值了。

接线参考:

模块除了两个电源引脚外,还有TRIG,ECHO引脚,这两个引脚分别接我们开发板的P1.5和 P1.6端口

代码时序:

  1. 怎么让它发送波 Trig :给Trig端口至少10us的高电平
  2. 怎么知道它开始发了:Echo信号由低电平跳转到高电平,表示开始发送波
  3. 怎么知道接收了返回波:Echo由高电平跳转回低电平,表示波回来了
  4. 怎么算时间: Echo引脚维持高电平的时间!波发出去的那一下,开始启动定时器波回来的那一下,我们开始停止定时器,计算出中间经过多少时间
  5. 怎么算距离:距离 = 速度 (340m/s)* 时间/2,时间单位是us
#include <REGX52.H>
#include "Timer0.h"		//定时器TH0和TL0初始化为0,TR0为0,后面根据时序开启TR0

sbit LED1 = P3^7;
sbit LED2 = P3^6;

sbit Trig = P1^5;
sbit Echo = P1^6;

/**
  * @brief延时10us
  * @param无
  * @retval无
  */
void Delay10us()		//@11.0592MHz
{
	unsigned char i;
	i = 2;
	while (--i);
}

/**
  * @brief 触发信号
  * @param无
  * @retval无
  */
void Trig_Start()
{
	Trig = 0;
	Trig = 1;
	Delay10us();
	Trig = 0;
}

void main()
{
	double time;				//时间
	double distance;			//距离
	Timer0Init();
	while(1)
	{
		Trig_Start();			//发送触发信号
		
		Echo = 0;
		while(Echo == 0);		//Echo信号,由低电平跳转到高电平,表示开始发送波
		TR0 = 1;				//开启定时器	
		while(Echo == 1);		//Echo信号,由高电平跳转回低电平,表示波回来了
		TR0 = 0;				//停止定时器
		time = (TH0*256+TL0)*1.085;		//计算出Echo口高电平的时间,单位是us
		//distance = 340m/s*time/2,声音的传播速率是340m/s,要统一单位
		//340m/s = 34000cm/s = 34cm/ms = 0.034cm/us	,	0.034cm/us/2 =0.017cm/us; 
		distance = time*0.017;
		if(distance < 20)		//距离小于20cm
		{
			LED1 = 0;
			LED2 = 1;
		}
		else
		{
			LED1 = 1;
			LED2 = 0;
		}
		TH0 = 0;				//重新置0,为下一次测距作准备
		TL0 = 0;
	}
}

注意:

11.0592MHz的晶振频率的机器周期是1.085us,计算方法:12 * 1/110592Hz = 1.085us

12MHz的晶振频率的机器周期是1us

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值