Social Icons

twitterfacebookgoogle plusrss feedemail

12/27/2012

[Arduino]GPS 訊號處理

還是得前面的無線小車麼?在那個時候原本我有加上一個GPS模組在小車上,但是GPS訊號一開始連線要抓一段時間,加上Arduino UNO的Port實在是太少了,所以我GPS收到訊號後我就沒有繼續往下做了。
這幾天交給學弟去做,學弟將GPS訊號抓到後順便將訊息字串給處理了一下整體上做的還不錯!
先來看看我整理的影片吧


讓我們繼續往下看Arduino 如何接收處理GPS訊號

電路接線與參數:(以下圖片點圖可放大)
這個圖稍微與實際電路不同,這是示意圖(接線有點錯誤就是了)
因為GPS模組會一直傳遞GPS封包,如GPGGA、GPRMC...等,所以在這在邊我們分別作兩個不同的實驗模擬。(GPS的baudrate為9600)
準備材料:
  • Arduino開發版
  • GPS模組(ut_gps_c_0622a)
  • LCD版
  • USB線
 市面上有許多GPS的晶片模組,依照不同規格價格大約在300~5000元不等。這邊我使用了多種不同的GPS模組來接收訊號,不過這邊我只介紹一種。
GPS模組內部電路
由電路圖我們可以知道我們總共需要接VDDCPU_TXCPU_RX以及兩個接地。而廠商提出的規格書中提到模組的VDD電壓需輸入3.3V才可以驅動模組,而我們的Arduino上面剛好有一個腳位可以提供3.3V的電壓,但是如果你的Arduino板子是使用USB來供電則"可能"會發生電流不足的情形,因為Arduino只提供100mA的電流!!這一點的電流沒辦法驅動GPS,所以我們必須外接電源來解決這個問題。
如果你今天Arduino只有街上一個GPS模組,那麼就不用在使用變壓器!只要使用USB供電即可。
GPS模組
電源的問題解決之後,我們接下來將模組上的CPU_RXCPU_TX分別接到Arduino上的TXRX,這樣Arduino就會一直傳送TTL的訊號跟GPS模組做溝通傳遞訊號。

GPS
Arduino UNO
1
VDD(Pin2)
5V
2
GND(Pin15)
GND
3
GND(Pin16)
GND
4
CPU_TX(Pin16)
RX(Pin0)
5
CPU_RX(Pin16)
TX(Pin1)
腳位接法
TXRX都接好之後(如下圖),接上USB線後我們在電腦上打開可以查看COM訊號的軟體(RealterminalAccessPort、超級終端機、putty…),設定好9600 baud rate上就可以接收到GPS訊號。


GPGGA - 全球定位系統資料
GPGSA - GPS精準度及可使用的衛星資訊
GPGSV - 可連結的衛星詳細資訊
GPRMC - 簡易的GPS位置資訊(訊息較短.適合傳輸用)

一、未做字串處理的GPS模組訊號
因為GPS會藉由Serial port一直輸出到電腦上,所以基本上不需要燒入程式碼就可以收到訊息。但如果ArduinoTX、RX 不是接上0 & 1port !那麼請打開Arduino IDE的SoftwareSerial範例,將mySerial改為自己需要的port!!這樣就可以把其它的port當作 TX、RX  來使用
程式碼如下:
SoftwareSerial mySerial(3, 4); // 設定Arduino板子上RX,TX
void setup()  
{ 
  Serial.begin(9600); //COMPORT鮑率
  mySerial.begin(9600);//GPS
}

void loop() // run over and over
{
  if (mySerial.available())
    Serial.write(mySerial.read()); 
                                 
  if (Serial.available())         
    mySerial.write(Serial.read()); 
}
  • 如果是複製上面程式碼的人,會發現到程式編譯完會出現錯誤!沒錯 是因為我故意把一行程式碼拿掉,請自己修正。
  • 為什麼要換其他的port不使用0與1呢?因為TX與RX內部有電阻,可能會將我們的訊號給降低,所以盡量避免使用
在這邊我們只看GPRMC,因為這個格式通常用於車載通訊...等比較常見。其它格式的封包欄位請上網搜尋。

格 式: $GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh<CR><LF>
$GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,,,A*50
說 明:
字段 0:$GPRMC,語句ID,表明該語句為Recommended Minimum Specific GPS/TRANSIT Data(RMC)推薦最小定位信息
     字段 1:UTC時間,hhmmss.sss格式
     字段 2:狀態,A=定位,V=未定位
     字段 3:緯度ddmm.mmmm,度分格式(前導位數不足則補0)
     字段 4:緯度N(北緯)或S(南緯)
     字段 5:經度dddmm.mmmm,度分格式(前導位數不足則補0)
     字段 6:經度E(東經)或W(西經)
     字段 7:速度,節,Knots(一節也是1.852千米/小時)
     字段 8:方位角,度(二維方向指向,相當於二維羅盤)
     字段 9:UTC日期,DDMMYY格式
     字段10:磁偏角,(000 - 180)度(前導位數不足則補0)
     字段11:磁偏角方向,E=東,W=西
     字段12:模式,A=自動,D=差分,E=估測,N=數據無效
     字段13:校驗值
左圖: 連上衛星後 右圖:   與衛星連線中
  使用RealTerm來檢測
左圖: 連上衛星後 右圖:   與衛星連線中
Port每個人都會不同請查看自己的Arduino
  使用Visual GPS來檢測
能夠接收到GPS訊息之後,我們可以藉由一套免費的軟體Visual GPS來幫我們查看這些GPS訊號到底是在說明什麼訊息。
左圖: 連上衛星後 右圖:   與衛星連線中
VisualGPS這套軟體會分析GPS的訊號並且利用視覺化的介面來呈現經緯度、訊息強度、座標、衛星所在角度...等。

二、做字串處理的GPS模組訊號
接下來這邊我們只要將接收到的訊號做字串處理然後輸出至LCD版上即可。
這邊程式碼的部分Arduino一試就上手的書中都有等教完作業我再放上來
左圖:  與衛星連線中  右圖: 連上衛星後
顯示經緯度在LCD版上
目前時間
三、做字串處理的GPS模組訊號在GoogleMap上顯示
原先是想先藉由電腦將GPS座標儲存下來成為CSV、KML檔案再匯入GoogleMap的我的地圖中,使得地圖可以畫出我們走過的座標,但最近比較忙所以先稍微寫了一個C#的小程式,這個程式可以將GPS的訊號傳回電腦中,然後在GoogleMap中做顯示。

一些實驗過程的圖片
Arduino 


GPS天線靠窗就可以使用

GPS

天線

在室內也是可以使用的
因為GPS模組需要熱機與衛星做連線,所以一開始連上的時間會比較久(約30秒),而且如果GPS模組的線沒接好會造成GPS訊號接收不到,這點要稍微注意一下。

最後附一下GPS的規格
內容規格
模組廠家JRC
晶片組JRC第九代單晶片
通道88通道(66個捕獲通道,22個追蹤通道)
啟動時間<1.5s(熱啟),<34s(溫啟),<35s(冷啟)
重捕獲<1s
數據I/O界面9600bps(TXD、RXD)
數據輸出格式NMEA 0138 Format v3.01
靈敏度-163dBw(Tracking)
精確度<3m Static
0.1m/sec Dynamic
功耗38mW@tracking 50mW@acquisition
坐標WGS84
界面電平TTL電平
模組尺寸15.9mm(L)×13.1mm(W)×2.5mm(H)
模組電源2.7~4.2V 3.3V@typical

要其它便宜的GPS模組可以上網找尋
intimeinfo SIRF3 VK2525..等

沒有留言:

張貼留言

俗話說
凡走過必留下痕跡,凡住過必留下鄰居
凡爬過必留下樓梯,凡來過必留下IP
看過文章之後歡迎留下您寶貴的意見喔!

 
 
无觅相关文章插件,迅速提升网站流量