這幾天交給學弟去做,學弟將GPS訊號抓到後順便將訊息字串給處理了一下整體上做的還不錯!
先來看看我整理的影片吧
讓我們繼續往下看Arduino 如何接收處理GPS訊號
電路接線與參數:(以下圖片點圖可放大)
這個圖稍微與實際電路不同,這是示意圖(接線有點錯誤就是了) |
準備材料:
市面上有許多GPS的晶片模組,依照不同規格價格大約在300~5000元不等。這邊我使用了多種不同的GPS模組來接收訊號,不過這邊我只介紹一種。
- Arduino開發版
- GPS模組(ut_gps_c_0622a)
- LCD版
- USB線
GPS模組內部電路 |
由電路圖我們可以知道我們總共需要接VDD、CPU_TX、CPU_RX以及兩個接地。而廠商提出的規格書中提到模組的VDD電壓需輸入3.3V才可以驅動模組,而我們的Arduino上面剛好有一個腳位可以提供3.3V的電壓,但是如果你的Arduino板子是使用USB來供電則"可能"會發生電流不足的情形,因為Arduino只提供100mA的電流!!這一點的電流沒辦法驅動GPS,所以我們必須外接電源來解決這個問題。
如果你今天Arduino只有街上一個GPS模組,那麼就不用在使用變壓器!只要使用USB供電即可。
如果你今天Arduino只有街上一個GPS模組,那麼就不用在使用變壓器!只要使用USB供電即可。
GPS模組 |
電源的問題解決之後,我們接下來將模組上的CPU_RX與CPU_TX分別接到Arduino上的TX與RX,這樣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)
|
當TX與RX都接好之後(如下圖),接上USB線後我們在電腦上打開可以查看COM訊號的軟體(Realterminal、AccessPort、超級終端機、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,<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:校驗值
左圖: 連上衛星後 右圖: 與衛星連線中 |
左圖: 連上衛星後 右圖: 與衛星連線中 Port每個人都會不同請查看自己的Arduino |
能夠接收到GPS訊息之後,我們可以藉由一套免費的軟體Visual GPS來幫我們查看這些GPS訊號到底是在說明什麼訊息。
左圖: 連上衛星後 右圖: 與衛星連線中 |
二、做字串處理的GPS模組訊號
接下來這邊我們只要將接收到的訊號做字串處理然後輸出至LCD版上即可。
這邊程式碼的部分Arduino一試就上手的書中都有等教完作業我再放上來
左圖: 與衛星連線中 右圖: 連上衛星後 |
顯示經緯度在LCD版上 |
目前時間 |
原先是想先藉由電腦將GPS座標儲存下來成為CSV、KML檔案再匯入GoogleMap的我的地圖中,使得地圖可以畫出我們走過的座標,但最近比較忙所以先稍微寫了一個C#的小程式,這個程式可以將GPS的訊號傳回電腦中,然後在GoogleMap中做顯示。
一些實驗過程的圖片
Arduino |
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
看過文章之後歡迎留下您寶貴的意見喔!