所有分类
主题 主题
平台 平台
我的工作台
userHead
注册时间 [[userInfo.create_time]]
创造力 [[userInfo.creativity]]
[[userInfo.remark]]
[[d.project_title]]
articleThumb
[[d.material_name]]
timelineThumb
进入工作台
折叠
所有分类 我的工作台
展开
闯红灯拍照系统
真_乐迪 真_乐迪 2020-02-19 13:11:35
2
1
简单

【项目背景】

交通陋习不但直接威胁着出行安全,扰乱了正常的交通秩序,也破坏了城市的整体形象。随着文明城市创建的深入人心,文明交通必将受到全社会的推崇。借助“闯红灯拍照系统”可以宣传文明交通、安全交通法规,引导大家告别交通陋习,倡导文明出行,提升人民素质,为城市的文明建设出一份力量,人民的出行也更有安全感。

【原理分析】

当红灯亮并且有车越线行驶时,拍照识别闯红灯车辆车牌号。我们可以利用红外避障开关来检测过往车辆是否越线闯红灯。具体的流程图如下所示。左侧是红绿灯系统的流程图,右侧是抓拍系统的流程图。

projectImage
材料清单 材料清单
1x
DFRduino UNO R3
1x
IO 传感器扩展板 V7.1
1x
数字食人鱼红色LED发光模块
1x
数字食人鱼绿色LED发光模块
1x
数字食人鱼黄色LED发光模块
1x
3-80cm红外数字避障传感器
1x
A-B 方口USB线
1x
罗技C270电脑摄像头

因为我们用到了麦昆来模拟行驶的车辆,所以还需要以下硬件:

材料清单 材料清单
1x
麦昆: micro:bit教育机器人 V4.0 麦昆+锂电池
1x
掌控板
1x
IR kit红外遥控套件
1x
高品质 micro USB数据线
步骤1 步骤1
连接器材

我们需要用到红、黄、绿三色LED以及红外避障开关。将数字食人鱼红色LED发光模块连接到扩展板的4号引脚,将数字食人鱼黄色LED发光模块连接到扩展板的5号引脚,将数字食人鱼绿色LED发光模块连接到扩展板的6号引脚。红外避障开关我们连接到扩展板的2号引脚即可。具体接线可以参考下图。

projectImage

连线完成后的效果如下:

projectImage
步骤2 步骤2
编写主程序

打开Mind+,切换到实时模式。选择左下角的“扩展”按钮,接着选择“主控板”选项卡下的“Arduino UNO”作为主控。

projectImage

将“网络服务”下的“AI图像识别”加入扩展。

projectImage

在舞台背景库中选择“Colorful City”作为舞台背景。

projectImage

参考流程图,开始编写代码。这里遇到了一个问题。本来按照原先的设想,应该使用多线程来编写的。一个线程模拟红绿灯系统,一个线程用来抓拍闯红灯的车牌。但是老师提醒我,由于UNO性能不够,不支持多线程。后来我看到论坛里的帖子“在UNO上如何实现同时控制多个延时程序?系统运行时间”,于是有了灵感。最终代码完成如下:

projectImage

由于红绿灯系统要始终运行,如果用等待几秒这样的语句,会使系统阻塞。在此期间无法执行任何其他操作。所以改用记录当前系统运行时间的方法来控制红绿灯的持续时间。红灯亮的时候打开摄像头,如果红外避障开关检测到有车辆经过,就开始拍照识别。

步骤3 步骤3
创建百度智能云应用

首先打开百度AI开放平台http://ai.baidu.com,点击右上角的控制台。用百度账号登录后选择页面左侧的“文字识别”。

projectImage

在新页面中选择“创建应用”按钮。

projectImage

完善应用信息。默认已经帮我们勾选了文字识别的相关服务,其中包含车牌识别。

projectImage

创建好后在应用列表中能看到刚才创建的应用。我们需要记录列表中的AppID、API Key和Secret Key。

projectImage

回到Mind+,将上述AppID、API Key和Secret Key的值填入“切换至独立账户”指令中。

projectImage

至此,闯红灯抓拍系统的代码部分已经全部完成,接下来可以设计外观了。

步骤4 步骤4
制作外观

首先制作红绿灯的外观。选择一张瓦楞纸,中间折两下。在上面挖三个孔用来安放LED。背面将LED和线材用透明胶带固定。

projectImage

原本想将红绿灯做成L型的,但考虑到要挂摄像头上去,估计很难固定,所以将红绿灯做成直立型。由于做好的红绿灯是三棱柱的形状,底部受力面积太小,立不住,我们要设计一个底座。在瓦楞纸中间开了一个梯形的孔,用于放置信号柱。

projectImage

放上去之后是这样子的。

projectImage

看上去效果还可以。但是还有一个笨重的摄像头要放上去。结果一放上去就翻了!没办法,只好想办法解决。我们的杀手锏是用泡沫板做了一个很大的底座。

projectImage

最终效果就是这样。主控板没地方放,那就放在一旁吧。

projectImage
步骤5 步骤5
编写测试车辆代码

为了更好的控制车辆,我们使用遥控板来控制麦昆的前进与后退。因此先要测试得出遥控各个按键的码值。我们将获取到的遥控信息输出到串口中。

projectImage

经过测试,得到要用到的几个按键的码值如下表所示。

projectImage

编写程序控制麦昆前进、后退、左转、右转与停止。

projectImage
步骤6 步骤6
测试运行

我们在麦昆身上放一张模拟车牌。

projectImage

测试场景是这样的。由于前方到达桌子边缘,为防止小车坠落,特意放了两个盒子作为阻挡。

projectImage

经过测试,基本能够实现闯红灯拍照效果。小车停下来是因为如果开过去就撞翻纸盒掉地上了,所以暂时只能这样处理。

projectImage
Makelog作者原创文章,未经授权禁止转载。
2
1
评论
[[c.user_name]] [[c.create_time]]
[[c.parent_comment.count]]
[[c.comment_content]]