转载请注明出处: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