今天下午专门腾出大块时间,来编写这个程序,昨天在网上搜了很多例程,发现都不能使用也不能很方便的模块化移植,网上例程大多是89系列单片机或者arduino的,没有找到我所使用的STC15W,索性决定自己写一个。
下午花了4个小时终于编写了这个自己能完全理解的程序,以后自己移植也方便,程序中能简化的都简化了,优化了很多地方,最后感觉运行稳定 。
编写过程中遇到很多困难,也收获很多经验。总结两条经验:①尽量不要使用需要动态扫描的数码管,多用一个定时器不说,还要消耗很多CPU资源,以后数码管点阵屏能用595驱动的就用。②HC-SR04驱动电压一定要5V,电压低了会严重影响测量距离。
使用串口读取大量数据,准备进行误差分析
作出散点图很明显发现数据有断层,大约每0.4cm就集中出现数据。
取多个间隔求出平均差值,大约为ΔL=0.4125cm,Δt=ΔL/声速=1.213235x10^-5 s,算得频率约为82Khz,大约为40Khz的两倍,由此可以判断出这个数据断层的原因是超声波模块自动发送的40khz方波造成的,这个误差由模块自己产生且无法避免,通过40khz反算得出距离间隔应为4.25cm,模块的数据手册上写精度可高达3mm是有一定虚假的,看来数据手册的参数也不可全信。
不过在2米的距离内,只有2cm左右的测量误差已经能够接受了。分析也差不多了,下面发出源程序。