LabVIEW+树莓派:超声波测距模块
模块资料地址:
http://www.digilent.com.cn/products/product-pmodmaxsonar.html
上图是该模块的资料,从图中可以得到该模块每次输出5个字节的串口数据包,格式为:
第1个字节(帧头):R
第2-4个字节(数据帧):3个字节的距离数据
第5个字节(帧尾):回车符(0D,\r)
所以我们可以大致使用以下(下图)思路编程:
(以下代码仅供参考,实际应用另加调试。)
如上图所示:
1.使用UART Open.vi打开串口,默认设置为channel 0;波特率9600...树莓派刚好也是这样的参数设置,所以不额外连线(如果是Arduino 2560,则从channnel 1开始)。
2.通过条件结构判断是否出错,出错就重新配置串口,提高容错率。
3.以比模块发送数据快的速率去读串口缓冲区,使用UART Get Bytes Available.vi来获取树莓派串口缓冲区数据的字节总数,连接至UART Read.vi,以此达到缓冲区有多少字节的数据,就读取多少字节的数据的效果,这个方法在上位机编程中也经常用到。(也可以延时相对长一点的时间,每次读取几十个字节的数据,再去解析)
4.由于这里树莓派对串口缓冲区数据的处理速率比模块的数据发送速率快,所以当串口缓冲区没有数据时,或者串口数据丢包,程序解析出来的数据就为“0”,数据会非常不稳定(对实际应用影响会很大),所以使用反馈节点(作用相当于移位寄存器),把每次有效的数据保存至下一次,如果串口还没有收到下一次的数据,或者发生数据丢包,缓冲区字节数小于数据包的字节数“5”,则继续使用反馈节点保存的上一次的有效数据。这样能有效保证数据的稳定。
5.最后使用十进制字符串至数值转换函数,再将数值乘以2.54(1英寸=2.54cm),得到以厘米为单位的举例数据。
上图为接线示意图,由于该模块是自动连续运行进行测量的,所以TX引脚源源不断的向外发送数据,所以只需将该模块的TX引脚,接到树莓派的RX引脚,再加上两根电源线搞定。
以下为实物接线图,非常简单。
觉得不错的小伙伴可以关注微信公众号“李比希LabVIEW工作室”哦!