树莓派Python编程实现超声波动态雷达图
作者 牟晓东
发表于 2023年6月

超声波传感器能检测与前方障碍物间的距离,如果将它固定于360 度旋转的舵机上持续采样,就能将采样获取的数据绘制成雷达图进行动态展示。

1.实验器材及连接

树莓派3B+ 和古德微扩展板各一块,HC-SR04 超声波传感器一个,4 路8 线电滑环一个,360 度舵机一个,红色、绿色LED 灯各一支;还需要电烙铁和热熔枪各一把。

用热熔枪将滑环中央的转子底端与舵机输出转子进行固定,注意二者的中心点要尽量吻合,防止旋转时偏心。再将滑环中央转子的顶端与超声波传感器顶端固定好,也要中心对齐。接着,将滑环外围的定子圈的四根线与古德微扩展板的20 号和21 号(共四个引脚)进行连接,红线接电源正极VCC,黑线接地GND,橙红色线接Trig 信号发射端,棕色线接Echo信号回声端。滑环中央转子4 根引线分别与超声波传感器的四个引脚进行对应连接(电烙铁点锡);将舵机固定好之后,连接线插入扩展板的18 号引脚,注意黑色、红色和棕黄色三根线分别与GND、VCC和信号控制D 端连接;然后,将红色和绿色LED 灯按照“长腿正、短腿负”的规则分别插入扩展板的5 号和6 号引脚;最后,给树莓派插入数据线,通电启动操作系统(如图1)。

2.Python代码编程

(1)库模块的导入与变量初始化

首先, 导入GPIO Zero 、Matplot Lib等库模块: “from gpiozero import LED , Servo , Distance Sensor ”“ importnumpyasnp”“importmatplotlib”"impor tmatplotlib.pyplot as plt”和“importtime”; 然后进行LED 灯、舵机和超声波传感器实例的初始化操作:“ Red _ LED= LED ( 5 ) ”“ Green_LED=LED(6)”“servo=Servo(18)”和“sensor=DistanceSensor(echo=21,trigger=20,max_distance=4)”, 并且通過语句“servo.mid()”控制360 度舵机以中速带动超声波传感器向一个方向开始旋转;再设置雷达图绘制画布的宽度和高度,大小分别为8 和6(单位为英寸):“plt.figure(figsize=(8,6))”;建立变量ax,赋值为“plt.subplot(111,projection='polar')”, 作用是设置画图样式为“极坐标”模式(Polar);建立变量theta, 赋值为“np.arange(0,2*np.pi,2*np.pi/30)”,通过调用Numpy 库中的arange() 函数返回一个起点为0、终点为2Pi(360 度圆周)的等差数列,固定步长为2Pi/30;语句“plt.ion()”的作用是将figure 绘图设置为交互模式;建立变量data,赋值为空列表“[]”,作用是存放超声波传感器每旋转360 度一周扫描后检测生成的若干个与前方障碍物的间距值。

本文刊登于《电脑报》2023年23期
龙源期刊网正版版权
更多文章来自
订阅