如何将 Arduino Mega 与 NEO-6M GPS 模块连接
组件和用品
| × | 1 | ||||
| × | 1 |
应用和在线服务
|
关于这个项目
我发现没有关于 Arduino Mega 与 NEO-6M GPS 模块接口的教程,所以我决定制作一个。希望你喜欢!
需要的组件
硬件
- Arduino Mega ==> 30 美元
- Neo-6M GPS 模块 ==> 30 美元
软件
- Arduino IDE
该项目的总成本为 60 美元。
GPS信息
什么是 GPS?
全球定位系统 (GPS) 是一种基于卫星的导航系统,由至少 24 颗卫星组成。 GPS 可在世界任何地方、任何天气条件下每天 24 小时运行,无需订阅费或设置费。
GPS 的工作原理
GPS 卫星在精确的轨道上每天环绕地球两次。每颗卫星都传输独特的信号和轨道参数,使 GPS 设备能够解码和计算卫星的精确位置。 GPS 接收器使用此信息和三边测量来计算用户的确切位置。从本质上讲,GPS 接收器通过接收传输信号所需的时间来测量到每颗卫星的距离。通过多颗卫星的距离测量,接收器可以确定用户的位置并显示出来。
要计算您的二维位置(纬度和经度)并跟踪运动,必须将 GPS 接收器锁定到至少 3 颗卫星的信号上。使用 4 颗或更多卫星,接收器可以确定您的 3-D 位置(纬度、经度和高度)。通常,GPS 接收器将跟踪 8 颗或更多卫星,但这取决于一天中的时间和您在地球上的位置。确定您的位置后,GPS 单元可以计算其他信息,例如
- 速度
- 轴承
- 跟踪
- 行程距离
- 到目的地的距离
什么是信号
GPS 卫星至少传输 2 个低功率无线电信号。信号通过视线传播,这意味着它们将穿过云层、玻璃和塑料,但不会穿过大多数固体物体,例如建筑物和山脉。然而,现代接收器更灵敏,通常可以通过房屋进行跟踪。一个 GPS 信号包含 3 种不同类型的信息
- 伪随机码
它是一个 I.D.识别哪个卫星正在传输信息的代码。您可以在设备的卫星页面上查看您从哪些卫星接收信号。
- 星历数据
需要星历数据来确定卫星的位置,并提供有关卫星健康状况、当前日期和时间的重要信息。
- 年历数据
年历数据告诉 GPS 接收器在一天中的任何时间每颗 GPS 卫星应该在哪里,并显示该卫星和系统中所有其他卫星的轨道信息。
Neo-6M GPS 模块
NEO-6M GPS 模块如下图所示。它带有一个外部天线,不带有头针。所以你需要焊接它。
NEO-6M GPS 模块概述
- 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) 显着减少到 1 秒。这允许更快的位置锁定。
如果没有电池,GPS 总是冷启动,因此初始 GPS 锁定需要更多时间。通电后,电池会自动充电,断电时可保持数据长达两周。
引脚
- GND 是接地引脚,需要连接到 Arduino 上的 GND 引脚。
- TxD(发送器)引脚用于串行通信。
- RxD(接收器)引脚用于串行通信。
- VCC 为模块供电。您可以直接将其连接到 Arduino 上的 5V 引脚。
Arduino Mega
Arduino 是一个基于易于使用的硬件和软件的开源电子平台。 Arduino 板能够读取输入——传感器上的光、按钮上的手指或 Twitter 消息——并将其转换为输出——激活电机、打开 LED、在线发布某些内容。您可以通过向板上的微控制器发送一组指令来告诉您的电路板该做什么。为此,您需要使用 Arduino 编程语言(基于 Wiring)和基于 Processing 的 Arduino 软件 (IDE)。
Arduino Mega 2560 是基于 Atmega2560 的微控制器板。
- 板上集成了 54 个数字 I/O 引脚和 16 个模拟引脚,使该器件与众不同并脱颖而出。在 54 个数字 I/O 中,有 15 个用于 PWM(脉宽调制)。
- 频率为 16MHz 的晶体振荡器。
- 该板带有 USB 电缆端口,用于从计算机连接和传输代码到板。
- 直流电源插孔与用于为电路板供电的电路板相连。
- 该板带有两个电压调节器,即 5V 和 3.3V,可根据要求灵活调节电压。
- 有一个复位按钮和 4 个称为 USART 的硬件串行端口,可产生用于设置通信的最大速度。
- 可通过三种方式为电路板供电。您可以使用 USB 电缆为电路板供电并将代码传输到电路板,也可以使用电路板的 Vin 或通过电源插孔或电池为其供电。
规格
引脚
引脚说明
- 5V 和 3.3V ==>此引脚用于提供 5V 左右的输出稳压。该稳压电源为板上的控制器和其他组件供电。它可以从电路板的 Vin 或 USB 电缆或其他稳定的 5V 电压电源获得。而另一个电压调节是由 3.3V 引脚提供的。它可以汲取的最大功率为 50mA。
- 地 ==>板上有 5 个接地引脚可用,这在项目需要多个接地引脚时非常有用。
- 重置 ==> 此引脚用于重置电路板。将此引脚设置为低电平将重置电路板。
- 葡萄酒 ==> 它是提供给电路板的输入电压,范围从 7V 到 20V。电源插孔提供的电压可以通过此引脚访问。但是,通过此引脚到板的输出电压将自动设置为 5V。
- 串行通信 ==> RXD 和 TXD 是用于发送和接收串行数据的串行引脚,即 Rx 代表数据传输,而 Tx 用于接收数据。使用这些串行引脚的四种组合,其中串行 0 包含 RX(0) 和 TX(1),串行 1 包含 TX(18) 和 RX(19),串行 2 包含 TX(16) 和 RX(17),串行 3 包含 TX(14) 和 RX(15)。
- 外部中断 ==> 六个引脚用于创建外部中断,即中断 0(0)、中断 1(3)、中断 2(21)、中断 3(20)、中断 4(19)、中断 5(18)。这些引脚通过多种方式产生中断,即向中断引脚提供低值、上升沿或下降沿或改变值。
- LED ==> 该板带有连接到数字引脚 13 的内置 LED。该引脚的高值将打开 LED,低值将关闭它。
- AREF ==> AREF 代表模拟参考电压,它是模拟输入的参考电压。
- 模拟引脚 ==> 板上有 16 个模拟引脚,标记为 A0 到 A15。需要注意的是,所有这些模拟引脚都可以用作数字 I/O 引脚。每个模拟引脚都具有 10 位分辨率。这些引脚可以测量从地到 5V 的电压。但是,可以使用 AREF 和analogReference() 函数更改上限值。
- I2C ==>20 和 21 两个引脚支持 I2C 通信,其中 20 代表 SDA(串行数据线,主要用于保存数据),21 代表 SCL(串行时钟线,主要用于提供设备之间的数据同步)
- SPI 通信 ==> SPI 代表串行外设接口,用于在控制器和其他外设组件之间传输数据。 SPI 通信使用四个引脚,即 50 (MISO)、51 (MOSI)、52 (SCK)、53 (SS)。
Arduino IDE
这里我假设你已经安装了 Arduino IDE。
1. 下载下面给出的所需库
TinyGPS库
2.下载后。解压并将其移动到文件夹 C:\Users\...\Documents\Arduino\libraries 确保没有 (-)。
3. 打开Arduino IDE,从程序部分复制代码。
4. 然后选择板子去工具==>板子==>选择板子这里我们使用Arduino Mega 2560。
5.选择板选择端口后,转到工具==>端口。
6.选择板子和端口后点击上传。
连接
Arduino MEGA ==> NEO-6M GPS
- 3.3V ==> VCC
- GND ==> GND
- Tx1 (18) ==> Rx
- Rx1 (19) ==> Tx
您也可以使用 Serial2 或 Serial3 代替 Serial1
串口2引脚
- Tx2 (16) ==> 接收
- Rx2 (17) ==> Tx
串口3针
- Tx3 (14) ==> 接收
- Rx3 (15) ==> Tx
结果
代码
- Arduinomega_GPS
Arduinomega_GPSArduino
//连接引脚 18 和 19#include//long lat,lon; // 为纬度和经度创建变量 objectfloat lat,lon;TinyGPS gps; // 创建 gps objectvoid setup(){Serial.begin(57600); // 连接 serialSerial.println("The GPS Received Signal:");Serial1.begin(9600); // 连接 GPS 传感器} void loop(){ while(Serial1.available()){ // 检查 GPS 数据 if(gps.encode(Serial1.read()))// 编码 GPS 数据 { gps.f_get_position(&lat ,&lon); // 获取纬度和经度 Serial.print("Position:"); //Latitude Serial.print("Latitude:"); Serial.print(lat,6); Serial.print(","); //经度Serial.print("经度:"); Serial.println(lon,6); } }} /*//连接引脚16和17#include //long lat,lon; // 为纬度和经度创建变量 objectfloat lat,lon;TinyGPS gps; // 创建 gps objectvoid setup(){Serial.begin(57600); // 连接 serialSerial.println("The GPS Received Signal:");Serial2.begin(9600); // 连接 GPS 传感器} void loop(){ while(Serial2.available()){ // 检查 GPS 数据 if(gps.encode(Serial2.read()))// 编码 GPS 数据 { gps.f_get_position(&lat ,&lon); // 获取纬度和经度 Serial.print("Position:"); //Latitude Serial.print("Latitude:"); Serial.print(lat,6); Serial.print(","); //经度Serial.print("经度:"); Serial.println(lon,6); } }}*//*//连接pin 14和15#include //long lat,lon; // 为纬度和经度创建变量 objectfloat lat,lon;TinyGPS gps; // 创建 gps objectvoid setup(){Serial.begin(57600); // 连接 serialSerial.println("The GPS Received Signal:");Serial3.begin(9600); // 连接 GPS 传感器} void loop(){ while(Serial3.available()){ // 检查 GPS 数据 if(gps.encode(Serial3.read()))// 编码 GPS 数据 { gps.f_get_position(&lat ,&lon); // 获取纬度和经度 Serial.print("Position:"); //Latitude Serial.print("Latitude:"); Serial.print(lat,6); Serial.print(","); //经度Serial.print("经度:"); Serial.println(lon,6); } }}*/
示意图
制造工艺
- 用 Arduino 捕捉水滴
- 玩 Nextion Display
- u-blox LEA-6H 02 GPS 模块,带有 Arduino 和 Python
- 如何使用 DHT11 在 Blynk 上读取温度和湿度
- 如何用 Arduino 制作音乐
- 如何在 Arduino 中使用 NMEA-0183
- 带 GPS 和 TFT 显示屏蔽的 GPS 位置显示
- 如何在 Arduino 中使用 Modbus
- 使用 Visuino 将 GPS 信息记录到 MicorSD 卡
- Arduino + GPS 模块 - 目的地通知器
- 带有 Arduino AT 命令的 SIM800L GPRS 模块
- rDUINOScope