如何使用GPS与Arduino?
扫描二维码
随时随地手机看文章
电子学的主要应用之一是使用GPS(全球定位系统)进行地理定位。在本教程中,我们将探讨GPS是如何工作的,如何使用Arduino的Neo6m GPS模块以及如何修复此模块的错误。
GPS是怎么工作的?
GPS(全球定位系统)的工作原理是利用环绕地球运行的卫星网络来确定地球上任何地方GPS接收器的精确位置。下面是它的工作原理:
ComponentsofaGPS
1. 卫星:至少有24颗GPS卫星在大约20,200公里的高度绕地球运行。这些卫星以这样一种方式排列,在任何给定的时间,从地球上的任何一点都可以看到至少四颗卫星。
2. 地面控制站:这些站监测和管理卫星,确保它们保持在正确的轨道上,并保持信号的准确性。
3. GPS接收器:从GPS卫星接收信号以确定其在地球上位置的设备。这些可以在智能手机、汽车、健身追踪器和各种其他设备中找到。
它是如何工作的
1. 信号的传输:每颗GPS卫星都连续发送一个信号,其中包含卫星的位置和信号发送的确切时间。
2. 信号接收:GPS接收器接收来自多颗卫星的信号。为了计算二维位置(纬度和经度),接收器需要连接至少三颗卫星。对于3D定位(纬度、经度和高度),它需要来自至少四颗卫星的信号。
3. 时间延迟计算:GPS接收器测量卫星信号到达它所花费的时间。由于信号以光速传播,接收器可以根据这个时间延迟计算到每个卫星的距离。
4. 三角测量:通过了解与多颗卫星的距离,GPS接收器可以通过称为三边测量的过程确定其确切位置。这涉及到求解方程,使从每颗卫星的距离得出的可能位置的球体相交,从而精确定位接收器的确切位置。
GPS技术被用于各种应用,包括车辆和船舶导航、测绘、测量、跟踪和各种系统(如蜂窝网络和金融交易)的定时。要了解更详细的信息,您可以参考NASA的GPS概述和美国政府的GPS网站
硬件
NEO-6M GPS模块是一种流行的GPS接收器,用于各种电子产品和DIY项目,特别是其价格合理且易于使用。以下是一些关键功能和规格:
1. GPS芯片:NEO-6M模块使用U-blox NEO-6M GPS芯片,具有高灵敏度(-161 dBm),可在50个通道中跟踪多达22颗卫星。
2. 定位:水平定位精度约2.5米,支持1hz的导航更新速率,最大5hz。
3. 功耗:模块正常工作时功耗约45ma。它还包括一个省电模式(PSM),可将功耗降低至11毫安,使其适合电池供电的应用,如GPS手表。
4. 接口:通过UART通信,波特率范围为4800 ~ 230400bps,默认为9600bps。该模块兼容3.3V和5V逻辑电平,简化了与包括Arduino在内的各种微控制器的集成。
5. 启动时间:NEO-6M提供约27-38秒的冷启动时间和约1秒的热启动时间。
这些功能使NEO-6M GPS模块成为需要精确位置跟踪的项目的多功能和高效选择。无论您是在无人机,车辆跟踪系统还是便携式导航设备上工作,该模块都可以以最小的功耗提供可靠的GPS数据。
在本教程中,我们将研究如何通过一个简单的脚本开始使用Neo6m GPS模块,该脚本连接到卫星并获取用户位置,时间和日期的信息。
代码
让我们一步一步地检查代码:
包括库
该代码首先包含GPS通信所需的库:
•包含TinyGPS++库,用于解析GPS模块中的NMEA句子。
•包括SoftwareSerial库,它允许在Arduino的默认RX和TX引脚以外的数字引脚上进行串行通信。
•看看下面的图库,看看如何安装TinyGPS++库
初始化变量
代码声明了GPS通信所需的常量和对象:
•TXPin和RXPin:定义用于从GPS模块发送(TX)和接收(RX)数据的数字引脚。
•GPSBaud:设置与GPS模块通信的波特率为9600。
•TinyGPSPlus gps:创建TinyGPSPlus类的对象来处理gps数据解析。
•SoftwareSerial GPS(RXPin, TXPin):创建一个SoftwareSerial对象,使用定义的RX和TX引脚处理与GPS模块的通信。
设置函数
在setup函数中,初始化串行通信:
•系列。begin(9600):以9600波特率初始化串口通信,用于调试并输出到串口监视器。
•GPS。begin(GPSBaud):以指定的波特率(9600)初始化与GPS模块的SoftwareSerial通信。
循环函数
loop函数连续读取和处理GPS数据:
•如果(GPS)。available() > 0):检查是否有来自GPS模块的可用数据。
•gps.encode (GPS。read()):从GPS模块读取一个字符,并将其传递给TinyGPS++库进行解析。
•如果(gps.location。isUpdated()):检查是否解析了新的有效位置。
•系列。print("Latitude = ");并同时gps.location。纬度(),6);:将纬度以六位小数的形式打印到串行监视器。
•系列。print(" Longitude = ");并同时gps.location。液化天然气(),6);:将经度以六位小数的形式打印到串行监视器。
此代码与GPS模块建立连接,并不断读取和解析数据,以提取纬度、经度、高度和卫星时间信息并将其打印到串行监视器。
设置硬件
要正确设置GPS传感器,请遵循以下步骤:
•上传代码后,启动Arduino nano。
•一些GPS传感器有电源灯,如果你没有,那么不要担心,等待。
•一段时间后,传感器上的机载蓝色led将开始闪烁,表明它已连接到卫星网络。
•当它开始闪烁时,用板载按钮重置Arduino并检查串行监视器。
注意:为了使这个过程更快更容易,坐在室外,阳台上或靠近窗户。你也可以买一个更好的陶瓷天线。
注意:GPS传感器接收数十个NMEA包中的数据,这些包可能包含也可能不包含我们需要的位置数据。在这种情况下,如果没有找到或没有更新位置数据,则不会向串行监视器打印任何内容,或者会出现中断。放轻松,等几分钟就能得到好的数据。
本文编译自hackster.io





