Blog Search

Recent Articles

Tutorial Arduino: Modulo GPS GPS6MV2

Tutorial Arduino: Modulo GPS GPS6MV2

Tutorial Arduino: Módulo GPS GPS6MV2



Hola amigos tecnólogos; En nuestra entrada de hoy estudiaremos el módulo GPS GPS6MV2. 
Aprendiendo el manejo de este dispositivo se nos abrirá las puertas de muchos e interesantes proyectos donde la localización, altura, velocidad o dirección de nuestro proyecto sea algo crucial para el funcionamiento del mismo.

Materiales necesarios



Arduino UNO
Modulo GPS6MV2
Cables de conexión.

Conozcamos un poco más el módulo GPS6MV2



Este módulo GPS ideal para controlarlo con Arduino o con cualquier otro microcontrolador esta basado en el chip receptor NEO 6M de la marca UBLOX.
El GPSMV2 incluye una antena Cerámica lista para ser instalada directamente en la PCB. 
La PCB viene provista de conectores para la alimentación y la trasnmisión de datos (Vcc, Tx, Rx y Gnd).

Características técnicas



-Receptor: Ublox NEO 6M
-Voltaje de alimentación: 3V a 5V
-Interfaz: UART, comunicación asíncrona
-Modelo: GY-GPSMV2


Esquema de conexión



En el siguiente esquema se representa la forma de conectar nuestro GPS a Arduino.
La conexión la hacemos en los pines 3 y 4, ya que estos son los pines que usaremos para la comunicación serie en lugar de los que Arduino tiene por defecto que son el pin 0 y 1.
Esto lo hacemos para evitar tener que desconectar el módulo GPS de Arduino cada vez que necesitamos programar Arduino.

Para usar otros pines como puerto serie tenemos usar la librería software serial. Esta librería esta instalada por defecto en el IDE de Arduino.


gps6mv2


Código



En esta ocasión tenemos dos formas de recoger los datos que el GPS genera. 

1.Código para la obtención datos puros.

Con este código podemos leer constantemente el módulo GPS6MV2 y representar estos datos por el monitor serial.
Hay que tener en cuenta que la comunicación con el GPS se hace a 9600 baudios, pero la de Arduino con el monitor serial se hace a 115200 baudios, por lo que tenemos que cuando abramos el monitor serial tenemos que cambiar de 9600 a 115200 baudios.

#include <SoftwareSerial.h>
SoftwareSerial gps(4,3);

char dato=' ';

void setup()
{
 Serial.begin(115200);            
 gps.begin(9600); 
}

void loop()
{
  if(gps.available())
  {
    dato=gps.read();
    Serial.print(dato);
    delay (50);
  }
}


Con el código de más arriba se reciben los datos ''puros'' es decir datos que siguen el protocolo NMEA (National Marine electronics Asociation). Este es un protocolo standar para la recepcion de datos GPS.

En la siguiente imagen podemos ver los datos del GPS.

gps arduino leantec


Nosotros nos quedaremos con la linea marcada de rojo en la imagen de más ariba, la que empieza por GPRMC y descifraremos los datos que en ella aparecen de lasiguiente forma:

120121.00: Nos indica la hora GMT ()
A: Nos indica que el dato de posición es correcto. (Si aparece una V es que no es correcto)
3718.51170: Nos indica la longitud ()
N: Nos indica al Norte.
00614.55235: Nos indica la latitud ()
W: Nos indica al Oeste
1.114: Nos indica la velocidad en nudos.
210416: Nos indica la fecha ()



2.Codigo para la obtencio de datos con libraria

Con este código obtenemos los datos con más orden. Para poder hacer esto necesitamos tener instalada la libreria TinyGPS.

Descargar librería TinyGPS

#include <SoftwareSerial.h>//incluimos SoftwareSerial
#include <TinyGPS.h>//incluimos TinyGPS

TinyGPS gps;//Declaramos el objeto gps
SoftwareSerial serialgps(4,3);//Declaramos el pin 4 Tx y 3 Rx
//Declaramos la variables para la obtención de datos
int year;
byte month, day, hour, minute, second, hundredths;
unsigned long chars;
unsigned short sentences, failed_checksum;

void setup()
{

Serial.begin(115200);//Iniciamos el puerto serie
serialgps.begin(9600);//Iniciamos el puerto serie del gps
//Imprimimos:
Serial.println("");
Serial.println("GPS GY-GPS6MV2 Leantec");
Serial.println(" ---Buscando senal--- ");
Serial.println("");
}

void loop()
{
while(serialgps.available()) 
{
int c = serialgps.read(); 
if(gps.encode(c)) 
{
float latitude, longitude;
gps.f_get_position(&latitude, &longitude);
Serial.print("Latitud/Longitud: "); 
Serial.print(latitude,5); 
Serial.print(", "); 
Serial.println(longitude,5);
gps.crack_datetime(&year,&month,&day,&hour,&minute,&second,&hundredths);
Serial.print("Fecha: "); Serial.print(day, DEC); Serial.print("/"); 
Serial.print(month, DEC); Serial.print("/"); Serial.print(year);
Serial.print(" Hora: "); Serial.print(hour, DEC); Serial.print(":"); 
Serial.print(minute, DEC); Serial.print(":"); Serial.print(second, DEC); 
Serial.print("."); Serial.println(hundredths, DEC);
Serial.print("Altitud (metros): "); Serial.println(gps.f_altitude()); 
Serial.print("Rumbo (grados): "); Serial.println(gps.f_course()); 
Serial.print("Velocidad(kmph): "); Serial.println(gps.f_speed_kmph());
Serial.print("Satelites: "); Serial.println(gps.satellites());
Serial.println();
gps.stats(&chars, &sentences, &failed_checksum);
}
}
}
En la siguiente imagen vemos como se verán los datos recogidos por el GPS.

Datos gps arduinoPor último y para comprobar que la información recopilada por el módulo GPS6MV2 introducimos la latitud y la longitud en google maps.

gps maps arduino

12Comentarios

    • Avatar
      Nicolás
      ene 9, 2017

      Hola buenas, tengo un problema con el GPS, he probado con dos modelos distintos de GPS, actualmente estoy probando con el GY-GPS6MV2 con una placa arduino Leonardo. Al compilar el código de ejemplo de la librería TinyGPS simple_test en el moditor serie solo me saca CHARS=0 SENTENCES=0 CSUM ERR=0 ** No characters received from GPS: check wiring ** He revisado que las conexiones esten bien e incluso he probado variar la velocidad del GPS desde 4800 hasta 115200 baudios y nada, ¿que podría ser?. Un saludo, gracias.

      • Avatar
        Sebasthian
        feb 19, 2017

        Deberías probar intercambiando los pines TX y RX. Saludos!

    • Avatar
      Blanca López
      feb 25, 2017

      Buenos días, quería saber si sería muy complicado recibir esos datos en una tablet (qué cambiaría en el código) a través de un bluetooth hc-06 que ya estaría conectado a los pines Rx y Tx de Arduino. Muchas gracias.

    • Avatar
      Carlos
      mar 23, 2017

      Yo he conseguido hacerlo funcionar... Ahora, en la hora me muestra 1 hora me la y en la altura se sube casi 100m más o menos.... Esto como se podría calibrar??

    • Avatar
      javier
      mar 30, 2017

      hola buenas, he utilizado el segundo programa y la librería, no me funciona, lo estoy utilizando con un arduino mega, ¿puede ser esa la causa? muchas gracias

      • Avatar
        Jorge Andrés Romero
        sep 18, 2017

        Me gustaría saber cómo di pudiste solucionarlo con el arduino mega o lo tuviste que hacer con el arduino uno. Gracias

    • Avatar
      Mauricio
      abr 22, 2017

      Hola, He adquirido el GpS6MV2 y ha sido imposible recibir datos utilizando arduino YUN, Solo obtengo asteriscos y ceros. Sin embargo utilizando el mismo programa y el arduino UNO funciona perfectamente. Que debo hacer para que funcione en el YUN, necesito recibir datos y subirlos a la web via wifi. Por favor responder. Muchas Gracias..

      • Avatar
        Jaime
        jul 12, 2017

        Hola, tengo el mismo problema, me da ceros y asteriscos pero para arduino uno. Conseguiste solucionarlo? sabes a qué se debe? yo tengo un shield que incorpora el ublox. Saludos

    • Avatar
      Jose Alejandro
      jul 7, 2017

      Hola buenas tardes, Tu sabes como puedo hacer la implementacion con Labview...?? Infinitas gracias...saludos...

    • Avatar
      Jorge Andrés Romero
      sep 18, 2017

      Hola buenas tardes, primero que todo gracias por tan excelente tutorial. Soy nuevo en esto del arduino. Tengo una pregunta. Primero tengo un arduino MEGA en vez del UNO (no creó que tenga problema) siguiendo el pasó a pasó cada una de las indicaciones, en el monitor serial pueden pasar horas y no me arroja ningun tipo de dato, el gps enciende el link, quiere decir que funciona así como el arduino funciona también, no se que pueda estar haciendo mal o que pueda estar fallando, me podrian ayudar x favor. De ante mano muchas gracias.

    • Avatar
      rey salcedo
      nov 6, 2017

      Excelente, gracias, todo funcionó con el arduino nano, mil gracias

    • Avatar
      Gustavo
      dic 9, 2017

      Cuando corro el programa solo obtengo "⸮⸮⸮" Alguien sabe como puedo solucionar esto? estoy usando un arduino uno. Ya he intentado varios ejemplos y en todos obtengo caracteres raros.

Leave a Reply

* Name:
* E-mail: (Not Published)
   Website: (Site url withhttp://)
* Comment:
Type Code