天天看点

基于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

继续阅读