近年来, 随着城市公交事业的迅速发展, 国内公交车报站的方式已经有了很大改善, 由传统的售票员喊话报站逐渐变为驾驶员使用报站器手动报站。
虽然手动报站器使用比较方便, 但是因为驾驶员需要在保证安全驾驶的前提下进行报站, 所以经常出现报站不及时, 甚至错报、漏报的现象, 而且让驾驶员在驾驶过程中进行报站也存在安全隐患。采用自动报站的方式可以大大减轻驾驶员的工作量, 促进公交系统的现代化进程。要实现自动报站, 需要实时测出公交车的位置, 以确定公交车是否已经到达站点。利用GPS 可以确定公交车的地理位置, 只需把当前位置同公交站点的位置数据( 经、纬度) 相比较, 就可以知道公交车是否到达站点, 使得报站系统具有一定的智能性。这种基于GPS 的智能报站系统能够杜绝驾驶员驾驶过程中因兼顾报站器而带来的隐患。特别适合因汽车行业高速发展而导致交通问题日益严峻的我国国情, 还可以在重点线路上加入对城市景点风貌的相关介绍。该系统在GPS 导航领域和商业领域都有着非常大的潜力, 具有广阔的发展前景。
1 系统方案
基于GPS 的公交车智能报站系统是移动通讯技术和GPS 技术的结合, 整个系统由S3C24l0 ARM9( 进阶精简指令集机器) 开发板、SIM548C GPS/ GPRS模块、语音播报模块、AT89S52 单片机以及OCMJ5X10B 的LED( 发光二极管) 背光宽温黄绿屏等器件组成。GSM/ GPS 模块由GPS 分模块与GSM( 全球移动通讯系统) 分模块组成。GPS 模块负责GPS 数据接收。公交车在行进过程中, GPS 模块的实测信息同已存储的位置信息进行比较即可进行自动报站, 无需人为干预, 还可实现在固定位置播放某些特定信息, 如乘车提示、广告信息等。GSM 模块用于公交车与调度室之间的数据通讯, 实现公交车的联合调度, 实现调度中心对公交车的调度功能。
语音播报模块负责语音播放, 提供进出站以及提示信息等语音的播放。单片机模块控制按键扫描以及LCD 显示。
1. 1 硬件设计
系统硬件部分主要由S3C2410 ARM9 开发板、GPS/ GSM 模块、功放模块、显示模块、语音播放模块及相应的外围电路组成。GPRS 模块和GPS 模块均通过RS232( 串口) 与ARM 处理器相连, 而LCD( 液晶显示器) 模块则由单片机控制通过串口与ARM 通讯, 语音播放模块通过IIS ( Inter IC Sound) 、SPI( 串行外设接口) 与ARM 通讯。硬件连接方式如图1 所示。
图1 系统硬件结构
GSM/ GPS 模块采用SIMCOM 公司的GPS/ GSM 模块, 该模块是一款四频GSM/ GPRS( 通用分组无线服务技术) 无线模块, 同时支持SiRF Star III AGPS 技术。
GSM/ GPRS 与AGPS 技术的整合使得该模块可以满足GPS跟踪、导航、车辆船舶等设备和资产的监控管理以及其他GPS 的应用。键盘扫描和屏幕显示由单片机做数据处理。键盘显示板主要实现键盘扫描、液晶屏幕的显示并与ARM处理器模块进行通讯。硬件系统整体框图如图2所示。
1. 2 软件总体设计
系统的主要功能由ARM 控制, 采用C 语言进行编程, 采用多线程处理相关功能模块。执行相关过程如下: 系统初始化完成后, 依据GPS 定位信息和系统存储的线路信息计算位置、报站和读取相关信息, 并由ARM 控制车内的显示模块进行显示、语音播放以及向数据中心进行数据传送。
2 设计实现
2. 1 系统初始化
在系统运行之前, 必须用软件程序对各部分进行初始化。初始化包括以下几个部分:
ARM 以及系统初始化;显示按键模块初始化;外部器件、接口初始化: 主要是GPS、GPRS和语音芯片等设备的初始化;软件系统的初始化: 设置全局变量、指针和数组、数据结构以及公交信息初始化。
系统软件部分主要是在主程序中检测GPS 信息, 确定公交车当前的地理位置, 然后决定是否播放语音信息。同时还需要实现按键所要求的功能, 如切换到手动播报等。本系统的软件部分开发工作是基于Linux 开发环境实现的。根据系统要完成的功能和各个模块的运行情况, 主程序部分采用了多线程以及消息队列的方式, 可以及时接收GPS 数据。
因为只使用GPRMC 帧的数据, 串行通讯的数据量不大, 通讯及数据处理过程比较快, 系统能够及时播放报站及其他语音信息。公交车途经的各站点的经纬度数据需要预先测量好, 并存放到系统的数据区, 作为对比参考使用。GPRS 的信息通过串行口传递,采用查询法, 按键也使用查询方式进行接收, 以确定按下的是哪个功能键。软件采用C 语言编写, 调试成功后烧录到Flash 中, 实现脱机运行。
2. 2 GPS 模块
由于该GPS 模块设置信息掉电丢失, 在每次系统启动时均要对该GPS 模块进行初始化。将模块设置成每秒钟输出一次GPS 信息。
系统启动后, 模块接收GPS 信息, 然后解析出GPS 信息, 根据解析出来的经纬度信息与数据区中存储的站点信息比较, 计算出实际距离。如果距离到达阀值时, 启动GPS 报站中断。
该GPS 模块接收模块遵循NMEA. 0183 协议, 可以输出多种格式的数据帧, 均以“MYM”开头。输出数据采用的是ASCII 码字符, 内容包含了纬度、经度、速度、日期、航向及卫星状况等信息。帧格式达10 余种, 该系统所使用的仅限于$ GPRMC 定位数据帧格式。
系统启动后, 通过串口对GPS 模块进行设置,由于系统对实时性要求不高, 将GPS 设置为每秒钟输出一次RMC 数据。提取GPRMC 语句的思路是设置一个数据缓冲区, 把接收到的GPS 数据都放入这个缓冲区, 当缓冲区满了的时候就在缓冲区中查找是否接受到GPRMC 定位语句, 如果没有接收到则重新接收GPS 数据。如果找到了GPRMC 定位语句则还要判断该语句在缓冲区中的位置离缓冲区的最大字节数是否大于62个字节( 因为本程序中需要的GPRMC 定位语句所包含的字节数为62) , 然后通过多程序提取相关经纬度、时间和速度等信息并通过数据处理线程进行相关处理。系统工作流程如图3 所示。
2. 3 GPRS 无线通讯模块
由于GSM 模块内嵌TCP/ IP 协议, 可以直接调用AT 命令与服务器通过TCP、UDP 通讯。无线通讯分为上行数据转换模块和通讯模块2 个模块。
上行数据转换模块的主要功能是把接收到的GPS 数据或是相关的状态信息转换成约定好的数据格式以便同主信息中心的通讯。该模块会判断需要转换的数据是GPS 数据信息还是相关状态信息或是二者都有, 然后选择相应的转换程序。由上面的介绍可以知道接收到的GPS 数据都是顺序存放在数据缓冲区当中的, 需要什么数据就到缓冲区中相应的位置提取就可以了。数据都是以字符形式存放的, 所以实际要用的时候必须先转换成整形数据。
下行数据转换模块的功能与上行数据转化模块的功能相反, 它将主信息中心发送的命令进行识别后发送给车载终端, 并通知用户界面模块显示。
通讯模块的主要任务是完成车载终端与监控中心的通讯, 它既可以通过GPRS 网络实现与主信息中心的无线通讯。如果车载终端与上位机的距离隔的很远可以直接通过GPRS 网络与监控中心进行连接, 而且通过SIM548C 模块连接GPRS 网络与监控中心连接也非常方便, 只需向GPRS 模块发送几条AT 命令就可以了, 但是监控中心必须有因特网的固定IP。启动车载终端的同时SIM548C 模块也会被启动, 这是模块会自动连接上GPRS 网络进入命令模式。拨号成功以后就连接上了GPRS 网络了, 然后对与SIM548C 模块连接的串口进行读写操作就可以实现与监控中心的无线通讯。
在测试中发现, 由于无线信号存在差异, 在某些网络信号较差的地方容易与主信息中心失去网络连接。为解决这一问题, 在系统中采用多线程监视网络连接状态, 一旦失去网络连接, 立即与主信息中心重新连接。
2. 4 语音播放模块
语音播放采用飞利浦SPI 接口音频芯片, 驱动为Linux 下的声卡设备。通过S3C2410 SPI 控制音频芯片, 通过IIS 传送音频数据, 最终将音频芯片驱动成系统下的标准声卡设备。
在语音报站时, 需要为公交车上的喇叭提供语音信号, 功放电路采用MAXIM 功放模块, 该功放模块采用单端输入的方式, 输入的负端直接接地。
该功放模块为单声道/ 立体声、D 类音频功率放大器, 能向8 立体声负载提供高达2 × 21W 功率,或向单声道4 负载提供高达1 ×42 W 功率, 效率高达87%。该功放模块兼具D 类放大器的效率和AB 类放大器的性能, 无需大体积散热器, 降低了功耗。该功放模块采用+ 10~ + 18 V 单电源供电, 可驱动BTL 配置的负载。
用于播放报站、广告和信息等语音的播放器选用基于开源的播放器, 在源代码的基础上进行修改,形成适合播放短小音频的播放线程, 为系统体统音频播放功能。
2. 5 显示按键模块
键盘扫描和屏幕显示由51 单片机做数据处理。
键盘显示板主要实现键盘扫描、液晶屏幕的显示并与ARM 处理器模块进行通讯。
显示按键模块通过串口与数据处理模块通讯,将扫描到按键发送给数据处理模块进行处理, 同时接受数据处理模块的显示数据命令, 在相应的液晶屏幕位置显示数据, 从而实现车载报站系统的人机交互功能, 实现公交车的调度管理功能。
基于GPS 和GPRS 的公交自动报站系统, 具定位功能, GPRS 无线通讯功能, 能实现自动报站、调度、信息收发和中心通讯, 具有USB 接口等优点。
大大降低了公交员工的劳动强度, 提高了公交管理的科学性。