天天看點

基于Arduino的GPS與單片機通信 GPS與PC機的通信轉載請注明出處:http://blog.csdn.net/lxk7280 使用到的主要材料:   

轉載請注明出處:http://blog.csdn.net/lxk7280

使用到的主要材料:   

               1.VK16E GMOUSE GPS模組 SIRF3晶片 陶瓷天線 TTL信号 9600波特率

基于Arduino的GPS與單片機通信 GPS與PC機的通信轉載請注明出處:http://blog.csdn.net/lxk7280 使用到的主要材料:   

 型号: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的GPS與單片機通信 GPS與PC機的通信轉載請注明出處:http://blog.csdn.net/lxk7280 使用到的主要材料:   

        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口号,波特率。如圖:

基于Arduino的GPS與單片機通信 GPS與PC機的通信轉載請注明出處:http://blog.csdn.net/lxk7280 使用到的主要材料:   

                     點選 OK鍵,再點選下圖中圈出來的圖示,即可。

基于Arduino的GPS與單片機通信 GPS與PC機的通信轉載請注明出處:http://blog.csdn.net/lxk7280 使用到的主要材料:   

                   注意:測試過程中以陶瓷面朝上,而且必須在室外進行測試,否則無法出現需要的資料。

                    GPS擺放如圖:

基于Arduino的GPS與單片機通信 GPS與PC機的通信轉載請注明出處:http://blog.csdn.net/lxk7280 使用到的主要材料:   

          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

繼續閱讀