Universidad Nacional de San Juan Facultad de Ingeniería GPS Tracker Informe Proyecto Garcia, Jorge Reg: 23107 Gilyam, Juan Pablo Reg: 23120 Año: 2012 Índice Introducción Aplicaciones Objetivos - Generales - Específicos Descripción modulo GPS Ordenador PC-104 Sistema operativo Placa Interfaz - Funcionamiento - Diseño Software API de Google Maps Pruebas Conclusiones Bibliografia Introducción Un GPS Tracker es un dispositivo que utiliza el Sistema de Posicionamiento Global para determinar la ubicación exacta de un vehículo o persona. Los datos de localización recibidos pueden ser almacenados dentro de la unidad de seguimiento, o pueden ser transmitidos a una central remota usando algún tipo de comunicación inalámbrica. Los datos pueden ser analizados en tiempo real o luego de haberse realizado la toma de los mismos. Aplicaciones Este dispositivo puede ser utilizado para: - Monitoreo de cargas peligrosas - Seguridad y control en vehículos de transporte de media y larga distancia - Monitoreo de vehículos de pasajeros - Analizar el comportamiento frente al volante de conductores de vehículos de larga distancia Objetivo general Desarrollar el hardware y software necesario para la implementación de un sistema que sea capaz de leer los datos provenientes de un GPS, almacenarlos y mostrar la trayectoria en un mapa (Google Maps). Diagrama en bloques GPS Placa Interfaz Puerto Serie PC Software Google Maps Objetivos específicos - Configurar GPS el envió de las tramas necesarias. - Diseñar una placa interfaz entre el usuario y el dispositivo. - Instalar un sistema operativo apto para el PC-104. - Realizar el software encargado de la lectura y almacenado de los datos. - Generar los archivos necesarios que permitan la visualización del recorrido en un mapa. Descripción modulo GPS El modulo GPS utilizado en el proyecto es el GPS 18-5Hz de la firma Garmin. El mismo exterioriza la información mediante el protocolo de comunicación RS232. Este modelo en particular no trae un conector estandarizado, sino que dispone en cables individuales todas las señales que maneja. De la hoja de datos del fabricante se extrajo el conexionado del dispositivo. La forma en que el GPS entrega sus datos es a través del protocolo NMEA (National Marine Electronics Association). Básicamente consiste en tramas de datos separadas por comas (“,”), donde la primera trama es un descriptor de paquete que indica el tipo de información de la trama. Es posible configurar en el GPS que tramas se desean recibir. Esto se realiza mediante un software proporcionado por el fabricante. En nuestro caso solo son necesarias dos tramas. De ellas se podrá extraer la siguiente información. - Latitud - Longitud - Altura - Velocidad - Señal del GPS. Mediante este último dato es posible saber si el GPS recibe señal de los satélites. Si no sucede esto, la información enviada por éste corresponde al último dato válido. Las tramas enviadas tiene el siguiente formato Ordenador PC 104 El computador utilizado para el desarrollo del presente trabajo es una PC de arquitectura 104, modelo PM-LX-800. Este posee las siguientes características - Compatible con AMD. Geode™ LX 800 CPU - Soporta una velocidad de 500MHz en su bus. - DDR 333 SO-DIMM SDRAM arriba de 1GB - Compatibilidad completa con IDE, CFII, PCI-104, LAN, y 2 x USB2.0 y x RS-232 - Soporta 24-bit TTL LCD PC/104 o PC104 es un estándar de ordenador embebido que define el formato de la placa base y el bus del sistema. A diferencia de la clásica arquitectura ATX y bus PCI que son usados en la mayoría de los ordenadores personales, el PC/104 está diseñado para aplicaciones específicas, como adquisición de datos o sistemas de control industrial. La arquitectura de la placa base no es la típica placa de circuitos integrados en el que van insertados los componentes; en lugar de eso, los componentes se encuentran en módulos que son apilados unos encima de otros. El tamaño estándar es de 90.17 mm × 95.89 mm. La altura depende del número de módulos conectados. Una instalación típica incluye una placa base, conversores analógico-digital y módulos I/O digitales. La “PC-104” es una computadora como cualquier otra, solo que mas limitada en cuanto velocidad de procesamiento y capacidad de manejo de memoria. Es por ellos que no requiere ningún tratamiento especial. Solo hay que instalarle algún sistema operativo en una unidad de almacenamiento y esta lista para ser usada como cualquier otro PC. Sistema Operativo Para la elección del sistema operativo a instalar se tuvieron en cuenta varios factores: -Bajos requerimientos de hardware. -Libertad para el manejo del hardware. -Portabilidad. En una primera instancia se instalo en un disco duro el sistema operativo Windows XP. La PC funciono correctamente y no hubo mayores complicaciones. Debido a que en Windows, el acceso a los puertos esta restringido se opto por algún sistema operativo que contenga un núcleo Linux. Se examinaron varias distribuciones libres y gratuitas, optándose finalmente por la distribución Puppy 4.3.1. Puppy Linux es una minidistribución portátil del sistema operativo GNU/Linux. Consiste en un CD autoejecutable con un Gestor de ventanas y programas suficientes para llevar a cabo la mayoría de tareas básicas en un computador. Convierte a la máquina en una estación de trabajo con aplicaciones para conectar a Internet, navegar y chatear, proceso de texto, imagen, audio, video y utilidades extras variadas en un máximo de 48, 64, 128 Megas. Funciona usando la memoria RAM del computador, de modo que la máquina en donde vaya a ejecutarse debe disponer de 48, 64, 128 megas o más dependiendo de la versión de Puppy que se quiera usar. Además, permite instalarse cómodamente en discos duros o pendrives. Cabe destacar que en esta distribución de Linux siempre se corre bajo la cuenta de “super-usuario” o “root” por lo que no es necesario ningún tipo de permiso especial. Dicho sistema operativo es capaz de instalarse en un pen drive y correr de ahí mismo, característica que lo hace muy atractivo para nuestra aplicación. Al utilizar un sistema operativo basado en Linux, se debió programar y compilar nuestro software de aplicación bajo dicho plataforma. Por cuestiones de comodidad la mayor parte del software fue desarrollado en una PC portátil con Ubuntu 12.04. Los detalles finales se terminaron en la PC104. Para realizar la compilación en Puppy Linux se debió adjuntar en el pen drive el archivo devx_431.sfs, el cual agrega al sistema las herramientas necesarias para la compilación y edición de código en C/C++. Se tuvo que configurar al sistema operativo, para que en el arranque ejecutara el software desarrollado. Esto se realiza de manera sencilla creando un “link simbolico” o “acceso directo” en la carpeta /root/Startup. Este puede hacer mediante consola o bien utilizado el gestor de ventanas. Placa Interfaz Funcionamiento Esta placa fue diseñada con la finalidad de proporcionarle al usuario una interfaz con la PC-104. La misma se comunica con la PC a través del protocolo RS-232. La placa posee dos botones con las siguientes funciones: - Botón 1: Inicia/finaliza la toma de datos provenientes del GPS. - Botón 2: Apaga la PC-104 (esta acción no es permitida en el proceso de lectura de datos) Además consta de dos led’s que indican en que modo de funcionamiento se encuentra el sistema. Estos modos se explican a continuación: - Modo off: El sistema esta apagado. Ambos led’s se encuentran encendidos. - Modo stand-by: Una vez encendida la PC-104 el sistema ingresa a este modo y se queda esperando la orden de inicio de toma de datos (botón 1). Si se desea apagar el sistema se presiona el botón 2. En este modo el led azul se encuentra apagado y el led verde oscilando. - Modo lectura: Una vez presionado el botón 1, el sistema comienza la lectura y almacenado de los datos provenientes del GPS. En este modo el botón de apagado se encuentra deshabilitado, no permitiendo el apagado del sistema. El led azul se encuentra apagado si el GPS tiene señal, de lo contrario se enciende indicando la perdida de la misma (en este caso se debe cambiar la ubicación en que se encuentra el GPS), el led verde cambia la carencia de oscilación. Para salir de este modo se debe presionar nuevamente el botón 1. Diseño El circuito esquemático de la placa se presenta a continuación: Básicamente la placa esta compuesta por dos circuitos integrados: - MAX232: Se encarga de adaptar los niveles de tensión TTL a RS232 y viceversa. - CD 4013: Este integrado posee dos flip-flop D en su interior. Estos se utilizan para producir un cambio de estado de la señal de salida con solo una pulsación de la tecla, además sirven para filtar el ruido generado por las mismas. La placa se alimenta con 5v provistos por el puerto USB de la PC-104. Para ahorrar espacio se diseño en dos plaquetas separadas que se interconectan por medio de dos tiras de pines como se observa en la siguiente imagen: A continuación se presenta una tabla que indica las conexiones entre el puerto RS-232 de la PC-104 y la placa interfaz: PIN RS232 DTR (out) RTS (out) DSR (in) CTS (in) TXD (out) RXD (in) PLACA INTERFAZ Led Verde Led Azul Botón 1 Botón 2 RX (GPS) TX (GPS) Software A continuación se muestra el diagrama de flujo sintetizado del programa principal: El programa fue realizado en C++, se utilizo Eclipse como entorno de desarrollo para la edición, compilación y depuración del mismo. Para la realización de las tareas necesarias se diseñaron tres clases, las cuales se describen a continuación Clase GPS GPS void Cargar (string, string) bool EsValido () Esta clase se encarga de guardar los datos provenientes del GPS. Los métodos mas destacados se muestran en la tabla anterior - void Cargar (string, string): Este método no retorna ningún valor y recibe dos string como argumentos. Estos string son las tramas que entrega el GPS. Se encarga de realizar el parseo de los datos y guardarlos en memoria. - bool EsValido (): Este método no recibe ningún argumento y retorna un “1” lógico si el dato es valido (el GPS tiene buena señal) Clase INTUSR INTUSR void SetEstadoLed (led,estado) bool GetEstadoBoton (boton) string LeerPuerto () Esta clase encapsula la placa interfaz de usuario junto con el puerto serie. Para el manejo del puerto serie se utilizo la librería “libserial”, la cual es de código abierto y puede descargarse gratuitamente de libserial.sourceforge.net. Hay que tener en cuenta que esta librería corre solamente en sistemas operativos basados en Linux y MAC. A continuación se da una breve explicación de los métodos mas destacados que posee la clase: - void SetEstadoLed (led,estado): Este método no retorna ningun valor y recibe dos argumentos, en el primero se indica que led se desea manejar (azul/verde) y en el segundo se establece el estado del mismo (encendido/apagado). - bool GetEstadoBoton (boton): Este metodo retorna el estado proveniente de la salida del flip-flop correspondiente al boton indicado en el argumento que recibe el metodo (Boton1/Boton2). - string LeerPuerto (): Este metodo devuelve la trama enviada por el GPS. Clase MiTiempo MiTiempo bool Existe (directorio) void Archivo (tipo de archivo) Básicamente esta clase es la encargada de realizar un ordenamiento a nivel de directorios de los archivos generados. - bool Existe (directorio): Este método retorna un “1” lógico si el directorio enviado como argumento existe, caso contrario devuelve un “0” y el directorio especificado debe ser creado. - void Archivo (tipo de archivo): Este método no retorna ningún valor y recibe como argumento el tipo de archivo a crear (datos/html), el nombre de estos archivos esta compuesto por la hora inicial y final de la toma de datos , por ejemplo “17:35:12 a 17:46:15” API de Google Maps. Google Maps es un servidor de aplicaciones de mapas en la Web. Una API (interfaz de programación de aplicaciones) es el conjunto de funciones y procedimientos (o métodos) que ofrece cierta biblioteca para ser utilizado por otro software como una capa de abstracción. La API de Google Maps permite al usuario insertar funciones más completas y dar una mayor utilidad a los Mapas de Google en su sitio web y en sus propias aplicaciones, así como superponer sus propios datos sobre ellas. JavaScript es un lenguaje de programación interpretado (no compilado), permite mejorar las interfaces de usuario en los sitios web. Tiene una sintaxis similar al lenguaje C aunque adopta nombres y convenciones del lenguaje de programación Java. En la API de Google Maps, existen varios métodos que permiten personalizar los mapas proporcionados por google. A partir de dichos métodos y estudiando varios ejemplos, se desarrollo un archivo .html el cual utiliza la API mediante JavaScript. Para este trabajo se necesita un método que sea capaz de dibujar líneas entre los puntos recolectados por el GPS. Para ello se utiliza la función “polyline” a la cual hay que mandarle como argumento los puntos que queremos unir, para ello antes de invocar dicho método hay que declarar una variable que contenga los puntos leidos. El software desarrollado se encarga de realizar esta tarea. A partir de un script “modelo” (adjuntado) el cual es abierto dentro del programa, se insertan los puntos leidos por el GPS en el lugar indicado. De esta forma se crea un archivo *.html el cual puede ser abierto con cualquier navegador web disponible. Al abrirse se observa la trayectoria en el mapa. Pruebas A continuación se observan los mapas generados en las distintas pruebas realizadas. Primer Prueba La primera prueba del sistema supero las expectativas propuestas, ya que en esta primer instancia del proyecto se buscaba una correcta generación del mapa donde se pudiera ver el recorrido del vehículo, también se buscaba que el sistema respondiera de forma optima a los controles introducidos por el usuario, como el inicio y finalización de la lectura de datos. El problema que se encontró luego de esta primera prueba fue que la trayectoria dibujada en el mapa no era la esperada, esta presentaba saltos indeseados como se observa en la siguiente imagen: Luego de una revisión exhaustiva en el programa se encontró el error, este se producía cuando se generaba el archivo de los datos leídos, mas precisamente en la precisión (numero de decimales) con que eran guardados. Si bien el GPS entregaba los datos correctos, estos al ser grabados en el archivo se truncaban perdiendo la precisión de la posición. Corregido esto el problema quedo solucionado, consiguiéndose resultados que se aproximaban más a los esperados. A continuación se observa el mapa generado una vez corregido el error: Conclusiones Se desarrollo en el presente trabajo un sistema capaz de monitorear la trayectoria de un vehículo móvil. El sistema es capaz de recolectar la información proveniente del GPS y generar un mapa con la trayectoria recorrida. Además se desarrollo una pequeña placa interfaz que permite no tener la necesidad de conectar un monitor, teclado, mouse ni otro periférico para el comando del sistema, transformándolo así en un sistema portátil. Tampoco es necesaria la colocación de un disco duro ya que el sistema operativo puede ser cargado en un pen drive o en una compact flash. Los resultados obtenidos en las pruebas experimentales son satisfactorios ya que se aproximan a los valores reales. Es por ello que a los fines de monitoreo el sistema cumple con las condiciones necesarias para hacerlo. El sistema tiene la gran desventaja de que los datos tomados son a una frecuencia de 5Hz, lo que lo hace poco viable para aquellas aplicaciones de control en las que se requieran tiempos de muestreo menores. No obstante esto puede solucionarse cambiando el modelo del modulo GPS ya que es este quien impone dicha limitación. El proyecto realizado sirvió para investigar y adquirir nuevos conocimientos en diferentes temas como: sistemas operativos basados en Linux, programación orientada a objetos (C++), protocolo NMEA, protocolo RS-232, GPS, etc. Mejoras futuras - Permitir que el sistema pueda ser alimentado dentro de un automóvil (chamuyar mejor) - Realizar la transmisión inalámbrica de los datos leidos hacia una central para permitir monitoreo en tiempo real. - Mejorar la interfaz de usuario, el agregado de un display LCD que indique en que modo de funcionamiento se encuentra y la impresión de errores que pueden ocurrir en la lectura seria de gran ayuda para el operario. Bibliografía - Manual de usuario del ordenador PC-104. - Especificaciones técnicas del modulo GPS Garmin 18-5hz. - Datasheet MAX 232 y CD4013 - www.wikipedia.com - www.cplusplus.com - https://libseral.sourceforge.net - www.puppylinux.org - https://developers.google.com/maps/documentation/javascript/