智能隧道交通安全监控系统

智能隧道交通安全监控系统
智能隧道交通安全监控系统

智能隧道交通安全监控

系统

文档编制序号:[KKIDT-LLE0828-LLETD298-POI08]

智能隧道交通安全监控系统

学校:

姓名:

一、项目摘要

本项目基于STM32平台,开发一种智能隧道交通安全监控系统,对隧道内部进行实时的智能监控和预警,保障隧道内部行车的安全,避免车祸带来的交通堵塞等。系统通过光电对管传感器、火焰传感器模块采集隧道内部车辆行驶等相关信息,系统通过LCD显示模块、无线传输、对火源的分析检测、直流电机控制风扇、蜂鸣器等进行报警。系统硬件的电源电路、光电模块、火焰传感模块、风扇电机模块均接处理器模块,处理器模块接无线模块、LCD显示模块,处理器模块还与无线模块、光电模块等双向连接。

本系统可进行实时的智能监控和预警,保障隧道内部的行车安全,成本少,功耗低,安装方便,应用性能高,在各隧道的安全检测使用上均具有很强的实用性和推广价值。

二、创新性

1.实现隧道内部安全、畅通通行;

2.替代传统的视频监控,其在隧道内部光线无法达到预期效果,而且造价高等特点,对此实现了改进。

3.为智能交通的实现做出进一步的推动。

三、项目研究的目的

1.解决隧道内部的监控问题,节省人力。

2.使隧道内部实现智能化管理,将隧道内车辆信息及时返回分析。

3.对车辆的行进情况具体分析,一旦有车祸等车辆滞留事件发生,对其及时处理并疏通来往车辆,及时对进行路线做出调整。

4.及时将隧道内部的信息发送到进入隧道前的屏幕上,让来往的车辆第一时间发现隧道的通行状况(如车祸导致的堵车等)。

5.一旦车祸发生严重,导致内部发生火宅等事故,会对隧道进行紧急封停,同时保证内部的排气工作。

四、正文

1、项目背景

由于隧道结构封闭复杂,确保隧道内部交通安全显得尤为重要,隧道实时交通安全监控系统是确保隧道安全运营的重要手段。随着我国经济社会的飞速发展,对智能化管理的高等级公路的需求越来越大。十五、十一五期间,我国公路系统进入大发展、大跨越时期。隧道因其具有改善路网,节约土地等优点,逐渐成为公路建设的重要组成部分。但由于隧道具有空间狭窄、结构封闭、视线差等缺陷,一旦发生事故,救援工作复杂困难,而且容易造成严重的交通阻塞,并有可能引发火灾,从而引发灾难性的后果,因此,保证隧道行车安全至关重要。

隧道一般是连接公路、城市道路重要的节点和组成部分。在干线公路网的建设中,它可以克服山脉地形障碍,保证最佳的道路线形,更便利行车、提高经济效益。而传统的交通安全监控主要依赖于现场的人工巡视和远程的基于闭路电视系统即电视墙CCTV 系统的人工监视。这不仅需要大量人力,而且监控效果不能得到有效保证。而且隧道内部的事故等监控更是无法实现,即便使用视频监控,由于其内部的光线与环境问题的干扰,使人们即便是人工监控也无法达到预期效果。为此,我们设计出了这个智能隧道交通安全监控系统,它为提高交通效率,保障隧道交通安全,缓解交通拥挤起着巨大的作用。

2、技术路线

如图所示,在技术路线上综合集成物联网,软件工程,计算机等技术,充分利用现

3、课题研究的主要内容

系统总体方案

本设计系统以STM32、89C52单片机分别控制中心控制系统和独立显示系统,其操作起来简单易懂、易修改,同时也考虑操作的简单方便性,设计出一种经济、实用且功能强大的隧道交通智能监控系统。

系统功能介绍

1.车流量检测

其主要应用光电对管实现对车辆的流动的检测,其会根据不同的距离进行不同的检测,当车辆来往时,其会返回脉冲进行,通过捕捉下降沿信号实现对车辆来往的检测,由于光电对管的局限性,其只能检测一条线上的来往,所以其摆放位置会根据车辆的车型、大小等因素进行调节,而且较为重要的一点则是两个光电对管的间隔距离问题,其

间隔不能超过一个车位的距离,否则检测到的结果将会发生偏差。

2.车祸等信息检测

当车辆非正常行驶时,会发生滞留在隧道内部的情况发生,这种情况会导致隧道内部的交通瘫痪,甚至当内部空气污染过于严重时会对人的人体健康造成威胁,因此,对此的检测就显得非常重要,在车辆滞留时,光电对管会返回低电平信号,而当无车辆来

往时会返回高电平信号,所以当其检测到低电平信号达到一定时间后即识别出其为车祸滞留,为隧道的正常通行带来了困扰与障碍,识别为车祸信息。

3.火宅报警

当交通事故严重时,其不免会发生火宅等状况,此时通过火焰报警器将发生警报,同时在隧道的两端阻止车辆的进入,其隧道内部打开排气风扇,将由于火宅而产生的粉尘和烟气排除,以免对人体造成伤害。

4.隧道信息显示

其系统之间采用的是无线传输,将内部的检测通过无线将信息传递到隧道两端的显示屏上,及时通知人们隧道内部的行驶状况,对其第一时间进行选择交通状况良好的道路上行驶。其显示分为三种模式,一个为正常通行,即在车辆正常来往行驶时其会显示正常的相关信息,其二则是车祸信息,一旦隧道内部发生车祸等车辆滞留信息,其会显示出车祸,提醒车辆进行绕行,另一个便是火灾信息,隧道内部一旦发生火灾,其优先级为最高,将向隧道前与隧道后的两个控制中心发送信息紧急停止,让车辆不要进入到其中。

硬件设计思路

1.电池输入电路

通过稳压电源将输入的电压降到5V后供给单片机和液晶显示屏供电。

2.控制电路

上图为单片机的控制芯片电路,L1,L2,L3,L4分别对应光电对管的4个信号线,通过光电对管采集的信息将其返回到单片机中,进行下一步处理,TX和RX为无线发送与接收部分,通过无线模块将数据发送出去与接收回来。BEEP和MOTOR分别对应着控制蜂鸣警报和风扇,均可对其引脚直接拉到高电平即可实现对蜂鸣器和风扇的开关操作。

上图为液晶显示电路,其供电电压VCC需要5V到6V时才能保证其正常工作显示。

软件系统设计

软件的设计是系统能否实现功能的核心,本系统采用了多个控制器,每个控制器实现不同的功能,整个系统在各个控制器的协调下实现所设计的功能。系统的所有程序均采用C语言编写.

系统程序采用模块编写,各相应硬件模块的主要程序设计均以程序流程图的形式给出,程序的编写只要对照程序流程图编写相应的语句即可。

4、课题研究的方法与过程

1.从研究目的和根据背景选题;

2.经查新定题;

3.研究隧道监控的实现方法,设计构思;

4.找材料,选材料,原则上能代替则代替;

5.制作、实验;

6.修改再实验;

7.整理总结。

5、实物展示

6、使用说明

1、光电对管位置

四个元件即光电对管(图中为侧视图,即只显示2个),只需将其对准行车的期间位置,就可以对来往车辆进行流动检测,其左右间隔只需对着车行驶的位置就可以,而前后的间隔需要控制在一个车身的距离之内。

2、火源检测报警与风扇排气

火焰传感器通过对火源的识别进而判断是否发生了火宅,其对火焰的传感距离可调、角度可调,实现隧道内部无死角检测,保证安全质量检测的目的,同时会打开警报提醒人们,风扇此时会自动打开,将烟排出。

3、无线传输

由于隧道的长度问题影响,如果使用有线

传输,会使其造价非常大,而且其操作修整极

其繁琐,故此应用无线传输设备进行无线的发

射接收处理数据,可有效将数据发送到隧道两

端的无线接收端,实现有效的信息传输。

4、液晶显示信息

采集信息对于智能交通是远远不够的,更重要的是将信息传递出去,将有效的信息及时告诉行车司机,液晶显示部分可

有效把信息显示在屏幕上,其屏幕通

过LED显示,不用担心在天气较差的

情况下看不到。

图为无线接收部分,使用一对即

可完成主端和从端的收、发通信操

作。

5、控制电路与独立电源

每一个部分的电路均采用独立电源供电,同时会有电源电量采集,当电量降到一定电量下会提醒工作人员进行更换电池、充电等。如图所示为其控制电路与稳压电源部分,通过可充电的锂电池直接输出到降压芯片,稳压后输出稳定的5V电压,后供给单

片机、光电对管、OLED液晶显示屏等,控制电路采用STM32单片机对整体系统进行逻辑控制,同时控制着数据的无线收发等等。

6、注意事项

(1)光电对管的距离需要根据不同的隧道进行不同调整,并不是所有的隧道规格都一样。

(2)使用时的环境温度在 -40℃~ +120℃之间。

(3)充电电池要保证至少6V的工作电压,稳压模块会有1V左右压降,若低于5V可能会导致其不能正常工作。

五、相关程序

#include ""

#include ""

//***********************************

#define delay_time 25767

#define uchar unsigned char

#define uint unsigned int

int flag;

uchar buf;

int i=1;

int pre=0;

int flag;

/********************************************************************/ OLED5110接收串口中断数据显示

/*************************************************************************** ***/

void main(void)

{

LCD_init(); //初始化液晶

LCD_clear();

SCON=0x50; //设定串口工作方式

PCON=0x00; //波特率不倍增

TMOD=0x20; //定时器1工作于8位自动重载模式, 用于产生波特率

EA=1;

ES = 1; //允许串口中断

TL1=0xfd;

TH1=0xfd; //波特率9600

TR1=1;

SBUF=0;

LCD_write_chinese_string(8,1,12,5,12,2);

LCD_write_chinese_string(12,4,12,4,8,5);

while(1)

{

if(pre!=i)LCD_clear();

if((i!=3)&&(pre==3))

{

LCD_clear();

flag=0;

}

if((i==1)&&(flag==0))

{

LCD_write_chinese_string(8,1,12,5,12,2);//

LCD_write_chinese_string(12,4,12,4,0,5); //

}

if(i==3)

{

if(pre!=3)LCD_clear();

flag=1;

LCD_write_chinese_string(12,1,12,4,17,5);

LCD_write_chinese_string(12,4,12,4,21,5);

}

if((i==2)&&(flag==0))

{

LCD_write_chinese_string(8,1,12,5,12,2);LCD_write_chinese_string(12,4,12,4,8,5);// zhengchang

}

pre=i;

if(i!=3)flag=0;

}

}

void serial() interrupt 4

{

ES = 0; //关闭串行中断

RI = 0; //清除串行接受标志位

buf = SBUF; //从串口缓冲区取得数据

switch(buf)

{

case '1':

{

i=1;

break;

}

case '2':

{

i=2;

break;

}

case '3': {i=3; break;}

}

ES = 1; //允许串口中断

}

#include ""

#include ""

#include ""

#include ""

volatile u32 time,time1,time_,time_1; // ms 计时变量

volatile u32 tim,tim1,tim_,tim_1; // ms 计时变量

int t1,t2;

int fire1,fire2;

int data[4];

/*

* 函数名:main

* 描述:主函数

* 输入:无

* 输出:无

*/

int main(void)

{

/* 配置系统时钟为 72M */

int i;

SystemInit();

/* led 端口配置 */

LED_GPIO_Config();

/* TIM2 定时配置 */

TIM2_NVIC_Configuration();

TIM2_Configuration();

USART1_Config();

USART2_Config();

/* TIM2 开始计时 */

START_TIME;

//USART1_printf(USART1, "1");//车祸

//2 正常

USART_SendData(USART1, '2');

while(1)

{

int select;

int flag;

data[0]=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_6);

data[1]=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5);

data[2]=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7);

data[3]=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8);

fire1=GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_14);

fire2=GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_15);

if(fire1==0||fire2==0)

{

flag=1;

GPIO_SetBits(GPIOC, GPIO_Pin_13);

GPIO_SetBits(GPIOA, GPIO_Pin_5);

GPIO_SetBits(GPIOA, GPIO_Pin_6);

USART_SendData(USART1, '3');

USART_SendData(USART2, '3');

}

else

{

flag=0;

GPIO_ResetBits(GPIOC, GPIO_Pin_13);

GPIO_ResetBits(GPIOA, GPIO_Pin_5);

GPIO_ResetBits(GPIOA, GPIO_Pin_6);

}

if(time1==2000||time_1==2000)

{

USART_SendData(USART1, '1');

time=0;

time1=0;

time_=0;

time_1=0;

}

if(tim1==2000||tim_1==2000)

{

USART_SendData(USART2, '1');

tim=0;

tim1=0;

tim_=0;

tim_1=0;

}

if((flag==0)&&(time>=2)&&(time_>=2))

{

USART_SendData(USART1, '2');

time=0;

time1=0;

time_=0;

time_1=0;

}

if((tim_>=2000)&&(tim>=2000)&&(flag==0))

{

USART_SendData(USART2, '2');

tim=0;

tim1=0;

tim_=0;

tim_1=0;

}

}

}

相关主题
相关文档
最新文档