大型货车超载超速实时检测系统
断地检货车的重量和速度。当有超重或超速的情况时,将相关信息记录下来,并在警告无效时,将其发送到监管中心(如交管局等)。这样能够大大减少大货车的管理流程,降低成本,并能很大程度上提高监管效率,减少交通事故的发生。
本系统主要采用C语言[19]和C++语言编写 [20],另有少量的汇编语言编程,软件程序主要分为三大部分,分别是:数据采集,数据分析和数据发送。在发送数据时要包括货车自身的一些信息(如车牌号码,车主姓名等),用于明确车的身份,程序流图如图3.3:
图3.3 程序流图
3.3 系统总体流程
该系统主要运用嵌入式、传感器和GPRS通信技术,利用无线网络实现对大型货车实时跟踪,以防止大货车因超载、超速给公共交通道路带来的损害及对交通安全造成的隐患。根据系统要完成的功能,采用模块化程序设计,将系统分为重量获取、速度获取、数据分析、发送数据、发送警告五大模块。程序流图如图3.4:
图3.4 货车监控系统工作原理图
1、速度获取
启动系统后,每隔一段时间读取一次货车速度。该模块的主要功能是获取货车速度,并将速度数字化,以便进行判断和下一步的处理。
2、重量获取
货车在运行的过程中车身会不停地上下晃动,单次测出的重量偏差会比较大,为了有效的减小系统采集重量信号的误差,我们采用多次测量取平均值的方法得到相对精确的数据。通过安装在车体下方的四块高精度压力传感器来获取货车重量的模拟信号,重量获取模块是将重量模拟信号采集回系统,并将模拟信号数字化,得到准确的重量值,以便下一步的处理。
3、发送警告
发送警告的目的是及时提醒驾驶员车辆超载或者超速,采取措施,以减少事故的发生。发送警告是要以速度和重量为依据,用显示器在驾驶室实时的显示速度、重量和倾斜角度的信息,超载超速时系统发出语音警告和发光警告。
4、发送数据
发送数据是为了管理和处罚提供依据。当货车超载超速警告无效时,将违规信息通过GPRS发送到监管中心(如交管中心),并在监管中心存档。
5、数据分析
数据分析是系统的主要模块,通过判断重量、速度等值,按照预定的标准,来确定系统应该在什么时候开始测速,在什么时候开始测重,应该在什么时候发送数据等等信息。
第四章 模块设计与实现
4.1称重模块设计
侧重模块有硬件和软件部分,硬件部分负责采集货车重量数据、车体倾斜角数据,软件部分负责对数据进行预处理和处理,硬件部分这里不多介绍,主要说软件部分,对预处理数据的处理流程如下:
图4.1 数据处理流程
(1)预处理程序:
/*******************************************************************
2010.6.28定。测重程序:weight.c。
IOA0为串行读入数据位,IAO1为脉冲发送位。
精度:16位,一位符号位。一次连续读出五组转换的数据放在weight[5]中,经观察,前两个数据无效。
****************************************************************/
#include "SPCE061A.h"
void main()
{
long count[4],weight[4][8],weightA[4];//weightA测量的3到8哥数据的平均值
unsigned int n,k=0,i;
long weightS=0;
*P_IOA_Dir=0x0010;//A1口输出脉冲,A0口输入数据
*P_IOA_Attrib=0x001F;
*P_IOA_Data=0x0000; //设置PD_SCK为低,启动HX711的A/DC和和压力传感器
for(i=0;i<4;i++)
for(n=0;n<8;n++) //初始化weight[]
weight[i][n]=0;
for(n=0;n<4;n++)
weightA[n]=0;
for(i=0;i<4;i++)
count[i]=0;
while(k<=8) //只读取五个数据,放在weight数组中
{
/等待P_IOA0收到DOUT的第一个低电平,转换完成
while(*P_IOA_Data&0x0002) *P_Watchdog_Clear = C_WDTCLR;
for(n=1;n<=25;n++) //25个脉冲
{
*P_IOA_Data=0x0010; //上升沿
*P_Watchdog_Clear = C_WDTCLR;
*P_IOA_Data=0x0000; //下降沿
if(n<=16) //接收16位
{
for(i=0;i<4;i++)
{
count[i]=count[i]<<1; //左移1位
count[i]=count[i]|((*P_IOA_Data&(0x0001<<i))>> count[i]=count[i]|((*P_IOA_Data&(0x0001<<i))>>i);