Skip to Content

Arduino and Neo-6M For GPS Navigation

Arduino and Neo-6M For GPS Navigation

Hoy en día no se puede imaginar el mundo sin el GPS. 

Millones de personas utilizan a diario el GPS para desplazarse de un lugar a otro. 

El GPS también desempeña un papel vital en las aplicaciones de defensa y espaciales. Los satélites de órbita terrestre baja (LEO) utilizados para la comunicación con los medios de comunicación y la previsión meteorológica dependen del GPS para su funcionamiento. 

El GPS también es útil para localizar paquetes, mascotas, niños e incluso excursionistas perdidos.

Este tutorial construirá un proyecto de módulo GPS Arduino utilizando el módulo Neo-6M de u-Blox. 

Le he proporcionado una guía completa paso a paso, diagramas de conexión y código de ejemplo de Arduino para construir un proyecto en el que también puede seguir la posición y la velocidad de cualquier objeto. 

Al final del artículo, encontrarás una recopilación de las preguntas más frecuentes sobre los módulos GPS con sus respuestas.

Comencemos.

Componentes necesarios para construir el proyecto GPS Arduino Neo-6M

Componentes de hardware

Software

Makerguides.com participa en el Programa de Asociados de Amazon Services LLC, un programa de publicidad de afiliados diseñado para proporcionar un medio para que los sitios ganen honorarios de publicidad mediante la publicidad y los enlaces a productos en Amazon.com.

Fundamentos del módulo GPS Neo-6M

En esta sección, veremos los detalles del pinout, las características y algunas herramientas útiles para completar los proyectos de GPS.

Veamos las características del módulo GPS Neo-6M.

¿Cuáles son las características del módulo GPS Neo-6M?

El módulo GPS Neo-6M es una variante de los receptores GPS suministrados por u-Blox. El receptor Neo-6M tiene las siguientes características.

  • Funciona de 2,7 V a 3,6 V
  • Ofrece varias opciones de interfaz serie (SPI, UART, USB, etc.)
  • Admite la función RTC con cristal RTC incorporado
  • Admite la función de activación externa
  • Calificación AEC-Q100 
  • Admite 50 canales
  • Soporta GPS en la banda L1
  • El tiempo para la primera fijación es de unos 27 segundos (arranque en frío)
  • La mejor sensibilidad del sector, -161 dBm
  • Admite una frecuencia de actualización de la posición de 5 Hz (5 veces por segundo)
  • Precisión
    1. Posición horizontal - 2,5 m
    2. Velocidad - 0,1 m/s

-> Lea nuestra guía sobre lo que puede construir con Adruino.

Diagrama de bloques del módulo GPS

Puede encontrar un filtro SAW (un componente crítico en el enlace de RF para los receptores GPS), un frontal de RF con LNA (amplificador de bajo ruido) integrado y un procesador de banda base para procesar las señales.

Diagrama de bloques del módulo GPS

Aquí está el pinout del chip Neo-6.

pinout del chip Neo-6

Puede encontrar los detalles de los pines del Neo-6M IC aquí. 

No Módulo Nombre E/S Descripción 
1Todo Reservado Reservado 
2Todo SS_N  Selección de esclavo SPI  
3Todo TIMEPULSE Pulso de tiempo (1PPS) 
4Todo EXTINT0 Pin de Interrupción Externa 
5Todo USB_DM E/S Datos USB 
6Todo USB_DP E/S Datos USB 
7Todo VDDUSB Suministro USB 
8Todo Reservado   Véase el manual de integración del hardware

Los pines 8 y 9 deben estar conectados. 
9Todo VCC_RF Tensión de salida Sección RF

Las clavijas 8 y 9 deben estar conectadas entre sí. 
10Todo GND Tierra 
11Todo RF_IN Entrada de señal GPS 
12Todo GND Tierra 
13Todo GND Tierra 
14Todo MOSI/CFG_COM0 O/I SPI MOSI / Pin de configuración. Dejar abierto si no se utiliza. 
15Todo MISO/CFG_COM1 SPI MISO / Pin de configuración. Dejar abierto si no se utiliza. 
16Todo CFG_GPS0/SCK  Pin de configuración del modo de alimentación / Reloj SPI. Dejar abierto si no se utiliza.  
17Todo Reservado Reservado 
18Todo SDA2 E/S Datos DDC 
19Todo SCL2 E/S Reloj DDC 
20Todo TxD1 Puerto serie 1 
21Todo RxD1 Puerto serie 1 
No Módulo Nombre E/S Descripción 
22Todo V_BCKP Suministro de tensión de reserva 
23Todo VCC Tensión de alimentación 

Estamos utilizando el módulo que viene con el chip ya montado.

Veamos de cerca el módulo, las partes críticas y los detalles del conector de la placa GPS Neo-6M.

Detalles del conector de la tarjeta GPS Neo-6M

El conector del host tiene cuatro pines. Aquí están los detalles de los cuatro pines. Necesitarás estos pines para completar la conexión con el Arduino.

pines para completar la conexión con el Arduino
Pin EtiquetaFunción
1VCCPin de alimentación de entrada. Conecta 5 V de Arduino al pin VCC
2RXPin UART Rx del módulo GPS. Conectar al pin Tx del Arduino
3TXPin UART Tx del módulo GPS. Conectar al pin Rx del Arduino
4GNDConexión a tierra

Buenos recursos para entender el GPS y el formato NEMA

En la siguiente sección, conectaremos el Arduino UNO al módulo GPS.

Instrucciones paso a paso para conectar el Neo-6M con Arduino UNO

En esta sección, construiremos un proyecto utilizando Arduino UNO y el módulo receptor GPS de u-Blox.

Las conexiones son fáciles de realizar y llevan mucho menos tiempo.

Empecemos con las conexiones de hardware.

¿Cómo conectar el módulo GPS Neo6M al Arduino UNO?

A continuación se muestra la guía de conexión paso a paso para completar el Arduino y el módulo GPS Neo-6M u-Blox, y a continuación he proporcionado un código de ejemplo para que lo utilices también.

En este proyecto, interconectarás el módulo GPS Neo-6M a través del puerto serie con el Arduino UNO.

Paso 1: Empezar con las conexiones GND

Comienza con las conexiones GND

Puedes elegir cualquier pin GND del Arduino para completar las conexiones GND.

Es una buena práctica conectar primero los pines GND. 

Paso 2: Conectar el pin UART Tx

Conectar el pin Tx de la UART

Conecta el pin de transmisión UART (Tx) del módulo GPS al pin 5 del Arduino UNO.

Puedes elegir cualquier pin del Arduino utilizando el software de serie.

Por favor, actualiza el sketch de Arduino para reflejar los mismos pines en ambos códigos y las conexiones. 

Paso 3: Conectar el pin Rx de la UART.

Conecta el pin Rx de la UART.

Conecta el pin de recepción UART del módulo GPS (Rx) al pin 4 del Arduino UNO. Puedes elegir cualquier pin del Arduino utilizando el software de serie.

Por favor, actualiza el sketch de Arduino para reflejar los mismos pines en ambos códigos y las conexiones. 

Paso 4: Conecte la clavija de alimentación.

Conecte la clavija de alimentación

Conecta el VCC del módulo GPS al pin de 5 V del Arduino UNO. Esto completa la conexión necesaria.

Paso 5: La conexión completa

La conexión completa

¡Enhorabuena! Has completado todas las conexiones esenciales necesarias para el proyecto de Arduino y el módulo GPS Neo-6M. 

En la siguiente sección, programaremos el Arduino UNO con el sketch necesario para comunicarse con el módulo Neo-6M.

Ejemplo de código Arduino para el módulo GPS Neo-6M

En esta sección encontrarás el sketch de Arduino que necesita el Arduino para comunicarse 

Con el módulo GPS Neo-6M. 

Vamos a utilizar la biblioteca TinyGPSPlus para el proyecto. Para instalar el módulo TinyGPSPlus, siga las siguientes instrucciones. 

1. Abra el IDE de Arduino

Abra el IDE de Arduino

2. Haga clic en Herramientas y seleccione Gestionar Bibliotecas.

Haga clic en Herramientas y seleccione Gestionar Bibliotecas

3. Introduzca TinyGPSPlus en la barra de búsqueda y pulse Enter

Una vez que encuentre la biblioteca TinyGPSPlus, haga clic en el botón Instalar para instalar la biblioteca en su PC.

Introduce TinyGPSPlus en la barra de búsqueda y pulsa Enter

Ahora está listo para cargar el código de ejemplo de abajo y probar las conexiones.

El código completo de Arduino para el módulo GPS Neo-6M

//Source: https://www.electronicwings.com/arduino/gps-module-interfacing-with-arduino-uno
 
 
#include "TinyGPS++.h"
#include "SoftwareSerial.h"

/* Create object named bt of the class SoftwareSerial */
SoftwareSerial GPS_SoftSerial(5, 4);/* (Rx, Tx) */
/* Create an object named gps of the class TinyGPSPlus */
TinyGPSPlus gps;
 
volatile float minutes, seconds;
volatile int degree, secs, mins;
 
void setup() {
  Serial.begin(9600); /* Define baud rate for serial communication */
  GPS_SoftSerial.begin(9600); /* Define baud rate for software serial communication */
}
 
void loop() {
  smartDelay(1000); /* Generate precise delay of 1ms */
  unsigned long start;
  double lat_val, lng_val, alt_m_val;
  uint8_t hr_val, min_val, sec_val;
  bool loc_valid, alt_valid, time_valid;
  lat_val = gps.location.lat(); /* Get latitude data */
  loc_valid = gps.location.isValid(); /* Check if valid location data is available */
  lng_val = gps.location.lng(); /* Get longtitude data */
  alt_m_val = gps.altitude.meters();  /* Get altitude data in meters */
  alt_valid = gps.altitude.isValid(); /* Check if valid altitude data is available */
  hr_val = gps.time.hour(); /* Get hour */
  min_val = gps.time.minute();  /* Get minutes */
  sec_val = gps.time.second();  /* Get seconds */
  time_valid = gps.time.isValid();  /* Check if valid time data is available */
  if (!loc_valid)
  {
    Serial.print("Latitude : ");
    Serial.println("*****");
    Serial.print("Longitude : ");
    Serial.println("*****");
  }
  else
  {
    DegMinSec(lat_val);
    Serial.print("Latitude in Decimal Degrees : ");
    Serial.println(lat_val, 6);
    Serial.print("Latitude in Degrees Minutes Seconds : ");
    Serial.print(degree);
    Serial.print("\t");
    Serial.print(mins);
    Serial.print("\t");
    Serial.println(secs);
    DegMinSec(lng_val); /* Convert the decimal degree value into degrees minutes seconds form */
    Serial.print("Longitude in Decimal Degrees : ");
    Serial.println(lng_val, 6);
    Serial.print("Longitude in Degrees Minutes Seconds : ");
    Serial.print(degree);
    Serial.print("\t");
    Serial.print(mins);
    Serial.print("\t");
    Serial.println(secs);
  }
  if (!alt_valid)
  {
    Serial.print("Altitude : ");
    Serial.println("*****");
  }
  else
  {
    Serial.print("Altitude : ");
    Serial.println(alt_m_val, 6);
  }
  if (!time_valid)
  {
    Serial.print("Time : ");
    Serial.println("*****");
  }
  else
  {
    char time_string[32];
    sprintf(time_string, "Time : %02d/%02d/%02d \n", hr_val, min_val, sec_val);
    Serial.print(time_string);
  }
}
 
static void smartDelay(unsigned long ms)
{
  unsigned long start = millis();
  do
  {
    while (GPS_SoftSerial.available())  /* Encode data read from GPS while data is available on serial port */
      gps.encode(GPS_SoftSerial.read());
    /* Encode basically is used to parse the string received by the GPS and to store it in a buffer so that information can be extracted from it */
  } while (millis() - start < ms);
}
 
void DegMinSec( double tot_val)   /* Convert data in decimal degrees into degrees minutes seconds form */
{
  degree = (int)tot_val;
  minutes = tot_val - degree;
  seconds = 60 * minutes;
  minutes = (int)seconds;
  mins = (int)minutes;
  seconds = seconds - minutes;
  seconds = 60 * seconds;
  secs = (int)seconds;
}

Las líneas siguientes establecen los pines serie del software.

Si tienes que conectar los pines de la UART a otros pines del Arduino UNO, por favor cambia la línea de abajo en consecuencia.

En nuestro ejemplo, hemos utilizado los pines 5 y 4 para la comunicación UART.

/* Crear un objeto llamado bt de la clase SoftwareSerial */
SoftwareSerial GPS_SoftSerial(5, 4);/* (Rx, Tx) */

Si las conexiones y la programación fueron exitosas, encontrará parámetros GPS en el terminal serial, como latitud, longitud y hora. 

Es posible que no recibas los datos pronto si trabajas en interiores. Le sugiero que se acerque a una ventana donde pueda ver el cielo abierto. 

Empezarás a ver la información de localización poco después de tener la posición bloqueada por el módulo GPS. 

En la siguiente sección, encontrarás respuestas a una serie de preguntas sobre el módulo GPS y Arduino.

Preguntas frecuentes sobre el módulo GPS Neo-6M y los proyectos Arduino

He incluido una lista de las preguntas más frecuentes sobre los proyectos realizados con Arduino y los módulos GPS Neo-6M de u-Blox.

Si tiene más preguntas, por favor publíquelas en la sección de comentarios.

Estaré encantado de responderles. 

1. ¿Cómo conecto mi Neo 6M a mi Arduino?

El Neo-6M es un módulo GPS que puede rastrear hasta 22 satélites a la vista. El módulo consume una potencia típica de unos 25 mA mientras proporciona la mejor sensibilidad para adquirir y rastrear señales GPS. 

El módulo Neo-6M puede comunicarse con Arduino a través de UART.

Puedes utilizar un puerto serie dedicado o crear un puerto serie por software para que Neo 6M y Arduino se comuniquen entre sí. 

2. ¿Cómo funciona el GPS neo 6M?

El módulo GPS Ne0-6M rastrea los satélites GPS en la banda L1. El receptor GPS puede rastrear hasta 50 canales.

Las señales recibidas de los satélites GPS se procesan y los datos extraídos son datos de efemérides y datos de almanaque.

Estos datos se utilizan para saber la hora y la distancia a la que se encuentra un determinado satélite. 

Una vez que tenga al menos tres satélites a la vista, el módulo hará una triangulación y encontrará la posición del propio módulo.

3. ¿Qué precisión tiene el GPS de Arduino?

La precisión de los módulos GPS depende de muchos factores. Por ejemplo, un primer vehículo en movimiento en una zona suburbana necesita una posición más rápida que una precisión de centímetros. 

La precisión es fundamental cuando se realizan trabajos específicos con robots en logística.

La precisión del Neo-6M también depende del número de satélites que rastrea.

La precisión horizontal es de 2,5 m, y la precisión de la velocidad es de 0,1 m/s. 

4. ¿Es preciso el GPS del Neo-6M?

Los módulos Neo-6 de u-Blox son precisos. Las especificaciones de la hoja de datos son una de las mejores del sector.

La precisión relacionada con la velocidad, la posición y el tiempo es la siguiente.

¿Es preciso el GPS del Neo-6M?

5. ¿Cómo puedo añadir la biblioteca TinyGPS a Arduino?

La biblioteca TinyGPS es una herramienta versátil para analizar los mensajes NMEA de los módulos GPS. 

Para instalar la biblioteca TinyGPS en su PC, siga los siguientes pasos.

¿Cómo puedo añadir la biblioteca TinyGPS a Arduino?
  1. Abra el IDE de Arduino. Haz clic en Herramientas. Seleccione la opción Gestionar Bibliotecas
  2. Ahora se encuentra en la ventana de opciones de la biblioteca
  3. Escribe "tinyGPS" en la barra de búsqueda y pulsa 'Enter'
  4. Seleccione la biblioteca TinyGPS de los resultados
  5. Haga clic en el botón Instalar .

La librería ya está lista para ser utilizada en tus futuros proyectos de GPS en Arduino.

Conclusión

En este artículo, hemos cubierto los fundamentos del uso del GPS con Arduino. 

Hemos examinado las principales características del módulo receptor GPS Neo-6M de u-Blox, y también hemos tratado algunas terminologías y herramientas que ayudan a procesar los datos GPS.

Tengo una buena experiencia trabajando con receptores GPS para vehículos comerciales y aplicaciones espaciales (satélites, misiles, etc.).

Estaré encantada de responder a sus preguntas si quiere saber más. 

Si tienes alguna opinión para mejorar el artículo, compártela en la sección de comentarios.

Su valiosa aportación me ayuda a mejorar la calidad del artículo y a aportar más contenido útil en el futuro. 

Por favor, recuerda compartir el artículo sobre el GPS Neo-6M con tus compañeros entusiastas de Arduino.

Ralph

Friday 29th of March 2024

your code is the cleanest and most accurate neo-6m example code I have seen.

Stefan Maetschke

Saturday 30th of March 2024

Thanks, much appreciated.

Bill Bell

Wednesday 6th of December 2023

Very encouraging article, thank you. Although I have worked with many computer systems, for several decades, I have never got into anything like an Arduino. I am wondering whether this system would perform well enough for providing the latitudes and longitudes of the headstones in a cemetery, for use in findagrave.com. (I am quite serious.) When you use a print statement where do you see the output; how does it appear?

Anyway, thanks again.

Bill Bell

Thursday 7th of December 2023

@Stefan Maetschke, thank you for your reply.

Stefan Maetschke

Wednesday 6th of December 2023

Well, the horizontal resolution of the Neo-6M is only 2.5m (under optimal conditions). So, in practice it is probably not accurate enough to distinguish between two nearby gravestones.

The print statements are sent via the USB cable to the connected computer. This is mostly for debugging. In practice you would connect a display (LCD, TFT, ...) to the Arduino to show the coordinates. Very easy to do.

But if you just need the GPS coordinates any good mobile phone can do this ;)