尹延龙,丁瑞好,董铮
(湖北文理学院 计算机工程学院,湖北襄阳,441053)
随着经济的快速发展,汽车已经逐渐进入到了家家户户,使得人们的出行变得更加地舒适[1]。但与此同时,城市建设的步伐远远跟不上汽车行业的发展,随着汽车数量的越来越多,道路拥挤已经成了很多城市的通病,严重影响人们的出行。节假日拥堵情况更甚,通行十分困难。因此如何缓解道路拥挤,让人们的出行更顺利成为城市交通中的一个大问题[2~3]。
传统的交通灯是通过设定路口交通灯时间为一定值进而调节车流量,控制太过简单、单一,并不能适应现在日趋拥挤的道路,并且当路口道路车流量过于拥挤时,交通路口还需要协管员来协助调控交通灯的变化时间,以此缓解道路拥挤的情况。交通灯实时控制系统通过实时监测各个方向的车流量,比较各个路口的车流量,进而计算出合理的交通灯变化时间调控交通灯。减少车辆的等待时间,合理的分配道路资源,缓解交通拥堵,既能减少交通警察人力资源的浪费,也能使人们的出行更加通畅,让城市的交通更加智能,更美好[4]。
系统主要应用有主次干道的十字路口路段,用于调节十字路口的车辆拥堵情况。系统主要采用了传感器、树莓派和Python 技术。传感器用于测量车流量,通过测量车辆通过路面产生的压力,再将压力信号转化成电信号传输给系统,传感器本系统采用的是压电传感器。压力传感器安装在各个路口,距离路口的一定距离的区域,测量在一定时间内车辆是否通过近车监测点和远车监测点来推算车流量。树莓派三代B 型开发板用于接收压力传感器传过来的电信号,再将电信号进行处理分析计算,得出交通灯颜色变化的时间,以此来控制交通灯的颜色变化,进而减缓车辆拥堵的情况。Python 是计算机编程语言,处理分析压力传感器传来的车流量数据、计算绿灯的变化时间、控制交通灯颜色的变化等。
在经济方面,树莓派和传感器的成本都比较低,整个系统并不需要花费太高的成本,而且压力传感器寿命很长,可以使用很久,比较适合用来测量车流量。
交通灯实时控制系统是利用实时分析各个路口的车流量来计算出交通灯的状态及绿灯时间。系统的功能需求如下:
(1)各个路口车流量数据采集与传输
功能描述:压电传感器根据收集通过该传感器的压力数据,将压力信号进而输送给树莓派。压力传感器是分布在各个路口的,不同路口的压力信息都进行收集。
输入:路口处的车流量压力信号。
输出:车流量的电信号。
(2)车流量电信号的分析处理
功能描述:压力传感器将车流量的压力信号传送给树莓派,树莓派再将收集到的压力信号进行分析处理,计算出绿灯的变化时间,以此来控制交通灯的变化。
输入:车流量的电信号。
输出:交通灯的变化时间。
(3)交通灯控制
功能描述:根据树莓派开发板计算出来的时间来控制路口交通灯的变化时间。同时路口的交通灯也可以由人为控制,当一些特殊情况发生时,交通协管员可以随时控制交通灯的变化。
输入:树莓派计算交通灯时间。
输出:交通灯是否变化。
根据系统的可行性和需求分析,设计了图1 所示的系统功能模块图。系统主要分为车流量检测模块、车流量分析处理模块和交通灯转换模块。车流量检测模块主要负责检测路口的实时车流量,车流量分析处理模块用于计算出路口的绿灯时间及交通灯是否发生变化,交通灯转换模块主要是根据系统的计算结果来进行交通灯状态的转换。
图1 系统功能模块图
系统流程图如图2所示。安装在路口的压力传感器会接收到车辆是否通过的信号,然后把车辆通过的压力信号传给树莓派开发板。树莓派开发板会根据压力传感器传过来的车流量信号进行分析计算,分配出合适的绿灯时间及交通灯的状态是否发生变化,并把最终结果输出给交通灯,交通灯会根据树莓派开发板的指令进行相应的变化,进而达到控制车流量的目的。
图2 系统流程图
交通灯实时控制系统的硬件部分主要有压力传感器、树莓派三代B 型开发板、RGB LED 模拟交通灯。压力传感器收集路口处的实时车流量数据并将数据传输给树莓派三代B 型开发板控制系统,控制系统通过Python 语言编写的程序处理分析压力传感器传过来的车流量信息,并得出交通灯的变化时间规则。树莓派开发板控制系统再将交通灯的变化信息传输给RGB彩色LED 模拟的交通灯显示器,来模拟交通灯的变化[5-6]。硬件组成如图3 所示。
图3 系统硬件组成图
系统采用的是RGB 彩色LED 来模拟交通灯的变化。其中,LED 灯中有三种颜色的发光二极管:红色、绿色和蓝色,有四个引脚:VCC、R、G、B。VCC 是用来连接电源的正极的。R,G,B 分别对应着红绿蓝三个灯的接口,再把这三个接口与树莓派的GPIO 引脚进行连接,通过控制这三个灯的颜色比例变化来模拟交通灯的颜色变化。
系统研究的是十字路口红绿灯变化情况,如图4 所示,将东西南北四个方向的路口都分为直行(包括直行车道和右转车道)和左转的情况。其中,东西方向,南北方向红绿灯变化情况一致,则仅需研究东或西侧,南或北侧情况,即图中D1,D2,D3,D4 这四个车道方向绿灯情况即可。当D1,D2,D3,D4 四个方向任意一个车道为绿灯时,其他车道都不能显示绿灯。
图4 路口交通图
在交通十字路口,一般都会有一条车流量较多的主干道,一条车流量较少次干道。设定东西方向的车道为主干道,南北方向的车道为次干道,因为主次干道的车流量是不一样的,一般情况下,主干道的车流量会大于次干道上的车流量,所以在初始绿灯时间的分配上,主干道的绿灯分配时间应该多于次干道上的绿灯时间。其中黄灯的时间固定为3s,所以在这个系统中不需要进行计算分配黄灯的时间,只需要计算红灯,绿灯的时间即可。而车道的初始绿灯时间,应当是由十字路口平时的车流量所决定的,应提前测得合理的初始时间。考虑到在十字路口中车流量变化很快,更新时间不宜太长,还有系统所承受的计算压力,更新时间不宜太短,在这个系统中设定为每5s 更新一次车流量,再根据更新的车流量计算出绿灯时间并将计算的绿灯时间更新给路口的交通灯[7~8]。
绿灯在每一次将要变化之前,都会先根据监测的车流量大小来进行一次判断,判断是否要变换交通灯颜色。而在每一次监测车流量之前,会先对绿灯的剩余时间进行判断。如果判断当前绿灯剩余时间小于或等于5s,则直接更新当前绿灯的剩余时间为5s,与此同时,当前绿灯开始闪烁,5s后,直接变换为黄灯,不再进行车流量的判断。如果判断当前绿灯时间大于5s,系统根据当前车流量计算绿灯时间,如果计算的绿灯时间小于剩余的绿灯时间,则当前交通灯的绿灯剩余时间更新为系统计算的绿灯的剩余时间,反之,如果计算的绿灯时间大于剩余的绿灯时间,交通灯当前绿灯时间不变。
系统初始情况下,会对各个不同车道分配一个初始绿灯时间Hinit,然后每5s 检测一次路口的车流量,再根据车流量计算出当前路口的绿灯时间Hnr。然后比较Hnr,判断是否开始下一方向的绿灯时间。当新分配的时间小于等于5s 时,各个方向的绿灯的剩余时间直接更新为5s,这5s 期间,绿灯处于闪烁的状态,且5s 后绿灯变化为黄灯,黄灯时间为3s,黄灯时间结束后下一路口的绿灯亮。当新分配的绿灯时间大于5s 时,再进行比较新分配的绿灯时间与当前路口剩余的绿灯时间。如图5 所示,当分配时间小于等于当前路口绿灯剩余时间时,各方向剩余绿灯时间更新为新分配的时间,反之各方向剩余绿灯时间不更新。五秒后继续检测,并依次循环[9]。
图5 程序流程图
假设车辆的速度是20km/h,这在道路中其实已经算是一个很低的速度了,那么这辆车在5s 内的行驶距离将近28m。如果道路拥挤,那一辆车在监测点之间的行驶距离肯定是低于20km/h。所以设定近车监测点与远车监测点的距离为25m。当路段拥挤时,这段距离的车行驶速度会变慢,5s 之内不会通过该路段,就会被计入车流量,当路段还比较通畅时,通过这段距离的车速度会很快,那么在5s 内就会通过该路段,就不会被计入车流量。
如图4 所示,该十字路口的总车流量为D=d1+d2+d3+d4+d5+d6+d7+d8。向南北方向直行的车流量总量为D1=d3+d7,向南北方向左转的总车流量为D2=d4+d8,向东西方向直行的总车流量为D3=d1+d5,向东西方向左转的总车流量为D4=d2+d6。系统设定该十字路口的绿灯顺序依次是东西直行,东西左转,南北直行,南北左转,以此循环。检测时间间隔为3s,路灯初始周期为H。
由于四个方向绿灯时间不能重合,所以每个方向绿灯都应该设置一个初始时间。绿灯初始时间的更新:每当绿灯进行转换到下一路口绿灯时,下一路口的绿灯应该设置一个初始时间,而不应该沿用上一路口所计算的绿灯时间。因为上一路口在绿灯的过程中,车流量会越来越少,所计算的绿灯时间也会越来越少,在下一次绿灯变化之前,绿灯时间达到一个最小值。然而在这个过程中,其余路口都是红灯时间,车流量会增大,如果继续使用上一方向所计算的绿灯时间则会不合理,所以在每个路口绿灯变化之前绿灯时间需要更新到初始值。
由于夜间人们的出行量大大减少,道路上的车流量也随之很少,所以在夜间再实行与白天同样的交通灯的变化规则就有些不合理了。在夜间,因为出行的车辆较少,只需要提醒司机到路口时记得减速通过就可以了,这个时候就可以设置十字路口中四个路口黄灯持续闪烁,提醒司机注意来往车辆减速通过。关于交通灯夜间模式的时间设置,还要根据季节来设定。在夏季,白天较长,夜晚较短,夜间模式也应把时间推迟,可以设定凌晨一点开启夜间模式,四点关闭夜间模式。而冬季,白天较短,夜晚较长,夜间模式可以提前到晚上十二点开启夜间模式,早晨五点关闭夜间模式。夜间模式的设置也缓解了控制系统的压力。
根据交通灯实时控制系统的功能模块对系统测试,先将树莓派和传感器显示灯这几个模块给连接起来,连接好之后接通电源,在树莓派上运行程序,系统便开始运行了。因为系统的应用场景是设有主次干道的十字路口,所以测试时候会分为主干道和次干道分别进行测试,测试随着车流量的变化交通灯是如何进行变化的。同时还会测试夜间时,交通灯是怎样变化的。
根据系统测试方案设计如表1 所示的路口主干道情况的测试用例、如表2 所示的次干道情况的测试用例以及表3 所示的夜间模式的路口交通灯情况的测试用例。
表1 主干道测试用例表
表2 次干道测试用例表
表3 夜间模式测试用例表
通过树莓派运行写好的Python程序,可以通过将树莓派连接到PC 端,在PC 端上控制树莓派运行Python 代码。代码运行完成后,对该系统进行简单的测试,检测其功能。
系统刚开始检测时,设定东西直行车道绿灯亮,则其他车道红灯亮。如图6 所示。
图6 交通灯变化图
绿灯时间结束后,东西方向直行车道交通灯黄灯亮起,其他方向仍为红灯,如图7 所示。
图7 交通灯变化图
东西直行黄灯结束后,变为红灯,下一车道交通灯黄灯亮,如图8 所示。
图8 交通灯变化图
下一车道黄灯时间结束后,路灯亮,其他车道依然是红灯,如图9 所示。
图9 交通灯变化图
夜间路口黄灯持续闪烁,如图10 所示。
图10 交通灯夜间模式图
当某一车道绿灯亮时,模拟车辆通过压力传感器,该车道的压力传感器产生信号传送给了树莓派系统,系统在根据传过来压力信号的次数判断车流量,再计算该车道的绿灯时间,系统再控制绿灯亮的时间,绿灯时间与车道车流量的大小成正比。
系统介绍了交通灯实时控制系统的目的和意义,结合了压力传感器和树莓派开发板,参考了之前的智能交通灯的研究技术,让交通灯随着车流量的变化而实时变化,变得更加智能。同时这个系统的开发成本也比较低,其中用到的压力传感器在这个系统中也易于安装和维护。系统开发的成功将会给人们的出行带来极大的便利,让人们的出行更加的舒适,很大地缓解交通拥堵的状况,让城市道路更通畅。