,,
(成都理工大學(xué)工程技術(shù)學(xué)院,四川 樂(lè)山 614000)
當(dāng)今社會(huì)重點(diǎn)關(guān)注的兩大主題是能源和環(huán)境。作為一種環(huán)保、綠色、低碳的出行方式,城市公交得到市民的青睞。伴隨著城市公共交通事業(yè)的迅速發(fā)展以及電子信息技術(shù)的廣泛應(yīng)用,自動(dòng)報(bào)站技術(shù)也得到了快速發(fā)展。自動(dòng)報(bào)站技術(shù)不但提高了公交服務(wù)質(zhì)量,改善了人們的乘車體驗(yàn),而且?guī)?lái)了一定的經(jīng)濟(jì)、社會(huì)效益,并解決了手動(dòng)報(bào)站增加司機(jī)工作量和安全隱患的弊端[1]。現(xiàn)有的報(bào)站系統(tǒng)大多需要在司機(jī)確認(rèn)車輛上行或下行方向后進(jìn)行站點(diǎn)判定,且基本無(wú)法自行解決公交車調(diào)頭和跨站后產(chǎn)生的錯(cuò)誤報(bào)站問(wèn)題。為此,設(shè)計(jì)了基于GPS和單片機(jī)的公交車智能報(bào)站系統(tǒng),不需要GPS數(shù)據(jù)中的方位角信息,只要把公交車往返線路上的全部站點(diǎn)信息按照單向循環(huán)列表的形式存放在單片機(jī)中,通過(guò)全局搜索進(jìn)行站點(diǎn)匹配,可實(shí)現(xiàn)實(shí)時(shí)定位和站點(diǎn)的全自動(dòng)判定。
本文設(shè)計(jì)的智能報(bào)站系統(tǒng)由STC89C52單片機(jī)、GPS模塊、按鍵模塊、語(yǔ)音模塊和液晶顯示模塊等組成。系統(tǒng)結(jié)構(gòu)如圖1所示。
GPS模塊實(shí)時(shí)獲取公交車位置信息(經(jīng)緯度),經(jīng)無(wú)線傳輸將信息傳送至單片機(jī)。單片機(jī)首先將GPS模塊獲取的站點(diǎn)經(jīng)緯度信息進(jìn)行轉(zhuǎn)換,然后將其同預(yù)先存儲(chǔ)的具體站點(diǎn)位置信息進(jìn)行比對(duì),比對(duì)成功則表示公交車已到達(dá)站點(diǎn),執(zhí)行進(jìn)站操作。由語(yǔ)音模塊WT588D對(duì)站點(diǎn)信息進(jìn)行語(yǔ)音播報(bào),液晶顯示模塊LCD12864對(duì)站點(diǎn)信息進(jìn)行顯示。當(dāng)車輛駛離當(dāng)前站點(diǎn)后進(jìn)行下一站點(diǎn)的預(yù)報(bào)。當(dāng)GPS信號(hào)接收不正常時(shí),啟動(dòng)手動(dòng)報(bào)站模式,保證報(bào)站系統(tǒng)工作的穩(wěn)定性和精準(zhǔn)性。

圖1 系統(tǒng)結(jié)構(gòu)
主控電路由STC89C52單片機(jī)[2]、復(fù)位電路和晶振電路構(gòu)成。晶振電路由1個(gè)晶振和2個(gè)電容組成,晶振接至單片機(jī)XTAL1和XTAL2引腳,在20 MHz頻率下工作。RC復(fù)位電路接至單片機(jī)RESET引腳,在上電瞬間,RES引腳產(chǎn)生1個(gè)正脈沖使系統(tǒng)復(fù)位。
GPS定位模塊采用U-BLOX公司的NEO-6M芯片,將位置數(shù)據(jù)傳送給單片機(jī)[3-4]。GPS定位模塊的串口發(fā)送引腳TXD與主控芯片P3.0引腳連接;串口接收引腳RXD不進(jìn)行數(shù)據(jù)接收時(shí)懸空;時(shí)鐘脈沖引腳PPS連接LED指示燈。當(dāng)模塊成功定位時(shí)指示燈連續(xù)閃爍。VCC接5 V電源,GND接地。
WT588D語(yǔ)音模塊是一款集單片機(jī)、語(yǔ)音電路、SPI-Flash存儲(chǔ)器于一體的可編程語(yǔ)音系統(tǒng)[5]。在設(shè)計(jì)中,先通過(guò)VoiceChip上位機(jī)軟件將音頻文件下載到SPI-Flash存儲(chǔ)器的相應(yīng)地址段,做好地址與語(yǔ)音的對(duì)照表,放音時(shí)調(diào)用地址。WT588D的DATA數(shù)據(jù)端、CS片選端、CLK時(shí)鐘端分別與主控芯片的P2.1,P2.2,P2.3引腳連接。單片機(jī)通過(guò)這3個(gè)控制口對(duì)WT588D語(yǔ)音模塊進(jìn)行控制。PWM+和PWM-引腳直接驅(qū)動(dòng)揚(yáng)聲器進(jìn)行語(yǔ)音播報(bào);語(yǔ)音模塊忙信號(hào)的狀態(tài)由發(fā)光二極管LED的亮滅反映。正向低壓降穩(wěn)壓器AMS1117將5 V電壓轉(zhuǎn)換成3 V的電壓,并給語(yǔ)音模塊供電。
漢字圖形點(diǎn)陣液晶顯示模塊LCD12864可以顯示漢字和圖形,內(nèi)置128個(gè)8×16點(diǎn)陣字符、8 192個(gè)16×16點(diǎn)陣中文漢字。每屏可顯示4行8列共32個(gè)漢字,可以基本滿足站點(diǎn)播報(bào)需求。并行接口D0 ~ D7接主控芯片P0.0 ~ P0.7引腳。RS,RW,EN分別接主控芯片的P2.5,P2.6,P2.7引腳,PSB引腳接高電平。
智能報(bào)站器雖然可以實(shí)現(xiàn)在無(wú)人參與的情況下自動(dòng)報(bào)站,但為了防止自動(dòng)報(bào)站模式出現(xiàn)故障,在設(shè)計(jì)時(shí)保留了手動(dòng)報(bào)站模式[6]。手動(dòng)報(bào)站模式采用了4個(gè)獨(dú)立的功能鍵:手動(dòng)/自動(dòng)報(bào)站模式切換鍵K1;上/下行選擇鍵K2,并設(shè)有上下行狀態(tài)顯示,當(dāng)K2按下LED1發(fā)光,表示公交車在上行方向運(yùn)行,K2未按下時(shí)LED1滅,表示公交車在下行方向運(yùn)行;K3和K4分別為上一站、下一站按鍵,完成相應(yīng)站點(diǎn)信息的播報(bào)和顯示。
智能報(bào)站系統(tǒng)總體硬件電路如圖2所示。

圖2 智能報(bào)站系統(tǒng)硬件電路
系統(tǒng)使用Keil作為軟件開(kāi)發(fā)和調(diào)試工具,編程語(yǔ)言為C語(yǔ)言,采用模塊化的設(shè)計(jì)思路。控制系統(tǒng)設(shè)計(jì)了自動(dòng)報(bào)站和手動(dòng)報(bào)站2種工作模式。本文主要闡述自動(dòng)報(bào)站模式,其程序設(shè)計(jì)主要包括GPS數(shù)據(jù)的采集及轉(zhuǎn)換、自動(dòng)報(bào)站控制算法設(shè)計(jì)、站點(diǎn)信息的播報(bào)和站點(diǎn)信息的顯示等。主程序控制流程如圖3所示。

圖3 主程序流程
GPS模塊以NMEA-0183協(xié)議格式將數(shù)據(jù)串傳送給單片機(jī),單片機(jī)將接收到的數(shù)據(jù)保存到寄存器中等待數(shù)據(jù)處理。以緯度數(shù)據(jù)串為例,根據(jù)NMEA-0183協(xié)議,GPS數(shù)據(jù)包語(yǔ)句格式為“$GPGGA,<1>,<2>,<3>……”。數(shù)據(jù)串第<2>位是緯度值,格式為ddmm.mmmm,其中dd為度,mm.mmmm為分。數(shù)據(jù)串<3>若是N代表北緯,若是S代表南緯。在使用時(shí)要將緯度值轉(zhuǎn)換成度、分、秒的形式,使x為度,y為分,z為秒。緯度轉(zhuǎn)換過(guò)程如下:
x=int(ddmm/100);
y=int(ddmm-100x);
z=int[(mm.mmmm-y)*60];
經(jīng)度轉(zhuǎn)換過(guò)程類似,在此不再贅述。
本文以L市13路公交車為例進(jìn)行設(shè)計(jì)。設(shè)13路公交車往返路線上共有12個(gè)站點(diǎn),按照車輛正常行駛的次序從站點(diǎn)1到站點(diǎn)12單向循環(huán)列表編號(hào),如圖4所示。任意1個(gè)站點(diǎn)都存在前站和后站。將各站點(diǎn)的站點(diǎn)編號(hào)和經(jīng)緯度信息等數(shù)據(jù)存放在單片機(jī)中。單片機(jī)按固定的采樣周期T接收GPS模塊發(fā)送來(lái)的定位信息。在進(jìn)行站點(diǎn)匹配時(shí)進(jìn)行全局站點(diǎn)搜索,保證公交車在掉頭或跨站等特殊情況都可正確匹配到站點(diǎn)[7]。當(dāng)車輛當(dāng)前位置與站點(diǎn)的線性距離≤L時(shí),完成站點(diǎn)匹配及信息播報(bào)和顯示。根據(jù)公交車實(shí)際的行駛速度取T=1 s,L=50 m。

圖4 站點(diǎn)示意
3.3.1 進(jìn)站判定
設(shè)公交車當(dāng)前位置與任意站點(diǎn)之間的線性距離為L(zhǎng)d,公交車當(dāng)前位置與任意站點(diǎn)前站的線性距離為L(zhǎng)d+1。公交車當(dāng)前位置與任意站點(diǎn)間的線性距離Ld為[8]
(1)
Δlat為2點(diǎn)之間的緯度差;Δlon為2點(diǎn)之間的經(jīng)度差;M為緯度每一度在地球上代表的距離,單位為m。
當(dāng)往返路線上對(duì)應(yīng)的站點(diǎn)比較近時(shí),每個(gè)周期可能匹配到2個(gè)站點(diǎn)。因此將站點(diǎn)匹配分為4種情況:第1種,前后連續(xù)2個(gè)周期都只匹配到1個(gè)站點(diǎn),站號(hào)相同且前后2個(gè)周期測(cè)得的Ld+1在減小,則該站點(diǎn)即為當(dāng)前進(jìn)站點(diǎn);第2種,前一個(gè)周期匹配到1個(gè)站點(diǎn),后一個(gè)周期匹配到2個(gè)站點(diǎn);第3種,前一個(gè)周期匹配到2個(gè)站點(diǎn),后一個(gè)周期匹配到1個(gè)站點(diǎn);第4種,前一個(gè)周期匹配到2個(gè)站點(diǎn),后一個(gè)周期匹配到2個(gè)站點(diǎn)[9]。第2種和第3種情況類似,因此主要對(duì)第3、第4種情況進(jìn)行設(shè)計(jì)。
設(shè)ZD1_1,ZD1_2分別為前一周期所匹配到的2個(gè)可能到達(dá)站點(diǎn)的站號(hào);JL1_1,JL1_2分別為前一周期的公交車位置與這2個(gè)可能到達(dá)站點(diǎn)的前站之間的線性距離;ZD2_1,ZD2_2分別為當(dāng)前周期所匹配到的2個(gè)可能到達(dá)站點(diǎn)的站號(hào);JL2_1,JL2_2分別為當(dāng)前周期的公交車位置與這2個(gè)可能到達(dá)站點(diǎn)的前站之間的線性距離。
當(dāng)?shù)?種情況發(fā)生時(shí),前一周期匹配到的2個(gè)可能到達(dá)站點(diǎn)中必有1個(gè)與后一周期匹配站點(diǎn)一致。此時(shí)若前后2個(gè)周期所得Ld+1值呈遞減趨勢(shì),則該一致站點(diǎn)即為車輛當(dāng)前進(jìn)站站點(diǎn),否則認(rèn)為前一周期的另一匹配站點(diǎn)為當(dāng)前進(jìn)站點(diǎn)。判斷流程如圖5所示。
當(dāng)?shù)?種情況發(fā)生時(shí),前后2個(gè)周期匹配到的4個(gè)站點(diǎn)應(yīng)兩兩對(duì)應(yīng)。首先比較其中一對(duì)對(duì)應(yīng)匹配站點(diǎn)在前后2個(gè)周期中所得Ld+1值,若呈遞減趨勢(shì)則認(rèn)為該匹配站點(diǎn)為當(dāng)前進(jìn)站站點(diǎn),否則認(rèn)為另一對(duì)匹配站點(diǎn)為當(dāng)前進(jìn)站站點(diǎn)。判斷流程如圖6所示。

圖5 第3種情況控制算法設(shè)計(jì)工作流程

圖6 第4種情況控制算法設(shè)計(jì)工作流程
3.3.2 出站判定
通過(guò)進(jìn)站判定確定當(dāng)前進(jìn)站站點(diǎn)之后,繼續(xù)以設(shè)定周期T計(jì)算所接收到的公交車當(dāng)前位置與當(dāng)前進(jìn)站站點(diǎn)之間的線性距離。當(dāng)所計(jì)算的距離大于設(shè)定距離值L時(shí),則將下一站點(diǎn)設(shè)置為預(yù)報(bào)站點(diǎn),進(jìn)行出站預(yù)報(bào)。
語(yǔ)音播報(bào)子程序在接收準(zhǔn)確的進(jìn)站站點(diǎn)信息后,單片機(jī)直接發(fā)送地址數(shù)據(jù)觸發(fā)語(yǔ)音模塊,播報(bào)對(duì)應(yīng)站點(diǎn)語(yǔ)音信息。模塊采用片選線CS、數(shù)據(jù)線DATA、時(shí)鐘線CLK三線串口控制模式,時(shí)序根據(jù)標(biāo)準(zhǔn)SPI通信方式。片選信號(hào)CS置低5 ms后WT588D語(yǔ)音芯片工作。時(shí)鐘周期設(shè)置200 μs,在時(shí)鐘的上升沿接收地址數(shù)據(jù)。接收數(shù)據(jù)先低位再高位,數(shù)據(jù)成功接收后片選信號(hào)置高。語(yǔ)音播放忙信號(hào)BUSY在有語(yǔ)音播放20 ms后才能播放下一段語(yǔ)音。當(dāng)數(shù)據(jù)匹配時(shí)完成該站點(diǎn)對(duì)應(yīng)的語(yǔ)音信息播報(bào)。
顯示子程序在接收到準(zhǔn)確的進(jìn)站信息后,首先初始化LCD子函數(shù),再調(diào)用定位子函數(shù)和字符子函數(shù)[10],設(shè)置并調(diào)用站點(diǎn)信息,在LCD顯示屏上顯示站點(diǎn)信息。
通過(guò)對(duì)GPS定位模塊測(cè)試,定位距離誤差小于10 m,滿足報(bào)站系統(tǒng)對(duì)定位精度的要求,并對(duì)公交車以下幾種特殊工況進(jìn)行測(cè)試:
a.設(shè)1號(hào)站點(diǎn)為公交線路的端站點(diǎn),在無(wú)司機(jī)確認(rèn)車輛上下行方向的前提下,GPS數(shù)據(jù)匹配到端站點(diǎn)位置信息后可能默認(rèn)為此次運(yùn)行結(jié)束,致使公交車開(kāi)往2號(hào)站點(diǎn)時(shí),不能準(zhǔn)確匹配站點(diǎn)信息而無(wú)法正確報(bào)站。本文采用單向循環(huán)列表方式存儲(chǔ)往返全部站點(diǎn)信息,測(cè)試車輛從1號(hào)站點(diǎn)開(kāi)往2號(hào)站點(diǎn)過(guò)程中,由于2號(hào)站點(diǎn)與11號(hào)站點(diǎn)距離較近,在連續(xù)2個(gè)搜索周期內(nèi)都匹配到2號(hào)和11號(hào)2個(gè)站點(diǎn)信息,此時(shí)根據(jù)第4種情況進(jìn)行站點(diǎn)匹配計(jì)算,測(cè)試結(jié)果表明該系統(tǒng)能夠有效解決上下行問(wèn)題并實(shí)現(xiàn)對(duì)2號(hào)站點(diǎn)準(zhǔn)確報(bào)站。
b.由于某些特殊情況,測(cè)試車輛從5號(hào)站點(diǎn)出站后調(diào)頭反行。在司機(jī)不干預(yù)的情況下,按照上下行概念將會(huì)沿著原來(lái)的運(yùn)行方向進(jìn)行站點(diǎn)匹配,而不會(huì)去匹配返向的站點(diǎn),從而導(dǎo)致誤報(bào)或者不報(bào)站。本文采用實(shí)時(shí)全局站點(diǎn)搜索進(jìn)行站點(diǎn)匹配計(jì)算。由于車輛位置信息的刷新速度遠(yuǎn)快于車輛的行駛速度,所以根據(jù)連續(xù)2次接收的車輛實(shí)時(shí)位置信息,將車輛的實(shí)際位置信息與預(yù)存的全部站點(diǎn)信息進(jìn)行匹配,測(cè)試結(jié)果表明,在車輛突然調(diào)頭時(shí)該系統(tǒng)能夠準(zhǔn)確匹配到9號(hào)站點(diǎn)并進(jìn)行播報(bào)。當(dāng)某站點(diǎn)停靠多輛公交車時(shí),部分公交車就會(huì)選擇跨站,情況和車輛掉頭類似。
公交車在任意2個(gè)站點(diǎn)之間的運(yùn)行一般分為以下3個(gè)階段:
a.進(jìn)站。距離站點(diǎn)50 m以內(nèi),語(yǔ)音播報(bào)當(dāng)前站點(diǎn)的到站信息,LCD顯示當(dāng)前站點(diǎn)信息。
b.出站。駛出站臺(tái)20 m以外,語(yǔ)音播報(bào)下一站點(diǎn)信息。
c.運(yùn)行。出站50 m以外并且距離下一站150 m之間,可播放天氣或景點(diǎn)介紹等信息。
對(duì)L市13路公交車線路進(jìn)行測(cè)試,圖7為進(jìn)站顯示,圖8為相關(guān)信息顯示。測(cè)試結(jié)果表明,該系統(tǒng)能夠準(zhǔn)確實(shí)現(xiàn)定位及自動(dòng)站點(diǎn)判定功能。

圖7 進(jìn)站顯示

圖8 相關(guān)信息顯示
本文設(shè)計(jì)了基于單片機(jī)STC89C52和GPS模塊的公交車智能報(bào)站系統(tǒng)。完成了硬件電路的搭建,并設(shè)計(jì)了基于單向循環(huán)列表和全局站點(diǎn)匹配的進(jìn)站、出站判定控制算法。經(jīng)實(shí)物測(cè)試,無(wú)需上、下行方向判斷,將GPS采集的位置信息同單片機(jī)存儲(chǔ)的站點(diǎn)信息進(jìn)行比對(duì)自動(dòng)完成站點(diǎn)的匹配。在往返路線上對(duì)應(yīng)站點(diǎn)距離較近、車輛掉頭或跨站等特殊情況下無(wú)需司機(jī)干預(yù),通過(guò)全局站點(diǎn)匹配即可快速、準(zhǔn)確匹配到站點(diǎn)。該系統(tǒng)功能完善,定位準(zhǔn)確,實(shí)現(xiàn)了報(bào)站功能的智能化。