欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

Arduino板子开发 -- 使用GPS模块

程序员文章站 2022-03-04 15:13:09
本文介绍了在Arduino板子上使用现有的GPS模块,并对采集来的GPS标准语言NMEA信息进行提取加工,得到最终的位置信息。原材料:1、Arduino开发板及附件2、1575R-A GPS模块3、杜邦线若干如图:1. 1575R-A GPS模块简介1575R-A是众多GPS天线中的一种,其工作频率为1575.42MHz,阻抗50欧姆,材质为陶瓷,尺寸和具体参数如......

本文介绍了在Arduino板子上使用现有的GPS模块,并对采集来的GPS标准语言NMEA信息进行提取加工,得到最终的位置信息。


原材料:

1、Arduino开发板及附件

2、1575R-A GPS模块

3、杜邦线若干

如图:

Arduino板子开发 --  使用GPS模块


1. 1575R-A GPS模块简介

1575R-A是众多GPS天线中的一种,其工作频率为1575.42MHz,阻抗50欧姆,材质为陶瓷,尺寸和具体参数如图所示。

Arduino板子开发 --  使用GPS模块

该模块带有一个外部天线,并且内置EEPROM。

●    接口:RS232 TTL

●    电源:3V至5V

●    默认波特率:9600 bps

●    支持标准的NMEA

要了解如何在Raspberry Pi上使用GPS模块,您可以阅读以下链接:使用Raspberry Pi和GPS模块的位置变化的电子邮件报警系统

2、引脚接线

GPS模块有四个引脚:VCC、RX、TX和GND。该模块使用TX和RX引脚通过串行通信与Arduino开发板进行通信,接线简单:


Arduino板子开发 --  使用GPS模块

3、原理图及管脚定义

按照以下原理图将GPS模块连接到Arduino开发板。


Arduino板子开发 --  使用GPS模块

定义:

●    模块GND引脚连接到Arduino的GND引脚

●    模块RX引脚连接到Arduino引脚3

●    模块TX引脚连接到Arduino引脚4

●    模块VCC引脚连接到Arduino的5V引脚


4、程序代码

将以下代码复制到您的Arduino IDE并上传到Arduino开发板上。

/*
 * Rui Santos 
 * Complete Project Details http://randomnerdtutorials.com
 */
 
#include <SoftwareSerial.h>

// The serial connection to the GPS module
SoftwareSerial ss(4, 3);

void setup(){
  Serial.begin(9600);
  ss.begin(9600);
}

void loop(){
  while (ss.available() > 0){
    // get the byte data from the GPS
    byte gpsData = ss.read();
    Serial.write(gpsData);
  }
}

本示例假定您使用引脚4和3作为RX和TX串行引脚与GPS模块建立串行通信。如果您正在使用其他引脚,则应在编辑以下代码行:

SoftwareSerial ss(4,3);

此外,如果您的模块使用不同于9600 bps的默认波特率,则应修改以下行中的代码:

ss.begin(9600);

这个示例监听GPS串行端口,当从模块接收到数据时,它被发送到串行监视器。

while (ss.available() > 0){
  // get the byte data from the GPS
  byte gpsData = ss.read();
  Serial.write(gpsData);
}

使用波特率9600打开串行监视器。

Arduino板子开发 --  使用GPS模块

你应该得到一堆GPS标准语言NMEA的信息。串行监视器中的每一行都是NMEA语句。NMEA全称美国国家海洋电子协会(National Marine Electronics Association),在GPS领域,它是GPS制造商支持的标准数据格式。

5、了解NMEA

NMEA语句以$字符开头,每个数据字段用逗号分隔

$GPGGA,110617.00,41XX.XXXXX,N,00831.54761,W,1,05,2.68,129.0,M,50.1,M,,*42
$GPGSA,A,3,06,09,30,07,23,,,,,,,,4.43,2.68,3.53*02
$GPGSV,3,1,11,02,48,298,24,03,05,101,24,05,17,292,20,06,71,227,30*7C
$GPGSV,3,2,11,07,47,138,33,09,64,044,28,17,01,199,,19,13,214,*7C
$GPGSV,3,3,11,23,29,054,29,29,01,335,,30,29,167,33*4E
$GPGLL,41XX.XXXXX,N,00831.54761,W,110617.00,A,A*70
$GPRMC,110618.00,A,41XX.XXXXX,N,00831.54753,W,0.078,,030118,,,A*6A 
$GPVTG,,T,,M,0.043,N,0.080,K,A*2C

有NMEA句子的不同类型。消息的类型由第一个逗号前的字符指示。$之后的GP表示它是GPS位置。 $ GPGGA是基本的GPS NMEA消息,提供3D位置和准确性数据。在下面的句子中:

$ GPGGA,110617.00,41XX.XXXXX,N,00831.54761,W,1,05,2.68,129.0,男,50.1,M,* 42

110617 - 表示固定地点的时间,UTC时间11:06:17

41XX.XXXXX,N - 北纬41度XX.XXXXX'N

00831.54761,W - 经度008度31.54761'W

1 - 固定质量(0 =无效; 1 = GPS修正; 2 = DGPS修正; 3 = PPS修正; 4 =实时运动学; 5 =浮动RTK; 6 =估计(航位推测); 7 =手动输入模式; 8 =模拟模式)

05 - 正在跟踪的卫星数量

2.68 - 水平位置因子

129.0,M - 海拔高度,以米为单位

50.1,M - 大于WGS84椭球体的大地水准面(平均海平面)的高度

●    空字段  - 自上次DGPS更新以来的秒数

●    空字段 - DGPS台站ID号

* 42 - 校验和,数据总是以*开头

其他NMEA句子提供了其他的信息:

$ GPGSA - GPS DOP和主动卫星

$ GPGSV - 详细的GPS卫星信息

$ GPGLL - 地理纬度和经度

$ GPRMC - 基本的GPS pvt(位置、速度、时间)数据

$ GPVTG - 速度很好

要知道这些句子中每个数据字段的含义,可以在以下链接查阅NMEA数据:http://www.gpsinformation.org/dale/nmea.htm



【程序如果报 302 240 错误,解决办法】

问:这类错误是什么原因:error: stray '\302' in program?

答:此种错误,可能程序本身没有语法错误,应该是每一行的空格的编码不对,只需要将程序出错行前面的空格删掉,然后让程序再退回即可解决问题!

本文地址:https://blog.csdn.net/hhaowang/article/details/85926306