轉載請注明出處:http://blog.csdn.net/lxk7280
使用到的主要材料:
1.VK16E GMOUSE GPS模組 SIRF3晶片 陶瓷天線 TTL信号 9600波特率

型号:VK16E
主晶片:SiRF Ⅲ
C/A 碼,1.023MHz碼流
接收頻段:L1 [1575.42MHz]
跟蹤通道:20個
支援DGPS[WAAS, EGNOS 和 MSAS]
定位性能
<10米(獨立定位)
<5米(WAAS)
漂移:<0.02m/s
授時精度:1us
參照坐标系:WGS-84
最大海拔高度:18000米
最大速度:500m/s
加速度:<4g
電性能:
跟蹤靈敏度:-159dBm
捕獲靈敏度:-153dBm
冷啟動時間:39s[平均]
溫啟動時間:37s[平均]
熱啟動時間:1s[平均]
再捕獲時間:0.1s[平均]
操作溫度:
-30℃ to +80℃
封裝尺寸:
28*28*8.4mm;
接口電性能:
寬電壓範圍:主電源為+3.5V~+5.0V,自備RTC電源
底部:25*25*4mm陶瓷天線
輸出資料波特率4800bps或9600bps或根據客戶要求定制
輸出SiRF二進制資料式或NMEA 0183 V3.0(GGA,GSA,GSV,RMC,VTG)協定資料
------以上VK16E資料來自 http://item.taobao.com/item.htm?id=16613075728
2.Arduino UNO R3 開發闆
Arduino,滿足您創新創意的需要! 中文名:阿德偉諾 Arduino 是一款便捷靈活、友善上手的開源電子原型平台,包含硬體(各種型号的 arduino闆)和軟體(arduino IDE)。它适用于藝術家、設計師、愛好者和對于“互動”有 興 趣的朋友們。 Arduino,是一個基于開放原始碼的軟硬體平台,建構于開放原始碼simple I/O介面版,并且具有使用類似Java,C語言的Processing/Wiring開發環境。 [
-----以上Arduino資料 來自百度百科
http://baike.baidu.com/link?url=SDggXxohRgrthxwRqjLW65Zu9SbM5f_WcZI7Jp7Ib7ic9LWuhvBdaTrXYrnsaM49SJf9BdlykvKHJdwY4sD6HK
3.軟體:SiRFDemo (軟體使用說明:http://wenku.baidu.com/view/d65bcfd528ea81c758f578da.html)
本軟體為GPS子產品:VK16E與PC機通信時的上位機,使用簡單友善,适合初學者使用。
使用時将VK16E的TXD,RXD通過USB轉序列槽連接配接至PC機進行通信,然後打開軟體進行三個
簡單的選擇即可使用。後面将詳細說明。
4.軟體:Arduino (資料和軟體下載下傳位址:http://arduino.cc/en/Guide/Libraries(英文) http://wiki.geek-workshop.com/doku.php?id=arduino:arduino_language_reference:attachinterrupt(中文))
本軟體用于給Arduino單片機寫程式,本身自帶序列槽監視程式,簡單易用,通信與供電同一根USB線即可。下載下傳時自帶一部分底層庫檔案,
如果有擴充使用想法,可登陸以上所述的兩個網站下載下傳庫檔案。
5.USB轉序列槽/下載下傳器/子產品 CH340T ISP下載下傳子產品 USB轉TTL
\材料準備好啦~ 下面可以開始幹了。
1.當材料中的硬體1、5到貨後,安裝好材料中的軟體3。就可以把你的電腦變成一個車載GPS啦。可以不上網就測出你的電腦所在的經度緯度時間等等~
詳細情況如下:
先将VK16E的TXD,RXD分别和USB轉序列槽的RXD,TXD連接配接。
然後給VK16E供4V左右電壓。
接着将USB轉序列槽插在電腦上,在裝置與管理器中找到com口号。
最後打開SiRFDemo軟體,選擇com口号,波特率。如圖:
點選 OK鍵,再點選下圖中圈出來的圖示,即可。
注意:測試過程中以陶瓷面朝上,而且必須在室外進行測試,否則無法出現需要的資料。
GPS擺放如圖:
2.調完VK16E與PC機通信後,就要開始更近一步,讓VK16E與單片機Arduino通信。步驟還是和以上一樣簡單的。
詳細情況如下:
由于軟體Arduino本來就有序列槽調試視窗,那麼我們現在做的事就是把VK16E傳輸給Arduino的資料解碼出來,提取對自己有用的一部分,因為後續
準備将GPS和四軸飛行器搭配起來,是以我在Arduino寫的程式中提取了時間,緯度,經度這三個資料,後期還會增加一個海拔高度資料,讓GPS能在一個
三維空間裡指揮四軸飛行器的移動。
話不多說,将VK16E的TXD連接配接到Arduino的RXD上(注:最好不要連接配接Arduino的TXD,因為發送資料給序列槽的時候容易混亂。)
char buff;
int count = 0 , i;
int vis = 0,vis_time = 0,vis_ang_N = 0,vis_ang_E = 0;
char h[3],m[3],s[3]; //time
char ang_N[5],ang_E[6];//latitude longitude height
char buff_before_1 = '~' ;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
if(Serial.available() > 0)
{
buff = Serial.read();
/******** DECIDE IS GPGGA? ********/
if(buff_before_1 == 'G' && buff == 'A')
vis = 1;
if(count == 12)
{
count == 0;
vis = 0;
vis_ang_N = 0;
vis_ang_E = 0;
i = 0;
}
/********* LAY IN DATA_2 ***********/
// Serial.print(buff); // OUTOPUT test
if(buff_before_1 != buff)
buff_before_1 = buff;
/********** COUNT FOR ',' **********/
if(vis == 1 && buff == ',')
{
count++;
}
/*********** GET DATA FROM SBUFF***********/
switch(count)
{
case 1 : if(vis_time == 0)
{
if(i == 1)
h[0] = buff;
if(i == 2)
h[1] = buff;
if(i == 3)
m[0] = buff;
if(i == 4)
m[1] = buff;
if(i == 5)
s[0] = buff;
if(i == 6)
s[1] = buff , i = -1 , vis_time = 1;
i++;
} break; //time
case 2 : if(vis_ang_N == 0)
{
if(i == 1)
ang_N[0] = buff;
if(i == 2)
ang_N[1] = buff;
if(i == 3)
ang_N[2] = buff;
if(i == 4)
ang_N[3] = buff , i = -1 , vis_ang_N = 1;
i++;
} break; //latitude N
case 4 : if(vis_ang_E == 0)
{
if(i == 1)
ang_E[0] = buff;
if(i == 2)
ang_E[1] = buff;
if(i == 3)
ang_E[2] = buff;
if(i == 4)
ang_E[3] = buff;
if(i == 5)
ang_E[4] = buff , i = -1 , vis_ang_E = 1;
i++;
} break; //longtitude E
default : break;
}
/*******************************************/
Serial.print("ang_N = "); Serial.println(ang_N);
Serial.print("ang_E = "); Serial.println(ang_E);
Serial.print("time = "); Serial.print(h); Serial.print(m);Serial.println(s);
}
}
打開序列槽調試序列槽 ,選擇9600波特率。按下Arduino上的複位鍵,即可在序列槽上看到自己想了解的資料了。
至此 ,簡單的GPS和單片機 GPS和PC機通信就完畢了。
-------- 部落客QQ:416815882