Tutorial - GPS / Skylab SKM53

¿Qué es el GPS? 
Es un sistema de posicionamiento global, que permite determinar la posición de un objeto en todo el mundo con una precisión que va de los centímetros a los metros. Los datos para obtener dicha ubicación se determina a través de 24 satélites alrededor del mundo.

Para ubicar la posición en el mapa, usamos dos coordenadas angulares que se miden desde el centro de la Tierra.
  # Latitud: Corresponde a las coordenadas norte y sur.
  # Longitud: Corresponde a las coordenadas este y oeste.

Usaremos el mapa como referencia para determinar la ubicación aproximada de Arequipa. Trazamos dos líneas para obtener las coordenadas que son:
  # Latitud: 16 grados sur
  # Longitud: 71 grados oeste


El GPS que usamos en aplicaciones no nos proporciona las coordenadas directamente con el hemisferio. En cambio, las coordenadas se pueden reescribir de la siguiente manera:
  # Latitud: - 16 (Al estar debajo de la línea de demarcación de hemisferio norte y sur).
  # Longitud: -71 (Al estar a la izquierda de la línea de demercación del hemisferio oeste y este).

SKYLAB SKM53
El modelo usado para este tutorial es el modelo comercial SkyNav SKM53, esta placa de desarrollo contiene embebida una antena y no se necesitan mayores accesorios para hacerlo funcionar. Se aplica en:

  # Sistemas de navegación de vehículos.
  # PND - Artefactos de navegación portables.
  # Receptores GPS por Bluetooth.
  # Aplicación de temporizado.
  # Determinación de la velocidad de desplazamiento.

Algunas de las prestaciones que posee son las siguientes:
  # Sensibilidad de -165 dBM.
  # Velocidad de transferencia de datos de 9600 bps.
  # Protocolo NMEA.

Para mayor información tenemos el "Datasheet"

CONEXIÓN
Para realizar la prueba de funcionamiento usamos un Arduino Uno. La conexión que se debe realizar es de la siguiente manera:
  # RXD (GPS) ==> Pin 3 (Arduino Uno).
  # TXD (GPS) ==> Pin 2 (Arduino Uno).
  # GND (GPS) ==> GND (Arduino Uno).
  # VCC (GPS) ==> 5V (Arduino Uno).


SOFTWARE DE PRUEBA
Antes de poder escribir el programa, debemos bajar dos librerías que se adjuntan a la librería de Arduino IDE en nuestra PC. Primero bajamos la librería "TinyGPS 13" que nos permite manejar los periféricos del GPS, adquirir datos, etc. De la misma manera, debemos usar una librería especialmente hecha para poder comunicarse con este tipo de dispositivos "New Software Serial Library", esta funciona para versiones de Arduino actuales o a partir de la versión 1.0 en adelante.

Luego, implementamos el siguiente código en nuestro Arduino:
/*
   PROGRAMA DE PRUEBA: SkyNav SKM53 GPS
   CONEXION:
             RXD: Arduino Pin 3
             TXD: Arduino Pin 2
             GND: Arduino GND
             VCC: Arduino 5V
             NC y RST: Dejar sin conexion
             
   Para correr el programa se necesitan las librerias TinyGPS 13 (TinyGPS.h)
   y New Software Serial Library (NewSoftSerial.h)
   
   Se pueden encontrar en:
   https://github.com/mikalhart/TinyGPS/releases/tag/v13 
   http://arduiniana.org/libraries/newsoftserial/
   
   Tambien en el tutorial correspondiente en: http://beetlecraft.blogspot.pe/

   Autor: Renato H.
   http://beetlecraft.blogspot.pe/
   
   El siguiente programa es de uso publico, cualquier modificacion o mal uso del mismo que pudiera 
   ocasionar el mal funcionamiento de la plataforma de uso de la misma no es responsabilidad del autor
*/

#include <TinyGPS.h>        // Libreria de manejo del GPS
#include <SoftwareSerial.h> // Libreria de manejo de comunicacion serial alterna

long lat, lon;  // Variables auxiliares para lectura de longitud y latitud
float LAT, LON; // Variables auxiliares para latitud y longitud con punto decimal 

SoftwareSerial ss(2,3); // Pines usados para comunicacion con el GPS (RXD = 2, TXD = 3)
TinyGPS GPS; // Declaracion de cabecera para la funcion GPS

void setup(){
  ss.begin(9600);     // Velocidad de comunicacion del GPS (Segun hoja de datos)
  Serial.begin(9600); // Velocidad de comunicacion con la computadora
}

void loop(){
  lectura_serial(); // Lectura de la informacion del GPS
}

void lectura_GPS(){
  bool newdata = false;               // Variable auxiliar para ingreso de datos
  unsigned long start = millis();     // Variable auxiliar para refresh y update datos
  
  while (millis() - start < 1000){    // Update de lectura cada segundo
    if (feedgps ()){newdata = true;}  // Validacion de datos en la pila
  }
  if (newdata){informacion_gps(GPS);} // Ingreso de datos
}

bool feedgps(){
  while (ss.available()){      // Mientras exista informacion en la pila de datos
    if (GPS.encode(ss.read())) // Validacion de existencia de datos en la pila de datos
      return true;
  }
  return 0;
}

void informacion_gps(TinyGPS &GPS)
{
  GPS.get_position(&lat, &lon); // Byte de datos de latitud y longitud
  LAT = lat; // Adquicion de datos en decimales
  LON = lon; // Adquicion de datos en decimales  
  {
    feedgps(); // Sin esta funcion, puede causarse un error de suma
  }
}

void lectura_serial(){
  GPS.get_position(&lat, &lon);    // Adquicion de datos de latitud y longitud
  lectura_GPS();                   // Funcion de rutina de lectura del GPS
  Serial.print("Latitud : ");    
  Serial.print(LAT/1000000,10);    // Latitud en grados con diez decimales
  Serial.print(" :: Longitud : "); 
  Serial.println(LON/1000000,10);  // Longitud en grados con diez decimales
}
El resultado obtenido al abrir el puerto serial del Arduino IDE debe ser el siguiente:

 

COMPROBACIÓN DE LAS COORDENADAS OBTENIDAS
Los valores obtenidos deben ser parecidos a los siguientes (La latitud y longitud se miden de -90 a 90 grados):
  # Latitud: -16.4XXXXXXXXX
  # Longitud: -71.5XXXXXXXXX

Para visualizar los datos en Google Maps, podemos usar la siguiente página: http://itouchmap.com/latlong.html 

En la parte inferior derecha podemos ingresar estos datos, la que posee el encabezado "Show Point from Latitud and Longitude" y el resultado que se visualizado será parecido al siguiente:


ALGUNOS PROBLEMAS COMUNES
Inconvenientes comunes pueden presentarse mientras se aprende a usar este módulo. Algunos de ellos se describen a continuación:

# Insuficiente corriente en el GPS, se recomienda usar un puerto USB 3 si está alimentando el Arduino Uno al GPS. Si el caso persiste, es preferible usar una fuente de 5V separada para el GPS.
# Es posible que los valores que se miran en el visualizador del puerto serial sean "Longitud: 0.0000000000 :: Latitud: 0.0000000000", es normal mientras el GPS recibe los datos y los procesa, este proceso puede demorar unos cuantos segundos. Si los datos son los mismos es preferible realizar las mediciones cerca de una ventana abierta o en exteriores. 

Autor: 

No hay comentarios:

Publicar un comentario