基于GPS的公交车智能报站系统设计
2020-03-25,,
,,
(成都理工大学工程技术学院,四川 乐山 614000)
0 引言
当今社会重点关注的两大主题是能源和环境。作为一种环保、绿色、低碳的出行方式,城市公交得到市民的青睐。伴随着城市公共交通事业的迅速发展以及电子信息技术的广泛应用,自动报站技术也得到了快速发展。自动报站技术不但提高了公交服务质量,改善了人们的乘车体验,而且带来了一定的经济、社会效益,并解决了手动报站增加司机工作量和安全隐患的弊端[1]。现有的报站系统大多需要在司机确认车辆上行或下行方向后进行站点判定,且基本无法自行解决公交车调头和跨站后产生的错误报站问题。为此,设计了基于GPS和单片机的公交车智能报站系统,不需要GPS数据中的方位角信息,只要把公交车往返线路上的全部站点信息按照单向循环列表的形式存放在单片机中,通过全局搜索进行站点匹配,可实现实时定位和站点的全自动判定。
1 系统总体设计方案及工作原理
本文设计的智能报站系统由STC89C52单片机、GPS模块、按键模块、语音模块和液晶显示模块等组成。系统结构如图1所示。
GPS模块实时获取公交车位置信息(经纬度),经无线传输将信息传送至单片机。单片机首先将GPS模块获取的站点经纬度信息进行转换,然后将其同预先存储的具体站点位置信息进行比对,比对成功则表示公交车已到达站点,执行进站操作。由语音模块WT588D对站点信息进行语音播报,液晶显示模块LCD12864对站点信息进行显示。当车辆驶离当前站点后进行下一站点的预报。当GPS信号接收不正常时,启动手动报站模式,保证报站系统工作的稳定性和精准性。
图1 系统结构
2 系统硬件电路设计
2.1 主控电路
主控电路由STC89C52单片机[2]、复位电路和晶振电路构成。晶振电路由1个晶振和2个电容组成,晶振接至单片机XTAL1和XTAL2引脚,在20 MHz频率下工作。RC复位电路接至单片机RESET引脚,在上电瞬间,RES引脚产生1个正脉冲使系统复位。
2.2 GPS电路
GPS定位模块采用U-BLOX公司的NEO-6M芯片,将位置数据传送给单片机[3-4]。GPS定位模块的串口发送引脚TXD与主控芯片P3.0引脚连接;串口接收引脚RXD不进行数据接收时悬空;时钟脉冲引脚PPS连接LED指示灯。当模块成功定位时指示灯连续闪烁。VCC接5 V电源,GND接地。
2.3 语音播报电路
WT588D语音模块是一款集单片机、语音电路、SPI-Flash存储器于一体的可编程语音系统[5]。在设计中,先通过VoiceChip上位机软件将音频文件下载到SPI-Flash存储器的相应地址段,做好地址与语音的对照表,放音时调用地址。WT588D的DATA数据端、CS片选端、CLK时钟端分别与主控芯片的P2.1,P2.2,P2.3引脚连接。单片机通过这3个控制口对WT588D语音模块进行控制。PWM+和PWM-引脚直接驱动扬声器进行语音播报;语音模块忙信号的状态由发光二极管LED的亮灭反映。正向低压降稳压器AMS1117将5 V电压转换成3 V的电压,并给语音模块供电。
2.4 LCD液晶显示电路
汉字图形点阵液晶显示模块LCD12864可以显示汉字和图形,内置128个8×16点阵字符、8 192个16×16点阵中文汉字。每屏可显示4行8列共32个汉字,可以基本满足站点播报需求。并行接口D0 ~ D7接主控芯片P0.0 ~ P0.7引脚。RS,RW,EN分别接主控芯片的P2.5,P2.6,P2.7引脚,PSB引脚接高电平。
2.5 按键电路
智能报站器虽然可以实现在无人参与的情况下自动报站,但为了防止自动报站模式出现故障,在设计时保留了手动报站模式[6]。手动报站模式采用了4个独立的功能键:手动/自动报站模式切换键K1;上/下行选择键K2,并设有上下行状态显示,当K2按下LED1发光,表示公交车在上行方向运行,K2未按下时LED1灭,表示公交车在下行方向运行;K3和K4分别为上一站、下一站按键,完成相应站点信息的播报和显示。
智能报站系统总体硬件电路如图2所示。
图2 智能报站系统硬件电路
3 系统软件设计
3.1 系统工作流程
系统使用Keil作为软件开发和调试工具,编程语言为C语言,采用模块化的设计思路。控制系统设计了自动报站和手动报站2种工作模式。本文主要阐述自动报站模式,其程序设计主要包括GPS数据的采集及转换、自动报站控制算法设计、站点信息的播报和站点信息的显示等。主程序控制流程如图3所示。
图3 主程序流程
3.2 卫星数据解析及经纬度转换
GPS模块以NMEA-0183协议格式将数据串传送给单片机,单片机将接收到的数据保存到寄存器中等待数据处理。以纬度数据串为例,根据NMEA-0183协议,GPS数据包语句格式为“$GPGGA,<1>,<2>,<3>……”。数据串第<2>位是纬度值,格式为ddmm.mmmm,其中dd为度,mm.mmmm为分。数据串<3>若是N代表北纬,若是S代表南纬。在使用时要将纬度值转换成度、分、秒的形式,使x为度,y为分,z为秒。纬度转换过程如下:
x=int(ddmm/100);
y=int(ddmm-100x);
z=int[(mm.mmmm-y)*60];
经度转换过程类似,在此不再赘述。
3.3 自动报站算法设计
本文以L市13路公交车为例进行设计。设13路公交车往返路线上共有12个站点,按照车辆正常行驶的次序从站点1到站点12单向循环列表编号,如图4所示。任意1个站点都存在前站和后站。将各站点的站点编号和经纬度信息等数据存放在单片机中。单片机按固定的采样周期T接收GPS模块发送来的定位信息。在进行站点匹配时进行全局站点搜索,保证公交车在掉头或跨站等特殊情况都可正确匹配到站点[7]。当车辆当前位置与站点的线性距离≤L时,完成站点匹配及信息播报和显示。根据公交车实际的行驶速度取T=1 s,L=50 m。
图4 站点示意
3.3.1 进站判定
设公交车当前位置与任意站点之间的线性距离为Ld,公交车当前位置与任意站点前站的线性距离为Ld+1。公交车当前位置与任意站点间的线性距离Ld为[8]
(1)
Δlat为2点之间的纬度差;Δlon为2点之间的经度差;M为纬度每一度在地球上代表的距离,单位为m。
当往返路线上对应的站点比较近时,每个周期可能匹配到2个站点。因此将站点匹配分为4种情况:第1种,前后连续2个周期都只匹配到1个站点,站号相同且前后2个周期测得的Ld+1在减小,则该站点即为当前进站点;第2种,前一个周期匹配到1个站点,后一个周期匹配到2个站点;第3种,前一个周期匹配到2个站点,后一个周期匹配到1个站点;第4种,前一个周期匹配到2个站点,后一个周期匹配到2个站点[9]。第2种和第3种情况类似,因此主要对第3、第4种情况进行设计。
设ZD1_1,ZD1_2分别为前一周期所匹配到的2个可能到达站点的站号;JL1_1,JL1_2分别为前一周期的公交车位置与这2个可能到达站点的前站之间的线性距离;ZD2_1,ZD2_2分别为当前周期所匹配到的2个可能到达站点的站号;JL2_1,JL2_2分别为当前周期的公交车位置与这2个可能到达站点的前站之间的线性距离。
当第3种情况发生时,前一周期匹配到的2个可能到达站点中必有1个与后一周期匹配站点一致。此时若前后2个周期所得Ld+1值呈递减趋势,则该一致站点即为车辆当前进站站点,否则认为前一周期的另一匹配站点为当前进站点。判断流程如图5所示。
当第4种情况发生时,前后2个周期匹配到的4个站点应两两对应。首先比较其中一对对应匹配站点在前后2个周期中所得Ld+1值,若呈递减趋势则认为该匹配站点为当前进站站点,否则认为另一对匹配站点为当前进站站点。判断流程如图6所示。
图5 第3种情况控制算法设计工作流程
图6 第4种情况控制算法设计工作流程
3.3.2 出站判定
通过进站判定确定当前进站站点之后,继续以设定周期T计算所接收到的公交车当前位置与当前进站站点之间的线性距离。当所计算的距离大于设定距离值L时,则将下一站点设置为预报站点,进行出站预报。
3.4 语音播报流程
语音播报子程序在接收准确的进站站点信息后,单片机直接发送地址数据触发语音模块,播报对应站点语音信息。模块采用片选线CS、数据线DATA、时钟线CLK三线串口控制模式,时序根据标准SPI通信方式。片选信号CS置低5 ms后WT588D语音芯片工作。时钟周期设置200 μs,在时钟的上升沿接收地址数据。接收数据先低位再高位,数据成功接收后片选信号置高。语音播放忙信号BUSY在有语音播放20 ms后才能播放下一段语音。当数据匹配时完成该站点对应的语音信息播报。
3.5 LCD显示流程
显示子程序在接收到准确的进站信息后,首先初始化LCD子函数,再调用定位子函数和字符子函数[10],设置并调用站点信息,在LCD显示屏上显示站点信息。
4 系统测试
通过对GPS定位模块测试,定位距离误差小于10 m,满足报站系统对定位精度的要求,并对公交车以下几种特殊工况进行测试:
a.设1号站点为公交线路的端站点,在无司机确认车辆上下行方向的前提下,GPS数据匹配到端站点位置信息后可能默认为此次运行结束,致使公交车开往2号站点时,不能准确匹配站点信息而无法正确报站。本文采用单向循环列表方式存储往返全部站点信息,测试车辆从1号站点开往2号站点过程中,由于2号站点与11号站点距离较近,在连续2个搜索周期内都匹配到2号和11号2个站点信息,此时根据第4种情况进行站点匹配计算,测试结果表明该系统能够有效解决上下行问题并实现对2号站点准确报站。
b.由于某些特殊情况,测试车辆从5号站点出站后调头反行。在司机不干预的情况下,按照上下行概念将会沿着原来的运行方向进行站点匹配,而不会去匹配返向的站点,从而导致误报或者不报站。本文采用实时全局站点搜索进行站点匹配计算。由于车辆位置信息的刷新速度远快于车辆的行驶速度,所以根据连续2次接收的车辆实时位置信息,将车辆的实际位置信息与预存的全部站点信息进行匹配,测试结果表明,在车辆突然调头时该系统能够准确匹配到9号站点并进行播报。当某站点停靠多辆公交车时,部分公交车就会选择跨站,情况和车辆掉头类似。
公交车在任意2个站点之间的运行一般分为以下3个阶段:
a.进站。距离站点50 m以内,语音播报当前站点的到站信息,LCD显示当前站点信息。
b.出站。驶出站台20 m以外,语音播报下一站点信息。
c.运行。出站50 m以外并且距离下一站150 m之间,可播放天气或景点介绍等信息。
对L市13路公交车线路进行测试,图7为进站显示,图8为相关信息显示。测试结果表明,该系统能够准确实现定位及自动站点判定功能。
图7 进站显示
图8 相关信息显示
5 结束语
本文设计了基于单片机STC89C52和GPS模块的公交车智能报站系统。完成了硬件电路的搭建,并设计了基于单向循环列表和全局站点匹配的进站、出站判定控制算法。经实物测试,无需上、下行方向判断,将GPS采集的位置信息同单片机存储的站点信息进行比对自动完成站点的匹配。在往返路线上对应站点距离较近、车辆掉头或跨站等特殊情况下无需司机干预,通过全局站点匹配即可快速、准确匹配到站点。该系统功能完善,定位准确,实现了报站功能的智能化。