本发明属于测控技术、智能交通技术领域,具体涉及一种基于单片机的交通信号灯状态监测系统。
背景技术:
its(智能交通)是将先进的传感器技术、通信技术、数据处理技术、网络技术、自动控制技术、信息发布技术等有机运用于整个交通运输管理体系而建立起的一种实时的、准确的、高效的交通运输综合管理和控制系统。它分为车辆控制系统,交通监控系统,车辆管理系统,旅行信息系统等多个子系统。交通监控系统类似于机场的航空控制器,它将在道路、车辆和驾驶员之间建立快速通讯联系。哪里发生了交通事故,哪里交通拥挤,哪条路最为畅通,该系统会以最快的速度提供给驾驶员和交通管理人员。
信号灯的检测是交通检测技术中的一大难题,交通信号灯的检测与识别是无人驾驶与辅助驾驶必不可少的一部分,其识别精度直接关乎智能驾驶的安全性。一般而言,在实际的道路场景中采集的交通信号灯图像具有复杂的背景,且感兴趣的信号灯区域只占很少的一部分。针对这些难点,国内外的众多研究者提出了相应的解决方案。总的来说,大多基于传统的图像处理方法;但目前也有用强学习能力的卷积神经网络去进行识别,但这类方法往往需要大量的训练样本避免过拟合的风险。截至目前的大多数方法都是在各种颜色空间中利用信号灯颜色的先验进行分割得到兴趣区域,然后再通过信号灯所特有的形状等特征等进行进一步的判定。
本发明以简化测量手段,提高测量精确度为目的,对信号灯的检测方法进行研究。
技术实现要素:
要解决的技术问题:本发明为了在信号机不开放外接接口的情况下,对其向信号灯输入的电流电压进行检测,通过单片机对采集到的信号进行处理,获取实时的信号灯状态,为无人车提供准确的道路状况。
技术方案:一种基于单片机的交通信号灯状态监测系统,该系统包括接入端选取、信号采集电路设计、单片机信号处理与测量、多路接入线路规划方案所构成,该系统可直接与传统的交通信号机的内部灯控接线组相接,当交通信号灯工作时,则可通过采集该处信号,从而得到所需的数据并将其发送至无人车接收端;
包括以下步骤:
1)接入端的选取位于信号机内部的路口控制器与灯线连接处;
2)信号采集电路将灯线连接处的正弦高压转换为可供单片机处理的方波低压;
3)某一单片机通过对方波进行计数获取相应的信号周期并保存信号周期至内存,另一单片机对方波进行计数获取此刻某路信号的持续时间(某路信号灯已经亮了多久);
4)前两个单片机并联采集电路输出端,并通过串口通信方式将数据传送给第三个单片机,第三个单片机通过获取这两个数据并计算其剩余时间,并根据所接的线路,在其计算出的剩余时间后加上相应的标志(如接的是东西方向红灯这路,就加入字符“r”至剩余时间的末尾处来表示此时计算的是红灯的剩余时间);
5)当车辆到达一定距离时,发出请求信号,此时该系统中单片机锁存某路信号的剩余时间及状态发送给无人车车载端,同时测算某方向的三路灯的单片机也必须将其测算的信号周期发送给无人车载端,以便得出另一方向的剩余时间;
6)该系统中只需要接某一方向上三路灯线,每路包含三个单片机和一个信号采集部分构成一个完整的交通信号灯状态监测系统。
进一步的,采用的接入方式是连接位于信号机内部的路口控制器与灯线连接处来获取信号。
进一步的,采集电路是利用光电耦合与信号预处理电路组合的方式进行信号采集。
进一步的,通过单片机计数并保存信号周期以及某方向信号灯的已亮时间的方式来处理信号的。
进一步的,接入方式选用的是多路接入线路规划方案。
进一步的,单片机计数采用的是检测方波计数函数来进行计数的。
进一步的,多路接入线路规划方案是规定方向上(规定一律接东西方向)的三路灯线的接入方案,每路接入需包含三个单片机和一个信号采集部分。
有益效果:本发明的一种基于单片机的交通信号灯状态监测系统,具有以下优势:
(1)本发明基于电压,从交通信号控制机内部进行检测,可靠性高,不容易受天气等环境因素影响。
(2)本发明的信号机采集电路中使用光耦合器,能够将输入与输出隔离开,输出信号不会对输入信号产生影响,即接入该系统不会影响交通信号控制机的正常工作。
(3)本发明具有拓展性强的特点,如需要增加其他功能,可直接在单片机上增加模块。
(4)本发明基于单片机制作,价格十分便宜,适合量产。
附图说明
图1为本发明选取的接入端在交通信号控制机中的位置。
图2为本发明采用的信号机采集电路的原理图。
图3为本发明仿真采集电路的输入、输出端的波形电压。
图4为本发明测量的红绿灯状态示意图。
具体实施方式
一种基于单片机的交通信号灯状态监测系统,该系统包括接入端选取、信号采集电路设计、单片机信号处理与测量、多路接入线路规划方案所构成,该系统可直接与传统的交通信号机的内部灯控接线组相接,当交通信号灯工作时,则可通过采集该处信号,从而得到所需的数据并将其发送至无人车接收端;
包括以下步骤:
1)接入端的选取位于信号机内部的路口控制器与灯线连接处;
2)信号采集电路将灯线连接处的正弦高压转换为可供单片机处理的方波低压;
3)某一单片机通过对方波进行计数获取相应的信号周期并保存信号周期至内存,另一单片机对方波进行计数获取此刻某路信号的持续时间(某路信号灯已经亮了多久);
4)前两个单片机并联采集电路输出端,并通过串口通信方式将数据传送给第三个单片机,第三个单片机通过获取这两个数据并计算其剩余时间,并根据所接的线路,在其计算出的剩余时间后加上相应的标志(如接的是东西方向红灯这路,就加入字符“r”至剩余时间的末尾处来表示此时计算的是红灯的剩余时间)。
5)当车辆到达一定距离时,发出请求信号,此时该系统中单片机锁存某路信号的剩余时间及状态发送给无人车车载端,同时测算某方向的三路灯的单片机也必须将其测算的信号周期发送给无人车载端,以便得出另一方向的剩余时间;
6)该系统中只需要接某一方向上三路灯线,每路包含三个单片机和一个信号采集部分构成一个完整的交通信号灯状态监测系统。
接入端的选取:基于交通信号控制机的结构以及工作原理,其信号控制机主要是通过其中的路口控制器发出控制信号来控制内部的双向可控硅的通断,从而来实现信号灯的亮灭。因此所选取的接入信号位于信号机内部的路口控制器与灯线连接处。(见附图1)
信号机采集电路设计
信号机的采集可用附图2所示的电路实现:
通过使用大于
信号的处理与测量
(1)由于交流电频率固定,(见附图3)可见一个正弦波的周期(0.02秒)中只出现一个方波,通过单片机对方波进行计数,得到led闪烁次数,再与已知的正弦波周期相乘,便得到一个周期内,信号灯工作时间。在测量过程中,最大误差即始末位置的错判情况,最大为2个周期(0.04s)在可接受范围内。因此,对于附图2输出端的方波信号,通过单片机记录一个信号灯工作周期内方波波数来计算信号灯亮灯时间,并整合三路计时电路的时间信息进行组合,从而保证其计算的红绿灯信号周期与实际信号机所控制的信号灯工作时序一致,即红灯、黄灯、绿灯各路的信号灯均一致。
(2)第一个单片机通过对方波计数,得到信号周期。当单片机开始检测到外部有方波输入时,开始计数。当在4个周期(0.08秒)内不再有方波输入时,则表明该路信号已消失,此刻单片机方波计数乘以一个正弦波周期所得到的时间即为该路信号的信号周期。当再次检测到方波信号输入时,开始计数。另外每次计算完信号周期后,需在末尾加上字段标识(pr/py/pg)表示算的是红灯,还是黄灯,绿灯的周期,保存至单片机内存,再进行清零计数值。第一个单片机保存的信息格式:“信号周期,pr/py/pg#”。第二个单片机作为辅机同样采用相同的方波计数方式,来实现获取任意时刻方波计数,区别在于加入了一个按键,但在最后不需加入字段标识。当按键按下(即需要获取某时刻的方波计数),此时单片机产生中断int1,将此刻的方波计数锁存,同理乘以0.02秒得到某路信号已亮时间。第二个单片机保存的信息格式:“某路信号已亮时间#”。以下为两个单片机均采用的部分核心程序(基于51单片机的方波计数函数):
#include<reg52.h>
typedefunsignedintuint16;
typedefunsignedcharuchar8;
uint16count=0;
uchar8limit=0;
uchar8signal=0;//0——运行1——停止
voidint0init(void);
voidint1init(void);
voidinit_timer0(void);
voidstart(void);
voidstop(void);
voidmain(void)
{
start();
while(1);//主程序内容不影响功能
//停止后再次按键可重新开启计数
}
voidstart()
{
signal=0;
limit=0;
count=0;
init_timer0();
int1init();
int0init();
}
//启动函数
voidstop()
{
ea=0;
limit=0;
signal=1;
}
voidint0init()
{
it0=1;//下降沿触发方式
ex0=1;//打开int0的中断允许。
ea=1;//打开总中断
}
//设置int0-计数功能
voidint1init()
{
it1=1;//下降沿触发方式
ex1=1;//打开int0的中断允许。
//ea=1;//打开总中断
}
//设置int1-按键停止功能
voidinit_timer0(void)
{
tmod|=0x01;//使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
th0=(65536-10000)/256;//赋值
tl0=(65536-10000)*256;
//ea=1;//总中断打开
et0=1;//定时器中断打开
tr0=1;//定时器开关打开
}
//设置t0-一段时间无脉冲停止功能
voidcount_int0()interrupt0
{
uint16i=500;
while(i--);//延时过滤脉冲中干扰
if(p3^2==0)
{
count++;//计数+1
}
}
//外部中断0的中断处理函数
voidstop_int1()interrupt2
{
uint16i=500;
while(i--);//延时消抖
if(p3^3==1)
{
if(signal==0)
stop();//计数停止
elsestart();//计数开始
}
}
//外部中断0的中断处理函数
voidtimer0_isr(void)interrupt1using1
{
th0=(65536-10000)/256;
tl0=(65536-10000)*256;//定时10ms
limit++;
if(limit==8)//8->限制时间/10ms
stop();
}
//计时器0中断处理函数
(3)前两个单片机的输入端通过并联的方式与附图2中的采集电路的输出端相接,并通过串口通信的方式与第三个单片机相接,设置通信波特率为9600bps,传送信号周期与任意时刻某路信号已亮时间。第三个单片机根据获得的数据计算相应的剩余时间,并在得到剩余时间末尾添加上该路的字段,来标识该路得到的是什么灯的剩余时间。最终得到的信息格式:“剩余时间,r/y/g#”,含义为东西方向亮什么灯剩余时间是多少,并用#表示句尾终止,将下次获取信息与本次获取信息区分开来。具体如何根据一个方向的剩余时间与状态来判断另一方向上的剩余时间与状态见多路接入线路规划方案。
(4)另外通过加入数码管的显示来验证其计数功能的准确性,在各路获得剩余时间时,锁存其时间显示在数码管上。该数码管共5位,前三位是整秒,最高可精确到0.01秒。可通过采取现场测试的方式,采集一些样本值,通过比较单片机数码管上显示的剩余时间与道路上实际显示的红绿灯的剩余时间来判断该系统是否正常运行,从而方便系统的维护。
多路接入线路规划方案
在对红绿灯状态进行检测的时候,只需对一组3路灯的状态进行检测。
每一组3种信号灯的状态及周期分开测量,得到三组数据(周期、剩余时间、当前状态)结合附图4说明:红绿灯的周期可以通过测算其中一路(规定接东西方向)红绿灯的周期来进行计算。
举例:已知在交通控制信号机开启前一个工作时间段内,测得绿灯、红灯、黄灯的总共的常亮时间(信号周期)为120秒,红灯占60秒,绿灯占57秒,黄灯3秒。此时只需知道东西方向的状态,获取此时东西方向某个灯的剩余时间,假定东西方向上测得红灯剩余40秒。车载接收端接收到这个数据,同时系统中各路中的第一个单片机也早已将信号周期发了过去,从而整合成了总的信号周期(三路信号周期之和)。此时车载端根据总的信号周期与某一个方向上的状态与剩余时间,推算出南北方向的绿灯剩余时间为37秒。因为南北方向的状态只有两种,不是绿灯就是黄灯。当东西方向的剩余时间大于黄灯的信号周期(3秒)时,南北方向状态为绿灯,其剩余时间为东西方向剩余时间减去黄灯的信号周期,反之状态为黄灯,其剩余时间为东西方向剩余时间。
具体实施步骤:
第一步:在某个十字路口配有相应的交通信号灯控制机,打开后盖寻找路口控制器与灯线连接处的东西方向的三路灯线分别接入该系统,采用大于0,75mm2的带绝缘材料电缆线完成监测系统的接入。
第二步:采集电路将220v交流电压转换为可供单片机处理的5v方波信号。通过一到两个运行周期,该系统中各路第一个单片机可获取相应的红、黄、绿三种颜色灯的持续时间与标识并保存在相应的内存中,并通过串口通信发送给第三个单片机。同时该系统中各路的第二个单片机也时刻在记录当前某路信号灯已亮时间。
第三步:每当有无人车到达一定距离时,向该系统发送请求信号,此时各路第一个单片机将某路信号周期发送给无人车车载接收端与第三个单片机。第二个单片机锁存此刻某路信号灯已亮时间,并把该时间通过串口通信发给第三个单片机,若此时某路的第二个单片机没有计数值即为零,则不发送数据给第三个单片机。第三个单片机若获取到了前两个单片机的信息,则立刻算出剩余时间打上对应的标识字段,并发送给无人车车载接收端,若未收到则不再发送。
第四步:无人车车载接收端先接收到各路的信号周期整合成总的信号周期,后收到东西方向上某路的剩余时间。据此得到南北方向上剩余时间与状态反馈给用户。