Conectar Arduino Mega a módulo GPS NEO‑6M: Guía paso a paso
Componentes y materiales
| Componente | Cantidad |
|---|---|
| Arduino Mega 2560 | 1 |
| Módulo GPS u-blox NEO-6M | 1 |
Aplicaciones y servicios en línea
- Arduino IDE
Sobre el proyecto
No encontré ningún tutorial para interconectar Arduino Mega con el módulo GPS NEO-6M, así que decidí crear uno. ¡Espero que os guste!
Componentes necesarios
Hardware
- Arduino Mega → ~30 $
- Módulo GPS NEO-6M → ~30 $
Software
- Arduino IDE
Coste total: ~60 $
Información sobre GPS
¿Qué es GPS?
El Sistema de Posicionamiento Global (GPS) es un sistema de navegación por satélite compuesto por al menos 24 satélites. Funciona en cualquier condición meteorológica, en cualquier lugar del mundo, las 24 horas, sin cuotas de suscripción ni cargos de configuración.
Cómo funciona el GPS
Los satélites GPS orbitan la Tierra dos veces al día en órbitas precisas. Cada uno transmite una señal única y parámetros orbitales que permiten a los receptores decodificar y calcular la posición exacta del satélite. Los receptores usan trilateración: miden la distancia a cada satélite por el tiempo que tarda la señal en llegar. Con medidas de 3+ satélites se obtiene posición 2D (latitud/longitud); con 4+ se añade altitud. Generalmente se rastrean 8+ satélites, según hora y ubicación. Una vez determinada la posición, el GPS calcula velocidad, rumbo, trayectoria, distancia de viaje, distancia al destino, etc.
La señal GPS
Los satélites transmiten al menos 2 señales de radio de baja potencia. Viajan en línea de vista: atraviesan nubes, vidrio y plástico, pero no la mayoría de objetos sólidos (edificios, montañas). Los receptores modernos son más sensibles y pueden rastrear a través de casas. Una señal GPS contiene 3 tipos de información:
- Código pseudoaleatorio: ID que identifica qué satélite transmite.
- Datos efemérides: posición del satélite, salud, fecha/hora actual.
- Datos del almanaque: posición orbital de cada satélite a cualquier hora del día.
Módulo GPS NEO-6M
El módulo incluye antena externa y no trae pines header (hay que soldarlos).
Visión general del NEO-6M
- Chip NEO-6M (u-blox): rastrea hasta 22 satélites en 50 canales, sensibilidad -161 dB tracking, consumo 45 mA. Motor u-blox 6 con Time-To-First-Fix (TTFF) < 1 s. Incluye Power Save Mode (PSM) reduciendo consumo a 11 mA (ideal para wearables). Pines de datos a pitch 0.1" para UART. Baud rate 4800–230400 bps (default 9600).
- LED indicador de Fix: sin parpadeo = buscando satélites; parpadeo 1 Hz = Fix conseguido.
- Regulador LDO 3.3V (MIC5205): chip opera 2.7–3.6V; pines tolerantes a 5V → conexión directa a Arduino sin conversor de nivel.
- Batería + EEPROM: EEPROM HK24C32 (4KB, I2C) + pila botón recargable (supercondensador). Retienen RAM con batería (BBR): datos de reloj, última posición, configuración. Reducen TTFF a 1s. Sin pila = cold start siempre. La pila se carga al alimentar y mantiene datos hasta 2 semanas sin alimentación.
- Pinout: GND, TxD (salida serie), RxD (entrada serie), VCC (5V directo a Arduino 5V).
Arduino Mega 2560
Plataforma open-source basada en hardware/software fácil de usar. Lee entradas (sensores, botones, mensajes) y genera salidas (motores, LEDs, publicaciones online). Programado con lenguaje Arduino (basado en Wiring) e IDE Arduino (basado en Processing).
Especificaciones clave: ATmega2560, 54 I/O digitales (15 PWM), 16 analógicas, oscilador 16 MHz, USB, jack DC, reguladores 5V/3.3V, reset, 4 UARTs hardware (Serial0–Serial3), 3 formas de alimentación (USB, Vin, jack, batería).
Descripción de pines relevantes
- 5V y 3.3V: salidas reguladas (3.3V máx 50 mA).
- GND: 5 pines de tierra.
- Reset: LOW reinicia la placa.
- Vin: entrada 7–20V (jack).
- Comunicación serie: 4 puertos: Serial0 (RX0/TX1), Serial1 (RX19/TX18), Serial2 (RX17/TX16), Serial3 (RX15/TX14).
- Interrupciones externas: 6 pines (0,3,21,20,19,18).
- LED integrado: pin 13.
- AREF: referencia analógica.
- Pines analógicos: A0–A15 (10 bits, también I/O digital).
- I2C: SDA (20), SCL (21).
- SPI: MISO(50), MOSI(51), SCK(52), SS(53).
Arduino IDE
- Descarga librería TinyGPS.
- Extrae y mueve a
C:\Users\...\Documents\Arduino\libraries(sin guiones en nombre). - Abre IDE, copia el código de la sección "Código".
- Herramientas → Placa → Arduino Mega 2560.
- Herramientas → Puerto → selecciona tu puerto.
- Subir.
Conexiones
Arduino MEGA → NEO-6M GPS
- 3.3V → VCC
- GND → GND
- Tx1 (pin 18) → Rx
- Rx1 (pin 19) → Tx
También puedes usar Serial2 (Tx2=16, Rx2=17) o Serial3 (Tx3=14, Rx3=15).
Resultado
El monitor serie muestra latitud y longitud con 6 decimales.
Código
Arduinomega_GPS (Arduino)
// Conectar con pines 18 y 19 (Serial1)
#include <TinyGPS.h>
float lat, lon;
TinyGPS gps;
void setup() {
Serial.begin(57600);
Serial.println("The GPS Received Signal:");
Serial1.begin(9600);
}
void loop() {
while (Serial1.available()) {
if (gps.encode(Serial1.read())) {
gps.f_get_position(&lat, &lon);
Serial.print("Position: ");
Serial.print("Latitude: "); Serial.print(lat, 6); Serial.print(",");
Serial.print("Longitude: "); Serial.println(lon, 6);
}
}
}
/*
// Alternativa: pines 16 y 17 (Serial2)
#include <TinyGPS.h>
float lat, lon; TinyGPS gps;
void setup() { Serial.begin(57600); Serial.println("The GPS Received Signal:"); Serial2.begin(9600); }
void loop() { while (Serial2.available()) { if (gps.encode(Serial2.read())) { gps.f_get_position(&lat, &lon); Serial.print("Position: "); Serial.print("Latitude: "); Serial.print(lat, 6); Serial.print(","); Serial.print("Longitude: "); Serial.println(lon, 6); } } }
*/
/*
// Alternativa: pines 14 y 15 (Serial3)
#include <TinyGPS.h>
float lat, lon; TinyGPS gps;
void setup() { Serial.begin(57600); Serial.println("The GPS Received Signal:"); Serial3.begin(9600); }
void loop() { while (Serial3.available()) { if (gps.encode(Serial3.read())) { gps.f_get_position(&lat, &lon); Serial.print("Position: "); Serial.print("Latitude: "); Serial.print(lat, 6); Serial.print(","); Serial.print("Longitude: "); Serial.println(lon, 6); } } }
*/
Esquemático
Diagrama de conexiones (imagen referenciada).
Proceso de manufactura
- Captura Gotas de Agua en Acción con Arduino Nano: Fotografía de Alta Velocidad DIY
- Proyecto HMI Interactivo con Nextion, Arduino Mega y Múltiples Sensores
- Módulo GPS u-blox LEA‑6H 02: Guía de integración con Arduino y Python
- Leer Temperatura y Humedad con DHT11 en Blynk – Tutorial Paso a Paso con Arduino
- Genera Tonos Musicales con Arduino: Guía Paso a Paso
- Conexión de Arduino a NMEA‑0183: Guía Paso a Paso
- Proyecto Arduino GPS y Pantalla TFT Táctil Shield: Visualización de Ubicación en Tiempo Real
- Domina Modbus en Arduino: Guía Paso a Paso
- Cómo Registrar Datos GPS en Tarjeta MicroSD con Visuino en Arduino Nano
- Construye un Notificador de Destino GPS con Arduino UNO y Módulo NEO‑6M
- Integración del Módulo GPRS SIM800L con Arduino mediante Comandos AT