GPS测井仪屏蔽挂钩指南

γ
贡献者: 金布隆
喜爱的 最喜欢的

介绍

这个亚博官网SparkFun GPS测井仪屏蔽为你的阿杜伊诺配备GPS模块,SD存储卡插座,其他所有外围设备都需要将Arduino转换为位置跟踪,速度监测,海拔观测奇迹记录仪。

GPS测井仪屏蔽

该屏蔽基于GP3906-TLP GPS模块–一个66通道的GPS接收机,具有MediaTek MT3339架构和高达10Hz的更新速率。GPS模块将通过一个简单的流程进行恒定的位置更新串行UART,然后可以登录到SD卡和/或用于其他位置或时间跟踪目的。

屏蔽上的所有东西都是高度可配置的:开关允许您在硬件或软件端口之间选择GPS模块的UART接口,SD卡通过硬件SPI端口操作,它应该与大多数Arduino布局兼容,额外的原型空间应该允许您最后添加这些内容,完成项目所需的组件很少。亚博官网

本教程涵盖

本教程旨在记录所有与GPS测井仪屏蔽相关的东西,包括启动和运行所需的硬件和软件。它分为以下几个部分:

  • 硬件概述–示意图的概述,布局,以及SparkFun GPS测井仪屏蔽的亚博官网特性。
  • 硬件设置–安装GPS记录器屏蔽以最佳匹配您的项目需要的提示。亚博官网
  • 示例Arduino草图
    • GPS系列通行证–一个简单的草图,您可以用来验证您的GPS记录器屏蔽的功能,并了解GP3906 GPS模块产生的数据类型。
    • TinyGPS++串行流–使用TinyGPS++Arduino库将GPS模块的NMEA字符串解析为纬度,经度,海拔高度,速度,还有更多。
    • SD卡GPS测井-最后,我们将把解析的GPS数据插入CSV文件中,并将其保存到SD卡中。

建议材料

有几个额外的组件,你需要让GPS日志屏蔽完全启动和运行:

最重要的是,你需要一个Arduino或兼容Arduino的开发板.GPS的系列和SD SPI端口应该与几乎所有Arduino大小的开发板兼容。包括经典作品,像微控制器亚博官网SparkFun红板,和更新的型号,像阿杜伊诺·莱昂纳多,,Genuino 101,和亚博官网SparkFun SAMD21开发突破.

Arduino Uno-R3

Arduino Uno-R3

DEV-1021
24.95美元
一百二十
亚博官网SparkFun SAMD21开发突破

亚博官网SparkFun SAMD21开发突破

DEV-13672
25.95美元
头球得分的莱昂纳多

头球得分的莱昂纳多

DEV-112866
24.95美元

亚博官网SparkFun红板-用Arduino编程

DEV-1277
一百二十七 退休了

我们也极力推荐12mm硬币电池,它安装在GPS屏蔽的电池支架上。GP3906 GPS模块需要在其电池电源输入端设置某种电压。如果你没有电池,确保你阅读了VBAT截面对硬件的详细概述。

硬币电池-12毫米(CR1225)

硬币电池-12毫米(CR1225)

PRT-0337
1.95美元

您还需要焊接一些焊头进入盾牌,在它和阿尔多伊诺之间建立牢固的机械和电气连接。我们建议Arduino R3可堆叠头包,而是一套男性头也可能适合你的需要。

突破头球-直球

突破头球-直球

PRT-0116
1.50美元
二十
女性头

女性头

PRT-0115
1.50美元
Arduino堆栈头套件-R3

Arduino堆栈头套件-R3

PRT-11417
1.50美元
十二

带适配器的MicroSD卡-8GB

COM11609
退休了

最后,如果您打算将GPS数据记录到SD卡上,你可能想抓一个SD卡和SD适配器.Arduino SD库应该支持大多数用FAT16或FAT32亚博国际官网文件系统格式化的SD卡。

建议阅读

这是一个初级教程-GPS日志屏蔽是一个初学者友好的产品-但有几个概念,你应该舒适,然后再继续。如果这些话题听起来不熟悉,在继续之前考虑阅读这些教程。

  • GPS基础–本教程是关于GPS奇迹的一个很好的入门。亚博在线娱乐官网了解如何通过收听(至少)四颗卫星发送时间戳和空中位置来找到我们在地球上的位置。
  • 串行通信–GP3906通过一个简单的,串行UART。本教程将使您熟悉与系列相关的概念,如RX,TX波特率。
  • 如何焊接:通孔焊接-如果你以前从未焊接过,现在是开始的好时机,这是一个值得学习的很好的教程。亚博在线娱乐官网
  • 安装Arduino库–我们将使用一对出色的Arduino库将GPS数据记录到SD卡上。

如何焊接:通孔焊接

本教程涵盖了所有你需要知道的通孔焊接。

串行通信

异步串行通信概念:分组,信号电平,波特率,UART和更多!!

GPS基础

全球定位系统(GPS)是一个工程奇迹,我们都可以以相对低的成本和没有订阅费访问。用正确的硬件和最小的努力,你几乎可以在全球任何地方确定你的位置和时间。

安装Arduino库

如何安装自定义Arduino库?这很容易!本教程将介绍如何使用Arduino Library Manager安装Arduino库。对于没有与Arduino IDE链接的库,我们还将手动安装Arduino库。

硬件概述

为了快速概述GPS测井仪屏蔽的组件和特点,参照下面的图像:

带注释的GPS屏蔽图像

本节的其余部分将深入到屏蔽的一些更关键的组件,包括电源要求和UART和SPI接口配置。

为GPS测井仪屏蔽装置供电

GPS Logger Shield的主电压源取自阿杜诺5V头销。这个电压被调节到3.3V,它被提供给GPS模块和SD卡。

这两个组分的平均消耗量应该在30mA左右,但它们可能偶尔会达到100mA以上。

逻辑电平移位

该屏蔽包括TXB0108 8 8通道电平移相器,它使Arduino和3.3VGPSUART和SDSPI信号之间的电压电平发生变化。不管你的Arduino是5V还是3.3V,你不必担心自己在两个组件之间转换电压。

Arduino侧逻辑电平电压由IORF引脚,大多数Arduino开发板连接到5V或3.3V。

_如果你的Arduino板没有IOREF引脚,或者如果在该引脚上没有提供电压,您将需要手动设置IOREF电压。该防护罩包括位于板背面的跳线,标记IORF-SEL,你可以用它来设置IOREF电压为3.3V或5V。

如果你的Arduino板没有IOREF引脚,设置此跳线以匹配所需的逻辑级别。

GP3906电池电源(VBAT)

GP3906很棒,小模块,但它有一个,大怪癖:A电源电压要求在2.0-4.3V之间。在VBAT引脚上。如果你有12mm硬币电池,提供该电压与将其推入电池插座一样容易。当你插入电池时,确保你把它插进去+侧向上.

将电池插入GPS屏蔽

如果你手边没有电池,有几种解决办法。你可以拿烙铁,和缩短3V3蝙蝠跳投,在电池插座旁边。

蝙蝠/3V3跳投闭合

如果你没有12毫米电池,缩短3V3/蝙蝠跳投将至少保持您的GPS模块功能。

或者你可以用电线把断线连接起来VBAT引脚对于2.0-4.3V之间的任何电压源。

_VBAT电源要求:GP3906需要在其VBAT管脚上提供某种形式的电压源,是否是真正的电池,或者只是3.3V调节器的输出。如果你的GPS LED没有闪烁(或照明)时,至少是屏蔽上电,这可能表示缺乏对VBAT端口(或死电池)的供应。

为GP3906提供备用电池供应确保其实时时钟(RTC)将继续滴答作响,即使董事会的其他成员断电。这允许模块在最初启动时更快地修复GPS。它不会消耗很多电力——我们已经测量了5-6安培左右,-所以12mm硬币电池可以保持电池板跑步“(在睡眠模式)大约一年。

全球定位系统插针断裂

大部分GPS输入,输出,电源插脚连接到某物在GPS测井仪屏蔽上,但它们也都被突破到这个8针的头部。

GPS定位针突出显示

以下是每个引脚及其功能的快速概述:

针标签 进/出 板式连接 引脚描述
GND 地面 GPS模块地面(0V参考)
聚苯硫醚 1脉冲/秒时间基准
有源高芯片启用-拉低复位或关闭
RX 阿杜诺TX/D9 串行数据输入
德克萨斯州 阿杜诺RX/D8 串行数据输出
固定 GPS固定LED GPS定位指示器-在定位前闪烁,一旦修复有效
VBAT 12mm硬币电池插座 备用电源-保持RTC运行(2.0-4.3V输入范围)
3V3 车载3.3V稳压器 3.3V电源输入

这个聚苯硫醚销子没有连接。如果您需要每秒脉冲信号,您可以将它们连接到任何Arduino引脚,或者对GPS模块的操作进行额外的控制。

选择串行端口

GPS模块通过一个简单的,UART(串行)接口。这个UART选择开关允许您在Arduino的硬件UART之间切换该接口——在引脚D0和D1上——或者软件储备插销D8和D9上的端口。

UART选择开关

如果你需要推荐信,该表显示了GPS模块与Arduino UART(s)之间的映射:

GPS定位销 Arduino软件UART引脚 Arduino硬件UART引脚
RX 1(TX)
德克萨斯州 0(RX)

如果您使用的是Arduino Uno或任何开发板,预占硬件UART,您可能被迫使用软件串行端口。幸运的是,GPS模块的波特率默认为慢,稳定的9600个BPS,哪个SoftwareSerial应该没有问题处理。

如果需要移动软件串口引脚,它们可以通过切割焊料在引脚GPS-RX和D8和/或GPS-TX和D9之间。

软件UART选择跳线

一旦那些毛衣被剪掉,您可以将GPS-RX和GPS-TX管脚连接到您喜欢的任何其他管脚。

SDSPI引脚的选择

在老的阿杜伊诺董事会上,找到SPI端口非常简单——它位于引脚10-13上,映射到CS,莫西味噌,和SCLK。在Arduino董事会最近的发布中,然而,这些销子很可能在上面找到。只有6针,2x3 SPI报头。GPS记录器屏蔽将SDSPI引脚映射到这两个报头,为了支持尽可能多的开发委亚博国际官网员会。

三路焊料跳线可用于修改哪些Arduino引脚被路由到SD卡的SPI I/O。

SPI选择跳线

这些跳线的中间垫将信号传送到/来自SD卡。朝向板内部的垫子将信号传送到SPI报头,并且朝向外部的垫子将信号传送到引脚10-13。

将SPI映射到引脚10-13的板包括Arduino Uno,RedBoard阿杜伊诺以及大多数基于ATmega328P的板。如果你使用这些板中的任何一个,不去碰毛衣应该是安全的(因为它们也是,可能的,在阿尔多伊诺河上一起缩短)。

董事会只有将SPI映射到2x3SPI头包括Arduino Leonardo(和其他大多数基于ATmega32U4的电路板),阿杜伊诺,以及Arduino Zero(以及大多数基于ATSAMD21的板)。在这些板上,你需要切掉连接中间焊盘和D11-的焊料,D12-,和D13侧垫。连接到引脚D10的SD_CS可以在任何引脚上定义,因此不必对其进行修改。

请查看下面的**SDSPI跳转器**的更多信息。

电源和GPS固定状态LED

这对LED在角落的屏蔽是一个方便的工具,为初始的故障排除。这个红色压水堆LED连接到屏蔽的板上3.3V调节器的输出。如果盾牌获得动力,这个LED应该亮着。

这个蓝色GPS定位LED连接GP3906的“3DYFIX”引脚。它可以用来识别GPS模块是否具有适当的固定。当你开始给护盾加电时,LED应该闪烁——表明它正在试图找到解决办法。一旦LED稳固地打开,您可以放心,您的GPS模块有一个良好的固定在您的位置。

3D固定针操作

GP3906的3D_Fix引脚操作。当GPS定位有效时,LED将打开,以及以Hz闪烁。

这两个LED都有焊锡跳线下面,如果您发现需要禁用它们中的任何一个。在焊盘之间快速切片就是将它们从电路中移除所需要的全部。如果您在低功耗应用程序中使用GPS Logger Shield,这可能很有用,其中LED所消耗的几毫安也意味着项目电池寿命将缩短几个月。亚博官网

硬件设置

GPS测井仪屏蔽罩的组装主要归结为焊接。某物对所有6个人,8,和10针阿杜伊诺头。我们通常推荐Arduino R3堆栈头为了这份工作,但是男性头可以工作-只要这是顶板在屏蔽堆栈。

焊接在屏蔽层中的可堆叠的头部

如果应用程序需要使用6针,2x3 SPI报头,您可能还需要焊接女性头指向那些针(确保它们指向下,并且很容易插入你的阿杜伊诺的男性SPI引脚)。

如果你以前从未焊接过阿杜伊诺盾牌,看看我们的Arduino盾牌装配教程一些提示。

飞行前检查单

在你开始GPS屏蔽之前,确保您最后一次重新检查这些常见的陷阱:

电池(VBAT)电源

确保你有一个可靠的电源供应GPS模块的VBAT引脚。如果你有光泽,新的12mm硬币电池插上电源,那太完美了。否则,确保你缩短了3.3V/VBAT的跳线,或者正在向GPS模块的VBAT突破。

插入电池

选择UART

确保UART选择开关指向您首选的UART。如果您使用的是联合国组织,Redboard或任何其他基于ATmega328P的Arduino,您很可能需要将开关指向SW-UART,假设硬件UART用于编程和串行调试。

如果您使用的是基于ATmega328的Arduino,不管你的草图最后是什么,, 在任何编程上传期间,开关必须处于SW-UART位置.

如果您使用的是利奥纳多(基于ATmega32U4的电路板),,(基于ATSAMD21的板),或者任何其他在引脚0/1上具有专用和免费硬件UART的Arduino,我们建议把开关留在HW-UART位置。

SDSPI跳跃器

计划将数据记录到SD卡上?确保相应地设置了SPI跳线。如果您使用的是Uno,Redboard或任何其他基于ATmega328P的Arduino,你也许可以不去碰跳线。SPI应该被分解为二者都管脚10-13和SPI标头。

如果您使用的是利奥纳多(基于ATmega32U4的电路板),,(基于ATSAMD21的板),或者任何其他不破坏到引脚10-13的SPI信号的Arduino,你会想要剪掉三个SPI选择跳线在中间垫和D11-D13销之间。这将释放这些引脚用于项目中的其他目的。亚博官网连接到引脚D10的SD_CS可以在任何引脚上定义,因此不必对其进行修改。

为达芬奇设计的SPI套衫

仔细看,您将看到在中间垫和D11之间的所有三条SPI线上切割的痕迹,D12,和D13。这样就把SD线从这些管脚上断开了——让它们连接到SPI头上。

如果您依赖于来自2x3引脚ICSP头部的SPI端口,别忘了把头焊到SPI端口!!

其他微控制器的软件系列与SPI

软件系列

演示代码最初是为Arduino Uno上的ATmega328P设计的。如果你在ATmega2560上使用它。Arduino Mega 2560)或ATmega 32U4(即。阿杜伊诺·莱昂纳多,Pro Micro 5V/16MHz,Pro Micro 3.3V/8Mhz,FIVO3等)您需要重新配置软件串行引脚定义并调整连接。并非所有引脚都支持根据使用什么Arduin亚博国际官网o微控制器对串行Rx引脚进行更改中断。您将需要重新定义管脚定义并重新路由连接。

有关限制的更多信息,试着查看软件系列库的Ardino参考语言。

Arduino软件系列库

软件系列引脚的重新定义

使用Arduino Mega 2560上的GPS记录器屏蔽,您只需要调整代码中的软件串行引脚定义,其中它表示:

语言:cdefine ARDUINO_GPS_RX 9//Arduino RX引脚连接到GPS TXdefine ARDUINO_GPS_TX 8//Arduino TX引脚连接到GPS RX

让我们通过使用模拟引脚A9和A8来改变软件串行引脚,分别。

语言:cdefine ARDUINO_GPS_RX A9//Arduino RX引脚连接到GPS TXdefine ARDUINO_GPS_TX A8//Arduino TX引脚连接到GPS RX

软件串行引脚的重新路由

一旦您调整了代码,确保重新连接线路。使用嗜好刀.在痕迹的上方有一个红色的焊料掩模,因此确保痕迹被完全切割。

软件UART选择跳线

一旦痕迹被切断,焊接头销或导线到电镀的通孔。便于在不同的开发板之间切换,添加了女性标题。

增加到软件系列和SPI引脚中的女性头部

一旦焊接,二男女跳线添加至最接近GPS-Rx和GPS-Tx的通孔销。通过重新布线的连接,GPS-Tx重新路由到引脚A9,GPS-Rx重新路由到引脚A8。虽然没有必要,通过数据日志记录示例,添加黄色跳线以方便地将SPI的CS管脚重新路由到另一个I/O。

用跳线重新路由的软件串行引脚

SPI

演示代码最初是为Arduino Uno上的ATmega328P设计的。如果使用CSV_Logger_TinyGPSPlus.ino日志记录示例。就像软件系列一样,您需要重新路由连接。

有关限制的更多信息,尝试查看SPI库的参考语言。

Arduino SPI库

SPI引脚的重新路由

为了在阿尔多伊诺巨型2560上使用GPS测井仪屏蔽,您只需要重新路由SPI引脚。使用爱好刀,为MOSI在中心焊盘和右焊盘之间切割轨迹,味噌,和SCK。

为达芬奇设计的SPI套衫

仔细看,您将看到在中间垫和D11之间的所有三条SPI线上切割的痕迹,D12,和D13。这样就把SD线从这些管脚上断开了——让它们连接到SPI头上。

一旦切割,您可以选择焊接一个2x3母头或两个1x3堆叠头到ICSP引脚。

可堆叠的头部-3销(女性,零点一

可堆叠的头部-3销(女性,0.1“)

PRT-13875
0.50美元
头部-2x3(女性,零点一

头部-2x3(女性,0.1“)

PRT-13010
0.50美元

确保焊料从顶部的屏蔽,使女性头部引脚面对阿杜伊诺的ICSP引脚。

面向Arduino雄性ICSP引脚焊接的ICSP引脚

一旦头被焊接,将它堆放在Arduino Mega 2560上,并重新路由软件串行引脚。CS引脚可以被切割并重新路由到微控制器上的另一个引脚。然而,引脚10上的默认跟踪仍然有效。

用跳线重新路由的软件串行引脚

示例草图:GPS系列通道

现在你的硬件都安装好了,我们有三个示例代码,让您体验一下GPS Logger Shield的功能。第一个例子没有那么有用,但它会,至少,确保一切正常。此外,它会显示你原始的丑陋NMEA GPS字符串让你欣赏伟大的图书馆电子眼甚至更多。

这个示例不需要任何额外的库。只需将屏蔽插入Arduino并上传示例代码。我们有几个例子,取决于您使用的是哪个Arduino和/或串行端口。

注:本示例假设您正在桌面上使用Arduino IDE的最新版本。如果这是你第一次使用Arduino,请阅读我们的教程安装Arduino IDE。

如果您以前没有安装Arduino库,请检查我们的 安装指南。

SoftwareSerial端口示例

如果你使用的是Arduino Uno,Redboard任何其他基于ATmega328P的Arduino,并在SW-UART位置,将这段示例代码上传到Arduino:

语言:c/****************************************************************************Basic_Passth._Software.inoBasic软件系列GPSPassthroughbyJimLindblom@SparkFunElectronics2月9日,亚博官网2016https://github.com/亚博官网spark./GPS_Shield这个示例使用SoftwareSerial与GPS模块插脚8和9通信。SoftwareSerial应该在大多数Arduinos上工作,但这是阿杜伊诺·尤诺的必备节目,RedBoard和其他基于Aduino的ATmega328P。打开串行监视器,设置为9600波特,看着GPS模块的NMEA字符串开始流过。参考资料:SoftwareSerial Library(包括Arduino)开发/硬件环境细节:Arduino IDE 1.6.7GPSLogger Shield v2.0-确保UART开关设置为SW-UARTArduino Uno,RedBoard赞成的意见,等人****************************************************************************************/**包括
           
            //包括软件系列库#定义ARDUINO_GPS_GPS_RX 9//定义ARDUINO_GPS_RX 9//连接到GPS TX#定义ARDUINO_GPS_GPS_GPS_TX 8#定义ARDUINO_GPS_GPS_TX 8\#定义ARDUinoTXTX引脚连接到GPS RX\#定义GPS_GPS_BAUD_GPS_GPS_BAUD_GPS_BAUD_BAUD_RATE_RATE 9600///GPS屏蔽模块默认为9600波特//GPS屏蔽模块默认为9600baud///创建软件系列对象,该软件系列对象称为gps gps:创建软件系列gps对象gps:软件系列gpsARDUINO_GPS_RX;//我们还将为串行监视器端口定义更具描述性的名称。//这是引脚0/1上的硬件串行端口。#define SerialMonitor Serialvoid setup(){gpsPort.begin(GPS_BAUD_RATE);SerialMonitor.start(9600);}void.(){if(gpsPort..())//如果GPS数据可用,SerialMonitor.write(gpsPort.read());//如果(SerialMonitor..())//如果SerialMonitor数据可用,则读取并打印到SerialMonitor gpsPort.write(SerialMonitor.read());//阅读并发送到GPS}
           

将上面的代码复制并粘贴到Arduino IDE中。您还可以从我们的GitHub存储库下载所有示例草图。

下载GPS屏蔽示例

此示例使用软件储备与GPS模块通信的库,并留下硬件串口与串行监控器一起调试。

硬件串行端口示例

如果你用的是阿杜伊诺·莱昂纳多,阿杜伊诺,阿杜诺零或者任何其他具有0/1引脚上的免费UART的Arduino,将UART选择开关设置为HW-UART,以及上传此示例:

语言:c/****************************************************************************Basic_Passth._Hardware.inoBasic硬件系列GPSPassthroughbyJimLindblom@SparkFunElectronics2月9日,亚博官网2016https://github.com/亚博官网spark./GPS_Shield这个示例使用Arduino的硬件串行端口(在引脚0和1上)与GPS模块通信。硬件串行应工作在任何阿杜伊诺与免费的硬件串行UART引脚0/1。包括阿杜伊诺·莱昂纳多,零点,到期以及Sp亚博官网arkFun的SAMD21开发板。打开串行监视器,设置为9600波特,看着GPS模块的NMEA字符串开始流过。看看你能否辨别出纬度和经度。开发/硬件环境细节:Arduino IDE 1.6.7GPS Logger Shield v2.0-确保UART开关设置为HW-UARTArduino Leonardo,阿杜诺零阿杜伊诺,亚博官网SparkFun SAMD21开发板,etc******************************************************************************/#definitionGPS_BAUD_RATE 9600//GPS屏蔽模块默认为9600波特//定义串行监控端口。在Leonardo上,这是“Serial”//但是在其他板上,这可能是“SerialUSB”#define SerialMonitor Serial//例如。Arduino Leonardo//在引脚0/1上定义harware串行端口。在Leonardo上,这是“Serial1”//但是在其他板上,这可能是“Serial”#define gpsPort Serial1//例如。Arduino Leonardo//参见https://www.arduino.cc/en/Reference/Serial,了解在上面的定义.void setup(){SerialMonitor.begin(9600)中应该使用哪些Serial端口//Serial;//在9600波特gpsPort.start(GPS_BAUD_RATE)初始化串行监控端口;//GPS模块的默认波特是9600}void.(){if(gpsPort..())//如果GPS数据可用,SerialMonitor.write(gpsPort.read());//如果数据被发送到串行监视器gpsPort.write(SerialMonitor.read()),则将其发送到串行监视器;//发送到GPS模块}

可以必须更改串行端口的任一个或两个γ定义在代码的顶部。请参考开发板的数据表或产品信息页面,以获得更多关于哪个串口是哪个串口的信息。

使用串行Passthrough草图

一旦你上传了草图,打开你的串行监视器并将波特率设置为9600。您应该立即开始看到GPS NMEA数据开始以1Hz的速度流动。

例如,一组字符串可能看起来像:

GPRMC235316,A4003.9040,n10512.5792,W0.09,144.75,141112,,* 19美元GPGGA,235317,4003.9039,n10512.5793,W1,08,1.6,1577.9,M- 20.7,M,0000×5F$GPGSA,A三,22,18,21,06,03,09,24,15,,,,,2.5,1.6,1.9×3e

如果在串行监视器中没有看到任何内容,确保UART选择开关处于正确的位置。还要仔细检查蓝色”GPS定位LED至少是闪烁的。如果不是,模块可能不接收功率。别忘了提供VBAT!!

如果你仍然没有运气,和我们联系技术支持小组亚博国际官网.


NMEA弦是几乎所有GPS接收机产生的标准消息格式。他们可以传递各种信息,包括时间,纬度,经度,海拔高度,以及可见卫星的数量,但是除非你是一个速度非常快的解析器,这些句子几乎毫无意义。幸运的是,阿杜伊诺人可以读出这些字符串,为您解析它们,并且为您提供更多人类可读的数据。

示例草图:TinyGPS串行流

我们最喜欢的几个GPS解析Arduino库包括电子眼TinyGPS +.这些库简化了解析过多的NMEA字符串的任务,只留下我们关心的少量数据。

您将需要在Arduino IDE中安装库。访问上面的链接下载它们。参考我们安装Arduino库关于您可能需要的其他库安装帮助的教程。

TinyGPS++示例

这里有一个简单的例子,它使用TinyGPS++库来解析NMEA字符串的位置,海拔高度,时间,和日期。将下面的代码复制并传递到Arduino IDE中,然后上传到您的板上。

语言:c/********************************************************************************************************TinyGPSPlus_GPS_Shield.ino TinyGPS++库示例,用于Sp亚博官网arkFun GPS测井仪屏蔽。2016 https://github.com/s亚博官网park./GPS_Shield本例使用SoftwareSerial与引脚8和9上的GPS模块通信。它使用TinyGPS++库来解析GPS模块发送的NMEA字符串,并将有趣的GPS信息打印到串行监视器。上传代码后,打开串行监视器,设置为9600波特,注意纬度,经度,海拔高度,课程,速度,日期,时间,以及可见卫星的数量。参考资料:TinyGPS++Library-https://github.com/mikalhart/TinyGPSPlus/releases.SoftwareSerial Library开发/硬件环境细节:Arduino IDE 1.6.7 GPS Logger Shield v2.0-确保UART开关设置为SW-UART Arduino Uno,RedBoard赞成的意见,等人****************************************************************************************/**包括
           
            //包括TinyGPS++库TinyGPSPlustinyGPS;//创建一个TinyGPSPlus对象#define GPS_BAUD 9600//GPS模块波特率。GP3906默认为9600.//如果您使用的是Arduino Uno,RedBoard或使用//0/1UART进行编程/串行监视的任何板,使用SoftwareSerial:#include
            
             #definitionARDUINO_GPS_RX 9//GPS TX,Arduino RX引脚#.ARDUINO_GPS_TX 8//GPS RX,Arduino TX pinSoftwareSerial ssGPS(ARDUINO_GPS_TX,ARDUINO_GPS_RX;//如果使用SoftwareSerial,则创建一个SoftwareSerial//Set gpsPort到ssGPS,如果使用带有专用硬件串行端口的//Arduinodefine gpsPort ssGPS//或者,在Leonardo//Define串行监视器端口上使用Serial1。论联合国教科文组织,Leonardo这是“Serial”//在其他板上,这可能是“SerialUSB”#define SerialMonitor Serialvoid setup(){SerialMonitor.start(9600);开始(GPS_BAUD);}空循环(){//打印位置,海拔高度,速度,时间/日期,以及卫星:printGPSInfo();/智能延迟在Arduino没有做任何其它智能延迟时,查找GPS数据(1000);}printGPSInfo(){//Printlati.,经度,英尺高度,课程,速度,日期,时间,//和可见卫星的数量。SerialMonitor.print("Lat:;SerialMonitor.println(tinyGPS.location.lat(),6);SerialMonitor.print("长:;SerialMonitor.println(tinyGPS.location.lng(),6);SerialMonitor.print("ALT:;SerialMonitor.println(tinyGPS....foot());SerialMonitor.print("课程:;SerialMonitor.println(tinyGPS...deg());SerialMonitor.print("速度:;SerialMonitor.println(tinyGPS...mph());SerialMonitor.print("日期:;PrimDATE();SerialMonitor.print("时间:;PrimtTimes();SerialMonitor.print("SATS:;SerialMonitor.println(tinyGPS..llites.value());SerialMonitor.println();}//这个自定义版本的.()确保tinyGPS对象//是美联储.从TinyGPS++示例.static void smartDelay(无符号长ms){无符号长start=.s();做{//如果数据已经从GPS模块传入,而(gpsPort..())tinyGPS.encode(gpsPort.read());//发送到编码函数//tinyGPS.encode(char)继续负载“带有来自GPS模块的新//数据的tinGPS对象。当完整的NMEA字符串开始进入//时,tinyGPS库将能够开始解析它们以获得相关的信息},同时(.s()-start<ms);}//printDate()将日期格式化为dd/mm/yy.void printDate(){SerialMonitor.print(tinyGPS.date.day());SerialMonitor.print("/;SerialMonitor.print(tinyGPS.date..());SerialMonitor.print("/;SerialMonitor.println(tinyGPS.date..());}//printTime()将时间格式化为HH:mm:SS,并打印前导0s//调用它们的位置.void printTime(){SerialMonitor.print(tinyGPS.time..());SerialMonitor.print(":;如果(tinyGPS.time.minute()<10)SerialMonitor.print('0');SerialMonitor.print(tinyGPS.time.minute());SerialMonitor.print(":;如果(tinyGPS.time..()<10)SerialMonitor.print('0');SerialMonitor.println(tinyGPS.time..());}
            
           

您可能需要调整GPCASPY串行监视器在草图的顶部附近定义。事实上,草图设置为使用SoftwareSerial端口。

上传代码后,打开串行监视器,通过它监视解析的GPS数据流。

如果你的模块没有好的GPS定位,您可能会看到许多“0”流;时间应该在增加,虽然这是不正确的(除非你在午夜的时候把Arduino插上!))

如果你能找到把电脑和阿尔迪诺设备带到外面的方法,那将是你最好的补救办法。否则,试着把它放在开着的窗户附近。天空的景色越好,它最好能找到它需要的四颗卫星。

成功的,固定的GPS流看起来是这样的:

Lat: 40.090422.: -105.184534Alt: 5243.77Coures: 295.56Speed: 0.01Date: 26/1/2016Time: 20:19:34Sats: 6

有关使用TinyGPS++库的更多信息,退房亚博官网项目主页.

示例草图:SD卡GPS记录

现在我们有了良好的GPS数据,最后一步是开始将其记录到SD卡上。

就像最后一个例子,这个草图用TinyGPS +,它还使用Arduino的内置SD库.

将下面的代码上传到Arduino。

语言:c/************************************************************************************************************CSV_Logger_TinyGPSPlus.ino将GPS数据记录到uSD卡上的CSV文件中亚博官网2016 https://github.com/s亚博官网park./GPS_Shield本示例使用SoftwareSerial与引脚8和9上的GPS模块通信,然后通过SPI进行通信,将数据记录到uSD卡。它使用TinyGPS++库来解析GPS模块发送的NMEA字符串,并将有趣的GPS信息(逗号分隔)打印到SD卡上新创建的文件中。资源:TinyGPS++Library-https://github.com/mikalhart/TinyGPSPlus/releases SD Library(内置).SoftwareSerial Library(内置).开发/硬件环境细节:Arduino IDE 1.6.7 GPS Logger Shield v2.0-确保UART开关设置为SW-UART Arduino Uno,RedBoard赞成的意见,等人****************************************************************************************/**包括
           
            包括:
            
             包括:
             
              #define ARDUINO_USD_CS 10//uSD卡CS pin(SparkFun GPS Logge亚博官网r Shield上的引脚10)/////////////////////////////////日志文件定义////////////////////////////////请记住,SD库的最大文件名长度为8.3-8个字符前缀,//和3个字符后缀.//我们的日志文件被调用GPSLogX.CSV,所以“GPSLog99是我们的最大文件。#define LOG_FILE_PREFIX”“GPSLO”//日志文件的名称。define MAX_LOG_FILES 100//可以创建的日志文件的数量define LOG_FILE_SUFFIX”“CSV”//日志filechar logFileName[13]的后缀;//Char字符串,用于存储要记录的日志文件名//数据:#define LOG_COLUMN_COUNT 8char*log_col_.[LOG_COLUMN_COUNT]={"经度,““纬度”,“海拔高度,“速度“,“课程“,““日期”,““时间”,““卫星”};//log_col_names打印在文件的顶部。///////////////////////////////////日志速率控制////////////////////////define LOG_RATE 5000//Log,每5秒日志签名一次long lastLog=0;//Global var,以保持我们上次登录/////////////////////////////////////TinyGPS定义///////////////////TinyGPSPlus tinyGPS;//tinyGPSPlus对象将贯穿#definitionGPS_BAUD 9600//GPS模块的默认波特率/////////////////////////////////////////GPS串行端口定义//////////////////////////如果您使用的是Arduino Uno,RedBoard或使用//0/1UART进行编程/串行监视的任何板,使用SoftwareSerial:#include
              
               #definitionARDUINO_GPS_RX 9//GPS TX,Arduino RX引脚#.ARDUINO_GPS_TX 8//GPS RX,Arduino TX pinSoftwareSerial ssGPS(ARDUINO_GPS_TX,ARDUINO_GPS_RX;//如果使用SoftwareSerial,则创建一个SoftwareSerial//Set gpsPort到ssGPS,如果使用带有专用硬件串行端口的//Arduinodefine gpsPort ssGPS//或者,在Leonardo//Define串行监视器端口上使用Serial1。论联合国教科文组织,Leonardo这是“Serial”//在其他板上,这可能是“SerialUSB”#define SerialMonitor Serialvoid setup(){SerialMonitor.start(9600);开始(GPS_BAUD);SerialMonitor.println("设置SD卡。”;//查看卡是否存在并且可以被初始化:if(!开始(ARDUINO_USD_CS)){SerialMonitor.println("初始化SD卡出错。”;}updateFileName();//每次我们开始,创建一个新文件,增加printHeader()的数目;//在新文件的顶部打印一个标题}void.(){if((lastLog+LOG_RATE)<=.s()){//如果自上次日志以来它是LOG_RATE毫秒:if(tinyGPS.location.isUpdate())//如果GPS数据无效{if(logGPSData())//Log GPS数据{SerialMonitor println("GPS记录。;//打印调试消息lastLog=.s();//更新lastLog变量}.//如果我们未能记录GPS{//打印错误,不要更新lastLog SerialMonitor.println("未能记录新的GPS数据。”;}.//如果GPS数据无效{//打印调试消息。也许我们还没有足够的卫星。SerialMonitor.print("没有GPS数据。SATS:;SerialMonitor.println(tinyGPS..llites.value());}}//如果我们没有进行日志记录,继续“饲料tinyGPS对象:.(gpsPort..())tinyGPS.encode(gpsPort.read());}字节logGPSData(){File logFile=SD.open(logFileName,文件写入;//打开日志文件,如果(logFile){//打印经度,纬度,海拔(英尺),速度(每小时)课程//学位,日期,时间,以及卫星数量。print(tinyGPS.location.lng(),6);print(',“”;print(tinyGPS.location.lat(),6);print(',“”;logFile.print(tinyGPS....feet(),1);print(',“”;print(tinyGPS...mph(),1);print(',“”;logFile.print(tinyGPS...deg(),1);print(',“”;print(tinyGPS.date.value());print(',“”;print(tinyGPS.time.value());print(',“”;logFile.print(tinyGPS..llites.value());logFile.println();close();返回1;//返回成功}返回0;//如果我们打开文件失败,返回fail}//printHeader()-将八个列名打印到日志filevoid printHeader(){File logFile=SD.open(logFileName,文件写入;//如果日志文件打开,则打开日志文件,将列名打印到文件{int i=0;为(;i<LOG_COLUMN_COUNT;i++) {logFile.print(log_col_.[i]);if(i<LOG_COLUMN_COUNT-1)//如果它不是最后一列,“”;//打印逗号.//如果是最后一列logFile.println();//打印新行}logFile.close();//关闭文件}//updateFileName()——查看卡上已经存在的日志文件,//并创建一个具有递增文件index.void updateFileName(){int i=0的新文件;为(;i<MAX_LOG_FILES;i++) {memset(logFileName,0,strlen(logFileName));//Clear logFileName字符串//Set logFileName to"“GPSLogX.CSV”: sprintf(logFileName,“%s%d%s,LOG_FILE_PREFIX,我,LOG_FILE_SUFFIX;如果(!)如果文件不存在{break;//打破这个循环。我们发现了索引}.//.rwise:{SerialMonitor.print(logFileName);SerialMonitor.println("存在;//打印调试语句}}}SerialMonitor.print("文件名:;println(logFileName);//调试打印文件名}
              
             
            
           

您可能需要编辑GPCASPY串行监视器物体,在代码的顶部,让示例正确地处理Arduino。该草图默认使用SoftwareSerial作为GPS,只要UART-Select开关移向SW-UART,它应该适用于大多数板。

在上传代码之前,,将SD卡插入GPS记录器屏蔽中.轻轻地推,直到你听到一声咔嗒。然后释放,让它锁在适当的位置。

uSD卡插入屏蔽

一旦它就位,上载和运行!您可以检查串行监视器是否有调试数据,或者只信任记录器正在进行日志记录。

一旦GPS模块得到良好的修复,Arduino将开始记录经度,纬度,海拔高度,速度,课程,日期,时间,并将可见卫星的数量放入CSV文件中。将数据设置为每5秒记录一次,但是如果您需要更多或更少的数据,那么这很容易调整。

让它记录一段时间之后,关掉你的阿杜伊诺,将SD卡装入计算机,检查一下GPSLog-Y~γ. CSV文件。在电子表格程序中打开它,或者使用文本编辑器查看Arduino记录的内容。

CSV示例屏幕截图

现在真正测试记录器!给你的阿杜伊诺充电(我们的)9V到桶式千斤顶适配器这很方便)……

电池供电的Arduino/GPS屏蔽

...带你的阿杜伊诺去散散步。

资源与进一步发展

现在你已经安装了GPS日志仪护盾,你打算做一个什么样的位置跟踪Arduino项目。亚博官网需要更多的指导,这里有几个链接,您可以找到方便:

如果你需要一点项目灵感,亚博官网这里是火花娱乐现场亚博官网,在那里您可以看到GPS测速仪

或者看看这些相关的SparkFun教程:亚博官网

哥白尼二世挂钩指南

如何开始使用哥白尼II GPS模块的指南。

字母数字GPS壁钟

这是一个全球定位系统控制的时钟-一个时钟你真的从来没有设置过!使用GPS和一些公式,我们算出一周中的哪一天,以及我们是在夏令时还是在夏令时。

CAN-BUS屏蔽挂钩指南

对CAN总线屏蔽的基本介绍。