树莓派Python编程实现超声波动态雷达图
超声波传感器能检测与前方障碍物间的距离,如果将它固定于360度旋转的舵机上持续采样,就能将采样获取的数据绘制成雷达图进行动态展示。
01
实验器材及连接
树莓派3B+和古德微扩展板各一块,HC-SR04超声波传感器一个,4路8线电滑环一个,360度舵机一个,红色、绿色LED灯各一支;还需要电烙铁和热熔枪各一把。
用热熔枪将滑环中央的转子底端与舵机输出转子进行固定,注意二者的中心点要尽量吻合,防止旋转时偏心。再将滑环中央转子的顶端与超声波传感器顶端固定好,也要中心对齐。接着,将滑环外围的定子圈的四根线与古德微扩展板的20和21号(共四个引脚)进行连接,红线接电源正极VCC,黑线接地GND,橙红色线接Trig信号发射端,棕色线接Echo信号回声端。滑环中央转子4根引线分别与超声波传感器的四个引脚进行对应连接(电烙铁点锡);将舵机固定好之后,连接线插入扩展板的18号引脚,注意黑色、红色和棕黄色三根线分别与GND、VCC和信号控制D端连接;然后,将红色和绿色LED灯按照“长腿正、短腿负”的规则分别插入扩展板的5号和6号引脚;最后,给树莓派插入数据线,通电启动操作系统(如图1)。

02
Python代码编程
(1)库模块的导入与变量初始化
首先,导入GPIOZero、MatplotLib等库模块:“from gpiozero import LED,Servo,DistanceSensor”“import numpy as np”“import matplotlib”“import matplotlib.pyplot as plt”和“import time”;然后进行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)。

(2)“while True:”循环体
如果超声波传感器检测的障碍间距值在安全范围内(比如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)。

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

关注“壹零社”公众号下载源代码。
编辑|张毅
审核|吴新
爆料联系:cpcfan1874(微信)
壹零社:用图文、视频记录科技互联网新鲜事、电商生活、云计算、ICT领域、消费电子,商业故事。《中国知网》每周全文收录;中国科技报刊100强;2021年微博百万粉丝俱乐部成员;2022年抖音优质科技内容创作者
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.
网址:树莓派Python编程实现超声波动态雷达图 https://mxgxt.com/news/view/1027950
相关内容
Python编程实现Taylor Swift粉丝数据分析与可视化工具蓝莓树苗基地、蓝莓树苗出售价格多少
哪里有蓝莓树苗、蓝莓树苗价格多少
CV之FR(H+k机器学习):基于每人几张人脸图片训练H+k模型实现(国内外明星)新人脸图像的姓名预测(准确度高达100%)
草莓熊和谁是一对?雅迪联动顶级潮流IP,实现品牌年轻化精准定位
蓝莓树苗品种介绍
中国雷达工业实现“换道超车”
蓝莓树苗基地
超帅!视频来自双莓派_yura,图片源自vb,如有侵权,请告知删除
蓝莓树苗价格
随便看看
- 你以为郭京飞靠连襟陆毅上位,其实他用十年硬功夫磨炼演技,45岁从话剧舞台逆袭荧幕爆红,连陆毅都对他敬佩有加
- 赞赞娱乐圈:成毅的《长安二十四计》火了,大家却让成毅感谢欢瑞。 很多明星大红之后,都会解约,成立工作室。接喜欢的剧本,走想走的路线,关键是自由度大了,发展起来无需束手束脚,更加不需要带新人,这是很多明星的选择。 成毅和罗云熙就一直跟着公司节奏,因为被捧红也是一个很久的过程,他们只想好好演戏,不想把时间放在其他琐碎的事情上。哪怕一直是仙侠剧,每一部都需要带新人,他们依旧是按部就班,磨炼演技才是他们的...
- 46岁演120部戏不红,丁克14年无儿无女,如今他凭什么被全网关注
- 《演员的诞生》高清完整版在线观看
- 淘乐小家:黄宗泽再夺大湾区视帝!谁还记得他曾被骂“一碌木”阻人收工? TVB《万千星辉颁奖典礼2025》颁奖礼现场灯光璀璨,黄宗泽再次举起“大湾区最喜爱TVB男主角”奖杯。这已是他二度摘得此誉,但掌声背后,有多少人记得那个曾被武指指着鼻子骂“成碌木咁”的愣头青? 时间倒回26年前,那个靠拍柠檬茶广告入行的少年,恐怕自己都没想到,通往视帝的路竟如此颠簸。 1999年加入TVB的黄宗泽,早期经历与许多...
