如何将连接GPS模块(NEO-6m)与Arduino
文件列表(压缩包大小 771.41K)
免费
概述
在这个示例中,我将展示如何将GPS模块与Arduino UNO接口,并在LCD上显示经度和纬度数据。
Arduino mega 2560
u-blox NEO-6M GPS模块
Adafruit RGB背光LCD1602
什么是GPS
全球定位系统(GPS)是由至少24颗卫星组成的基于卫星的导航系统。GPS在全球任何地方的任何天气条件下,一天24小时均可工作,无需支付订阅费或安装费。
GPS如何运作
GPS卫星每天在精确的轨道上绕地球一周两次。每颗卫星都传输唯一的信号和轨道参数,从而使GPS设备能够解码和计算卫星的精确位置。GPS接收器使用此信息和三边测量来计算用户的确切位置。本质上,GPS接收器通过接收发射信号所花费的时间来测量到每个卫星的距离。通过再测量几颗卫星的距离,接收器可以确定用户的位置并显示它。
要计算您的二维位置(经度和纬度)和轨迹运动,必须将GPS接收器锁定到至少3颗卫星的信号上。看到4个或更多卫星时,接收器可以确定您的3-D位置(纬度,经度和高度)。通常,GPS接收机将跟踪8颗或更多的卫星,但这取决于一天中的时间以及您在地球上的位置。
确定您的位置后,GPS单元可以计算其他信息,例如:
GPS信号是什么信号?
GPS卫星至少发送2个低功率无线电信号。信号按视线传播,这意味着它们将穿过云,玻璃和塑料,但不会穿过大多数固体物体,例如建筑物和山脉。但是,现代接收器更加敏感,通常可以在房屋中进行跟踪。
GPS信号包含3种不同类型的信息:
(i)SoftwareSerial库
(ii)TinyGPS库
你可以在下载区找到它。
NEO-6M GPS模块如下图所示。它带有一个外部天线,不带有插头。因此,您将需要焊接它。
该模块的核心是u-blox的NEO-6M GPS芯片。它可以在50个频道上跟踪多达22颗卫星,并达到业界最高水平的灵敏度,即-161 dB跟踪,同时仅消耗45mA的电源电流。u-blox 6定位引擎还拥有不到1秒的首次定位时间(TTFF)。芯片提供的最佳功能之一是省电模式(PSM)。通过有选择地打开和关闭接收机的各个部分,可以降低系统功耗。这极大地降低了模块的功耗至11mA,使其适合于GPS手表等对功耗敏感的应用。NEO-6M GPS芯片的必要数据引脚被分拆为“ 0.1”间距接头,其中包括通过UART与微控制器通信所需的引脚。
注意:该模块支持从4800bps到230400bps的波特率,默认波特率为9600。
位置固定的LED指示灯
NEO-6M GPS模块上有一个LED,指示位置固定的状态。它会以不同的速率闪烁,具体取决于它所处的状态
无闪烁==>表示正在搜索卫星
每1秒闪烁一次-表示找到定位
3.3V LDO稳压器
NEO-6M芯片的工作电压为2.7至3.6V。但是,该模块带有MICREL的MIC5205超低压降3V3稳压器。逻辑引脚也可以承受5伏电压,因此我们可以轻松地将其连接到Arduino或任何5V逻辑微控制器,而无需使用任何逻辑电平转换器。
电池和EEPROM
该模块配有HK24C32两线串行EEPROM。它的大小为4KB,并通过I2C连接到NEO-6M芯片。该模块还包含一个可充电纽扣电池,可以用作超级电容器。
EEPROM和电池一起有助于保留电池支持的RAM(BBR)。BBR包含时钟数据,最新位置数据(GNSS或位数据)和模块配置。但这并不意味着永久数据存储。
由于电池保持时钟和最后位置,因此首次修复时间(TTFF)大大减少了1s。这允许更快的位置锁定。
没有电池,GPS总是冷启动,因此初始GPS锁定需要更多时间。接通电源后,电池会自动充电,并且在没有电源的情况下最多可以保留两周的数据。
引脚排列
Arduino是一个基于易于使用的硬件和软件的开源电子平台。Arduino开发板能够读取输入-传感器上的灯,按钮上的手指或Twitter消息-并将其转换为输出-激活电动机,打开LED并在线发布内容。您可以通过向板上的微控制器发送一组指令来告诉您该怎么做。为此,您可以使用Arduino编程语言(基于Wiring)和Arduino软件(IDE)(基于Processing)。
引脚排列
引脚说明
Arduino Uno是基于8位ATmega328P微控制器的微控制器板。与ATmega328P一起,它还包含其他组件,例如晶体振荡器,串行通信,稳压器等,以支持微控制器。Arduino Uno有14个数字输入/输出引脚(其中6个可用作PWM输出),6个模拟输入引脚,USB连接,电源桶插孔,ICSP插头和复位按钮。
通过使用Arduino编程中的pinMode(),digitalRead()和digitalWrite()函数,可以将14个数字输入/输出引脚用作输入或输出引脚。每个引脚均以5V工作,可提供或接收最大40mA电流,并具有一个20-50 KOhms的内部上拉电阻,默认情况下已断开连接。在这14个引脚中,有些引脚具有以下特定功能
有6个模拟输入引脚,每个引脚提供10位分辨率,即1024个不同的值。它们的电压范围为0至5伏,但可以通过将AREF引脚与模拟Reference()函数配合使用来提高此极限。
如下所示将UBLOX的四个引脚连接到Arduino:
GPS模块==> Arduino
在这里,我建议您使用外部电源为GPS模块供电,因为GPS模块正常工作的最低电源要求为3.3 V,而Arduino无法提供这么大的电压。
要提供电压,请使用USB TTL。
我在使用GPS天线随附的模块时发现的另一件事是,它无法在室内接收信号,因此我使用了该天线。
要连接此天线,必须使用连接器:
最好给GSM连接12V电源。
LCD | Arduino |
---|---|
VSS | 地 |
VCC | 5伏 |
VEE | 10K电阻器 |
RS | A0(模拟引脚) |
I/0 | GND |
E | A1 |
D4 | A2 |
D5 | A3 |
D6 | A4 |
D7 | A5 |
LED + | VCC |
LED- | 接地 |
#include <LiquidCrystal.h>
#include <SoftwareSerial.h>
#include <TinyGPS.h>
float lat = 28.5458,lon = 77.1703; // create variable for latitude and longitude object
SoftwareSerial gpsSerial(3,4);//rx,tx
LiquidCrystal lcd(A0,A1,A2,A3,A4,A5);
TinyGPS gps; // create gps object
void setup(){
Serial.begin(9600); // connect serial
//Serial.println("The GPS Received Signal:");
gpsSerial.begin(9600); // connect gps sensor
lcd.begin(16,2);
}
void loop(){
while(gpsSerial.available()){ // check for gps data
if(gps.encode(gpsSerial.read()))// encode gps data
{
gps.f_get_position(&lat,&lon); // get latitude and longitude
// display position
lcd.clear();
lcd.setCursor(1,0);
lcd.print("GPS Signal");
//Serial.print("Position: ");
//Serial.print("Latitude:");
//Serial.print(lat,6);
//Serial.print(";");
//Serial.print("Longitude:");
//Serial.println(lon,6);
lcd.setCursor(1,0);
lcd.print("LAT:");
lcd.setCursor(5,0);
lcd.print(lat);
//Serial.print(lat);
//Serial.print(" ");
lcd.setCursor(0,1);
lcd.print(",LON:");
lcd.setCursor(5,1);
lcd.print(lon);
}
}
String latitude = String(lat,6);
String longitude = String(lon,6);
Serial.println(latitude+";"+longitude);
delay(1000);
}
所有需要的文件在下载区均可找到。
如果遇到文件不能下载或其他产品问题,请添加管理员微信:ligongku001,并备注:产品反馈
评论(0)