JSN-SR0T4-2.0 超声波测距模块可提供 20cm-600cm 的非接触式距离感测功能,测距精度可达高到 2mm,采用工业级一体化超声波探头设计,防水型,性能稳定,兼容市场上所有的 MCU 工作。
基本原理
作为超声波测距模块,本模块与HC-SR04雷同,二者可相互作为参考。
(JSN-SR04T和HC-SR04似乎是同一家公司的产品,其中,JSN-SR04T的模式一与HC-SR04的基本使用相兼容)
超声波测距模块,原理自然而然就是超声波测距,通过计算超声波在空气中经过的路程来测量距离,具体原理为:
对模块的Trig引脚发送一个持续时间不小于10us的高电平脉冲作为触发信号,当模块接收到触发信号后,模块内部向外界发出8个40kHz的超声波脉冲,同时Echo引脚由0置1。当超声波脉冲遇到被测障碍物并反射回测距模块时,Echo引脚电平由1置0,一次测距结束。通过计算Echo引脚高电平持续时间即可求得超声波传输时间,进而求解出所测距离。
.
.
.
代码思路
代码思路有两种,一种是通过定时器的输入捕获来计算时间,另一种是通过外部中断结合定时器的开闭来计算时间,个人觉得第二种比较简单,故采用第二种。
具体思路为:
通过MPU不断控制Trig控制端发送触发信号,使得模块处于实时测距状态,定时器和外部中断开启,每当测距模块向外发送高频信号时,将触发Echo引脚的外部中断,外部中断中,通过控制定时器的开闭来测量反应时间,从而通过换算得到距离。
.
.
.
部分代码
初始化函数
简单对GPIO进行初始化
//initialize the pin of jsn-sr04t
void JSN_SR04T_Init(void)
{
//定义GPIO初始化结构体
GPIO_InitTypeDef GPIO_InitStruct;
//初始化相应IO口时钟
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);
//初始化GPIO参数 引脚Trig,用于输出一个持续10us的高电平触发信号,触发超声波模块开始发送超声波
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStruct