Monitoreo vehicular mediante módulos GPS y GPRS controlados ...

80
Universidad de Costa Rica Facultad de Ingenier´ ıa Escuela de Ingenier´ ıa El´ ectrica Monitoreo vehicular mediante m´odulos GPS y GPRS controlados por Intel Galileo Por: Sergio Andr´ es Valverde Vega Ciudad Universitaria “Rodrigo Facio”, Costa Rica Julio de 2014

Transcript of Monitoreo vehicular mediante módulos GPS y GPRS controlados ...

Universidad de Costa RicaFacultad de Ingenierıa

Escuela de Ingenierıa Electrica

Monitoreo vehicular mediante modulos

GPS y GPRS controlados por Intel Galileo

Por:

Sergio Andres Valverde Vega

Ciudad Universitaria “Rodrigo Facio”, Costa Rica

Julio de 2014

Monitoreo vehicular mediante modulos

GPS y GPRS controlados por Intel Galileo

Por:

Sergio Andres Valverde Vega

IE-0499 Proyecto electrico

Aprobado por el Tribunal:

M.Sc. Teodoro Willink CastroProfesor guıa

Dr. Jaime Cascante Vindas Dr. Lucky Lochi Yu LoProfesor lector Profesor lector

DedicatoriaDedico este proyecto a las siguientes personas:

• A mama, que me llevo de la mano a la escuela.

• A papa, que se sento conmigo a entender.

• A mi hermana, para que haga su propio camino.

• A todos los familiares y amigos que creyeron en mi cuando yo no lohacıa.

• A Gabriel, con quien comparto cicatrices.

• A la familia Ulloa Murillo, que me las perdono.

• A la familia Chaves Leon, por dejarme entrar en su casa.

• A Titina, Sammy y Turi, solo porque sı.

• A Cata, quien nunca dejo que me cayera. Gracias por dejarme ser partede la historia.

Entonces, corrijo mi dedicatoria: Dedico este proyecto a todos los que mehicieron el hombre en el que me convertı.

v

ReconocimientosAgradezco a mi profesor guıa, Teodoro Willink Castro, MSc., asi como a

mis profesores lectores, Jaime Cascante Vindas, Dr., y Lochi Yu Lo, Dr., porsu invaluable apoyo, consejo, guıa y amistad. Tambien, agradezco a EduardoBolanos, Christian Gutierrez y a mi grupo de trabajo en Componentes IntelCosta Rica, por el apoyo tecnico y recursos brindados.

vii

ResumenEn el siguiente documento se describe el desarrollo del prototipo de un

sistema de posicionamiento de buses, alrededor de un Intel Galileo. El trabajonace a partir de la iniciativa de un grupo de trabajo de Componentes IntelCosta Rica por realizar una aplicacion movil de informacion de rutas y posi-cionamiento de buses; se requiere de una plataforma incrustada que viaje conlos vehıculos y que pueda proveer al servidor remoto que alimenta la aplica-cion movil de los datos de ubicacion de los autobuses. Ademas, se impulsa elproyecto debido a la necesidad de evaluar la tarjeta de desarrollo Intel Galileoen relacion a otros productos similares del mercado.

Se realiza un prototipo basado en el Galileo aprovechando las tecnolo-gıas GPS y GPRS, que funciona apropiadamente para proveer de datos deposicionamiento al servidor remoto. Se describen las diferentes tecnologıas yequipos utilizados para el desarrollo del proyecto, se detallan los esquemas deproyecto que explican la conexion de los diferentes modulos y, por ultimo, secomenta la implementacion de la solucion con todos los elementos pertinen-tes y la programacion escrita para el microcontrolador. Se obtiene un sistemarobusto, con programacion a bajo y alto nivel, que aprovecha en gran medidalas capacidades de cada elemento en la operacion, pero que opera con menorefectividad que un Arduino normal, debido a mayores dificultades de imple-mentacion, consumo de potencia y menor velocidad de puertos de uso generalen el microcontrolador Galileo. Sin embargo, se presenta un prototipo robus-to, con operacion autonoma y con una programacion eficiente, que cumple losparametros de diseno.

Se concluye, al final, que se puede desarrollar un sistema autonomo parala tarea encomendada, con microcontroladores que controlan modulos cuida-dosamente escogidos para tareas especificas y con un trabajo en armonıa detanto software como hardware en un producto final. Sin embargo, se destacaque el Intel Galileo, a pesar de sus ventajas tecnicas respecto a otros microcon-troladores, no es el equipo ideal para este tipo de prototipos ni para proyectosque requieren microcontroladores sin sistema operativo.

ix

Indice general

Indice de figuras xiii

Indice de cuadros xiii

Nomenclatura xv

1 Introduccion 11.1 Justificacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2 Alcance del proyecto . . . . . . . . . . . . . . . . . . . . . . . . 11.3 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.4 Metodologıa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.5 Desarrollo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

2 Antecedentes 52.1 Contexto actual de sistemas incrustados . . . . . . . . . . . . . 52.2 Microcontroladores . . . . . . . . . . . . . . . . . . . . . . . . . 62.3 Intel Galileo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82.4 Sistemas de posicionamiento de vehıculos . . . . . . . . . . . . 122.5 Sistema de Posicionamiento Global (GPS) . . . . . . . . . . . . 132.6 General Packet Radio Service (GPRS) . . . . . . . . . . . . . . 14

3 Diseno del prototipo 173.1 Equipo utilizado . . . . . . . . . . . . . . . . . . . . . . . . . . 173.2 Conexion del sistema . . . . . . . . . . . . . . . . . . . . . . . . 213.3 Consideraciones especiales . . . . . . . . . . . . . . . . . . . . . 243.4 Algoritmo de programa principal . . . . . . . . . . . . . . . . . 253.5 Pagina web de prueba . . . . . . . . . . . . . . . . . . . . . . . 273.6 Alimentacion del prototipo . . . . . . . . . . . . . . . . . . . . 283.7 Caja del prototipo . . . . . . . . . . . . . . . . . . . . . . . . . 28

4 Resultados 314.1 Posicionamiento mediante modulo GPS . . . . . . . . . . . . . 314.2 Envıo de datos mediante modulo GPRS . . . . . . . . . . . . . 334.3 Integracion de modulos GPS y GPRS . . . . . . . . . . . . . . 344.4 Prototipo final . . . . . . . . . . . . . . . . . . . . . . . . . . . 344.5 Intel Galileo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

xi

4.6 Recepcion del prototipo en Intel Costa Rica . . . . . . . . . . . 37

5 Conclusiones y recomendaciones 41

Bibliografıa 43

A Subir codigo al Intel Galileo 45

B Codigo de aplicacion principal de posicionamiento vehicularpara Intel Galileo 47

C Codigo de pagina web de prueba para el sistema de posicio-namiento vehicular 55

D Codigo de correccion de tasa de datos para comunicacionserial en SIM900 de Seeed GPRS Shield V2.0 59

xii

Indice de figuras

2.1 Vista superior de un Arduino Uno (Schmidt, 2011) . . . . . . . . . 82.2 Vista superior de un Intel Galileo . . . . . . . . . . . . . . . . . . . 92.3 Esquema del hardware del Intel Galileo (Intel, 2014b) . . . . . . . 10

3.1 Diagrama de bloques del sistema de posicionamiento vehicular . . 173.2 Adafruit Ultimate GPS Breakout Board (Adafruit, 2014) . . . . . 183.3 Seeed GPRS Shield (Studio, 2014) . . . . . . . . . . . . . . . . . . 193.4 Encapsulado del multiplexor quadruple 2 a 1 74LS157 (Instru-

ments, 2014) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203.5 Diagrama de bloques final del sistema de posicionamiento vehicular 213.6 Diagrama de conexion del sistema de posicionamiento vehicular . . 223.7 Conexion del sistema de posicionamiento vehicular . . . . . . . . . 233.8 Diagrama de flujo del programa principal . . . . . . . . . . . . . . 263.9 Pagina de prueba del prototipo . . . . . . . . . . . . . . . . . . . . 283.10 Baterıa para el prototipo . . . . . . . . . . . . . . . . . . . . . . . 293.11 Caja para el prototipo - Vista superior . . . . . . . . . . . . . . . . 293.12 Caja para el prototipo - Vista inferior . . . . . . . . . . . . . . . . 30

4.1 Resultados de GPS en iPhone 5s . . . . . . . . . . . . . . . . . . . 324.2 Resultados de GPS en Galileo . . . . . . . . . . . . . . . . . . . . . 324.3 Resultados de operacion de GPRS en Galileo . . . . . . . . . . . . 334.4 Prototipo final . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344.5 Afiche del prototipo en Makers Faire . . . . . . . . . . . . . . . . . 384.6 Certificado de segundo lugar en Makersthon . . . . . . . . . . . . . 39

Indice de cuadros

3.1 Detalle de materiales del proyecto . . . . . . . . . . . . . . . . . . 21

4.1 Prueba dinamica de GPS . . . . . . . . . . . . . . . . . . . . . . . 33

xiii

Nomenclatura

API Application Programming Interface, especifica interopera-cion de componentes especıficos de software, normalmen-te en forma de librerıas.

APN Access Point Name, puerta de acceso entre red celular yotra red de computadoras.

ARM arquitectura basada en conjuntos de instrucciones redu-cidas, desarrollada por la empresa ARM Holdings.

CISC Reduced Instruction Set Computing, estrategia de disenode procesadores con instrucciones complejas.

GPIO General-purpose input/output, pin generico controlado porel usuario en un circuito integrado o microcontrolador.

GPRS General Packet Radio Service, sistema de transmision depaquetes de datos por conmutacion de paquetes, median-te GSM.

GPRMC formato NMEA para comunicar datos GPS.

GPS Global Positioning System, sistema de navegacion sateli-tal.

GSM Global System for Mobile communications, protocolos desegunda generacion para redes celulares digitales.

HTTP Hypertext Transfer Protocol, protocolo para sistemas deinformacion en Internet.

I2C Inter-Integrated Circuit, protocolo de comunicacion digi-tal.

IDE Integrated Development Environment, ambiente de desa-rrollo de codigo para desarrolladores de software.

LED Light-Emitting Diode, semiconductor que emite luz.

xv

NMEA National Marine Electronics Association, estandares decomunicacion entre equipos electronicos de la marina deEstados Unidos.

PIN Personal Identification Number, contrasena numerica pa-ra autentificar a un usuario ante un sistema determinado.

PCI protocolo de comunicacion digital en computadoras.

RAM Random-Access Memory, memoria volatil de almacena-miento en computadoras.

RISC Reduced Instruction Set Computing, estrategia de disenode procesadores con instrucciones sencillas.

RDI Research, Development and Innovation, grupo de trabajode Intel Costa Rica.

SD Secure Digital, formato de tarjetas de memoria para equi-pos incrustados.

SIM Subscriber Identity Module, circuito integrado que auten-tifica equipos de telefonıa movil en la red celular.

SoC System On a Chip, circuito integrado que incluye todoslos componentes de una computadora y otros sistemaselectronicos en un solo chip.

SPI Serial Peripheral Interface, protocolo de comunicacion di-gital en computadoras.

UART Universal Asynchronous Receiver/Transmitter, protocolode comunicacion digital en computadoras.

URL Uniform resource locator, lınea de caracteres que apuntaa una direccion en Internet especıfica.

x86 arquitectura basada en conjuntos de instrucciones com-plejas, desarrollada por la empresa Intel.

xvi

1 Introduccion

1.1 Justificacion

Actualmente, en Costa Rica, la mayorıa de usuarios de autobuses no tienenuna manera digital de comprobar la ubicacion del bus. No hay una aplicaciono sistema que informe a las personas si el bus viene atrasado, si ya pasopor cierta ubicacion o si tuvo que cambiar su ruta preestablecida por algunimprevisto. Desde este punto, se genera la inquietud de un grupo de trabajoen Componentes Intel para la realizacion de una aplicacion movil que llene elvacıo nacional de un sistema digital de informacion para el transporte publicoque existe en otras partes del mundo.

Por tanto, se busca generar, en una primera etapa hacia el producto finalnecesario de la aplicacion movil, un primer prototipo que detalle la ubicacionen tiempo real de los buses internos de la empresa, para enviar estos datosremotamente a un servidor que pueda operar esta informacion y alimentar laaplicacion movil deseada. Sumado a esto, existe el interes particular de partede Intel de evaluar el equipo incrustado y arquitecturas de la misma empresapara proyectos de desarrollo abierto, coincidiendo con la filosofıa moderna deldesarrollo de plataformas embebidas y los nuevos productos que empiezan asurgir en Intel.

Se realiza un proyecto centrado en el Intel Galileo que permita exponer lascaracterısticas positivas y negativas del equipo, y que genere conocimiento decodigo abierto respecto a la plataforma. Este sistema se adhiere a un proyectoelectrico de la Escuela de Ingenieria Electrica, para lograr un beneficio mutuode los recursos de la empresa y generar conocimiento de diferentes tecnolo-gıas y arquitecturas de computadoras que pueda ser utilizado por parte de laUniversidad de Costa Rica en el futuro.

1.2 Alcance del proyecto

Se desarrolla un sistema incrustado que consiste en un Intel Galileo como nodocentral, conectado a un modulo GPS y un modulo GPRS, y una baterıa decorriente directa de alimentacion. El modulo GPS indica al Galileo las coor-denadas geograficas del sistema, fecha y hora, mediante comunicacion serial.Con la informacion del GPS, se hace un llamado HTTP a una pagina webpara enviar los datos obtenidos, mediante la conexion del modulo GSM a In-

1

2 1 Introduccion

ternet. Ademas, el sistema contara con circuiterıa apropiada para conectar losmodulos, LEDs que informen al usuario del estado del sistema (es decir, si losmodulos estan funcionando correctamente o si ocurrio un problema con ellos)y una caja para el prototipo hecha a la medida, disenada en un programa demodelado de solidos y fabricada mediante una impresora 3D.

1.3 Objetivos

Objetivo general

Desarrollar un sistema incrustado movil que determine la posicion de unvehıculo en particular y que envıe las coordenadas de su ubicacion a un servi-dor remoto.

Objetivos especıficos

• Determinar las posiciones que ha recorrido el vehıculo mediante unarevision de las coordenadas obtenidas por un modulo GPS.

• Enviar los datos de coordenadas del vehıculo hacia un servidor remotomediante un modulo GPRS.

• Entregar un prototipo funcional que pueda ser utilizado por sus vehıculosinternos.

• Evaluar el desempeno del producto Intel Galileo mediante el desarrollode un proyecto que utilice sus caracterısticas de funcionamiento comomicrocontrolador.

1.4 Metodologıa

Para realizar este proyecto, se ejecutaron las siguientes tareas, en el ordenque se presentan, para poder entregar un sistema autonomo que cumpla losparametros de diseno.

1. Estudio de las diferentes tecnologıas por utilizar para la operacion nece-saria del proyecto, como microcontroladores, GPS, GPRS, multiplexoresy baterıas.

2. Eleccion de componentes por utilizar en el proyecto. Se debe realizareste paso con el cuidado de que cada parte sean compatible con el restodel equipo.

1.5. Desarrollo 3

3. Revision adecuada de los datos del fabricante de la tarjeta de desarro-llo Intel Galileo, para conocer las especificaciones de la herramienta yconocer a cabalidad sus ventajas y limitaciones de operacion.

4. Aprendizaje de uso especıfico del Intel Galileo. En detalle, se programanfunciones sencillas con la tarjeta, utilizandola como microcontrolador,para desarrollar las habilidades necesarias para la programacion de pro-gramas mas complejos.

5. Escritura de los programas que permiten al Galileo obtener los datos deposicionamiento necesarios del modulo GPS.

6. Programacion del codigo que perimten al Galileo hacer llamados a pa-ginas web, en Internet, mediante modulo GPRS.

7. Integracion apropiada del codigo desarrollado anteriormente, para que elGalileo pueda enviar a una pagina web los datos obtenidos por el GPS.

8. Desarrollo de una pagina web de prueba que pueda recibir los datos delGalileo, hospedada en un servidor remoto personal.

9. Alimentacion del Galileo mediante una baterıa de corriente directa de5V y 2A, para que pueda funcionar de manera autonoma.

10. Diseno y fabricacion, en programas de modelado solido y una impresora3D, de una caja a la medida que pueda contener al Intel Galileo, unaprotoboard con la circuiteria externa y los modulos externos (GPS yGPRS).

11. Elaboracion de pruebas de funcionamiento del sistema apropiadas, paracomprobar el funcionamiento del sistema completo en un operacion real.

1.5 Desarrollo

Se presenta en este informe una division por capıtulos que permita la completay estructurada descripcion del proyecto desarrollado.

1. En el Capıtulo I, se ha descrito a profundidad la justificacion del proyec-to, el motivo de su desarrollo, el sistema por entregar y los objetivos queeste debe cumplir, y la metodologıa para la elaboracion del prototipo.

2. En el Capıtulo II, se describe el equipo y tecnologıas utilizadas. Estose refiere a una explicacion de las tecnologıas GPS, GSM/GPRS, mul-tiplexores y microcontroladores. En especial, se detalla el Intel Galileo,debido a su rol central en este proyecto.

4 1 Introduccion

3. En el Capıtulo III, se describe el diseno que se realiza para obtenerel prototipo final. Se comenta el codigo desarrollado para cada funcionespecıfica y se anade al trabajo los esquematicos correspondientes a cadaetapa del proyecto.

4. En el Capıtulo IV, se describen los resultados del proyecto y se comentasu alcance dentro de su area de efecto. Ademas, se hace una evaluaciondel Intel Galileo en su rol como microcontrolador.

5. En el Capıtulo V, se exponen las conclusiones del proyecto y recomen-daciones para el desarrollo posterior del prototipo; este capıtulo es elque resume el aprendizaje del proyecto y el que determina los siguientespasos para mejorar el esfuerzo en el futuro.

2 Antecedentes

2.1 Contexto actual de sistemas incrustados

Los sistemas incrustados son sistemas computacionales dedicados a realizaruna funcion especıfica dentro de un sistema electrico o mecanico mas grande,con procesamiento de entradas y salidas en tiempo real. Se comparan con lascomputadoras de uso general utilizadas por la mayorıa de las personas. Lascomputadoras de uso personal se disenan para trabajar en diversas tareas,mientras que los sistemas incrustados tienden a concentrarse en algunas tareasespecıficas siempre (Peter Barry, 2012).

La mayorıa de los sistemas incrustados modernos estan basados en mi-crocontroladores. Sin embargo, se siguen utilizado computadoras con sistemaoperativo de alto nivel para tareas y sistemas mas complejos. Por su uso tanespecıfico, se debe tener un rango de opciones muy grande, para poder adap-tar la herramienta correcta al trabajo mas optimo para ella. Esto funcionaespecialmente para tener una optimizacion maxima en sus tareas. Tambien,es importante tener en mente que se va a utilizar en caso de seguir mejorandoel sistema o si se necesita aumentar sus dimensiones de accion, debido a queel mundo de los sistemas incrustados avanza a grandes pasos mientras quese siguen solucionando las demandas industriales, domesticas y academicasque presenta el mundo moderno (Peter Barry, 2012). Debido a todo esto, laarquitectura incrustada con mas relevancia actualmente es la ARM, que se be-neficia de conjuntos de instrucciones reducidas (RISC) para la programacionde sus microprocesadores y microcontroladores, los cuales tendran operacionessuperiores con consumos de potencia menores.

Los sistemas incrustados se utilizan en dispositivos con una amplia gamade especificaciones y necesidades. Entre ellas, se cuentan el desarrollo de inter-faces graficas, capacidad de conexiones de redes complejas e integracion conotros sistemas incrustados (Peter Barry, 2011). Esto se aleja de los sistemasincrustados de decadas anteriores, en las que se tenıan dispositivos industrialescon funciones muy limitadas que no se conectaban directamente con las de losdispositivos aledanos.

Por su misma naturaleza, los esfuerzos que utilizan sistemas incrustados enla actualidad pueden ir de un tamano muy pequeno a aparatos de gran tamano.Sin embargo, las tarjetas de desarrollo para estos dispositivos no son quienesdictan la complejidad del sistema incrustado en sı. Ejemplos prominentes deuso de estos sistemas van desde relojes digitales, reproductores de musica y

5

6 2 Antecedentes

telefonos inteligentes hasta sistemas complejos como sistemas aeronauticos, detransporte y recreacion. Los sistemas incrustados siguen siendo piezas centralesde maquinas de produccion y robotica en todas sus ramas (Peter Barry, 2012).

2.2 Microcontroladores

Segun Ross Bannatyne (1995a), se define un microcontrolador como un cir-cuito integrado que contiene los elementos mınimos necesarios para poderconformar un sistema de computacion completo: Unidad de procesamiento,memoria, reloj, entradas y salidas. Sin embargo, una definicion mas completadescribe su enfoque, el cual es la integracion de perifericos necesarios para elcontrol veloz, efectivo y eficiente dentro de un ambiente incrustado. Todo estolos describe como pequenas computadoras que pueden ser programadas paratareas especificas.

Para poder resolver problemas del mundo real, el microcontrolador no pue-de operar con solo una unidad de procesamiento, programas y memoria. Lainteraccion con el mundo fısico es una parte clave en todo este ambiente yse realiza por medio del equipo especializado para obtener informacion delentorno y devolver las acciones deseadas con comunicacion binaria de diferen-tes tipos (Ross Bannatyne, 1995b). Este equipo se conoce como perifericos;algunos de los mas importantes son los puertos GPIO, UART, I2C y SPI, quemanejan diferentes protocolos de comunicacion necesarios para la conexioncon otros perifericos mas complejos.

Un programa escrito para operarse en un microcontrolador normalmentetiene ciertas etapas definidas, debido a que son hechos para trabajar en tareasespecıficas durante su operacion. Por tanto, usualmente, un programa escritopara un microcontrolador leera las senales de entrada que este recibiendo, ope-rara los datos internamente para la funcion que deba efectuar y, por ultimo,controlara la senal de salida que ejecutara la labor del sistema (Ross Bannaty-ne, 1995b). A pesar de que esto puede suponer, en la mayorıa de los casos,algoritmos sencillos de operacion, no son casos que se puedan resolver de mane-ra trivial con componentes discretos. Esto significa que los microcontroladorespueden reemplazar circuitos muy complejos. Por sus propias limitaciones ypor la efectividad de toda la operacion, se acostumbra programar microcon-troladores en lenguaje ensamblador o en lenguajes de alto nivel que tenganun manejo eficiente de memoria, como el lenguaje C. Se utilizan ambientes dedesarrollo integrados (IDE ) especıficos para cada microcontrolador, para po-der compilar y subir los programas a la memoria del equipo (Ross Bannatyne,1995a).

Los microcontroladores estan presentes en muchas de las actividades coti-dianas de nuestras vidas. Operan diferentes dispositivos relacionados al hogar,

2.2. Microcontroladores 7

transportes, comunicaciones, deportes y demas, debido a su versatilidad y ba-jo consumo de potencia. Por tanto, la seleccion de un microcontrolador debeser cuidadosa y apropiada para cada aplicacion especıfica (Ross Bannatyne,1995b). Por lo tanto, es de vital importancia considerar el poder de procesa-miento necesario, la memoria que se planea utilizar, los perifericos necesarios,las demandas especıficas de la aplicacion por desarrollar e inclusive el precio.

Arduino

Arduino es una familia de tarjetas de prototipos de desarrollo libre, concebidapor varios estudiantes en Italia y optimizada por la colaboracion de diferentespersonas adicionales. Su particularidad principal se centra en la creacion detarjetas de desarrollo en las que el microcontrolador esta soldado directamentea una placa con sus diferentes perifericos habilitados, en una implementacionque permita la creacion sencilla y economica de prototipos. Al ser de desarrollolibre, un Arduino puede ser ensamblado y modificado para diferentes necesi-dades. La programacion se realiza directamente sobre el Arduino IDE, unaaplicacion multiplataforma escrita Java que permite que se suban los progra-mas al microcontrolador. Los programas de Arduino estan escritos en lenguajeC o en lenguaje C++ (Arduino, 2014).

Se describe el Arduino Uno, el cual es el producto mas basico de la familiaArduino. Sus caracterısticas principales son las que se ennumeran a continua-cion:

1. Utiliza un microcontrolador ATmega328P de 16 MHz de velocidad.

2. Interfaz USB.

3. 14 GPIOs (6 con modulacion de ancho de pulso, PWM).

4. 6 pines digitales.

5. Puerto SPI.

6. 1 kB de memoria EEPROM.

7. 2 kB de memoria SRAM.

8. 32 kB de memoria Flash.

El arreglo fısico de puertos del Arduino Uno se observa la figura 2.1, quemuestra la vista superior de la tarjeta y las etiquetas de los componentes(Schmidt, 2011).

8 2 Antecedentes

Figura 2.1: Vista superior de un Arduino Uno (Schmidt, 2011)

2.3 Intel Galileo

El Intel Galileo es una tarjeta de desarrollo con un procesador Intel QuarkSoC X1000, un ”system on chip” (SoC) Pentium de instrucciones de 32 bits.Se ajusta al nuevo modelo de negocios de la empresa Intel, en el que se orientahacia productos para sistemas incrustados. Es la primera tarjeta con arquitec-tura x86 disenada para tener compatibilidad con el entorno Arduino, tanto enhardware como en software (Intel, 2014a). En especıfico, intenta ser suficien-temente compatible con equipo que originalmente fue disenado para utilizarsecon el Arduino Uno. El Intel Galileo se muestra en la figura 2.2.

Caracterısticas principales del Galileo

Algunas de sus caracteristicas principales son las siguientes (Intel, 2014b):

1. Velocidad del Quark SoC de 400MHz.

2. Cache de 16kB.

3. 512kB de SRAM.

4. Tensiones logicas de 3,3V o a 5V.

5. Puerto mini-PCI Express.

2.3. Intel Galileo 9

Figura 2.2: Vista superior de un Intel Galileo

6. Puerto Ethernet de 100 Mb.

7. Puerto para tarjeta micro-SD.

8. Puerto serial RS-232.

9. Puerto USB Host.

10. Puerto USB Client.

11. 6 pines analogicos, que otorgan hasta 40mA de corriente.

12. 14 pines digitales (6 con PWM), que otorgan hasta 40mA de corriente.

13. Un puerto UART asociado a los pines 0 y 1 de los pines digitales

14. Puertos I2C y SPI.

15. Pines de salida de tension de 3,3V y 5V, con capacidad de otorgar hasta800 mA de corriente.

10 2 Antecedentes

Figura 2.3: Esquema del hardware del Intel Galileo (Intel, 2014b)

16. Tiene 8 MB de memoria Flash para guardar el firmware (o bootloader,dependiendo del uso que se le quiera dar)

17. 256MB de DRAM habilitados.

El esquema del hardware del Galileo se muestra en la figura 2.3.

Lo que realmente destaca al Galileo es su capacidad de funcionar tantocomo un microcontrolador sencillo, de la manera que funciona un Arduino, ocorriendo un sistema operativo pequeno (Intel da soporte a una distribucionGNU/Linux pequena, sin interfaz grafica, pero se pueden crear distribucionesa la medida). Esta caracterıstica no se explora en este proyecto. Sin embargo,este detalle anade una versatilidad muy novedosa al sistema, debido a quepuede funcionar en un rango de aplicaciones mas grande que el de muchosotros productos de este tipo (Intel, 2014a).

2.3. Intel Galileo 11

Comparacion entre Intel Galileo y Arduino Uno

Por la misma naturaleza del Galileo y su esfuerzo por tener compatibilidadcon el entorno Arduino, aparecen comparaciones inmediatas con el ArduinoUno. Por tanto, se ennumeran las ventajas y desventajas del Galileo respectoal Arduino Uno.

Para iniciar, se describen las ventajas del Galileo:

1. Mayor poder de procesamiento, debido a que el Quark SoC del Galileocorre a 400MHz, mientras que el ATmega328P corre a 16MHz.

2. Mejor manejo de memoria, gracias a que el Galileo tiene mucha masmemoria dinamica que el Galileo.

3. Mayor versatilidad en sus funciones, ya que el Galileo puede utilizar unsistema operativo.

4. Mayor cantidad de puertos disponibles, como lo son el puerto mini-PCIExpress y el puerto de Ethernet.

Posteriormente, se comentan las desventajas del Galileo en perspectiva:

1. Mayor consumo de potencia debido a mayor procesamiento. Mientrasque, con alimentaciones de 5V, el Arduino puede operar siempre a menosde 500mA, la corriente que demanda el Galileo puede llegar a 2A.

2. Costo muy elevado en comparacion al Arduino (alrededor de $30 dediferencia en la mayorıa de puntos de venta electronicos disponibles), sise quisiera considerar su uso como microcontrolador.

3. Baja velocidad de conmutacion en puertos digitales en el Galileo (alrede-dor de 230Hz), debido a que estos puertos estan conectados a un expan-sor de puertos que hace que se comparta un ancho de banda comun entretodos los pines. El Arduino no tiene este problema y la conmutacion delos puertos digitales es bastante veloz. Esto se detalla mas adelante.

4. El Galileo solo funciona con una tension de entrada de 5V mientras queel Arduino Uno tiene un rango mayor de tensiones de entrada, lo quehace que el uso del Galileo sea menos adecuado para principiantes.

5. La documentacion del Arduino Uno esta muy desarrollada y con unacomunidad virtual muy grande de apoyo. El Galileo, por su parte, tienemuy poca documentacion, la informacion no es precisa y la comunidadvirtual de apoyo esta desarrollandose muy lentamente.

12 2 Antecedentes

Debido a la dificultad de implementar funciones sencillas en el microcon-trolador Galileo, tanto por documentacion erronea y escasa, y por las mismascondiciones del equipo, es una tarjeta de desarrollo que no se recomienda paraprincipiantes en programacion de sistemas incrustados. Sin embargo, puedetener ventajas importantes en el desarrollo, como lo son mayor procesamientoy memoria disponible para los programas y la conexion a Internet por mediode la conexion Ethernet. Con la comparacion directa entre ambas plataformasy al revisar las especificaciones de cada equipo detalladas en este documento,se puede observar, antes de usar cualquiera de las dos tarjetas, que los nichosde operacion de cada una son diferentes. El Arduino Uno es una plataformade gran sencillez que se utiliza en tareas simples, con un consumo de potencialimitado y orientado a desarrolladores con poca experiencia. Sin embargo, elIntel Galileo se debe utilizar en tareas de mayor demanda de procesamien-to, cuando se requiera un sistema operativo y cuando el usuario posea mayorexperiencia en la programacion de estos sistemas incrustados.

Velocidad de puertos de uso general en el Intel Galileo

Los puertos de uso general en el Intel Galileo estan conectados a un expansorde puertos I2C, que corre en modo estandar (a alrededor de 100kHz). Cadapedido al I2C para actualizar cada puerto de uso general toma 2 ms. Adicio-nal a lo que tome en procesarse la informacion que se maneja en el softwaredel microcontrolador, esto restringe la frecuencia disponible en los puertos deuso general a aproximadamente 230Hz. En pines de microcontroladores, fre-cuencias menores a 500Hz son extremadamente lentas para usos realmenteutiles.

2.4 Sistemas de posicionamiento de vehıculos

Los sistemas de posicionamiento de vehıculos actuales son de diversa compleji-dad y de diversas funciones, pero su arquitectura mas tıpica incluye un sistemade posicionamiento global (usualmente se utiliza GPS), un servidor dedicadoa recibir esta informacion, un metodo de transferencia de informacion y unainterfaz de usuario (Blackman, 1999).

Un sistema de posicionamiento global es indispensable para estos disposi-tivos, debido a que es el que determina la ubicacion del vehıculo en el espacio.Estos son los datos primordiales con los que se alimenta el servidor dedicado arecibir la informacion. Sin embargo, se pueden almacenar otros tipos de datosque pueden ser de gran relevancia para los usos que se requieran. Por ejem-plo, se puede monitorear velocidades, rutas, combustibles, tiempos de viajes,horas de posiciones de los vehıculos, uso de puertas del transporte, cantidad

2.5. Sistema de Posicionamiento Global (GPS) 13

e identidad de los pasajeros, calidad de la informacion de posicionamiento yotros (Blackman, 1999).

Estos dispositivos pueden ser activos o pasivos. Cuando son pasivos, eldispositivo viaja con el vehıculo y recolecta informacion que despues se pasamanualmente al servidor, con el metodo de almacenamiento que utilice todo elsistema incrustado. El posicionamiento activo significa que la informacion seenvıa directamente al servidor remoto en intervalos de tiempo cortos, haciendouna transferencia en tiempo real de la informacion recolectada. Este metodoincluye, normalmente, una conexion a Internet estable por medio de las redescelulares disponibles(Blackman, 1999). En estos casos, la tecnologıa GSM y elenvıo de paquetes de informacion por GPRS son las elecciones mas usuales ymas robustas.

Toda esta informacion tiene validez hasta que se encuentra con la interfazde usuario, a quien se le entregan los datos recolectados para que haga uso dela informacion en la manera que mejor convenga. Esta informacion se entrega,por lo tanto, por medio de interfaces graficas en medios moviles (paginas deinternet, mensajes de texto, correos electronicos o aplicaciones moviles) o enaplicaciones de computadoras de uso general. Tambien es posible almacenaresta informacion para futuras referencias.

El uso de estos sistemas es muy popular en la actualidad. Sus aplicacionesmas comunes son las de posicionamiento de transporte publico, monitoreo decarros rentados, alarmas de vehıculos (Blackman, 1999). Incluso, se puedenutilizar estos sistemas para tareas menos usuales, como el estudio demograficode las personas que utilizan determinado servicio y la hospitalidad con perso-nas que requieren transporte inmediato despues de viajes complejos, al poderproveerles un vehıculo siempre en relacion al anterior que utilizaron.

2.5 Sistema de Posicionamiento Global (GPS)

La tecnologia GPS consiste en un sistema de navegacion por satelite desarro-llado por el Departamento de Defensa de Estados Unidos. Incluye 24 satelitesen una orbita semigeosıncrona que provee una cobertura global contınua y unaprecision excelente en sus datos de ubicacion (Dougherty, 1995). Un receptorGPS calcula la posicion del usuario al obtener la senal de al menos 4 satelites;determina la posicion al hacer un calculo que incluye la hora en que se enviola senal y el tiempo que transcurre hasta que la senal es recibida. Se necesitanal menos 4 satelites para obtener un resultado acertado de posicionamiento,debido a que se correlacionan para poder dar una respuesta a las interrogantesdel dispositivo receptor de elevacion, latitud, longitud y curso. Si el disposi-tivo GPS se conecta con mas satelites, su precision aumenta (van Diggelen,2002). Su operacion es robusta y tiene una accesabilidad global, por lo que se

14 2 Antecedentes

posiciona como el mejor sistema de navegacion para proyectos y prototipos dedesarrollo abierto.

Un equipo GPS de usuario tiene una interaccion de software y hardwarepara poder obtener los datos de ubicacion adecuados. En general, los disenostienen la forma de receptores de informacion para estimar su propia posiciony velocidad, con las adecuadas compensaciones por errores de medicion cono-cidos (van Diggelen, 2002). Por tanto, son dispositivos relativamente sencillosque leen la informacion que proviene de los satelites pertinentes y la comunicanal usuario.

Los satelites GPS envıan senales moduladas de microondas para que losreceptores en la Tierra puedan obtener la informacion. Estos receptores sehan desarrollado para poder ser utilizados por sistemas embebidos con proto-colos de comunicacion usuales, por lo que se encuentran en el mercado tarjetasimpresas con receptores GPS comerciales que son sencillos de conectar a dife-rentes microcontroladores (van Diggelen, 2002).

2.6 General Packet Radio Service (GPRS)

Los protocolos de segunda generacion (2G) de redes celulares son descritos porel estandar conocido como GSM (Global System for Mobile Communications).Es en esta red donde se introducen las redes celulares digitales y se transmitenlos datos primarios de comunicacion entre dispositivos moviles, como lo sonlas llamadas de voz. La telefonıa implementa la telefonıa full duplex y una redde conmutacion de circuitos. Es la tecnologia en la que se basan los protocolosde generaciones mas modernas de redes celulares (3G, 4G), ya que los nuevosestandares implementan comunicaciones que se desarrollaron desde la segundageneracion (Rhee, 2009).

Las tecnologias moviles 2G, incluyendo GSM, se han optimizado por di-seno para funcionar con comunicaciones de voz. Esto dejo una capacidad detransferencia de datos muy pequena en sus sistemas. Por tanto, se desarrolloel Servicio de Radio de Paquetes Generales (GPRS) como una extension deGSM, que ha evolucionado para dar un sistema simplificado para el accesoremoto a Internet, lo que permite a los usuarios transferir paquetes de datosentre estaciones moviles GSM y otras redes de paquetes de datos externasa estas redes. Efectivamente, lo que permite es conectar dispositivos que secomunican en redes celulares GSM a Internet, con tiempos de acceso relativa-mente cortos y altos niveles de transferancia de datos. Su formato se basa enuna conmutacion de paquetes, cuya definicion es bastante amplia pero en elcaso del GPRS se trata de una division de datos por comunicar en paquetes.De esta manera, se puede hacer una transferencia mas eficiente de los canalespor los que se comunica la informacion del trafico de Internet que si se utilizara

2.6. General Packet Radio Service (GPRS) 15

la conmutacion de circuitos que se utiliza en las llamadas telefonicas (Rhee,2009).

3 Diseno del prototipo

En este capıtulo se detalla el proceso de diseno del prototipo desarrollado, consus diversas consideraciones de hardware y software para lograr el entregablefinal.

3.1 Equipo utilizado

Diagrama de bloques inicial

Se elabora el diagrama de bloques de la figura 3.1 para poder implementar lasolucion deseada.

En la figura 3.1, se muestra el Intel Galileo como una constante en el diseno(el enfoque de este proyecto esta orientado hacia el), por lo que el resto delequipo se escoge en funcion a esta tarjeta de desarrollo.

Figura 3.1: Diagrama de bloques del sistema de posicionamiento vehicular

17

18 3 Diseno del prototipo

Figura 3.2: Adafruit Ultimate GPS Breakout Board (Adafruit, 2014)

Modulo GPS

En el mercado, la mayorıa de modulos GPS hechos para trabajar con sistemasincrustados funcionan con una simple comunicacion serial de la informacionque estan recibiendo por parte de los satelites. Por tanto, se determina quese utilizara el Adafruit Ultimate GPS Breakout Board que se muestra en lafigura 3.2.

Algunas de las caracterısticas principales del Adafruit Ultimate GPS sonlas siguientes (Adafruit, 2014):

1. Trabaja con tensiones de 3,3 V a 5 V, tanto en sus pines logicos comoen la alimentacion.

2. Tiene una sensibilidad de -165 dB de recepcion de senales.

3. Trabaja con una tasa de baudios de 9600bd.

4. Tiene una precision reportada de 1,8 metros y un tamano muy reducido.

Se escoge este equipo principalmente por su gran sensibilidad en la recep-cion de senales, lo que hace que el GPS mantenga la comunicacion con lossatelites en gran cantidad de condiciones de operacion. Ademas, su desarrolloesta muy bien documentado por el fabricante. Su comunicacion con el Galileosera por medio del puerto serial UART1.

Modulo GPRS

Debido a que se conectara todo el sistema a Internet por medio de la redcelular, se importante aclarar que la eleccion del equipo debe funcionar en

3.1. Equipo utilizado 19

Figura 3.3: Seeed GPRS Shield (Studio, 2014)

la banda de frecuencia en la que funciona la red GSM nacional. Se escoge latarjeta Seeed GPRS Shield V2.0, de la figura 3.3, para mandar los datos alservidor remoto.

El Seeed GPRS Shield tiene las siguientes caracteristicas (Studio, 2014):

1. Utiliza un SIM900, que es un circuito integrado dedicado a la comuni-cacion con las redes celulares 2G.

2. Se programa con comandos AT y puede trabajar a distintas tasas debaudios, por lo que se puede programar para que trabaje a 9600bd (comoel modulo GPS).

3. Trabaja con tarjetas SIM normales y tiene un puerto de facil accesopara introducirlas al modulo, por lo que se pueden utilizar diferentesoperadores telefonicos con solo cambiar esta tarjeta.

4. Tiene soporte para las bandas de 850 MHz, 900 MHz, 1800 MHz y 1900MHz. La banda de 1900 MHz es a la que funciona la red celular GSMnacional, por lo que este equipo esta habilitado para trabajar en CostaRica.

Al igual que el Ultimate GPS, el GPRS Shield se comunicara con el Galileopor medio del puerto serial UART1. Se escoge este modulo debido su precio,que es menor al de la mayorıa de tarjetas similares. En general, los modulosGPRS que se utilizan con tarjetas Arduino son muy similares entre si.

20 3 Diseno del prototipo

Figura 3.4: Encapsulado del multiplexor quadruple 2 a 1 74LS157 (Instru-ments, 2014)

Circuiteria externa

Como se observa en las subsecciones anteriores, se utilizan dos equipos quese comunican con el mismo puerto serial, debido a que es el unico de usogeneral disponible en el Intel Galileo. En un Arduino Uno y otros Arduinos,es posible implementar puertos seriales en pines de uso general al usar librerıasy programacion especıfica para esto, pero en el Galileo se tiene una velocidadmuy baja de conmutacion de pines (por razones que se detallan en la seccion2.3) y esto es imposible.

Entonces, se requiere algun medio externo que habilite esta posibilidad almultiplexar las senales de los modulos involucrados. Por lo tanto, se requie-re circuiterıa externa y utilizar un multiplexador normal para esta labor. Seescoge utilizar el multiplexor 2 a 1 74LS157 de la figura 3.4.

El 74LS157 tiene 4 salidas y 8 entradas, para poder multiplexar cuatrosenales al mismo tiempo. Se alimenta a 5 V y tiene una velocidad de conmu-tacion suficiente para poder multiplexar comunicaciones de 9600bd (Instru-ments, 2014).

Diagrama de bloques final

Ası, el diagrama de bloques de la figura 3.1 evoluciona en el de la figura 3.5,para introducir la multiplexacion necesaria.

3.2. Conexion del sistema 21

Figura 3.5: Diagrama de bloques final del sistema de posicionamiento vehicular

Cuadro 3.1: Detalle de materiales del proyecto

Equipo ($)

Intel GalileoPlaca de pruebas Microtivity (400 puntos)Adafruit Ultimate GPS Breakout BoardSeeed GPRS Shield V2.0Baterıa DC Intocircuit 5V, 2A74LS157

El detalle de materiales parcial se muestra en la tabla 3.1.

3.2 Conexion del sistema

Una vez que se realiza la seleccion de los equipos, se procede a la conexion delmismo. El diagrama de conexion se puede observar graficamente en la figura

22 3 Diseno del prototipo

Figura 3.6: Diagrama de conexion del sistema de posicionamiento vehicular

3.6.

La primera etapa de la conexion empieza al alimentar los diferentes dis-positivos con los que se trabaja. Por tanto, se dara una alimentacion a 5V atodos los sistemas involucrados, desde los pines 5V y GND del Galileo. El pinGND se conecta con el pin GND del modulo GPS, el pin GND del moduloGPRS y el pin 8 del multiplexor. El pin 5V, por su parte, se conecta con el pin5V del modulo GPS, el pin 5V del modulo GPRS y el pin 16 del multiplexor.

Posteriormente, se requiere comunicar los dispositivos. La comunicacionserial se efectua en los pines digitales D0 (RX) y D1 (TX) del Galileo, por loque seran los utilizados aquı. Se debe destacar que la comunicacion serial tieneque ser de pines de transmision (TX) a pines de recepcion (RX). Tambien, senota que el modulo GPS solo comunica sus datos sin esperar respuestas, porlo que solo se utilizara su pin de transmision TX hacia la multiplexacion. Asi,el Galileo conecta su pin D1 (TX) con el pin D2 (RX) del modulo GPRS,mientras que el pin D0 (RX) va hacia el pin 4 del multiplexor. Este pin es elencargado de dar la salida a la senal especificada entre las dos que puede esco-ger, las cuales estaran conectadas a los pines 2 y 3. Entonces, la transmisiondel GPRS en el pin D0 (TX) se envıa al pin 2 del multiplexor; la transmisiondel GPS en el pin TX se envia al pin 3.

Por ultimo, se deben realizar conexiones auxiliares, para permitir la ope-

3.2. Conexion del sistema 23

Figura 3.7: Conexion del sistema de posicionamiento vehicular

racion completa del sistema. Se conecta el pin FIX del modulo GPRS al pinanalogico A5 del Galileo, para permitir una revision de senales que permitaindicar si el sistema esta recibiendo datos confiables de posicionamiento pormedio de los satelites de ubicacion GPS en el espacio. Tambien, se conectael pin 8 con el pin 15 del multiplexor, para asegurar una operacion de mul-tiplexacion que solo sea definida por el pin de seleccion del multiplexor. Si elpin 15 llega a estar en alto, la salida en el pin 4 se mantendra en bajo, porlo que se conecta a tierra en el pin 8 y, de esta manera, se evita esta con-dicion. Finalmente, se conecta el pin 1, de seleccion del multiplexor, al pindigital D1 del Galileo. Cuando este pin esta en bajo, se da salida a la senal delmodulo GPRS, mientras que cuando esta en alto, se escuchara la informaciondel modulo GPS. Tambien, queda abierta la posibilidad de utilizar LEDs queindiquen el estado del sistema. Esto se efectua conectando las patillas posi-tivas (las mas largas) de los LEDs a pines digitales del Galileo y las patillasnegativas a resistencias de 1 kΩ, que van a tierra.

La conexion del sistema real se observa en la figura 3.7.

24 3 Diseno del prototipo

3.3 Consideraciones especiales

Se deben considerar algunos aspectos especiales antes de empezar la progra-macion real del prototipo en desarrollo.

Tasa de datos

De fabrica, los modulos utilizados en el sistema trabajan con tasas de da-tos diferentes. El modulo GPS y su chip MTK3339 trabajan, por defecto, en9600bd. Sin embargo, el chip SIM900 del modulo GPRS trabaja a 19200bdpor defecto. Esto hace que se tenga que manejar dos tasas de datos en la co-municacion serial del Galileo, complicando la programacion. Por lo tanto, setrabaja alrededor de esto al configurar el SIM900 para que trabaje a 9600bd.Esto no solo facilita la programacion, sino que hace que se trabaje con veloci-dades menores, lo que es deseable en el Galileo debido a la velocidad tan bajade sus puertos digitales.

Se utiliza el comando AT AT+IPR para hacer esta modificacion. Es uncomando especıfico para operar el SIM900,. Para realizarlo, se establece unacomunicacion serial entre el modulo GPRS y el Intel Galileo, al conectar lospines digitales 0 (RX) y 1 (TX) del Galileo a los pines digitales 0 (TX) y 1(RX). Posteriormente, se alimenta el modulo a 5V y se hace correr un peque-no codigo que se comunique, en una velocidad de datos de 19200bd, con elSIM900, para enviar el comando AT AT+IPR 9600. Despues de este punto,ambos modulos van a estar trabajando a 9600bd. Se utiliza el codigo del anexoD.

Ajuste de GPS

Se define el ajuste de un GPS como la verificacion de la ubicacion calculadamediante la informacion de satelites GPS. Una vez que la informacion querecibe el modulo GPS es suficiente, se puede definir una ubicacion precisa delsistema.

Para comprobar que el modulo GPS llego a tener su ajuste, se hace unalectura analogica del pin FIX del modulo. Este pin esta conectado al LED queparpadea en la tarjeta Adafruit Ultimate GPS, indicando el estado del ajuste:Cuando hay un parpadeo continuo de este LED, significa que todavıa no seha alcanzado un ajuste, pero cuando el LED se enciende cada 15 segundos, sesabe que el ajuste se ha alcanzado. Se escribe la subrutina gps fix del codigodel anexo B para este proposito, en donde se lee el pin FIX del modulo GPSen el Galileo y si se encuentra que esta apagado en doce lecturas realizadasdurante 1,2 segundos, se sabe que el LED no esta parpadeando y que se tiene

3.4. Algoritmo de programa principal 25

un ajuste; en caso contrario, se sigue esperando hasta que se logre obtener esteajuste.

Operador telefonico utilizado

Para utilizar el modulo GPRS, se debe utilizar una tarjeta SIM. Por facilidad,se le remueve el codigo PIN con un telefono celular Samsung Galaxy SIII Minicorriendo Android Jelly Bean. Posteriormente, se debe utilizar los parametrosadecuados para configurar el APN de la tarjeta SIM (nombre APN y contra-sena). Para este prototipo, se utilizo una tarjeta SIM del operador Movistar(cuya configuracion APN incluye el nombre APN es internet.movistar.cr yno tiene contrasena). Adicionalmente, se intento utilizar una tarjeta SIM deloperador Kolbi, pero su configuracion fallo por razones desconocidas.

3.4 Algoritmo de programa principal

El algoritmo principal se ilustra en la figura 3.8.

Se puede apreciar de buena forma como es que funciona el algoritmo imple-mentado en el programa del anexo B que hace operar el prototipo desarrollado.Se divide en dos subrutinas principales: Setup y Loop.

En la subrutina Setup, se realizan las configuraciones iniciales del sistema.Por lo tanto, lo primero que se realiza es habilitar la comunicacion serial quese utilizara en el sistema. Es importante que se realice a 9600bd, por las ca-racterısticas del equipo descritas anteriormente, y que se utilice comunicacionserial tanto en el puerto Serial (correspondiente al USB Host del Galileo, quiense comunica con la computadora), para imprimir en consola los resultados delprograma, y en el puerto Serial1, correspondiente a los pines digitales 0 y 1 delGalileo y en donde se realiza la comunicacion con los modulos externos GPSy GPRS. Tambien, se deben habilitar las funciones de los pines, para que sedefina si los pines estaran leyendo datos de modulos externos o si estaran, porsu parte, dando informacion a los mismos. Una vez que se ha realizado estaparte, se conecta el sistema a Internet por medio del modulo GPRS, utilizandocomandos AT. En el caso de este sistema, se conecta con la red de Movistar,con los parametros de autentificacion establecidos en el codigo.

Por su parte, en la subrutina Loop se pone a operar la funcion completadel microcontrolador. Ası, inicia con una revision del estado del GPS (co-nocido como el Fix del GPS), una vez que el GPRS esta funcionando y elsistema esta conectado a Internet. Si esta obteniendo una senal de los sate-lites GPS en el espacio, se permite que la rutina continue. A partir de ahı,se empieza a hacer una lectura de los datos que se reciben del GPS. Estosdatos vienen en un formato NMEA, utilizando los datos GPRMC. De estos

26 3 Diseno del prototipo

Figura 3.8: Diagrama de flujo del programa principal

datos se puede observar en pantalla un desgloce general de toda la informa-cion GPS disponible. Sin embargo, solo se operan los datos de estado delGPS, hora, fecha, latitud y longitud, debido a que son los que interesan parala operacion del microcontrolador y de las aplicaciones externas. Estos datosse separan en variables y se revisan, para determinar si hay errores en ellos.Si los hay, se revisa de nuevo si el Fix se perdio y se repite la operacion.Si no se encuentran errores, se realiza una operacion HTTP Get (un acce-so sencillo a un URL, del tipo que se realiza en un navegador de Internetnormal) para accesar un URL establecido con un servicio web que permitaoperar los datos de posicionamiento. Este URL se conforma con la direcciondel servicio web y con los datos obtenidos del modulo GPS; esta URL tie-ne la siguiente forma: http://EXAMPLE.com/broadcast.php?lat=LATITUD&lon=LONGITUD& hour=HORA& date=FECHA, donde se sustituyen los nom-bres en mayuscula por los valores pertinentes. Es importante destacar que estaoperacion HTTP Get es una solicitud de informacion de un servidor remoto

3.5. Pagina web de prueba 27

(y no un envıo de datos como tal). Lo que se hace es incluir informacion pro-pia del sistema en esta solicitud para que el servidor reconozca esos datos ylos pueda almacenar (es un truco utilizado para enviar los datos deseados alservidor de una manera sencilla aunque indirecta). Una vez que se completala operacion HTTP Get y se envıan los datos mediante la URL al servidorremoto, se espera 10 segundo para renaudar el ciclo y volver al principio de lafuncion, leyendo nuevos datos del modulo GPS.

3.5 Pagina web de prueba

Se programa una pagina web de prueba hospede una funcion que reconozcacuando hay datos del prototipo en la URL que accesa el modulo GPRS desdeel Galileo. Por lo tanto, se tiene una pagina cuyo diseno se realiza en lenguajeHTML, pero con scripts dentro del codigo en lenguaje Javascript y PHP. En elscript PHP, se identifican las variables necesarias en el URL. Si se introducenlas cuatro variables requeridas en el URL (latitud, longitud, hora y fecha), secrea un archivo de texto (.txt), de donde se actualizaran las cajas de textoque se muestran en la pagina y de donde se obtendra la informacion para elmapa. Dentro del codigo en Javascript, se utiliza un API de Google Maps parapoder presentar un mapa en la pantalla, en donde se programa un marcadorque utilice las coordenadas del URL obtenidas en el archivo de texto creadapor el script PHP, convierta los datos de latitud y longitud en grados, minutosy segundos a grados decimales (formatos estandar para expresar coordenadasgeograficas) para que puedan ser aprovechados por Google Maps y, finalmente,muestre en el mapa el punto en donde se encuentra el prototipo.

Esta pagina se debe hospedar en un servidor publico, de manera que puedaser accesado por el modulo GPRS. Este es un punto importante, debido a queel Internet que tiene el sistema viene de una red celular, la cual (en unaconfiguracion de usuario normal) no va a poder accesar servidores privados,al no ser parte de las mismas redes. Se hace enfasis en que la creacion yprogramacion de esta pagina se realiza por motivos de prueba del sistema ydemostracion del prototipo. A pesar de tener un funcionamiento robusto y depoder utilizar los datos de la manera que se requiere, tiene acceso publico yno protege los datos de los usuarios, algo que serıa requerido en una empresaprivada que quiere resguardar la ubicacion de sus empleados. Por tanto, parauna implementacion real, la pagina y la configuracion del servidor remoto sedeben realizar con las consideraciones de seguridad del caso.

La pagina se muestra en la figura 3.9. Se observa el codigo de esta paginaen el anexo C.

28 3 Diseno del prototipo

Figura 3.9: Pagina de prueba del prototipo

3.6 Alimentacion del prototipo

Para las pruebas, se utiliza la baterıa de la figura ??. Es una baterıa generica,de 50000mAh, 5V y 2A. Se alimenta el sistema con una baterıa debido a quese quiere tener la opcion de mover el sistema a diferentes vehıculos (no soloautobuses). En primera instancia, se considero conseguir la alimentacion desdealguna disponible en el autobus, pero se decidio no hacer esto debido a quelos autobuses disponibles en Intel Costa Rica no tienen una salida de tensiondisponible de fabrica y se preferıa no modificar los autobuses.

La baterıa otorga 5V a los dispositivos que tiene conectados y puede tolerar2A. Sin embargo, no es regulada y, una vez que se le conecta la carga delGalileo, su tension baja a alrededor de 3V. Por lo tanto, se debe utilizar unconvertidor DC-DC Boost como regulador de conmutacion, para que la tensionde 3V pase a ser 5V. Para la operacion real del prototipo, se planea utilizar labaterıa del equipo seleccionado al inicio de este capıtulo, debido a que tieneuna regulacion interna comprobada.

3.7 Caja del prototipo

Se disena una caja apropiada para albergar el prototipo, hecha para ser ma-nufacturada por una impresora 3D. El objeto esta disenado para permitir laventilacion de las partes, separar la operacion de cada modulo, permitir co-nexiones sencillas y ser una base para todos los modulos. Su diseno se realiza

3.7. Caja del prototipo 29

Figura 3.10: Baterıa para el prototipo

Figura 3.11: Caja para el prototipo - Vista superior

en Solidworks 2012 en dos partes separadas; se puede observar en las figuras3.11 y 3.12.

Su manufactura no se realiza debido a problemas de funcionamiento de laimpresora 3D del Laboratorio de Innovacion de Intel Costa Rica. Sin embargo,se adjunta el codigo para introducir a la impresora 3D en el momento que estelista para imprimir con precision. Una vez impresa, se debe taladrar la caja en

30 3 Diseno del prototipo

Figura 3.12: Caja para el prototipo - Vista inferior

puntos estrategicos para poder utilizar tornillos y unir las dos partes disenadas.Se realiza de esta forma para que se puedan introducir y sacar los elementosdel prototipo, y para que el diseno se pueda imprimir en una impresora 3Dpequena.

4 Resultados

En esta seccion se comentan los resultados obtenidos en el proyecto. Es im-portante recordar que el proyecto paso por diversas complicaciones que hacenque no se entregue el prototipo final pensado originalmente, respecto a la cajadel prototipo y su baterıa. Sin embargo, se entrega un sistema que funcionade manera robusta y como se requiere.

4.1 Posicionamiento mediante modulo GPS

Para obtener los resultados del modulo GPS operado por el Galileo, se hacendos pruebas principales: Una sin movimiento, que sea solo para dar una ideaprincipal de la precision del equipo, y otra con el prototipo en movimiento,para evaluar su funcionamiento en operacion real. Para las pruebas, se comparala posicion obtenida en Google Maps con las coordenadas que otorga el GPSde un iPhone 5s contra la posicion que marca el prototipo de posicionamiento.Se activan los dos equipos GPS al mismo tiempo y se espera un minuto paraanotar los resultados, mientras estabilizan sus lecturas.

Prueba estatica de GPS

Se opera el GPS en una posicion conocida y se obtienen los resultados que seobservan en las figuras 4.1 y 4.2.

Se puede observar que la diferencia en ambas posiciones es de alrededor de4 metros, con lo que se obtiene bastante precision en el sistema en relacion alas especificaciones del diseno. Considerando que el sistema funcionara en unvehıculo en movimiento, la precision en un radio de 10 metros es aceptablepara quienes requieren el sistema dentro de Intel Costa Rica.

Prueba dinamica de GPS

Se realiza la prueba en una recta de 250 metros. Se realiza en una recta parapoder tener un experimento mas controlado. Los resultados se observan en latabla 4.1. Como se puede apreciar en esta tabla, la diferencia de distanciassiempre es menor a 10 m, por lo que son resultados bastante positivos enrelacion a los requerimientos de entrega del prototipo.

31

32 4 Resultados

Figura 4.1: Resultados de GPS en iPhone 5s

Figura 4.2: Resultados de GPS en Galileo

4.2. Envıo de datos mediante modulo GPRS 33

Cuadro 4.1: Prueba dinamica de GPS

Posicion iPhone 5s Intel Galileo Diferencia (m)

1 959’37,7” N 8410’31,7” W 959’37,9” N 8410’31,8” W 72 959’38,2” N 8410’29,8” W 959’38.1” N 8410’29,7” W 43 959’39,1” N 8410’26,5” W 959’39,1” N 8410’26,4” W 24 959’39,6” N 8410’24,9” W 959’36,6” N 8410’24,8” W 25 959’40,0” N 8410’23,7” W 959’40,0” N 8410’23,8” W 3

Figura 4.3: Resultados de operacion de GPRS en Galileo

4.2 Envıo de datos mediante modulo GPRS

Los resultados de la operacion HTTP Get del modulo GPRS del prototipo sepueden apreciar en la figura 4.3.

En esta figura, se puede apreciar como se accesa el URL deseado y co-mo la operacion tiene exito, el cual es evaluado desde la lınea +HTTPAC-TION:0,200,.... Esta lınea indica que la accion HTTP Get se realizo sin pro-blemas; tambien se indica cuantos bytes regresa la operacion al accesar lapagina web. En los momentos en los que existıa un error en la accion HTTPGet, se daba por falta de Internet en el prototipo, errores al configurar elAPN del proveedor de red celular o por errores del lado del servidor ajenos alsistema desarrollado.

No se realizaron pruebas de retardo debido a que se trabajo con una paginaweb de prueba que no pasa refrescando sus valores y que estaba hospedada en

34 4 Resultados

Figura 4.4: Prototipo final

un servidor propio, por lo que era complicado lograr esta medicion y que seajustara a la operacion que tendrıa el sistema con un servidor de la empresaIntel Costa Rica. Es fundamental que se realicen estas pruebas una vez que elsistema trabaje con su aplicacion movil y servidor dedicado.

4.3 Integracion de modulos GPS y GPRS

La integracion del sistema se realizo de manera que se pueda tener una funcio-nalidad sencilla y robusta. En operacion normal, se tuvo que trabajar con loscodigos mas sencillos posibles para poder tener un trabajo fluido del Galileo.Se hizo un manejo muy cuidadoso de la memoria utilizada por el microcon-trolador; sin embargo, la lentitud de los pines hizo que el codigo necesitarauna sincronizacion robusta al comunicarse con los modulos externos para que,al multiplexar las entradas provenientes de los modulos externos, no existieramucho ruido en estas senales. Inclusive, se evito el uso de librerıas externas,lo que resulto en un mejor rendimiento del equipo.

4.4 Prototipo final

Para el prototipo final, se agrega la baterıa escogida para el proyecto; el casedisenado para albergar el sistema no se entrega, debido a la inoperabilidadactual de la impresora 3D del Laboratorio de Innovacion de Intel Costa Rica.El resultado se observa en la figura 4.4.

4.5. Intel Galileo 35

4.5 Intel Galileo

Evaluacion general de la herramienta

La operacion con el Intel Galileo no tuvo un desempeno satisfactorio. Estoporque en su mismo desarrollo y publicidad inicial se explica que se apuntasu uso tanto para funciones tıpicas de un Arduino como para proyectos querequieren el uso de un sistema operativo pequeno. Sin embargo, al utilizarel Galileo como un microcontrolador de la misma manera que funciona unArduino Uno, se notan bastantes diferencias en su funcionamiento. Algunasde ellas se anunciaron desde que salio el equipo y no son tan significativas,pero otras fueron una sorpresa en el trabajo de este proyecto.

1. No es sencillo de usar: A pesar de que el procedimiento para subir co-digo al Galileo no es tan complicado y no es tan diferente en relacion a unArduino, se tiene que tomar en cuenta detalles de alimentacion, escriturade codigo y caracterısticas especiales de los protocolos de comunicaciondel Galileo que pueden resultar en dificultades para el desarrollo de pro-yectos en la plataforma. Durante el desarrollo del proyecto, fue comun lanecesidad de reescribir codigo para cada etapa de la funcion del Galileo,debido a que algunas lıneas no funcionaban bien cuando se combinabancon otras. Estos errores parecıan aleatorios, en algunos casos no se en-cuentra una justificacion robusta, pero la mayorıa de las veces se podıadeterminar que causaba el error. Algunos de los problemas encontradosfueron errores con la librerıa de tarjetas SD, limitaciones con el proto-colo SPI, diferentes puertos seriales entre el USB y los pines digitales0 y 1, baja velocidad en puertos de uso general que generaban basuray errores en el codigo y la informacion recolectada, y complicaciones alutilizar altas velocidades de datos en los modulos externos. La forma deutilizar el Galileo como microcontrolador se documenta en el anexo A.

2. Velocidad en puertos de uso general: Anteriormente, en la descrip-cion del Intel Galileo, se describen las caracteristicas de la velocidad enlos puertos de uso general de la tarjeta. Se puede observar, experimental-mente, que se tienen grandes problemas con el manejo de tasas de datosmuy altas en pines que no sean de un puerto UART (es decir, todos lospines conectados al expansor de puertos I2C).

3. Documentacion: El Intel Galileo es una tarjeta de desarrollo que salioal mercado en octubre del 2013. Para la escritura de este informe, auntiene muy poco tiempo en las manos de los desarrolladores con sistemasincrustados. Ademas, no ha sido un sistema tan popular, debido a suscaracterısticas, desventajas y, especialmente, precio. Esto ha hecho que

36 4 Resultados

no se haya generado tanta documentacion como se necesita para que seutilicen estos dispositivos por personas que no tengan tanta experien-cia en el uso de microcontroladores. Ademas, en el momento de inicio deeste proyecto, la documentacion seguıa siendo muy tecnica y no apropia-da para usuarios no experimentados, y en algunos casos se encontrabanerrores. Uno de los principales errores fue el anuncio de que se podıan ha-bilitar puertos de uso general para comunicacion serial (fuera del puertoserial en los pines digitales 0 y 1), pero ni la librerıa estaba habilitadapara trabajar con una arquitectura x86 ni se tiene suficiente velocidadde pines para este fin.

4. Protocolos de alimentacion: Se tiene que seguir un procedimientopreestablecido para dar energıa al Galileo y conectarlo a la computadorapara programarlo como un microcontrolador. Primero, se debe conectarla alimentacion de 5V al Galileo por el puerto DC apropiado. Poste-riormente, si se debe conectar a la computadora, se debe conectar elcable USB al puerto USB Host. Para apagar el Galileo, se debe tenerdesconectado este cable micro-B USB. Esto genera algunos inconvenien-tes. Primero, se tiene que tener la consideracion de solo usar 5V en elGalileo; cualquier otra tension puede danar severamente al Intel Quark.Tambien, solo se puede alimentar al Galileo desde el puerto DC, ya queel puerto USB Host no esta habilitado para que alimente a la tarjeta. Unpuerto USB de una computadora comun solo puede entregar alrededorde 500mA, mientras que el Galileo puede llegar a requerir hasta 2A.

Desempeno de baterıa

Para medir el desempeno del prototipo creado, se hacen evaluaciones compa-rando el rendimiento del Galileo con el de un Arduino Uno. Para este efecto,se hacen dos pruebas principales: Corriente promedio y duracion de operacioncon una baterıa externa. Para la ambas pruebas, tanto el Galileo como el Ar-duino van a estar corriendo el programa desarrollado para este proyecto. Enla prueba de corriente promedio, se toman mediciones cada 5 minutos duran-te media hora; para la prueba de baterıa, se anota cuanto dura una baterıacargada totalmente, de 50000 mAh y 5V, en perder su carga.

1. En el Arduino Uno, se encuentra que el consumo promedio de corrientese encuentra en 212,44 mA, alimentado desde un puerto USB de unacomputadora a 5V. La baterıa dura alrededor de 228 horas en descar-garse en su totalidad.

4.6. Recepcion del prototipo en Intel Costa Rica 37

2. En el Galileo, el consumo promedio de corriente se encuentra en 462,32mA, cargado a 5V desde un adaptador de corriente externo. La baterıadura aproximadamente 102 horas en descargarse por completo.

Se nota la gran diferencia entre ambos sistemas en el consumo de potencia.La diferencia principal radica en que el Galileo debe cargar un sistema ope-rativo GNU/Linux para que corra el programa de microcontrolador, mientrasque el Arduino lo corre sin necesidad de este sistema operativo. Por tanto, elconsumo no se ajusta a la aplicacion. Ademas, se puede determinar que es unconsumo bastante alto para un microcontrolador simple; sin embargo, para unsistema incrustado de mas bajo nivel con sistema operativo, es un consumomuy bueno. El ultimo resultado no es conclusivo y se anade para incentivarla exploracion futura, debido a que no se esta utilizando el sistema operativodirectamente para la aplicacion, pero se reafirma que el Intel Galileo no es unaalternativa directa al Arduino Uno.

4.6 Recepcion del prototipo en Intel Costa Rica

El prototipo se presento en tres areas fundamentales: Dentro del grupo RDI,donde se gesto este proyecto, en el evento Makers Faire, donde se expuso elalcance del sistema desarrollado, y en el evento Makersthon, donde se empeza-ron los avances para desarrollar la aplicacion que utilice los datos del sistemapara mostrarlos al usuario final.

Grupo RDI

El esfuerzo de investigacion, desarrollo e innovacion de Intel Costa Rica (RDI,por sus siglas en ingles) aprovecho todo el desarrollo de este sistema paraobtener conclusiones directas del impacto del uso de sistemas incrustados dearquitectura x86 para resolver problemas directos de la empresa. Por tanto,los principales resultados por parte de este grupo fueron los siguientes:

• El microcontrolador Intel Galileo tiene gran potencial para resolver in-quietudes de desarrolladores con gran exito; su desarrollo tiene que sermejorado en productos posteriores, para que sea realmente efectivo.

• Se debe seguir profundizando en el uso de sistemas incrustados, tantoen su desarrollo como en su utilizacion, para cumplir con las demandasdel mundo tecnologico moderno.

38 4 Resultados

Figura 4.5: Afiche del prototipo en Makers Faire

Makers Faire

Se realizo una feria para exhibir los proyectos del grupo RDI hacia la or-ganizacion Intel Costa Rica e invitados especiales, donde el proyecto tuvoexposicion y retroalimentacion sobre aspectos tecnicos y alcance proyectado.En esta Makers Faire se genero suficiente interes para comenzar el desarrollode la plataforma de software necesaria para llevar la informacion del prototipoal usuario final. Uno de los afiches utilizados para la promocion del evento fueel mostrado en la figura 4.5.

En general, la recepcion fue muy positiva por parte de las personas queasistieron a la feria; sin embargo, se reafirman los resultados relacionados alGalileo y la conclusion de que no es el equipo adecuado para utilizar comomicrocontrolador de funciones pequenas.

Makersthon

En el evento Makersthon, se hizo una competencia entre 5 grupos de trabajopara desarrollar proyectos cortos durante tres dıas laborales con un gran valor

4.6. Recepcion del prototipo en Intel Costa Rica 39

Figura 4.6: Certificado de segundo lugar en Makersthon

agregado a la empresa Intel Costa Rica. Se inscribio el proyecto para el desa-rrollo de una aplicacion movil que pueda aprovechar los datos del prototipo ymostrarlos al usuario. Se le dio soporte al sistema y se logro unificar el esfuer-zo en software con el hardware desarrollado, por lo que se obtuvo el segundolugar en dicha competicion. Se muestra el certificado de segundo lugar en lacompetencia, en la figura 4.6.

5 Conclusiones y recomendaciones

Para finalizar este informe, se presentan conclusiones y recomendaciones deri-vadas del desarrollo de este proyecto. Las conclusiones se realizan en relaciondirecta con los objetivos formulados en el proyecto y los resultados del mismo.De igual manera, se escriben las recomendaciones para optimizar el desarrollode sistemas similares y para la utilizacion del Intel Galileo.

Conclusiones

• El Intel Galileo puede operar, con procesamiento muy eficiente y resul-tados precisos, modulos GPS como el Adafruit Ultimate GPS BreakoutBoard para determinar las coordenadas de ubicacion en las que se ubicael sistema de posicionamiento vehicular desarrollado.

• El Intel Galileo tiene la habilidad de utilizar un modulo GPRS como elSeeed GPRS Shield V2.0 para conectarse a Internet y enviar datos a unservidor remoto, mediante una accion HTTP Get hacia un servicio webestablecido.

• Se puede desarrollar un prototipo funcional y un producto final con unIntel Galileo, como el que se ha desarrollado en este proyecto, para ubicarlos vehıculos internos de la empresa Intel Costa Rica.

• Se puede desarrollar, con herramientas de desarrollo abierto como elAPI de Google Maps, una pagina web con un servicio web que permitaoperar los datos de posicionamiento recibidos por acciones HTTP Getdel sistema desarrollado.

• Se concluye que el producto Intel Galileo no es el mejor dispositivo parautilizar como un microcontrolador puro; se puede aprovechar mejor laherramienta cuando se utiliza con un sistema operativo.

Recomendaciones

• Para el uso del Intel Galileo o de cualquier otro microcontrolador esimportante aprovechar los distintos puertos de comunicacion que estandisponibles para el desarrollo. En este proyecto, se utilizo unicamenteel puerto serial para conectar los diferentes modulos utilizados, pero se

41

42 5 Conclusiones y recomendaciones

podrıa explorar el uso de modulos con otros protocolos y ası eliminar lanecesidad de circuiterıa externa en el equipo.

• El conocimiento de la herramienta es indispensable para el desarrollode un proyecto de este tipo. Para favorecer la efectividad en el trabajo,familiarizarse con el equipo antes del desarrollo de un sistema es unabuena practica.

• Crear, para estos prototipos, un circuito impreso que permita una co-nexion mas seria de la circuiterıa externa y ası lograr un producto mascercano a uno que se pueda posicionar en el mercado.

• La documentacion del Galileo es insuficiente, por lo que serıa pruden-te contribuir mas a su desarrollo y a la exploracion de sus diferentescaracterısticas.

• A pesar de que el trabajo se baso en la documentacion existente, sepodrıan desarrollar pruebas especıficas del consumo de potencia del Ga-lileo, para que de esta forma sea mas sencillo escoger los metodos dealimentacion y sus verdaderas limitaciones al respecto.

Bibliografıa

Adafruit (2014). Adafruit Ultimate GPS Overview.https://learn.adafruit.com/adafruit-ultimate-gps/overview.

Arduino (2014). Arduino Uno. http://arduino.cc/en/Main/arduinoBoardUno.

Blackman, S. (1999). Design and Analysis of Modern Tracking Systems. Ar-tech House, United States.

Dougherty, J. J. (1995). Gps modeling for designing aerospace vehicle naviga-tion systems. En IEEE Transactions on Aerospace and Electronic Systems.

Instruments, T. (2014). Quad 2-Line to 1-Line Data Selectors/Multiplexers.http://www.ti.com/lit/ds/symlink/54ls157.pdf.

Intel (2014a). Intel Galileo. http://www.intel.com/content/www/us/en/do-it-yourself/galileo-maker-quark-board.html.

Intel (2014b). Intel Galileo Datasheet.https://communities.intel.com/servlet/JiveServlet/downloadBody/21835-102-5-25148/Galileo Datasheet 329681 003.pdf.

Peter Barry, P. C. (2011). Computer Architecture, Fifth Edition. MorganKaufmann, United States.

Peter Barry, P. C. (2012). Modern Embedded Computing. Morgan Kaufmann,United States.

Rhee, M. Y. (2009). Mobile Communications Systems and Security. JohnWiley and Sons, Chichester, UK.

Ross Bannatyne, G. V. (1995a). Introduction to microcontrollers i. En Wes-con/98.

Ross Bannatyne, G. V. (1995b). Introduction to microcontrollers i. En Wes-con/98.

Schmidt, M. (2011). Arduino: A Quick Start Guide. Pragmatic, North Caro-lina, United States.

Studio, S. (2014). GPRS Shield V2.0.http://www.seeedstudio.com/wiki/GPRS Shield V2.0.

43

44 Bibliografıa

van Diggelen, D. F. (2002). Indoor gps theory and implementation. En IEEEPosition, Location and Navigation Symposium.

A Subir codigo al Intel Galileo

Se detallan los siguientes pasos para subir codigo al Intel Galileo. Estos pasosson especıficos para utilizar el Galileo como microcontrolador, de la maneraque funciona un Arduino Uno.

1. Se descarga el IDE apropiado para subir codigo al Galileo. Se escoge elsoftware adecuado de la siguiente direccion: https://communities.intel.com/docs/DOC-22226. Existen versiones para los sistemas operativos Microsoft Win-dows, Mac OS X y Linux. Se debe destacar que se utiliza un programadiferente al que se utiliza con cualquier otra plataforma Arduino.

2. Se descomprime el archivo descargado y se ubica el directorio apropiado.En Windows, se recomienda el directorio C:/ ; en Mac, se prefiere eldirectorio Aplicaciones. Para Linux, no se especifica el directorio.

3. Conectar la fuente de poder de 5V al Galileo.

4. Conectar un cable micro-B USB al puerto USB Client del Galileo. Estecable siempre se conecta despues de conectar la alimentacion de 5V y sedesconecta antes de desconectar la alimentacion.

5. Si se utiliza el sistema operativo Windows, se debe instalar el driverapropiado.

• Esperar a que Windows falle al tratar de instalar el driver.

• Abrir Administrador de dispositvos (Panel de control >Sistema>Administrador de dispositivos).

• Ubicar Gadget Serial v2.4, click derecho a ese ıtem y presionarActualizar software de controlador.

• Elegir la opcion que permite buscar el software requerido en elequipo y, en la ventana que emerge, presionar Examinar.

• Navegar la carpeta de instalacion del IDE hasta la direccion hard-ware\arduino\x86\tools; escoger esa direccion.

• Presionar Instalar en la ventana de seguridad siguiente y esperar aque el sistema termine la instalacion.

45

46 A Subir codigo al Intel Galileo

• Confirmar el exito de la instalacion al revisar que en Administradorde dispositivos el Galileo aparece en la lista Puertos.

6. Anotar el puerto utilizado por el Galileo. Los pasos difieren para distintossistemas operativos.

• Para Windows, revisar en Administrador de dispositivos y en lalista Puertos el puerto COM utilizado.

• En Mac, abrir la ventana de Informacion de sistema (Opciones>menu de Apple >Informacion de sistema), buscar la pestana Redy encontrar el puerto del Galileo (su nombre sera similar a usbmo-demXXXX ).

• En Linux, abrir una terminal y escribir ls /dev/ttyACM para ave-riguar el nombre del Galileo (sera de la forma ttyACMX ).

7. Reiniciar al Galileo. Desconectar el sistema y volverlo a conectar, con elcuidado del paso 4.

8. Abrir el IDE instalado anteriormente.

9. Ir al menu Tools y escoger, en Serial Port, el puerto anotado en el paso6. En Board, escoger al Galileo.

10. Actualizar el firmware del Galileo en el menu Help y escogiendo ”Firm-ware update”.

11. Escribir el codigo en el espacio apropiado y presionar el boton Upload,para subir el codigo al Galileo.

12. En adelante, repetir los pasos 8, 9, 10 y 11 para subir codigo al Galileo.

B Codigo de aplicacion principalde posicionamiento vehicular paraIntel Galileo

El texto siguiente es el codigo que permite al Galileo operar todo el sistemade posicionamiento.

/*

* Intel Galileo + Adafruit Ultimate GPS Breakout Board + Seeed GPRS

Shield: GPS + GPRS Code (MUX)

*/

/*

* Description: Galileo and GPS/GPRS interaction.

* Galileo reads data from GPS, operates external multiplexor

* and sends information to server via HTTP Get action

* via GPRS shield.

*

* Copyright (C) 2014, Sergio Valverde

* [email protected]

*

* This program is free software: you can redistribute it and/or

modify

* it under the terms of the GNU General Public License as published

by

* the Free Software Foundation, either version 3 of the License, or

* (at your option) any later version.

*

* This program is distributed in the hope that it will be useful,

* but WITHOUT ANY WARRANTY; without even the implied warranty of

* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the

* GNU General Public License for more details.

*

* You should have received a copy of the GNU General Public License

* along with this program. If not, see

<http://www.gnu.org/licenses/>.

*

* Version 1.0

* Author: Sergio Valverde

47

48B Codigo de aplicacion principal de posicionamiento vehicular para Intel

Galileo

*/

// Import libraries

#include <string.h>

#include <ctype.h>

// Global variables

int GPSLedPin = 13; // GPS LED pin

int GPRSLedPin = 12; // GPRS LED pin

int sel = 11; // Select pin for MUX operation

String stat; // Status variable

String latitude; // Latitude variable

String dir1; // Direction variable

String longitude; // Longitude variable

String dir2; // Direction variable

String hour; // Time variable

String date; // Date variable

String url; // URL char

// setup: Initial configuration of the system

void setup()

serial_setup(); // Serial setup

serial.println("Turn GPRS module on"); // Turn GPRS module on

delay(10000); // Wait 30 seconds

Serial.println("Begin setup"); // Begin setup

pin_setup(); // Pin mode setup

gprs_setup(); // GPRS module setup

gps_fix(); // Initial GPS fix wait

Serial.println("Setup OK"); // Setup OK

// loop: Main program working

void loop()

gps_parse(); // Get GPS data

if (stat == "A" && (dir1 == "N" || dir1 == "S") && (dir2 == "E" ||

dir2 == "W")) // Check if GPS data is ok

url_setup(); // Set the URL up with GPS data

http_get(); // Perform the HTTP Get function in

order to communicate with the server

else // If "stat" isn’t "A", data isn’t ok

gps_fix(); // Wait GPS fix

B Codigo de aplicacion principal de posicionamiento vehicular para IntelGalileo 49

// serial_setup: Enables Serial communication with GPS and GPRS

void serial_setup()

Serial.begin(9600); // Initialize Serial communication

Serial1.begin(9600); // Initialize Serial1 communication

delay(1000); // Waits 1 second

// pin_setup: Configures the status LEDs. Also, configures the MUX

select pin.

void pin_setup()

pinMode(GPSLedPin, OUTPUT); // Initialize GPS LED

pinMode(GPRSLedPin, OUTPUT); // Initialize GPRS LED

pinMode(sel, OUTPUT); // Initialize ’sel’ pin as

an output pin

delay(1000); // Waits 1 second

// gprs_setup: Connect GPRS to internet (SIM card Pin input, APN

configuration and confirmation)

void gprs_setup()

digitalWrite(sel, LOW); // Puts ’sel’ pin in LOW (GPRS

Operation)

delay(1000); // Wait 1 second

Serial1.println("AT+CGATT?"); // Attach to GPRS service

delay(2000); // Wait 2 seconds

toSerial(); // Send data to Serial monitor

delay(2000); // Wait 2 seconds

Serial1.println("AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\"");

// Bearer settings

delay(2000); // Wait 2 seconds

toSerial(); // Send data to Serial monitor

delay(2000); // Wait 2 seconds

Serial1.println("AT+SAPBR=3,1,\"APN\",\"internet.movistar.cr\"");

// APN and provider settings

delay(2000); // Wait 2 seconds

toSerial(); // Send data to Serial monitor

delay(2000); // Wait 2 seconds

Serial1.println("AT+SAPBR=1,1"); // Bearer settings

delay(2000); // Wait 2 seconds

toSerial(); // Send data to Serial monitor

delay(2000); // Wait 2 seconds

digitalWrite(GPRSLedPin, HIGH); // Light GPS LED up when GPS has

a fix

50B Codigo de aplicacion principal de posicionamiento vehicular para Intel

Galileo

// toSerial: Writes in Serial port what is being sent and recieved by

the GPRS module

void toSerial()

while(Serial1.available()!=0) // Checks if Serial1 information

is available and not null

Serial.write(Serial1.read()); // Print available Serial1

information in Serial port

// url_setup: Sets the URL up with the GPS data

void url_setup()

url = "AT+HTTPPARA=\"URL\",\"http://EXAMPLE.com/broadcast.php?lat=";

// Initialization of the URL

url.concat(latitude); // Concatenation of the GPS data

url.concat("&lon=");

url.concat(longitude);

url.concat("&hour=");

url.concat(hour);

url.concat("&date=");

url.concat(date);

url.concat("\"");

// gps_fix: Checks if the GPS has a fix

void gps_fix()

digitalWrite(GPSLedPin, LOW); // Turns off GPS LED up when

GPS searches fix

Serial.println("Getting GPS Fix"); // Getting GPS Fix

int fixled; // Stores the analog read of

the FIX led pin

int fix = 0; // Counter

while (fix < 12) // If fix > 12, FIX led is off

for more than a second (GPS has a fix)

fixled = analogRead(A0); // Analog read to ’fixled’

if ( fixled > 100 ) // Checks if ’fixled’ is over

100 (over around 0.5 V). If it is, it’s on

fix = 0; // Restore ’fix’ to 0 to

continue the loop

else // FIX led is off

fix++; // Increment ’fix’

delay(100); // Wait 0.1 second

Serial.println("Fix obtained"); // Fix obtained

digitalWrite(GPSLedPin, HIGH); // Light GPS LED up when GPS

B Codigo de aplicacion principal de posicionamiento vehicular para IntelGalileo 51

has a fix

// gps_parse: Parse the GPS data collected from the GPS module

void gps_parse()

int byteGPS = -1; // Stores GPS immediate input

char GPR[7] = "$GPRMC"; // Initial string of NMEA data from

GPS

int cont = 0; // Index for ’index’ array

int ok = 0; // Counter for $GPR matching

int count = 0; // Marks position of commas and

asterisks in NMEA phrases

int ind[13]; // Index of ’buffer’

char buffer[300] = ""; // GPS Buffer

for (int i = 0; i < 300; i++)

buffer[i]=’ ’; // Fill ’buffer’ with empty data

stat = ""; // Status variable

latitude = ""; // Latitude variable

dir1 = ""; // Direction variable

longitude = ""; // Longitude variable

dir2 = ""; // Direction variable

hour = ""; // Time variable

date = ""; // Date variable

digitalWrite(sel, HIGH); // Puts ’sel’ pin in HIGH (GPS

Operation)

delay(1000); // Waits 1 second

do

byteGPS = Serial1.read(); // Read a byte from the GPS software

serial port

if (byteGPS == -1) // Check if the GPS serial port is

empty

delay(100); // If port is empty, wait 0.1 seconds

else

buffer[count] = byteGPS; // If there is GPS serial port data,

store it in ’buffer’. Potential ’buffer’ overflow here

count++; // Increment ’count’

Serial1.write(byteGPS);

if (byteGPS == 13) // If received byte is 13, end of

transmission (actual end is <CR><LF>). If not, go back to

loop

cont = 0; // Index for ’index’ array

ok = 0; // Counter for $GPR matching

for (int i = 1; i < 7; i++)

// Verifies the incoming command

52B Codigo de aplicacion principal de posicionamiento vehicular para Intel

Galileo

starts with $GPR. Loop starts at

1 because the first byte is <LF>

(0x10) from the previous

transmission

if (buffer[i] == GPR[i-1])

ok++; // If ’buffer[i]’ matches

’GPR[i-1]’, increment ’ok’

if(ok == 6) // If ok == 6 (command starts with

$GPR), continue and process the data

for (int i = 0; i < 300; i++)

// Review whole ’buffer’ variable

if (buffer[i] == ’,’)

// Check position of the coma (",")

ind[cont] = i; // Store position of comma.

Potential ’buffer’ overflow here

cont++; // Increment ’cont’

if (buffer[i] == ’*’)

// Check position of the asterisk

(",")

ind[12] = i; // Store position of asterisk

cont++; // Increment ’cont’

Serial.println(""); // Print the GPS Data in the Serial

monitor

Serial.println("");

Serial.println("---------------");

for (int i = 0; i < 12; i++)

switch(i)

case 0 :Serial.print("Time in UTC (HhMmSs): ");break;

case 1 :Serial.print("Status (A=OK,V=KO): ");break;

case 2 :Serial.print("Latitude: ");break;

case 3 :Serial.print("Direction (N/S): ");break;

case 4 :Serial.print("Longitude: ");break;

case 5 :Serial.print("Direction (E/W): ");break;

case 6 :Serial.print("Velocity in knots: ");break;

case 7 :Serial.print("Heading in degrees: ");break;

case 8 :Serial.print("Date UTC (DdMmAa): ");break;

case 9 :Serial.print("Magnetic degrees: ");break;

case 10 :Serial.print("(E/W): ");break;

case 11 :Serial.print("Mode: ");break;

case 12 :Serial.print("Checksum: ");break;

for (int j = ind[i]; j < (ind[i+1]-1); j++)

B Codigo de aplicacion principal de posicionamiento vehicular para IntelGalileo 53

// Review whole ’index’ variable

Serial.print(buffer[j+1]);

if (i == 1) // If i = 2, ’status’ data

stat += String(buffer[j+1]);

// Store ’buffer’ status data in

’stat’

else if (i == 2) // If i = 2, ’latitude’ data

latitude += String(buffer[j+1]);

// Store ’buffer’ latitude data in

’latitude’

else if (i == 3) // If i = 2, ’latitude’ data

dir1 += String(buffer[j+1]);

// Store ’buffer’ latitude data in

’latitude’

else if (i == 4) // If i = 4, ’longitude’ data

longitude += String(buffer[j+1]);

// Store ’buffer’ longitude data in

’longitude’

else if (i == 5) // If i = 2, ’latitude’ data

dir2 += String(buffer[j+1]);

// Store ’buffer’ latitude data in

’latitude’

else if (i == 0) // If i = 0, ’time’ data

hour += String(buffer[j+1]);

// Store ’buffer’ time data in ’time’

else if (i == 8) // If i = 8, ’date’ data

date += String(buffer[j+1]);

// Store ’buffer’ date data in ’date’

Serial.println("");

Serial.println("---------------");

count = 0; // Reset the ’buffer’ index

for (int i = 0; i < 300; i++)

// Review whole ’buffer’ variable

buffer[i]=’ ’; // Empty ’buffer’

54B Codigo de aplicacion principal de posicionamiento vehicular para Intel

Galileo

while (byteGPS != 13 || ok != 6);

// http_get: Send the GPS data to the remote server

void http_get()

digitalWrite(sel, LOW); // Puts ’sel’ pin in LOW

(GPRS Operation)

delay(1000); // Waits 1 second

Serial1.println("AT+HTTPINIT"); // Initialize HTTP service

delay(2000); // Wait 2 seconds

toSerial(); // Send data to Serial

monitor

Serial1.println("AT+HTTPPARA=\"CID\",1"); // Set CID

parameter

delay(2000); // Wait 2 seconds

toSerial(); // Send data to Serial

monitor

Serial1.println(url); // Set URL

delay(2000); // Wait 2 seconds

toSerial(); // Send data to Serial

monitor

Serial1.println("AT+HTTPACTION=0"); // Set HTTP Action type (0

= GET, 1 = POST, 2 = HEAD)

delay(6000); // Wait 6 seconds

toSerial(); // Send data to Serial

monitor

Serial1.println("");

Serial1.println("AT+HTTPTERM"); // Finish HTTP service

toSerial(); // Send data to Serial

monitor

delay(300); // Wait 0.3 seconds

Serial1.println("");

delay(10000); // Wait 10 seconds

C Codigo de pagina web deprueba para el sistema deposicionamiento vehicular

El siguiente codigo habilita la pagina web, con su servicio web, para la comuni-cacion con el sistema fısico de posicionamiento vehicular desarrollado. Utilizala API de Google Maps para permitir una interaccion grafica con el usuario.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<meta name="viewport" content="initial-scale=1.0, user-scalable=no">

<title>Bus Position Broadcast Prototype - RDI @ Intel Costa

Rica</title>

<style>

html, body, #map-canvas

height: 75 %;

margin: 30px;

padding: 0px

</style>

<script

src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script>

<script>

function initialize()

var getlat = document.getElementById(’gpslat’).value;

var getlon = document.getElementById(’gpslon’).value;

var partsLat = getlat.split("");

var lat0 = partsLat[0] + partsLat[1];

var lat1 = (partsLat[2] + partsLat[3])/60;

var lat2 = (partsLat[5] + partsLat[6] + "." + partsLat[7] +

partsLat[8])/3600;

var maplat = +lat0 + +lat1 + +lat2;

var partsLon = getlon.split("");

var lon0 = partsLon[1] + partsLon[2];

var lon1 = (partsLon[3] + partsLon[4])/60;

55

56C Codigo de pagina web de prueba para el sistema de posicionamiento

vehicular

var lon2 = (partsLon[6] + partsLon[7] + "." + partsLon[8] +

partsLon[9])/3600;

var maplon = -(+lon0 + +lon1 + +lon2);

var myLatlng = new google.maps.LatLng(maplat,maplon);

var mapOptions =

zoom: 15,

center: myLatlng

var map = new

google.maps.Map(document.getElementById(’map-canvas’),

mapOptions);

var marker = new google.maps.Marker(

position: myLatlng,

map: map,

title: ’Prototype Position’

);

google.maps.event.addDomListener(window, ’load’, initialize);

</script>

</head>

<body>

<div align="center">

<p>

<?php

$latitude = $_GET["lat"];

$longitude = $_GET["lon"];

$hour = $_GET["hour"];

$date = $_GET["date"];

if($latitude != "" && $longitude != "" && $hour != "" && $date !=

"")

$f = fopen("broadcastlog.txt", "w");

fwrite($f,$latitude);

fwrite($f,"\n");

fwrite($f,$longitude);

fwrite($f,"\n");

fwrite($f,$hour);

fwrite($f,"\n");

fwrite($f,$date);

fclose($f);

?>

<img src="galileo_logo.png" width="220" height="60"

alt="intel_galileo_logo" /> </p>

<p><strong><font size="5" face="verdana">Bus Position

Broadcast</font></strong>

<br>

<font size="4" face="verdana">Prototype Test</font>

C Codigo de pagina web de prueba para el sistema de posicionamientovehicular 57

<br>

</p>

<table width="200" border="0">

<tr>

<th scope="row"><font size="2" face="verdana">Latitude</font></th>

<td><input type="text" name="gpslatitude" id="gpslat"

value="<?php $myFile = "broadcastlog.txt"; $lines =

file($myFile); echo $lines[0]; ?>" /></td>

</tr>

<tr>

<th scope="row"><font size="2"

face="verdana">Longitude</font></th>

<td><input type="text" name="gpslongitude" id="gpslon"

value="<?php $myFile = "broadcastlog.txt"; $lines =

file($myFile); echo $lines[1]; ?>" /></td>

</tr>

<tr>

<th scope="row"><font size="2" face="verdana">Time</font></th>

<td><input type="text" name="gpshour" value="<?php $myFile =

"broadcastlog.txt"; $lines = file($myFile); echo $lines[2];

?>" /></td>

</tr>

<tr>

<th scope="row"><font size="2" face="verdana">Date</font></th>

<td><input type="text" name="gpsdate" value="<?php $myFile =

"broadcastlog.txt"; $lines = file($myFile); echo $lines[3];

?>" /></td>

</tr>

</table>

</div>

<div id="map-canvas"></div>

</body>

<footer>

<div align="center">

<p style="color:#B6B6B4">

<font size="2"

face="verdana">_____________________________________________________________________________________________________________________________</font><br><br>

<font size="2" face="verdana">Bus Position Broadcast Prototype, 2014

| Sergio Valverde, RDI @ Intel Costa Rica</font><br><br>

<font size="2" face="verdana"><a rel="license"

href="http://creativecommons.org/licenses/by-nc/4.0/"><img

alt="Licencia de Creative Commons" style="border-width:0"

src="http://i.creativecommons.org/l/by-nc/4.0/88x31.png"

/></a><br /><span xmlns:dct="http://purl.org/dc/terms/"

property="dct:title">BPB Prototype Webservice</span> by <span

xmlns:cc="http://creativecommons.org/ns#"

property="cc:attributionName">Sergio Valverde</span> is licensed

58C Codigo de pagina web de prueba para el sistema de posicionamiento

vehicular

under a <a rel="license"

href="http://creativecommons.org/licenses/by-nc/4.0/">Creative

Commons Attribution-NonCommercial 4.0 International

License</a>.</font><br><br>

</p>

</div>

</footer>

</html>

D Codigo de correccion de tasa dedatos para comunicacion serial enSIM900 de Seeed GPRS Shield V2.0

El texto siguiente es el codigo que permite al Galileo cambiar la tasa de datoscon la que el SIM900 del Seeed GPRS Shield V2.0 se comunica de maneraserial.

/*

* Intel Galileo + Seeed GPRS Shield: Change SIM900 baud rate

*/

/*

* Description: Changing the SIM900 baud rate from 19200 to 9600.

*

* Copyright (C) 2014, Sergio Valverde

* [email protected]

*

* This program is free software: you can redistribute it and/or

modify

* it under the terms of the GNU General Public License as published

by

* the Free Software Foundation, either version 3 of the License, or

* (at your option) any later version.

*

* This program is distributed in the hope that it will be useful,

* but WITHOUT ANY WARRANTY; without even the implied warranty of

* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the

* GNU General Public License for more details.

*

* You should have received a copy of the GNU General Public License

* along with this program. If not, see

<http://www.gnu.org/licenses/>.

*

* Version 1.0

* Author: Sergio Valverde

*/

59

60D Codigo de correccion de tasa de datos para comunicacion serial en

SIM900 de Seeed GPRS Shield V2.0

// Import libraries

#include <string.h>

#include <ctype.h>

// setup: Initial configuration of the system

void setup()

Serial.begin(19200); // Begin Serial comunication with computer at

19200 bd

Serial1.begin(19200); // Begin Serial comunication with SIM900 at

19200 bd

delay(1000); // Wait 1 minute

Serial1.write("AT+IPR 9600");

// Send AT Command to SIM900 and change baud

rate to 9600

while(Serial1.available()!=0)

// Checks if Serial1 information is available

and not null

Serial.write(Serial1.read());

// Print available Serial1 information in

Serial port

// loop: Main program working

void loop()

E Codigo alternativo paraobtencion de datos GPS en Arduino

Se adjunta una subrutina alternativa para el manejo de datos GPS desdeun Arduino, con un modulo GPS de Cooking Hacks. Se modifico esta su-brutina para adaptarla al Intel Galileo pero su funcionamiento tuvo grandesdeficiencias, especialmente al detenerse sin razon aparentemente mientras elmicrocontrolador corrıa el codigo.

/*

* Copyright (C) 2013 Libelium Comunicaciones Distribuidas S.L.

* http://www.libelium.com

*

* This program is free software: you can redistribute it and/or

modify

* it under the terms of the GNU General Public License as published

by

* the Free Software Foundation, either version 3 of the License, or

* (at your option) any later version.

*

* This program is distributed in the hope that it will be useful,

* but WITHOUT ANY WARRANTY; without even the implied warranty of

* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the

* GNU General Public License for more details.

*

* You should have received a copy of the GNU General Public License

* along with this program. If not, see .

*

* Version 0.2

* Author: Marcos Yarza, Jorge Casanova

*/

// Include the SoftwareSerial library

#include <SoftwareSerial.h>

// Constants

#define txPin 8 //tx pin in GPS connection

#define rxPin 9 //rx pin in GPS connection

61

62 E Codigo alternativo para obtencion de datos GPS en Arduino

// Set up the GPS serial port

SoftwareSerial gps = SoftwareSerial(rxPin, txPin);

// Variables

byte byteGPS = 0;

int i = 0;

int state = 0;

char dataGPG[100]="";

char *pch;

char *GGA[15];

int sat = 0;

void setup()

//setup for Serial Port

Serial.begin(9600);

Serial.flush();

//setup for GPS Serial Port

pinMode(rxPin, INPUT);

pinMode(txPin, OUTPUT);

gps.begin(4800);

gps.flush();

//setup satellites signal

pinMode(13, OUTPUT);

// Turn off the led until a satellite signal

digitalWrite(13, LOW);

void loop()

gps.flush();

Serial.flush();

Serial.println("Waiting GPS data...");

// Prepare all for reading GPS Serial Port

memset(dataGPG, 0, sizeof(dataGPG));

// Remove previous

readings

byteGPS = 0;

// Remove data

byteGPS = gps.read();

// Read

the byte that is in the GPS serial port

delay(1000);

// Find the desired string

while(byteGPS != ’$’)

byteGPS = gps.read();

E Codigo alternativo para obtencion de datos GPS en Arduino 63

// Save the string in an array

i=1;

dataGPG[0] = ’$’;

while(byteGPS != ’*’ )

byteGPS = gps.read();

dataGPG[i]=byteGPS;

i++;

dataGPG[i]= ’\0’;

string();

// Call to the

function that manipulates our string

/*

This function will allow us to identify the data we need to get the

longitude, latitude ...

*/

void string()

i=0;

memset(GGA, 0, sizeof(GGA)); // Remove previous readings

pch = strtok (dataGPG,",");

// Analyze the saved interval in pch to see if it the needed

string

if (strcmp(pch,"$GPGGA")==0)

while (pch != NULL)

pch = strtok (NULL, ",");

GGA[i]=pch;

i++;

plot(GGA,"$GPGGA");

// Call

to the function that is going to display the data

/*

This function organize the gps data received for printing in the

serial monitor.

*/

void plot(char **GGAPrint, char *trama)

state = atoi(GGAPrint[5]);

sat = atoi(GGAPrint[6]);

if(trama=="$GPGGA" && state==1)

digitalWrite(13, HIGH);

// Then

64 E Codigo alternativo para obtencion de datos GPS en Arduino

there are satellites, the LED switch ON

Serial.println("");

Serial.println("----------------------------------------------");

Serial.print("UTC Hour -> ");

Serial.println(GGAPrint[0]);

Serial.print("Latitude -> ");

Serial.print(GGAPrint[1]);

Serial.println(GGAPrint[2]);

Serial.print("Longitude -> ");

Serial.print(GGAPrint[3]);

Serial.println(GGAPrint[4]);

Serial.print("GPS quality: 0=null; 1=GPS fixed -> ");

Serial.println(GGAPrint[5]);

Serial.print("Number of satellites -> ");

Serial.println(sat);

Serial.print("Horizontal Dilution of Precision -> ");

Serial.println(GGAPrint[7]);

Serial.print("Antenna altitude -> ");

Serial.print(GGAPrint[8]);

Serial.println(GGAPrint[9]);

Serial.print("Geoid Separation -> ");

Serial.print(GGAPrint[10]);

Serial.println(GGAPrint[11]);

Serial.println("----------------------------------------------");

Serial.println("");

else

// If no satellite

connection

digitalWrite(13, LOW);

// Turn off

the LED

Serial.println("");

Serial.println("-----------------------------");

Serial.print("|--- Satellites Used -->");

Serial.print(sat);

Serial.println(" |");

Serial.println("|----Waiting location----|");

Serial.println("-----------------------------");

Serial.println("");