2、火源检测报警与风扇排气
火焰传感器通过对火源的识别进而判断是否发生了火宅,其对火焰的传感距离
可调、角度可调,实现隧道内部无死角检测,保证安全质量检测的目的,同时会打开警报提醒人们,风扇此时会自动打开,将烟排出。
3、无线传输
由于隧道的长度问题影响,如果使用有线传输,会使其造价非常大,而且其操作修整极其繁琐,故此应用无线传输设备进行无线的发射接收处理数据,可有效将数据发送到隧道两端的无线接收端,实现有效的信息传输。
4、液晶显示信息
采集信息对于智能交通是远远不够的,更重要的是将信息传递出去,将有效的信息及时告诉行车司机,液晶显示部分可有效把信息显示在屏幕上,其屏幕通过LED显示,不用担心在天气较差的情况下看不到。
图为无线接收部分,使用一对即可完成主端和从端的收、发通信操作。
5、控制电路与独立电源
每一个部分的电路均采用独立电源供电,同时会有电源电量采集,当电量降到一定
10
电量下会提醒工作人员进行更换电池、充电等。如图所示为其控制电路与稳压电源部分,通过可充电的锂电池直接输出到降压芯片,稳压后输出稳定的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; //设定串口工作方式
11
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
12
}
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 * 描述 :主函数
13
* 输入 :无 * 输出 :无 */
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, \车祸 //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);
14