基于Arduino的货运车辆实时监测系统
2014-06-08赵广元薛振诺
赵广元,周 亮,薛振诺,薛 龙,李 强
(1.西安邮电大学 自动化学院,陕西 西安710121; 2.西安邮电大学 通信与信息工程学院,陕西 西安710121)
随着高速路网与物流业的迅猛发展,货运车队管理系统在现代化的生产和生活中得到了广泛的应用[1]。奔驰公司的FleetBoard系统不仅拥有GPS导航、GSM通信等功能,还能通过丰富的统计、计算功能分析驾驶员的驾驶习惯,给出改进建议,实现节能减耗,延长车辆寿命[2];沃尔沃公司的DynaFleet系统主要特点是基于互联网提供在线应用程序,使车辆得到合理调度[3];雷诺公司的Info-Max系统具有完善的预警体系,实现了对不当驾驶行为和车辆潜在危险的实时反馈[4]。上述系统虽然技术成熟,功能完善,但在普遍应用方面仍有不足:一是多数产品不仅复杂度较高而且价格昂贵,二是未能实现在同一系统中对车队的驾乘人员、车辆、货物的全方位实时监测和数据存储,缺乏广泛的适用性及灵活性。
本文拟提出一种基于Arduino的货运车辆实时监测系统设计方案,旨在降低研发成本,简化系统的复杂程度,并在实现对车队全面监测预警的同时,完成车队信息的数据存储,以满足在途货运车队的应用需求。
1 系统整体架构及硬件设计
1.1 系统整体架构
系统由主控制器、人员监控模块、车辆监控模块、货物监控模块以及数据存储模块组成。在实现对在途货运车辆的人、车、货全方位监测的同时,数据存储模块存储实时监测信息,对事故车辆的分析有极大帮助。驾驶室辅以显示终端,为驾乘人员提供实时的真实可靠的监控信息,便于驾乘人员对于车辆及货物的状态做出预判并提前做出决策[5]。
系统整体架构及模块组成如图1所示。
图1 系统整体架构及模块组成
1.2 主控制器选择
为方便验证设计方案的可行性,同时缩短开发周期,选用Arduino作为主控制器进行系统的原型开发。
Arduino是一款廉价的开源电子原型平台,在使用上简化了硬件知识学习,资源丰富,简单易学,上手容易,让开发者可以专注于系统的整体设计;应用上为用户提供了丰富的数字和模拟I/O接口,兼容多种传感器以感知和影响环境,同时支持SPI、IIC、UART串口通信,能够实现与Processing、VVVV等其他互动软件的串口通信[6],本系统涉及的通信方式主要为SPI串口通信。Arduino独有的开放性、易用性、交流性及其丰富的第三方开源资源使得Arduino受到越来越多电子爱好者的青睐[7]。
1.3 监测单元设计
1.3.1 人员监控模块
人员监控模块作为系统的重要组成部分,主要用于监控驾驶员酒驾行为。通过对驾驶室酒精浓度的检测,判断驾驶员是否处于酒驾状态。
选用MQ-3气体传感器对驾驶室内酒精浓度进行监测,对返回值设定阈值,并在硬件电路中添加预警电路,实现实时预警[8]。传感器通过数据总线与主控制器相连构成了酒精浓度采集电路,采用模拟量数据采集方式。
MQ-3气体传感器探测酒精浓度范围为0.04~4mg/L,灵敏度Rs(in air)/Rs(0.4mg/L酒精)不小于5(其中Rs为敏感体表面电阻),响应时间不超过10s,恢复时间不超过30s。
1.3.2 车辆监控模块
车辆监控模块主要负责车辆定位、车速监测以及车辆姿态判断。通过该模块采集的车速以及车辆姿态信息便于驾驶员判断车辆当前行驶状态是否安全。
车辆的实时定位及车速的采集选用U-BLOX GPS定位模块。U-BLOX的定位精度:2.5m,时间精度:21ns,与Arduino通过串行口直接通信,采用Arduino提供的3.3V电压作为模块工作电压。系统在其输出值中提取当前时间、经纬度以及车辆速度信息,并对定位数据的有效性进行验证。
车辆状态的监测选用MPU-6050整合性6轴运动处理组件。MPU-6050可在2.5V±5%、3.0V±5%或3.3V±5%三种不同电压下工作。为保护元器件,系统使用Arduino输出的3.3V电压作为MPU-6050的工作电压。MPU-6050返回值为三个轴的加速度和角速度,经过量化处理后得到单位为g的加速度值和(°)/s的角速度值,再经过积分等算法得到各轴与水平面间夹角。
1.3.3 货物监控模块
针对集装箱运输,通过对集装箱内温度、湿度、烟雾及火焰等状态的实时监测,为驾驶员反馈准确的货物状态。传感器通过I/O口与Arduino连接进行数据通信,对相应的信息返回值设定阈值,当返回值超限,系统将发出预警。
集装箱内温湿度的采集选用DHT11传感器。DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。测量范围:0~50℃(温度),20%~90%RH(湿度);测量精度:±2℃(温度),±5%RH(湿度);分辨率:1℃(温度),1%RH(湿度)。
集装箱内可燃气体和烟雾进行监测选用MQ-2气体传感器。MQ-2气体传感器检测浓度:300~10000ppm,灵敏度:Rs(in air)/Rs(1000ppm 异丁烷)≥5,响应时间:≤10s(70%Response),恢复时间:≤30s(70%Response)。传感器通过数据总线与主控制器相连构成了烟雾的采集电路,采用模拟量数据采集方式[9]。
系统采用拥有数字量和模拟量双输出的火焰传感器监测货物状态。火焰传感器可以检测火焰及波长在760~1100nm范围内的光源,火焰传感器数据输出端与Arduino模拟数据接口连接,可将外界红外光的强弱变化转化为电流的变化,通过A/D转换器反映为0~255范围内数值的变化,数值与红外光强度成反比。本系统选用火焰传感器的数字量输出判定货物的火灾情况,若输出为“1”则表示货物当前有火源存在的可能,此时系统将自行触发超限提醒程序。
1.3.4 显示终端
系统辅以显示终端,将采集到的人、车、货相关信息实时直观的为驾驶员显示,以便驾驶员准确地作出预判与决策。
选用QC12864B液晶显示屏作为显示终端。QC12864B是一种图形点阵液晶显示器,可显示8(列)×4(行)的汉字,为节约I/O口资源,采用SPI串行通信与主控制器通信。接收显示信号后,主页面显示货物温湿度等实时信息。安装于驾驶室内的样机显示效果如图2所示。
图2 系统显示效果
1.3.5 数据存储模块
数据存储模块是本系统的核心模块,作为汽车黑匣子使用。模块的存储数据包含人、车、货实时数据和历史数据。实时数据可以很好的还原事故发生时人、车、货整体状态,主要用于分析事故发生的原因和事故的责任。历史数据辅助事故分析,并可以作为货物在途状态分析依据[10]。
采用Arduino的SD卡扩展模块及可插拔的SD卡组成系统的数据存储模块。模块用SPI通信方式连接到主控制器,主要存储实时的人、车、货状态信息以及地理位置和时间信息。存储文件的格式为FAT格式。
2 系统软件设计
系统软件部分选用开源硬件Arduino的集成开发环境实现,编程语言基于 Wiring,语法及风格类似于C语言。
系统软件设计主要包括对系统所采集数据的处理以及数据的显示与存储两部分。同时,自动超限提醒程序是系统的亮点,当环境变量存在危险时能够对驾驶员进行实时的预警。
2.1 数据采集
系统所需数据主要通过酒精传感器、火焰传感器、烟雾传感器、温湿度传感器、GPS定位模块以及姿态传感器获取。系统中将酒精传感器作为人员状态传感器,火焰传感器、烟雾传感器、温湿度传感器作为货物状态传感器。
2.1.1 数据采集程序设计
系统中各传感器均与主控制器Arduino采用直接通信,Arduino接收到各传感器返回值后,根据返回值类型,判断是否需要对返回值进行处理。人员和货物状态传感器程序流程图见图3。
图3 人员和货物状态传感器程序流程
以温湿度传感器程序为例,主要语句如下。
c=(String)DHT11.humidity;//执行读数据命令
long int a=c.toInt();//数据类型强制转换
c=c+"#";//不同数据信息用'#'隔开
meg=meg+c;//数据叠加至存储变量
2.1.2 姿态检测模块程序设计
从姿态检测模块MPU-6050的返回值中获取三个轴的加速度和角速度,通过量化后的加速度计算相应角度值,从而判断车辆实时姿态。姿态检测模块程序流程图见图4。
程序中主要语句如下。
accelgyro.getMotion6(&ax,&ay,&az,&gx,&gy,
&gz);//获取三个轴的加速度和角速度
Ax=ax/16384.00;//对加速度进行量化,得出单位
为g的加速度值
Angel_accX=atan(Ax/sqrt(Az*Az+Ay*Ay))*
180/3.14;//用加速度计算三个轴和水平面坐标系
之间的夹角
ggx=gx/131.00;//对角速度做量化
Gx=Gx+(ggx-Gx_offset)*TimeSpan/1000;//通
过对角速度积分实现各个轴的角度测量
图4 姿态检测模块程序流程
2.1.3 GPS定位模块程序设计
GPS定位模块返回值包含多组数据,读取其中一组结构为
的数据作为系统的GPS采样值[11],并且只需提取的字段数值有
<1> UTC时间,hhmmss(时分秒)格式
<2> 定位状态,A=有效定位,V=无效定位
<3> 纬度ddmm.mmmm(度分)格式
<5> 经度ddmm.mmmm(度分)格式
<7> 地面速率
<9> UTC日期,ddmmyy(日月年)格式
GPS定位模块程序流程图见图5。
图5 GPS定位模块程序流程
2.2 数据存储
系统采用Arduino的SD扩展模块作为存储器件,系统程序在各感知模块子程序末端都加入了数据累加命令,程序中全局变量meg用来累加各感知模块的信息。
数据存储的主要命令语句如下。
#include<SD.h>//调用SD卡库文件
.......
meg+=lat[i];//变量累加
meg+="#";//各模块信息值用'#'隔开
.......
File data File = SD.open("data.txt",FILE_
WRITE);//在SD卡建立文件名为data.txt的文件
if(dataFile){dataFile.println(meg);
//将meg存储至data.txt中
dataFile.close();}
else{Serial.println("error opening file");}
meg="";//将meg重新置为空值
3 系统测试
系统的测试主要分为两个部分,即信息采集与显示测试和数据存储测试。测试环境设定为两种:一为室内,即在实验室内进行各传感器参数采集和显示存储功能测试;二为室外,即将终端放置于货车驾驶室内,并设置货车环境,在城市道路和环山路上采集数据并测试其数据存储功能。
3.1 信息采集与显示测试
系统上电后,各感知模块正常工作,显示屏正确显示实时监测变量。当改变感知模块监测环境时,显示屏及时响应相应的变化过程。当检测值超过预先设定的门限值,系统能够及时对驾乘人员发出警报。系统的数据采集周期为3s。系统所设置的各类监测信息的门限值如表1所示。
表1 报警门限列表
3.2 数据存储测试
当系统稳定工作一段时间后,用户可以查看到SD卡中存有系统运行时生成的文件名为data.txt的数据文件,且文件中存储的数据信息为系统实时采集的监测信息。图6为室外环境测试中SD卡存储的data.txt文件,数据内容为某特殊运行车辆在城市道路的测试数据,实测路线为西安邮电大学长安校区至西安三森国际家居城。
图6 存储模块文件内容
data.txt数据文件的内容详解如表2所示。
表2 存储模块数据信息
4 结语
以Arduino为主控制器,设计开发了在途货运车辆实时监控系统,该系统能有效地全面监测人、车、货的安全状况。该设计方案具有开发周期短、系统控制单元稳定可靠等优点;同时Arduino丰富的I/O口为系统以后的功能扩展提供了可能。主动的安全预警程序,可以有效的控制了事故的发生概率,同时在事故不可避免的情况下,提醒驾驶人员提前做出预判,减小事故损害。全面监测和实时的数据存储是系统的亮点。单车的数据存储不仅方便了车辆的日常管理,同时可为车辆事故的鉴定提供依据。
原型系统的开发研究已实现了预期功能,在以下方面仍具有进一步研究价值:(1)将存储模块采用耐火材料封装,与系统主体分离,独立安装于驾驶室仪表盘周围安全系数较高的位置,将系统向产品化发展;(2)改进数据处理的算法,保障数据的稳定性;(3)扩展系统监测功能,如增加视频监控单元,使监控人员更加直观的监测货物实时状态。
[1]王淑蓉,王全.基于 Web的货运管理系统设计[J].价值工程,2011,30(27):130-130.
[2]韩超.奔驰FleetBoard(R)系统:让物流企业做得更好[J].商用汽车,2013(1):66-67.
[3]王须峦.沃尔沃卡车Time Machine“时间机器”亮相南京[J].物流技术与应用:货运车辆,2013(5):20-21.
[4]马广宁.作用明显不同的5种国外车队管理系统介绍[EB/OL].(2013-01-28)[2013-12-14].http://www.360che.com/market/130124/24734.html.
[5]崔少飞,朱建勇,董伟,等.基于 GPS_GPRS_GIS的菌毒种运输监控系统[J].物联网技术,2012(1):49-50.
[6]程晨.Arduino开发实战指南:AVR篇[M].北京:机械工业出版社,2012:2-14.
[7]Banzi M.Getting Start with Arduino[M].2nd Ed.USA CA:O’REILLY,2011:5-26.
[8]李旭.车载传感器网络的应用及关键技术研究[D].上海:上海交通大学,2009.
[9]刘琳琳.基于物联网的危化品运输泄漏事故仿真系统[D].大连:大连理工大学,2012.
[10]魏秋月.温度数据采集并存储的一种实现方法[J].西安邮电学院学报,2011,16(3):77-80.
[11]孙家泽.基于CDMA2000的GPS车载台的设计和实现[J].西安邮电学院学报,2007,12(3):14-16.