Interfaz del módulo GPS uBlox NEO6M con Arduino

El GPS se usó ampliamente en las navegaciones marinas, principalmente en la antigüedad. Después de eso, los gobiernos decidieron brindar acceso a todos los usuarios del mundo para usar la navegación GPS. Hoy en día, todas las personas lo utilizan ampliamente en sus teléfonos móviles, sistemas de navegación para automóviles, drones, sistemas de seguimiento de activos en logística, antirrobo para motocicletas, etc. Casi todos nosotros podríamos haber usado Google Maps de alguna manera. Así que somos conscientes de lo que hace un GPS. Entonces, profundicemos en cómo usamos este módulo GPS con Arduino para obtener la ubicación, la fecha y la hora, etc.

Un módulo GPS recibe señales de los Satélites GPS. Hay un mínimo de 3 satélites para obtener una ubicación precisa de 3D Fix; de lo contrario, puede detectar la ubicación utilizando solo un satélite (pero no con precisión). El número de señales de satélite que recibe aumenta la precisión de la ubicación.

El módulo GPS uBlox NEO6M tiene una gran antena de 25 mm x 25 mm junto con una batería y EEPROM para bloquear los satélites más rápido. El módulo tiene una Antena GPS conectada a través de un conector uFl. No tiene ningún indicador LED de encendido, pero tiene un LED integrado que indica que el satélite está fijo. Cada vez que el LED parpadea, el satélite está fijo y envía los datos a través de los pines de comunicación en serie. Envía continuamente los datos a través de los pines seriales. Todo lo que tenemos que hacer es obtener los datos y analizarlos para obtener la información requerida utilizando el microcontrolador/microprocesador. La velocidad de transmisión predeterminada para el módulo GPS NEO6M es de 9600 bps.

En este tutorial, veremos cómo usar este Módulo GPS con Arduino.

Componentes requeridos:

Diagrama de circuito:

Usaremos Software Serial Library para esto, ya que vamos a imprimir los datos del GPS al Serial Monitor. Si usa el mismo puerto de comunicación, ambos datos chocarán y obtendremos datos no válidos. Arduino MEGA tiene 4 puertos COM dedicados, pero en UNO solo necesitamos usar la biblioteca de software.

pines arduino Pines GPS NEO6M
TIERRA TIERRA
Patilla 9 (RX) Texas
Patilla 8 (TX) RX
CCV (+5V) VCC (3,6 a 5 V)

Nota: Según la hoja de datos de uBlox NEO6M, el nivel de voltaje para el módulo GPS es de 3,6 V. Pero no enfrentamos ningún problema de calentamiento con 5V. Puede probar con 3,3 V inicialmente (también para TX/RX) y puede cambiar a 5 V si es necesario. Pero aun así, se recomienda utilizar un Level Shifter para fines prolongados.

Código para obtener datos GPS RAW:

/*  *Author: Sharath  *Website: http://www.revhardware.com  */   #include <SoftwareSerial.h>  SoftwareSerial mySerial(9, 8); // (RX,TX of Arduino)  void setup() {   Serial.begin(9600);// Serial Monitor Baud Rate   mySerial.begin(9600); //GPS Port Baud }  void loop() {   while (mySerial.available() > 0){     byte rawData = mySerial.read();//Storing bytes in rawData Variable     Serial.write(rawData); //Printing rawData on Serial Monitor  } }

En el código anterior, declaramos el pin 9 como RX y el pin 8 como TX para SoftwareSerial. Lo llamamos mySerial para un uso simple.

#include <SoftwareSerial.h> SoftwareSerial mySerial(9, 8); // (RX,TX of Arduino)

En el bucle de configuración, configuramos la velocidad en baudios para GPS en 9600 (velocidad en baudios NEO6M predeterminada).

mySerial.begin(9600);

Dentro del bucle principal, cuando los datos están disponibles, los almacenamos en la variable rawData del módulo GPS y luego los imprimimos en el monitor serie.

while (mySerial.available() > 0)   {     byte rawData = mySerial.read();//Storing bytes in rawData Variable     Serial.write(rawData); //Printing rawData on Serial Monitor   }

Ahora cargue el código completo y abra el monitor en serie. Asegúrese de que la velocidad en baudios esté configurada en 9600 y que el LED del GPS esté parpadeando. Si todo es perfecto, puede ver los datos como este a continuación.

“€GPRMC,045103.000,A,3014.1984,N,09749.2872,W,0.67,161.46,030913,,,A*7Crn”

“€GPGGA,045104.000,3014.1985,N,09749.2873,W,1,09,1.2,211.6,M,-22.5,M,,0000*62rn”

“€GPRMC,045200.000,A,3014.3820,N,09748.9514,W,36.88,65.02,030913,,,A*77rn”

“€GPGGA,045201.000,3014.3864,N,09748.9411,W,1,10,1.2,200.8,M,-22.5,M,,0000*6Crn”

“€GPRMC,045251.000,A,3014.4275,N,09749.0626,W,0.51,217.94,030913,,,A*7Drn”

“€GPGGA,045252.000,3014.4273,N,09749.0628,W,1,09,1.3,206.9,M,-22.5,M,,0000*6Frn”;

Puede parecer confuso porque estos son enormes bytes de datos que vienen en lenguaje GPS. Estas se denominan Sentencias NMEA. NMEA significa Asociación Nacional de Electrónica Marina. Hay algunos analizadores en línea disponibles para decodificar la información. Pero necesitamos analizarlo en nuestra placa Arduino. Para eso, hay una biblioteca disponible llamada TinyGPS++ para analizar los datos GPS. Veremos cómo usarlo fácilmente.

Análisis de datos usando la biblioteca TinyGPS++:

  • Descarga la Biblioteca TinyGPS++.
  • En Arduino IDE, vaya a Sketch > Incluir biblioteca > Agregar biblioteca .ZIP > Seleccione la biblioteca .zip descargada.
  • Cierra y vuelve a abrir tu IDE. Copie y pegue el siguiente código.

Codificación para analizar datos de latitud y longitud utilizando la biblioteca TinyGPS++:

/*  * Author: Sharath  * Website: www.revhardware.com  */   #include <TinyGPS++.h> #include <SoftwareSerial.h>  static const int RXPin = 9, TXPin = 8; //Arduino SoftSerial static const uint32_t GPSBaud = 9600;  TinyGPSPlus gps; //TinyGPS Object  // The serial connection to the GPS device SoftwareSerial mySerial(RXPin, TXPin);  void setup() {   Serial.begin(9600);  mySerial.begin(GPSBaud); }  void loop()    {     while (mySerial.available() > 0)      {       gps.encode(mySerial.read());       if (gps.location.isUpdated())        {         Serial.print("Latitude= ");          Serial.print(gps.location.lat(), 6); //Getting Latitude         Serial.print(" Longitude= ");          Serial.println(gps.location.lng(), 6); //Getting Longitude          // Number of satellites in use         Serial.print("Number os satellites in use = ");          Serial.println(gps.satellites.value());         }       }     }

Cargue el código y podrá ver los valores de latitud y longitud que se muestran cada segundo, una vez que se analizan los datos.