Módulo GPS NEO-6M con Arduino: Seguimiento en tiempo real



Dejé un módulo GPS NEO-6M encendido sobre mi escritorio durante 40 minutos y el monitor serial seguía mostrando latitud 0,0000 y longitud 0,0000. No estaba dañado: estaba intentando obtener fix sin antena conectada y bajo una losa de hormigón de 20 cm. Cuando lo llevé a la azotea y enchufé la antena helicoidal, obtuvo posición en 42 segundos.

En Chile, muchos compran el módulo GY-NEO6MV2 por su bajo costo y esperan que funcione como el GPS del celular. La diferencia es que un smartphone usa A-GPS (datos de red celular para asistir la adquisición) y antenas activas optimizadas, mientras que el NEO-6M es un receptor autónomo que necesita cielo despejado y tiempo de inicialización.

Este artículo explica las especificaciones reales del chip u-blox NEO-6M, cómo conectarlo correctamente a un Arduino sin conflictos de puerto serial, el código funcional para parsear sentencias NMEA y cuánto cuesta armar un rastreador básico en pesos chilenos.

Antena de comunicación satelital sobre fondo de cielo despejado
Recepción de señal GPS requiere línea de vista directa con los satélites

¿Qué es exactamente el NEO-6M?

El NEO-6M es un receptor GPS de 50 canales fabricado por u-blox, una empresa suiza. Utiliza la banda L1 en 1.575,42 MHz para recibir señales de los satélites del sistema GPS (estadounidense).

A diferencia de los módulos modernos que soportan GLONASS, Galileo o BeiDou, el NEO-6M solo procesa constelación GPS. Eso significa que en zonas con obstrucciones parciales (edificios altos, valles estrechos) tiene menos satélites visibles que un receptor multi-GNSS contemporáneo.

El módulo GY-NEO6MV2 comercializado en tiendas de electrónica incluye el chip u-blox, una antena cerámica pasiva de 25 mm × 25 mm, una memoria EEPROM de respaldo (para almacenar el almanaque) y un regulador de voltaje que permite alimentar el conjunto con 5 V aunque el chip trabaje internamente a 3,3 V.

Especificaciones técnicas reales (datasheet u-blox)

Estos valores provienen del datasheet oficial del NEO-6. Las variantes chinas pueden variar levemente en el rendimiento de la antena incluida:

Parámetro Valor Nota
Canales de recepción 50 canales Búsqueda simultánea de satélites
Constelaciones Solo GPS (L1 C/A) No soporta GLONASS, Galileo ni BeiDou
Precisión posición (CEP) 2,5 m Con buena recepción de señal; puede ampliarse a 5–10 m con antena pasiva de baja calidad
Tasa de actualización 1 Hz (máx. 5 Hz) Por defecto 1 Hz; 5 Hz requiere configuración UBX
Sensibilidad tracking -161 dBm Con antena activa; -158 dBm con antena pasiva típica
Sensibilidad cold start -148 dBm Tiempo para adquirir señal sin datos previos
TTFF cold start ~27 segundos En campo abierto; puede ser 2–5 min en condiciones marginales
TTFF warm start ~27 segundos Con almanaque válido pero posición borrada
TTFF hot start ~1 segundo Con datos de efemérides y posición recientes
Voltaje de alimentación 2,7 V – 3,6 V (chip) El módulo GY-NEO6MV2 acepta 3,3 V–5 V por su regulador onboard
Consumo tracking ~67 mA @ 3,3 V ~45 mA en adquisición; pico ~150 mA en encendido del LNA
Protocolos NMEA 0183, UBX NMEA por defecto a 9600 baud; UBX para configuración avanzada

¿Buscas módulos GPS NEO-6M, Arduino Nano o antenas activas con despacho a todo Chile?

Ver stock de módulos GPS →

NEO-6M vs NEO-7M vs NEO-M8N: cuál elegir

La tabla del artículo original inventaba frecuencias de actualización. Esta es la comparativa real según los datasheets de u-blox:

Módulo Constelaciones Máx. frecuencia Sensibilidad tracking Precio aprox. CLP
NEO-6M GPS 5 Hz -161 dBm $12.000 – $18.000
NEO-7M GPS + GLONASS 10 Hz -162 dBm $18.000 – $28.000
NEO-M8N GPS + GLONASS + BeiDou + Galileo 10 Hz (18 Hz en modo dead reckoning) -167 dBm $25.000 – $38.000

Para proyectos básicos de rastreo en Chile, el NEO-6M es suficiente. Si trabajas en zonas urbanas densas como el centro de Santiago con edificios de 20 pisos, el NEO-M8N con múltiples constelaciones mantiene fix donde el NEO-6M pierde señal.

Cuánto cuesta armar un rastreador GPS en Chile (2026)

Componente Especificación Precio aprox. CLP
Módulo GPS NEO-6M GY-NEO6MV2 con antena cerámica $12.000 – $18.000
Arduino Nano CH340, con cable USB $12.000 – $18.000
Protoboard + cables Dupont 400 puntos, cables macho-macho $3.000 – $6.000
Antena activa externa (opcional) 3,3 V–5 V, conector U.FL / SMA $8.000 – $15.000
Módulo microSD (opcional) Para logging de coordenadas $4.000 – $7.000
Fuente 5 V 1 A Cargador USB de pared $5.000 – $10.000

Total estimado proyecto básico: entre $32.000 y $52.000 CLP con componentes nuevos en tienda nacional. Si importas por correo privado, el costo baja a aproximadamente $20.000–$32.000.

Conexión correcta con Arduino

El error más común es conectar el GPS a los pines 0 (RX) y 1 (TX) del Arduino Uno. Esos pines están conectados al chip USB-Serial del Arduino; usarlos para el GPS impide subir código y genera conflictos de comunicación.

La solución es usar SoftwareSerial en pines digitales alternativos. La conexión estándar para un GY-NEO6MV2 es:

NEO-6M → Arduino Uno/Nano

VCC → 5 V (el regulador del módulo baja a 3,3 V internamente)

GND → GND

TX → Pin digital 4 (RX del SoftwareSerial)

RX → Pin digital 3 (TX del SoftwareSerial)

Nota importante: la conexión es cruzada. El TX (transmisión) del GPS va al RX (recepción) del Arduino, y viceversa. Muchos principiantes conectan TX→TX y no reciben datos.

El pin PPS (Pulse Per Second) del NEO-6M es opcional. Genera un pulso de 100 ms cada segundo sincronizado con el reloj atómico de los satélites. Úsalo si necesitas sincronización de tiempo de alta precisión; para rastreo básico no es necesario.

Conexiones de cables electrónicos en protoboard con microcontrolador
Conexión cruzada TX→RX entre módulo GPS y Arduino en protoboard

Código Arduino funcional con TinyGPS++

El protocolo NMEA 0183 envía sentencias de texto ASCII cada segundo. Parsearlas manualmente con String.split() es lento y propenso a errores. La librería TinyGPS++ de Mikal Hart maneja el parseo de forma eficiente.

Instálala desde el Library Manager de Arduino IDE buscando “TinyGPSPlus”. Luego carga este código:

#include <SoftwareSerial.h>

#include <TinyGPSPlus.h>

static const int RXPin = 4, TXPin = 3;

static const uint32_t GPSBaud = 9600;

SoftwareSerial ss(RXPin, TXPin);

TinyGPSPlus gps;

void setup() {

Serial.begin(115200);

ss.begin(GPSBaud);

Serial.println(F("GPS NEO-6M iniciado"));

Serial.println(F("Esperando fix... (puede tardar 30-60s en open sky)"));

}

void loop() {

while (ss.available() > 0) {

gps.encode(ss.read());

if (gps.location.isUpdated()) {

Serial.print(F("Lat: ")); Serial.print(gps.location.lat(), 6);

Serial.print(F(" Lng: ")); Serial.print(gps.location.lng(), 6);

Serial.print(F(" Sat: ")); Serial.print(gps.satellites.value());

Serial.print(F(" HDOP: ")); Serial.println(gps.hdop.value());

}

}

}

El código inicializa un puerto serial por software a 9600 baud (la velocidad por defecto del NEO-6M). Cada byte recibido se alimenta a gps.encode(). Cuando se completa una sentencia válida, gps.location.isUpdated() devuelve true y puedes leer latitud, longitud, cantidad de satélites y dilución de precisión horizontal (HDOP).

El HDOP es crítico: valores menores a 2 indican buena precisión; entre 2 y 5, aceptable; mayores a 10, la posición es poco confiable aunque el GPS reporte coordenadas.

Errores que dejan el GPS sin señal

1. Conectar a los pines 0 y 1 del Arduino Uno: Esos pines comparten el UART hardware con el puerto USB de programación. Si conectas el GPS allí, no podrás subir código y el monitor serial mostrará basura. Usa siempre SoftwareSerial en pines alternativos.

2. Probar en interiores o cerca de ventanas con película metálica: La señal GPS en 1.575 GHz no atraviesa techos de hormigón armado ni vidrios con película reflectante. En interiores, incluso cerca de una ventana, la señal puede atenuarse 20–30 dB, impidiendo el fix. Ve a un patio o azotea despejada.

3. No esperar el cold start: La primera vez que enciendes el módulo, o después de varios días apagado, necesita descargar el almanaque completo de los satélites. Eso toma 30–60 segundos en campo abierto. Si apagas y enciendas repetidamente cada 10 segundos pensando que “no funciona”, nunca completas la adquisición.

4. Alimentar desde el pin 3,3 V del Arduino: El pin 3,3 V del Arduino Uno entrega máximo 150 mA. El pico de encendido del NEO-6M con su LNA (amplificador de bajo ruido) puede alcanzar 150 mA. Si el regulador del Arduino entra en limitación de corriente, el GPS reinicia en bucle. Alimenta desde el pin 5 V, que tiene mayor margen.

5. Baud rate incorrecto: El NEO-6M viene configurado de fábrica a 9600 baud. Algunos tutoriales antiguos mencionan 4800 o 115200. Si configuras ss.begin(115200), recibirás caracteres ilegibles y pensarás que el módulo está dañado.

6. Conectar TX→TX en lugar de TX→RX: Es el error más común en principiantes. El TX del GPS es salida de datos; debe ir al RX (entrada) del Arduino. Si los conectas directamente TX→TX, no circula información. Si cruzas correctamente y aún no ves datos, verifica que el GND esté unido entre ambos dispositivos.

¿Tu GPS no entrega coordenadas? Antes de devolverlo, verifica: ¿estás en exteriores?, ¿pasaron 60 segundos?, ¿TX está cruzado a RX?, ¿el baud es 9600?

Consultar diagnóstico de GPS →

Sentencias NMEA que el NEO-6M transmite

Si abres el monitor serial sin usar TinyGPS++, verás líneas de texto como esta:

$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47

Cada sentencia comienza con $GP (GPS) y un identificador de tres letras. Las más útiles son:

Sentencia Contenido Relevancia
$GPGGA Fix, latitud, longitud, altitud, satélites, HDOP Alta: datos esenciales de posición
$GPRMC Hora UTC, estado de fix, velocidad, rumbo Alta: recomendada para navegación mínima
$GPGSA Modo de fix (2D/3D), IDs de satélites usados, PDOP, HDOP, VDOP Media: calidad del fix
$GPGSV Satélites visibles, elevación, acimut, SNR Baja: diagnóstico de cobertura
$GPVTG Rumbo y velocidad sobre el suelo Baja: redundante con RMC

El checksum al final (ej. *47) verifica la integridad de la sentencia. Si ves caracteres corruptos o checksums inválidos, revisa la calidad de la conexión de cables Dupont; los contactos flojos generan errores de bit en 9600 baud.

Consejos para mejorar la recepción

Usa una antena activa si el módulo lo soporta. El GY-NEO6MV2 incluye una antena cerámica pasiva que funciona en exteriores despejados. Si necesitas fix bajo vegetación o cerca de edificios, una antena activa con amplificador LNA integrado mejora la sensibilidad en 3–5 dB. Asegúrate de que el módulo entregue 3,3 V al conector de antena externa.

Implementa un LED de estado de fix. El pin PPS parpadea una vez por segundo cuando el GPS tiene fix válido. Conecta un LED con resistencia de 1 kΩ entre PPS y GND. Si el LED permanece apagado o encendido fijo, el GPS aún no ha adquirido posición.

Guarda el almanaque con una batería de respaldo. El NEO-6M tiene un pin V_BCKP para alimentar la memoria RTC y el almanaque con una pila CR1220 o similar. Con respaldo, el hot start reduce el TTFF de 27 segundos a ~1 segundo. Sin respaldo, cada encendido es cold start.

Para logging en vehículos, usa una microSD con timestamp. El módulo GPS entrega hora UTC atómica con precisión de microsegundos. Eso permite sincronizar logs de sensores (temperatura, aceleración) sin depender del reloj del Arduino, que tiene deriva de segundos por día.

Pantalla de computadora mostrando datos de coordenadas y mapa
Visualización de coordenadas GPS en monitor serial con datos de satélites

Preguntas frecuentes

¿Por qué mi GPS no da coordenadas aunque esté encendido?

Los motivos más frecuentes son: prueba en interiores (la señal GPS no atraviesa techos), menos de 60 segundos de espera en primer encendido (cold start), conexión TX→TX en lugar de TX→RX del Arduino, baud rate distinto a 9600, o alimentación insuficiente desde el pin 3,3 V del Arduino. Verifica estos cuatro puntos antes de considerar el módulo defectuoso.

¿Cuál es la precisión real del NEO-6M en Chile?

El datasheet especifica 2,5 m CEP (Circular Error Probable), lo que significa que el 50 % de las mediciones caen dentro de un círculo de 2,5 m de radio. En la práctica, con la antena cerámica pasiva incluida en los módulos chinos, la precisión en Santiago es de 3–8 m en campo abierto y puede degradarse a 15–30 m en calles con edificios altos por efecto multipath.

¿Puedo usar el GPS dentro de un auto?

Sí, pero coloca la antena en el parabrisas o en el techo. El metal de la carrocería atenúa la señal. Si usas solo la antena cerámica del módulo dentro del habitáculo, el tiempo de fix será mayor y la precisión menor. Para proyectos de rastreo vehicular, una antena activa magnética externa es prácticamente obligatoria.

¿Cómo configuro el NEO-6M a 5 Hz o 10 Hz?

El NEO-6M máximo admite 5 Hz mediante mensajes UBX binarios. Necesitas enviar un paquete UBX-CFG-RATE con el período deseado. A 5 Hz, el consumo sube ligeramente y el Arduino debe procesar datos más rápido. Para 10 Hz necesitas saltar al NEO-7M o NEO-M8N. Ten en cuenta que a mayor frecuencia, menor es el tiempo disponible para el microcontrolador entre sentencias NMEA.

¿El NEO-6M funciona sin antena conectada?

No. El módulo GY-NEO6MV2 incluye una antena cerámica soldada en la PCB. Si esa antena está dañada o desoldada, el módulo no adquirirá fix. Algunas versiones traen un conector U.FL para antena externa; si conectas una antena externa, asegúrate de que el módulo tenga el jumper o soldadura correcta para seleccionar la entrada externa en lugar de la cerámica.

¿Dónde compro el módulo GPS NEO-6M en Chile?

En tiendas especializadas como Ukrabot puedes conseguir módulos GY-NEO6MV2 con antena, Arduino Nano, cables Dupont y antenas activas con despacho a regiones y factura. Los módulos importados por AliExpress cuestan ~$6.000–$10.000 CLP, pero el envío demora 2–4 semanas y no incluye soporte técnico para configuración.

Conclusión

El módulo GPS NEO-6M es una entrada económica al mundo del posicionamiento satelital en proyectos de electrónica. Su precio de ~$12.000 CLP en tienda nacional lo hace accesible, pero sus limitaciones son reales: solo constelación GPS, precisión de metros (no centímetros), y necesidad imperiosa de cielo despejado.

Para un rastreador básico con Arduino Nano, protoboard y el código de TinyGPS++, el presupuesto total ronda los $35.000 CLP. Eso te da coordenadas latitud/longitud, cantidad de satélites y una estimación de precisión (HDOP) que te permite descartar lecturas de baja calidad.

La clave del éxito no está en el código: está en la paciencia del cold start y en la conexión cruzada TX→RX. Si llevas el módulo a la azotea, esperas 60 segundos y cruzaste los cables correctamente, verás coordenadas. Si omites cualquiera de esos tres pasos, pasarás horas debuggeando un hardware que en realidad funciona perfectamente.

Para proyectos que requieren fix en interiores o precisión submétrica, salta directamente al NEO-M8N con RTK o a receptores multibanda. El NEO-6M cumple su función, pero no es más de lo que promete.

¿Armando tu rastreador GPS con Arduino?

Tenemos módulos NEO-6M, NEO-M8N, Arduino Nano y antenas activas con despacho a todo Chile.

🛒 Ver módulos GPS en stock →