欢迎来到专业的优谦范文网平台! 工作总结 工作计划 心得体会 述职报告 思想汇报 事迹材料 疫情防控 共同富裕
当前位置:首页 > 范文大全 > 公文范文 > 正文

树莓派Python编程实现超声波动态雷达图

时间:2023-09-14 19:15:05 来源:网友投稿

牟晓东

超声波传感器能检测与前方障碍物间的距离,如果将它固定于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 度一周扫描后检测生成的若干个与前方障碍物的间距值。

(2)“whileTrue:”循环体

如果超声波传感器检测的障碍间距值在安全范围内(比如20cm),则控制绿色LED 灯常亮:“Green_LED.on()”;
在每次旋转360 度的过程中,需要获取30 个值与之前产生的等差数列30 个刻度值对应:“for i in range(30):”;

建立变量distance,赋值为“round(sensor.distance,4)”, 获取检测到的障碍间距数据( 保留4位小数), 并且通过语句“print(i,distance)” 进行输出监测;

在“if distance<=0.2:” 分支结构中, 如果条件成立则亮红色LED 灯、关闭绿色LED 灯:“Red_LED.on()”“Green_LED.off()”, 持续时间为0.01 秒钟:“time.sleep(0.01)”;

然后通过语句“data.append(distance)”, 将数据有序追加到data 列表中,再关闭红色LED灯、打开绿色LED 灯:“Red_LED.off()”“Green_LED.on()”。

進入下一次循环(range),30次循环结束之后, 开始绘制雷达图:
语句“ax.plot(theta,data,"o--",color="g",label="data",linewidth=1)”对极坐标进行数据设置,包括30 个0 至360 度的等差刻度值、30 个超声波检测障碍间距值(data 列表)、线的模式(虚线)、颜色(Green 绿色)和线宽(linewidth)等;

语句“ax.fill(theta,data,facecolor="g",alpha=0.15)” 是对30个障碍间距值与极坐标中心点围成的封闭区域进行设置,包括填充颜色和透明度等;
语句“plt.pause(0.1)”的作用是控制交互式绘图过程中数据更新的预留时间缓冲,预防出现图形不能及时刷新显示的问题;
语句“plt.cla()”的作用是清除当前活动轴的数据内容(相当于清空操作),语句“plt.show()”的作用是绘制显示图像,语句“data.clear()”的作用是清除data 列表中的当前数据,为下一次循环保存新数据“留空”。

3.测试超声波动态雷达

将程序保存为Radar.py, 点击“ 运行” 按钮进行超声波动态雷达的测试。超声波传感器在舵机的带动下开始匀速旋转,程序界面中也不断有“00.2698”“23 0.3555”等信息出现,表示每次旋转一周所监测到的30 个障碍间距值;
同时,绿色LED 灯亮起,如果出现有近距离的障碍物(在20cm 范围内),则会亮起红色LED 灯。超声波传感器每旋转一周,就会出现一个雷达极坐标图,绘制有每个点所处的二维空间位置(角度值)和距离中心的半径大小(障碍物间距值),同时在这些坐标点所包围生成的封闭区域内,雷达图是以一定透明度的绿色来展示的。随着超声波传感器的不停旋转,同时在其周围变换出现各种障碍物,整个雷达图也在不断发生变化(如图2)。

关注“壹零社”公众号下载源代码。

猜你喜欢滑环极坐标舵机巧用极坐标解决圆锥曲线的一类定值问题河北理科教学研究(2020年1期)2020-07-24含齿隙弹载舵机的全局反步模糊自适应控制自动化学报(2019年6期)2019-07-23一种无触点能量及信号传输的滑环设计电子制作(2019年11期)2019-07-04HXn5机车主辅发电机滑环安装工艺研究电子世界(2018年22期)2018-12-06基于dsPIC单片机的飞艇舵机控制实现电子制作(2018年1期)2018-04-04极坐标视角下的圆锥曲线中学数学研究(广东)(2018年23期)2018-03-05基于高速同步485总线通信的多通道舵机控制器设计制造业自动化(2017年2期)2017-03-20自冷式滑环风路结构的设计防爆电机(2016年4期)2016-09-15基于云模型的舵机同步控制舰船科学技术(2015年8期)2015-02-27岭澳核电站3号机组电动发电机滑环的更换核科学与工程(2012年1期)2012-06-26

推荐访问:超声波 编程 动态