【项目背景】
交通陋习不但直接威胁着出行安全,扰乱了正常的交通秩序,也破坏了城市的整体形象。随着文明城市创建的深入人心,文明交通必将受到全社会的推崇。借助“闯红灯拍照系统”可以宣传文明交通、安全交通法规,引导大家告别交通陋习,倡导文明出行,提升人民素质,为城市的文明建设出一份力量,人民的出行也更有安全感。
【原理分析】
当红灯亮并且有车越线行驶时,拍照识别闯红灯车辆车牌号。我们可以利用红外避障开关来检测过往车辆是否越线闯红灯。具体的流程图如下所示。左侧是红绿灯系统的流程图,右侧是抓拍系统的流程图。
因为我们用到了麦昆来模拟行驶的车辆,所以还需要以下硬件:
步骤1 连接器材
我们需要用到红、黄、绿三色LED以及红外避障开关。将数字食人鱼红色LED发光模块连接到扩展板的4号引脚,将数字食人鱼黄色LED发光模块连接到扩展板的5号引脚,将数字食人鱼绿色LED发光模块连接到扩展板的6号引脚。红外避障开关我们连接到扩展板的2号引脚即可。具体接线可以参考下图。
连线完成后的效果如下:
步骤2 编写主程序
打开Mind+,切换到实时模式。选择左下角的“扩展”按钮,接着选择“主控板”选项卡下的“Arduino UNO”作为主控。
将“网络服务”下的“AI图像识别”加入扩展。
在舞台背景库中选择“Colorful City”作为舞台背景。
参考流程图,开始编写代码。这里遇到了一个问题。本来按照原先的设想,应该使用多线程来编写的。一个线程模拟红绿灯系统,一个线程用来抓拍闯红灯的车牌。但是老师提醒我,由于UNO性能不够,不支持多线程。后来我看到论坛里的帖子“在UNO上如何实现同时控制多个延时程序?系统运行时间”,于是有了灵感。最终代码完成如下:
由于红绿灯系统要始终运行,如果用等待几秒这样的语句,会使系统阻塞。在此期间无法执行任何其他操作。所以改用记录当前系统运行时间的方法来控制红绿灯的持续时间。红灯亮的时候打开摄像头,如果红外避障开关检测到有车辆经过,就开始拍照识别。
步骤3 创建百度智能云应用
首先打开百度AI开放平台http://ai.baidu.com,点击右上角的控制台。用百度账号登录后选择页面左侧的“文字识别”。
在新页面中选择“创建应用”按钮。
完善应用信息。默认已经帮我们勾选了文字识别的相关服务,其中包含车牌识别。
创建好后在应用列表中能看到刚才创建的应用。我们需要记录列表中的AppID、API Key和Secret Key。
回到Mind+,将上述AppID、API Key和Secret Key的值填入“切换至独立账户”指令中。
至此,闯红灯抓拍系统的代码部分已经全部完成,接下来可以设计外观了。
步骤4 制作外观
首先制作红绿灯的外观。选择一张瓦楞纸,中间折两下。在上面挖三个孔用来安放LED。背面将LED和线材用透明胶带固定。
原本想将红绿灯做成L型的,但考虑到要挂摄像头上去,估计很难固定,所以将红绿灯做成直立型。由于做好的红绿灯是三棱柱的形状,底部受力面积太小,立不住,我们要设计一个底座。在瓦楞纸中间开了一个梯形的孔,用于放置信号柱。
放上去之后是这样子的。
看上去效果还可以。但是还有一个笨重的摄像头要放上去。结果一放上去就翻了!没办法,只好想办法解决。我们的杀手锏是用泡沫板做了一个很大的底座。
最终效果就是这样。主控板没地方放,那就放在一旁吧。
步骤5 编写测试车辆代码
为了更好的控制车辆,我们使用遥控板来控制麦昆的前进与后退。因此先要测试得出遥控各个按键的码值。我们将获取到的遥控信息输出到串口中。
经过测试,得到要用到的几个按键的码值如下表所示。
编写程序控制麦昆前进、后退、左转、右转与停止。
步骤6 测试运行
我们在麦昆身上放一张模拟车牌。
测试场景是这样的。由于前方到达桌子边缘,为防止小车坠落,特意放了两个盒子作为阻挡。
经过测试,基本能够实现闯红灯拍照效果。小车停下来是因为如果开过去就撞翻纸盒掉地上了,所以暂时只能这样处理。
王尧坤2020.01.14
很好的想法,学习了