什么是全球定位系统
全球定位系统 (GPS) 是一种基于卫星的导航系统,由至少 24 颗卫星组成。GPS 全天 24 小时在任何天气条件下工作,在世界任何地方工作,无需订阅费或设置费。
GPS的工作原理
GPS 卫星在精确的轨道上每天绕地球两次。每颗卫星都传输独特的信号和轨道参数,使 GPS 设备能够解码和计算卫星的精确位置。GPS 接收器使用此信息和三边测量来计算用户的确切位置。本质上,GPS 接收器通过接收发射信号所需的时间量来测量到每颗卫星的距离。通过更多卫星的距离测量,接收器可以确定用户的位置并显示它。
要计算您的二维位置(纬度和经度)并跟踪运动,GPS 接收器必须锁定至少 3 颗卫星的信号。在视野中有 4 颗或更多卫星的情况下,接收器可以确定您的 3-D 位置(纬度、经度和高度)。通常,GPS 接收器将跟踪 8 颗或更多卫星,但这取决于一天中的时间和您在地球上的位置。
确定您的位置后,GPS 单元可以计算其他信息,例如:
什么信号?
GPS 卫星至少传输 2 个低功率无线电信号。信号通过视线传播,这意味着它们将穿过云层、玻璃和塑料,但不会穿过大多数固体物体,例如建筑物和山脉。然而,现代接收器更敏感,通常可以跟踪房屋。
GPS 信号包含 3 种不同类型的信息:
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,用于指示定位状态。它会根据它所处的状态以不同的速率闪烁
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) 显着减少到 1 秒。这允许更快的位置锁定。
如果没有电池,GPS 总是冷启动,因此初始 GPS 锁定需要更多时间。通电时电池会自动充电,并且可以在没有电源的情况下保持数据长达两周。
引脚排列
Arduino 是一个基于易于使用的硬件和软件的开源电子平台。Arduino 板能够读取输入——传感器上的光、按钮上的手指或 Twitter 消息——并将其转换为输出——激活电机、打开 LED、在线发布内容。您可以通过向板上的微控制器发送一组指令来告诉您的板该做什么。为此,您需要使用 Arduino 编程语言(基于 Wiring)和基于 Processing 的 Arduino 软件 (IDE)。
引脚排列
引脚说明
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 伏,但可以通过使用具有模拟 Reference() 功能的 AREF 引脚来增加此限制。
将 UBLOX 的四个引脚连接到 Arduino,如下所示:
GPS模块==> Arduino
在这里,我建议您使用外部电源为 GPS 模块供电,因为 GPS 模块工作的最低功率要求是 3.3 V,而 Arduino 无法提供这么多的电压。
要提供电压,请使用多产的 USB TTL。
我在使用带有模块的 GPS 天线时发现的另一件事是它在屋内没有接收到信号,所以我使用了这个天线。
要连接此天线,您必须使用连接器:
LCD ==> Arduino
Arduino IDE
#include
#include
#include
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);
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !