用超声波模块来测距是非常方便有效的方式,而且精度比较高。超声波测距模块就是通过测量声波从发出到反射回来的时间来计算距离。因为声音在空气中传播的速度大概在340m/s左右,知道了往返时间再乘以速度就可以得出距离了。当然声速并不一定是固定的,这与空气温度、气压都是有一定关系的,因此超声波存在一定的误差。
超声波模块提供的使用接口很简单,除了5V和GND的供电接口外,提供了Trig和Echo两个口。在使用时,如下图:
首先单片机通过Trig口,产生10微秒以上的高电平(其实时间更长一些也不会有太大影响),然后超声波模块会自动发射出一串40kHz的超声波。发射结束后,超声波模块内部开始计数,超声波被发出后,沿直线方向前进,如果遇到面积比较大的目标,其一部分的声波会被反射回来,然后在A点时刻,返回的声波被超声波探头接收到。超声波模块接收到回波就会立刻拉高Echo引脚,然后持续 “它等待声波的那段时间” 后,在B点时刻将Echo下拉。
因此在使用时,我们需要在Echo的上升沿(A点)开始计时,然后在下降沿(B点)停止计时,得到的时间就是声波传递往返的时间。
一、单片机部分
1.1硬件连接
这里我用两个普通IO口连接其Trig和Echo。在程序中使用的是Trig为PA6,Echo为PA7。
1.2代码编写
1.2.1超声波程序
首先初始化,这里采用STM32的EXTI(外部中断)的功能,用于检测Echo口的上升沿和下降沿,以确定A点和B点。然后