青岛港湾职业技术学院 武玉升
以Arduino uno单片机为核心处理器,以Proteus 8.5电路仿真软件为平台,设计了基于提高主路通行效率的智能交通灯控制系统仿真电路。系统中设计了六个超声波测距传感器,用于检测十字路口各个方向有无机动车。采用Proteus可视化编程技术编写了系统控制程序。在保证主路机动车优先通行的基础上,动态检测到辅路方向有机动车通行要求时,系统自动分配通行时间。系统成功仿真运行,实现了提高主路通行效率的目的。
为了解决交通拥堵问题,许多城市在交通繁忙的十字路口开始设置智能交通灯控制系统,能够根据车流量动态设置交通灯控制时间,从而提高了通行效率。但是对于一些交通不太繁忙的十字路口,大多还是设置的普通交通灯控制系统,各方向的通行时间设置是固定的,在一个方向上车流量相对较大的情况下,不能有效提高通行效率(章伟,张代远.基于车流量的交通灯控制系统设计[J].计算机技术与发展,2015(05):196-204)。有些十字口一条路车流量明显高于另一条路,车流量较大的本文称为主路,相应的另一条称为辅路。主路行人及车流量比辅路大,如果交通灯设置不合理,常常会出现辅路没有通行需要的情况下,依然给辅路设置通行时间,主路的行人和车辆依然需要等待一个信号灯周期,这无疑降低了通行效率。
对于具有主路和辅路特点的十字路口,本文研究了一种智能交通灯控制系统,通过Proteus仿真软件成功进行了仿真运行。本系统以Arduino uno单片机为核心处理器,设计了六个超声波测距传感器,用于检测十字路口各个方向有无机动车。假设东西向为主路,南北向为辅路,主路交通流量大于辅路。在辅路方向上没有通行要求时,交通灯将保证主路方向持续通行。在动态检测到辅路方向有通行要求时,系统自动给辅路分配通行时间,从而实现了提高主路通行效率的目的。
图1 电路的总体结构框图
图2 十字路口布局图
总体控制电路结构框图如图1所示,十字路口的布局图如图2所示。控制电路主要包括Arduino uno单片机控制系统、超声波车辆检测电路,I/O接口扩展电路、数码管显示电路、红绿灯显示电路和工作模拟控制电路(吴文亮,张靓.基于多单片机的智能控制交通信号灯设计[J].宁波职业技术学院学报,2015(05):87-90)。
Arduino uno是整个电路的核心,用于处理超声波车辆检测电路送来的信号、控制红绿灯按照交通控制规则显示、控制各通行方向上的数码管显示计时信息。超声波车辆检测电路设有六个超声波传感器,图2中A、B两点各设置两个,C、D两点各设置一个,用于检测有无机动车要求通过辅路。I/O接口扩展电路用于扩展单片机的I/O接口,以连接所需数量的数码管和红绿灯。数码管显示电路设有四组数码管,如图2所示,每组数码管能够显示两位十进制数,用于显示通行方向上红灯、绿灯和黄灯的显示剩余时间。红绿灯显示电路由六组红绿灯组成,每组红绿灯设有红灯、绿灯和黄灯各一个,分别设置在六个通行方向上。
本文研究的智能交通灯控制系统,选用Arduino uno单片机是比较好的选择。Arduino uno实际上是一块单片机开发板,其核心是ATmega328 MCU控制器,集成了最小系统、闪存存储器、I/O接口、电源电路、在线编程电路等硬件。通过一条USB数据线连接电脑,就可以实现供电和程序烧录,同时还可以选择电源适配器或9V电池供电。具备数字输入/输出接口、PWM输出接口和模拟输入接口,均可以通过杜邦线引出,电路搭接方便。采用电路仿真软件Proteus8.5以上的版本可以方便地对Arduino uno单片机进行仿真,软件提供了各种元器件、传感器、显示器件等仿真模型,可以通过电脑方便地搭建仿真电路。控制程序编写可以采用可视化设计技术,通过连接流程图的形式,使程序编写更加直观、简洁,可以方便地实现多条件分支逻辑的编程(晁松杰.基于ARM智能交通灯控制系统的设计[J].科技创新与应用,2017(12):52-53)。
在智能交通灯控制系统中进行机动车检测的方式有很多,本系统只需要检测行车道是否有机动车,选择采用超声波传感器。利用超声波传感器检测机动车,具有非接触、成本低、寿命长、安装维护简单等优点。图2中A点位于北向南车道上,设置两个超声波传感器,一个用于检测直行车道机动车,另一个用于检测直行左转并用车道机动车,B点同A点相对设置在南向北车道上。C点和D点各设置一个超声波传感器,用于检测西向东左转和东向西左转车道的机动车(吴少雄,王彩红.基于传感器感应式的智能交通灯技术[J].福建电脑,2016(12):139-140)。
图3 超声波检测机动车方法示意图
以B点为例,利用超声波检测车道有无机动车的方法示意图如图3所示。每个超声波传感器都朝向相应的机动车道。若机动车正常停在车道停止线前方等待通过,超声波传感器发射的超声波就会被车辆反射回来。反射回来的超声波被接收部件接收到后,会向单片机发送相应的回响信号。通过数据处理,单片机可计算出车辆同超声波传感器之间的距离,从而判断出该车道有无机动车。
Arduino uno单片机的数字I/O接口只有14个,需要进行扩展。本设计选用了74HC595集成电路。74HC595是八位串行输入/并行输出移位寄存器,具有三态输出和输出锁存功能。在数据移位的过程中,74HC595的数据输出寄存器可以保证输出数据保持不便,从而避免数码管和红绿灯出现闪烁现象。74HC595只占用单片机的3个I/O接口,就能实现8×n个并口扩展,具有电路简单、编程方便的特点。本设计需要用六个74HC595扩展得到六个8位并口。单片机的IO0接在首位74HC595的DS引脚,提供串行数据。IO1接在所有74HC595的SH_CP引脚,通过输出脉冲的上升沿使串行数据移位。IO2接在所有74HC595的ST_CP引脚,通过输出脉冲的上升沿输出并行数据。
如图2所示,系统中需要四组数码管显示电路。右侧的一组数码管用于显示西向东方向计时,左侧的一组数码管用于显示东向西方向计时,根据控制逻辑,系统运行时有可能存在西向东或东向西单独通行的情况,数码管显示计时数值可能不同,所以这两组数码管需要单片机分别驱动。上下两组数码管用于显示南北双向通行计时,南北向车道作为辅路,交通灯控制逻辑比较简单,双向始终同时放行或进行,两组数码管显示计数值相同,所以这两组数码管连接在同一组驱动接口上即可。
如果通过74HC595直接连接数码管,则每个数码管都要占用一个74HC595,这将使单片机的I/O接口扩展电路更加复杂,后续编写控制程序也会比较麻烦,所以本设计采用74HC595输出端接74LS48后再接数码管的形式。74LS48是共阴极LED七段显示数码管显示译码器,用于将8421BCD码转换为数码管显示相应十进制数字的段码。这样一个74HC595可以通过74LS48连接两个数码管,编写控制程序时只需要通过74HC595输出相应数字的8421BCD码即可,从而简化了程序设计。
采用电路仿真软件Proteus8.5仿真Arduino uno单片控制系统时,控制程序编写采用可视化设计技术,所有程序都由各种功能的流程图连接而成,程序编写直观、简洁,可以方便地实现多条件分支逻辑的编程。
编写控制程序之前,首先要明确系统的控制逻辑。为便于分析,假设各个方向绿灯持续时间均为25秒。
(1)普通运行模式。十字路口放行规则是:首先东西双向直行放行,然后东西双向左转放行,最后南北双向直行加左转同时放行。交通灯变换规则是:通行方向上绿灯熄灭前会闪烁3秒,然后黄灯亮3秒,最后红灯点亮。数码管计时规则是:绿灯和红灯都是运行时间剩余9秒时显示倒计时数字,黄灯亮时相应数码管显示3秒倒计时数字,其余时间数码管均处于熄灭状态。
(2)智能运行模式。十字路口放行规则是:若各方向车道均有机动车等待通过,则系统运行方式同普通运行模式相同。在南北双向、东西双向左转均无机动车和行人申请通行的情况下,系统将一直保持东西双向直行放行。系统其它可能的运行状态如表1所示。用序号表示的话,系统可能的运行顺序有:①、①②、①③、①④、①②④、①③④。其中①②④顺序同普通运行模式顺序一致。
表1 智能运行模式运行状态表
系统主程序如图4所示,体现了Proteus软件的可视化设计技术,绘制流程图的过程就是编程的过程。其中SETUP到END程序模块是系统初始化程序,包括设置单片机的I./O接口为输入或输出模式、设置中断申请方式等。LOOP到END程序模块为系统主循环,系统初始化后,单片机将一直循环执行主循环中的程序。其中commode为普通运行子程序,usmode为智能运行子程序。
图4 系统主程序
以电路仿真软件Proteus8.5为平台,搭建了智能交通灯控制系统仿真电路。系统选用Arduino uno单片机作为中心控制器,选用超声波传感器仿真模型模拟检测行车道有无机动车,选用移位寄存器74HC595对单片机的I/O接口进行了扩展,选用七段LED数码管译码显示电路进行倒计时显示,选用红、黄、绿三种颜色LED作为交通信号灯。采用Proteus可视化设计技术编写了系统控制程序,程序仿真运行满足设计要求。通过手动调整超声波传感器仿真数据、工作模式转换开关、行人南北通行按键开关,成功仿真了各车道不同通行状态下系统运行情况,普通运行模式和智能运行模式实现正常切换。
实际应用中,对于具有主路和辅路特点的十字交叉路口,可以在现有交通灯控制系统的基础上进行改造,不需要对路面进行大规模破土挖掘,只需要更换控制板以及在路面加装超声波传感器即可。因此,利用本系统对原有交通灯控制系统进行改造技术简单、费用低廉,但能有效提高主路的通行效率,对缓解城市道路的交通拥堵具有重要的现实意义。