AJ-SR04M-T-X超声波测距模块使用——STM32F407

超声波模块简介

  AJ-SR04M-T-X超声波测距模块,是采用收发一体的防水带线探头,运用非接触试超声波探测技术设计而成。模块在20cm 至800cm 范围内,能够准确探测出与平面物体间的距离,并且在20cm 至250cm 范围内,能够准确检测到行人。发散角度可以自由调节,波特率自由设定。项目中采用兼容SR-04模式读取模块返回的高电平时间,通过拟合函数算出模块到被测物体间的距离。如果想要获得更精确的数据,可以加上温度系数修正函数和滤波函数(在移动模块时,其数值会有一个不稳定的过渡过程)。
在这里插入图片描述

模块特点

1、体积小,使用便捷;
2、功耗低, 先择低功耗模式时 <20ua ;
3、使用电压宽 3-5.5V 工作电压
4、测量精度高最高分辩率 1mm 精度;
5、抗干扰强;
6、一体化封闭式防水带线探头,适用于潮湿、恶劣的测量场景

模块应用场合

1、智能小车测距,避障
2、物体距离测量,人体高度测量
3、智能交通控制,停车位控制
4、教研,安防,工业控制
5、人工智能,飞机高度测量等

工作模式

模式1:普通脉宽方波   最低功耗2.5mA
模式2:低功耗脉宽方波  最低功耗40uA
模式3:自动串口     最低功耗2.5mA
模式4:串口触发     最低功耗20uA
模式5:ASCII码输出    最低功耗20uA

模块输出模式说明

  切换模式的方法,在断电的情况下面更换模块上面R19阻值即可变更模式 ,楼主并没有给它接上电阻,采取断路的SR-04模式,在此博客也是主要讲解怎么使用这个模式。楼主没有使用串口模式和pc打印模式,因为要把配合其他传感器数据,形成通信协议,最好能直接操刀;串口和pc还要写解析协议,这是一个中断捕获就搞定的事情。
在这里插入图片描述
在这里插入图片描述

兼容SR-04模式运行流程

在这里插入图片描述
模式1引脚定义:
  Trig->触发信号
  Echo->输出回响信号

模式1工作方式:
  当给Trig一个大于10us的高电平触发信号,模块会工作一次。相应 Echo引脚会输出一次高电平,高电平的时间即可转换为距离物体的距离

通过Echo计算距离的公式:
  距离=高电平时间*声速(340m/s)/2;高电平时间单位记得转为s,这个单位是根据你单片机的晶振选择的,我也给不出详细的,一般单片机返回值都是基于us。

代码编写

  代码实现基于正点原子的STM32F407探索者开发板。思路很简单,用到单片机的两个定时器TIM14和TIM5。TIM14负责实现pwm定时输出高电平(大于10us),TIM5负责接收模块返回的高电平时间(输入捕获)。在正点原子教程中的输入捕获实验具有详细的代码实现过程,关于TIM14和TIM5的代码配置在此不再赘述。此处主要讲解如何解析返回值。

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "timer.h"
#include "usart3.h"

extern u8  TIM5CH1_CAPTURE_STA;		//输入捕获状态		    				
extern u32	TIM5CH1_CAPTURE_VAL;	//输入捕获值 
int main(void)
{
	long long temp=0;      
	long double distance;  
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
	delay_init(168);                    //初始化延时函数
	uart_init(115200);                  //初始化串口波特率为115200
	TIM14_PWM_Init(50000-1,84-1);       //84M/84=1Mhz的计数频率计数到50000,此处理解为每次计数时间为1us即可    
	TIM5_CH1_Cap_Init(0XFFFFFFFF,84-1); //以1Mhz的频率计数,即每单位计数也为1us
	TIM_SetCompare1(TIM14,20);          //给SR04M模块Trig端口20us的响应信号
	while(1)
	{
		if(TIM5CH1_CAPTURE_STA&0X80)	 //成功捕获到了一次高电平
	    {
			temp=TIM5CH1_CAPTURE_STA&0X3F; 
			temp*=0XFFFFFFFF;		 		    //溢出时间总和
			temp+=TIM5CH1_CAPTURE_VAL;		    //得到总的高电平时间,这仅仅是计数个数
			distance=temp*0.017;                //距离转换,由于我要获取厘米,转换时单位变换多了点步骤,temp*0.000001*34000/2=temp*0.017
			u3_printf("distance:%.3Lf cm\r\n",distance); //打印总的高点平时间
			TIM5CH1_CAPTURE_STA=0;			    //开启下一次捕获
		}			
	}
	return 0;
}

技术参数

在这里插入图片描述

电气参数

在这里插入图片描述

注意事项

① 模块检测最小距离为20cm,在 20cm 内有物体,将获得不准确信号。
② 测距时,被测物体的面积不小于 0.2 平方米且平面尽量平整,否则会影响测试结果。

  • 5
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值