prototipo de sistema de seguridad en...

91
PROTOTIPO DE SISTEMA DE SEGURIDAD EN VEHÍCULOS DE TRANSPORTE PUBLICO QUE PERMITE LA CAPTURA DE IMAGEN FOTOGRÁFICA, POSICIONAMIENTO GLOBAL Y ALMACENAMIENTO EN BASE DE DATOS AUTORES: JONATHAN FERNEY GONZALEZ BENAVIDES CARLOS ARTURO MARIN MENDEZ UNIVERSIDAD DISTRITAL FRANCISCO JOSÉ DE CALDAS FACULTAD TECNOLÓGICA PROYECTO CURRICULAR DE INGENIERIA EN TELECOMUNICACIONES Bogotá D.C., Colombia 2015

Upload: vutu

Post on 01-Oct-2018

218 views

Category:

Documents


0 download

TRANSCRIPT

PROTOTIPO DE SISTEMA DE SEGURIDAD EN VEHÍCULOS DE

TRANSPORTE PUBLICO QUE PERMITE LA CAPTURA DE IMAGEN

FOTOGRÁFICA, POSICIONAMIENTO GLOBAL Y ALMACENAMIENTO

EN BASE DE DATOS

AUTORES:

JONATHAN FERNEY GONZALEZ BENAVIDES

CARLOS ARTURO MARIN MENDEZ

UNIVERSIDAD DISTRITAL FRANCISCO JOSÉ DE CALDAS

FACULTAD TECNOLÓGICA

PROYECTO CURRICULAR DE INGENIERIA EN TELECOMUNICACIONES

Bogotá D.C., Colombia

2015

PROTOTIPO DE SISTEMA DE SEGURIDAD EN VEHÍCULOS DE

TRANSPORTE PUBLICO QUE PERMITE LA CAPTURA DE IMAGEN

FOTOGRÁFICA, POSICIONAMIENTO GLOBAL Y ALMACENAMIENTO

EN BASE DE DATOS

JONATHAN FERNEY GONZALEZ BENVIDES Código: 20122273010

CARLOS ARTURO MARIN MENDEZ Código: 20122273002

Monografía presentada como requisito parcial para optar al título de:

Ingeniería en Telecomunicaciones

Director:

HERMES JAVIER ESLAVA BLANCO, M.Sc. Ph.D(c)

UNIVERSIDAD DISTRITAL FRANCISCO JOSÉ DE CALDAS

FACULTAD TECNOLÓGICA

PROYECTO CURRICULAR DE INGENIERIA EN TELECOMUNICACIONES

Bogotá D.C., Colombia

2015

PROTOTIPO DE SISTEMA DE SEGURIDAD EN VEHÍCULOS DE TRANSPORTE

PUBLICO QUE PERMITE LA CAPTURA DE IMAGEN FOTOGRÁFICA,

POSICIONAMIENTO GLOBAL Y ALMACENAMIENTO EN BASE DE DATOS

PÁGINA DE APROBACIÓN

Observaciones

__________________________________________________________________

__________________________________________________________________

__________________________________________________________________

__________________________________________________________________

__________________________________________________________________

__________________________________________________________________

_______________________________

Hermes Javier Eslava Blanco, m.sc. ph.d(c)

Director Del Proyecto

_______________________________

José David Cely Callejas

Jurado

Fecha de Presentación:

4

Resumen

El objeto principal del proyecto es el diseño de un dispositivo de seguridad en vehículos capaz de

capturar datos de posición geográfica, tomar fotografías y enviar esta información vía internet, para

ser alojados en una base de datos y visualizados a través de una página web. Este prototipo se diseñó

usando la plataforma Raspberry Pi 2 Modelo B, la cual proporciona mayores garantías en términos de

compatibilidad y versatilidad. Se diseñó una base de datos en un servidor remoto con MySQL para la

importación de la información recibida y permitirle al usuario final previamente registrado, consultar

esta información vía web.

Con este prototipo se pretende ofrecer una alternativa tecnológica para mitigar la inseguridad en

vehículos de trasporte público y reforzar el sistema integral de seguridad para el beneficio de la

comunidad en general.

Abstract

The main purpose of the project is the design of a vehicle safety device enable for capturing

geographical positional data, take pictures and send information by Internet, to be housed in a

database and displayed through a web page. This prototype was designed using the platform

Raspberry Pi 2 Model B, this platform provides greater guarantees in terms of compatibility and

versatility. The database was designed on a remote server with MySQL for the import of the

information received and permits the end user previously registered, access this information via the

web.

With this prototype is intended to provide a technological alternative to mitigate insecurity in public

transport vehicles and reinforce the comprehensive security system for benefit of the community.

5

Contenido

Resumen ................................................................................................................................................... 4

Contenido ................................................................................................................................................. 5

Lista de tablas ........................................................................................................................................... 8

Lista de figuras ......................................................................................................................................... 9

Lista de términos .................................................................................................................................... 10

Glosario .................................................................................................................................................. 11

Introducción ........................................................................................................................................... 12

1. DESCRIPCIÓN DEL PROYECTO ........................................................................................................ 13

1.1. OBJETIVOS .............................................................................................................................. 13

1.1.1. Objetivo General ............................................................................................................ 13

1.1.2. Objetivos Específicos ...................................................................................................... 13

2. METODOLOGÍA ............................................................................................................................... 14

2.1. Diseño del Hardware .............................................................................................................. 14

2.2. Diseño Web y base de datos .................................................................................................. 14

2.3. Fases del proyecto .................................................................................................................. 15

3. MODELO DE FACTIBILIDAD TECNOLÓGICA .................................................................................... 17

4. MARCO TEÓRICO ............................................................................................................................ 21

4.1. HTML (HyperText Markup Language) .................................................................................... 21

4.1.1. Estructura de cabecera................................................................................................... 21

4.2. PHP (Hypertext Preprocessor) ............................................................................................... 21

4.2.1. Características PHP ......................................................................................................... 22

4.3. WAMP SERVER ....................................................................................................................... 22

4.4. CSS .......................................................................................................................................... 23

4.5. JAVA SCRIPT ............................................................................................................................ 24

4.5.1. API de Google Maps ....................................................................................................... 24

6

4.6. SERVIDOR WEB ....................................................................................................................... 25

4.7. SERVIDOR FTP ......................................................................................................................... 25

4.8. MD5 (Message-Digest Algorithm) .......................................................................................... 25

4.9. BASES DE DATOS .................................................................................................................... 25

4.9.1. Tipos de bases de datos ................................................................................................. 26

4.9.2. Sistema Gestor de Base de Datos ................................................................................... 28

4.9.3. MySQL............................................................................................................................. 28

4.9.4. Modelo de Entidad – Relación ....................................................................................... 29

4.10. GPS...................................................................................................................................... 30

4.10.1. Introducción ................................................................................................................... 30

4.10.2. Elementos que lo componen .......................................................................................... 30

4.10.3. Funcionamiento .............................................................................................................. 30

4.10.4. Fiabilidad de los datos .................................................................................................... 31

4.10.5. Fuentes de error ............................................................................................................. 31

4.10.6. GPS diferencial................................................................................................................ 32

4.10.7. Coordenadas GPS ........................................................................................................... 32

4.10.8. Múltiples sistemas de coordenadas para coordenadas geográficas .............................. 33

4.10.9. Unidades de medida para las coordenadas GPS ............................................................ 34

4.11. TRANSMISIÓN DE DATOS EN LA RED CELULAR .................................................................. 35

4.11.1. Telefonía Móvil 3G ......................................................................................................... 35

4.11.2. Comparación de la velocidad de los estándares de la telefonía móvil .......................... 36

4.12. RASPBERRY PI ..................................................................................................................... 37

4.12.1. Hardware Raspberry Pi ................................................................................................... 37

4.12.2. Accesorios para Raspberry Pi ......................................................................................... 39

4.12.3. Software para Raspberry Pi ............................................................................................ 41

4.13. PYTHON Y RASPBERRY ........................................................................................................ 42

4.13.1. Python ............................................................................................................................ 42

5. DESARROLLO DEL PROYECTO ......................................................................................................... 44

5.1. DISEÑO DE HARDWARE .......................................................................................................... 44

5.1.1. Inicio de Raspberry Pi ..................................................................................................... 45

5.1.2. Adaptación de módulos y Programación de Raspberry Pi ............................................. 51

5.1.3. Internet móvil con el modem 3G USB Huawei E173 en la Raspberry ............................ 59

7

5.2. DISEÑO DE APLICATIVO .......................................................................................................... 63

5.2.1. Instalación WAMP Server: .............................................................................................. 63

5.2.2. Transferencia de información ........................................................................................ 64

5.2.3. Creación de base de datos, tabla y conexión de MySQL con PHP ................................. 65

5.2.4. Visualización ................................................................................................................... 72

6. Pruebas técnicas ............................................................................................................................. 75

6.1. Prueba de Estrés: ................................................................................................................... 76

7. Conclusiones................................................................................................................................... 78

A. Anexo: Script “principal.py” ........................................................................................................... 79

B. Anexo: Script “pulsador.py” ........................................................................................................... 80

D. Anexo: Script “picam.py” ............................................................................................................... 82

E. Anexo: Script “iniciogps.py” ........................................................................................................... 85

F. Anexo: Script “envioFTP.py” .......................................................................................................... 87

H. Anexo: Script “mapa.php” .............................................................................................................. 89

8. Bibliografía ..................................................................................................................................... 90

8

Lista de tablas

Tabla 1: Fases del proyecto .................................................................................................................... 16

Tabla 2: Comparación entre plataformas electrónicas modernas compuestas. ................................... 17

Tabla 3: Comparación entre lenguajes de programación. ..................................................................... 18

Tabla 4: Comparación entre servidores de mapas. ................................................................................ 20

Tabla 5: Comparación entre los tiempos de respuesta de los mapas. ................................................... 20

Tabla 6: Correlación entre coordenadas Decímales y Sexagesimales. [21] .......................................... 34

Tabla 7: Comparación de la velocidad de los estándares de la telefonía móvil. [23] ............................ 36

Tabla 8: Conexiones GPIO. [26] .............................................................................................................. 38

Tabla 9: Extensión de conexiones GPIO para modelo B versión 2. [26] ................................................. 39

Tabla 10: Es pesificaciones técnicas del módulo GPS. [30] .................................................................... 41

Tabla 11: Tabla de Monitoreo en MySQL ............................................................................................... 66

Tabla 12: Tabla de registro ..................................................................................................................... 67

9

Lista de figuras Figura 1: Modelo Top-Down para el diseño de Hardware. .................................................................... 14

Figura 2: Modelo cascada para el diseño de software ........................................................................... 15

Figura 3: Entorno de Administración WampServer. [5] ......................................................................... 23

Figura 4. Representación de mapa en Google Maps. [8] ....................................................................... 24

Figura 5: Gestores de bases de datos. [14] ............................................................................................ 28

Figura 6: Cálculo de la posición usado tres satélites. [17] ..................................................................... 31

Figura 7. División de la superficie terrestre en paralelos y meridianos. [20] ......................................... 33

Figura 8: Placa Raspberry pi. [24] ........................................................................................................... 37

Figura 9: Raspberry pi Modelo B. [25].................................................................................................... 38

Figura 10: Modulo cámara para Raspberry pi. [28] ............................................................................... 39

Figura 11: Modulo GPS Ublox NEO 6M. [29] .......................................................................................... 40

Figura 12: Interfaz del programa SD Formatter. [34] ............................................................................. 45

Figura 13: Pantalla inicial de Pi Recovery. [36] ...................................................................................... 47

Figura 14: Menú principal de configuración de Raspbian. [36] ............................................................. 47

Figura 15: Menú de opciones de internacionalización de Raspbian. [36] ............................................. 48

Figura 16: XMING con Raspberry Pi iniciar startlxde. [38] ..................................................................... 50

Figura 17: Conexión de la cámara a la interfaz CSI de la Raspberry Pi. [39] .......................................... 53

Figura 18: Esquema y conexión de módulo Ublox M6 a Raspberry pi. [41] .......................................... 56

Figura 19: Pantalla de terminal con datos del GPS. [41] ........................................................................ 57

Figura 20: Correo electrónico recibido de emergencia. ......................................................................... 58

Figura 21: Datos almacenados para la importación en la base de datos. .............................................. 58

Figura 22: Pantalla inicial de Sakis 3G interactivo. ................................................................................. 62

Figura 23: Interfaz de logeo de phpMyAdmin ....................................................................................... 64

Figura 24: Interfaz TYPSoft FTP Server ................................................................................................... 65

Figura 25: Esquema entidad relación ..................................................................................................... 68

Figura 26: Diagrama de bloques del registro de usuario ....................................................................... 70

Figura 27: Diagrama de bloques inicio sesión ........................................................................................ 71

Figura 28: Entorno Web, consulta sin datos de tabla monitoreo .......................................................... 72

Figura 29: Entorno Web consulta datos tabla monitoreo ..................................................................... 72

Figura 30: Captura de coordenadas en Google Maps ............................................................................ 73

Figura 31: Google Developers equipo escritorio. ................................................................................... 75

Figura 32: Google Developers dispositivo móvil. ................................................................................... 76

Figura 33. Prueba de carga de conexión con 25 usuarios. ..................................................................... 76

Figura 34. Respuesta de páginas y estilos. ............................................................................................. 77

Figura 35. Tiempo respuesta plataforma web. ...................................................................................... 77

10

Lista de términos CSS: Cascading Style Sheets

XML: eXtensible Markup Language

WML: Wireless Markup Language

MD5: Message-Digest Algorithm 5

DBA: Data Base Administrator

SGBD: Data Base Management System

SQL: Structured Query Language

C: Lenguaje de programación

NAVSTAR: Navigation System Using Timing and Ranging

GNSS: Global Navigation Satellite System

GLONASS: Global'naya Navigatsionnaya Sputnikovaya Sistema

WAAS: Wide Area Augmentation System

EGNOS: European Geostationary Navigation Overlay Service

MSAS: Multi-functional Satellite Augmentation System

GAGAN: GPS Aided Geo Augmented Navigation

GPRS: General Packet Radio Service

EDGE: Enhanced Data rates for GSM Evolution

UMTS: Universal Mobile Telecommunications System

WCDMA: Wideband Code Division Multiple Access

CDMA: Code Division Multiple Access

HSDPA: High Speed Downlink Packet Access

LTE: Long Term Evolution

SBC: Single Board Computer

GPIO: General Purpose Input/Output

IDE: Integrated Development Environment

UNIX: Sistema operativo

11

Glosario

3G: Abreviatura de tercera generación de transmisión de voz y datos a través de la

telefonía móvil.

Browser: Software, aplicación o programa que permite la navegación en la web.

API: (Application Programming Interface), interfaz de programación de aplicaciones.

Apache: Servidor HTTP Apache de código abierto, para plataformas Linux, Microsoft,

Macintosh etc.

Cámara: Dispositivo tecnológico cuyo objetivo es la captura de imágenes.

Directorio: Contenedor virtual de archivos.

Google Maps: Servidor de aplicaciones de mapas en la web, pertenece a la empresa Google.

GPS: (Global Position System) Sistema de posicionamiento global que permite determinar

la posición de un objeto (persona, un vehículo etc.).

FTP: (File Text Protocol), transferencia de archivos entre dispositivos que proporciona

seguridad y orden en la transferencia.

HTML: Lenguaje de marcas de hipertexto para la elaboración de páginas web.

HTTP: (Hypertext Transfer Protocol) usado para la transacción de la World Wide Web.

JavaScript: Lenguaje de programación de uso principalmente para desarrollo de páginas web

dinámicas.

MySQL: Gestor de bases de datos relacional, multihilo y multiusuario.

Raspberry PI: Mini ordenador que puede ser usado como servidor de contenidos.

Raspbian: Sistema operativo Linux para Raspberry basado en Debian.

PHP: (Hypertext PreProcessor), lenguaje de código abierto especialmente adecuado para

desarrollo web y puede ser incrustado en HTML.

Python: Lenguaje de programación de alto nivel, interpretado y multipropósito.

SHELL: Término usado en informática para referirse a un intérprete de comandos.

WampServer: Entorno de desarrollo web (Windows-Apache-MySQL-Php/Phyton/Perl).

12

Introducción

Pensando en la vinculación de proyectos que contribuyan a la mejora y desarrollo de los sistemas de

seguridad ciudadana, surge la necesidad de elaborar alternativas y estrategias en búsqueda del

fortalecimiento integral de seguridad.

La inseguridad en la ciudad es uno de los problemas más sentidos por la población, que afecta las

diversas actividades económicas, sociales, recreativas, educativas, entre otras, con diferente

intensidad.

Según el Observatorio de Seguridad de Bogotá de la Cámara de Comercio, la percepción de seguridad

en el primer semestre del 2013 es la siguiente. El taxi es la modalidad de transporte público

considerada más segura por los encuestados; no obstante, su percepción positiva se reduce en 7

puntos. El Transmilenio es señalado seguro solo por el 23% de los encuestados y el taxi por el 18%. En

el caso del taxi, indican que la posibilidad de solicitarlo directamente a la empresa, es la razón

principal para percibirlo como un medio de trasporte seguro. Quienes lo consideran inseguro, señalan

la posibilidad de ser víctima de paseo millonario y de fleteo. Quienes consideran que el Transmilenio

es seguro, señalan como razones más importantes la presencia de policía y de vigilancia privada. Los

demás argumentan que hay exceso de personas e indican que se presentan casos de robos y atracos.

De esta manera, la Cámara de Comercio informa que el transporte público de pasajeros sigue siendo

uno de los escenarios donde se registra la mayor victimización, los más altos niveles de percepción de

inseguridad y de conflictividad en la ciudad. Por tanto, es preciso mejorar la calidad de la información

a fin de comprender la magnitud de los hechos que ocurren en el sistema de transporte de la ciudad y

proponer estrategias concretas y públicas que permitan mejorar las condiciones de seguridad. [1]

En este caso, el proyecto está enfocado al diseño y desarrollo de un prototipo tecnológico de

seguridad vehicular, que busca satisfacer las necesidades básicas mediante envío de reportes

periódicos a una base de datos, de localización geográfica del vehículo a través de GoogleMaps,

capturas fotográficas al interior del vehículo, dirección, estado de activación automática o de

emergencia, fecha y hora, de tal manera que esta información pueda ser consultada cuando el

usuario lo requiera en internet.

La proyección a futuro, es que el prototipo sirva como base para elaborar una plataforma más

robusta, que contenga mayores elementos en los reportes y mejoras en la eficiencia operativa para

proporcionar un sistema de seguridad más optimizado.

13

1. DESCRIPCIÓN DEL PROYECTO

1.1. OBJETIVOS

1.1.1. Objetivo General

Diseñar y desarrollar un sistema de seguridad en vehículos de transporte público de pasajeros,

realizando captura de imágenes fotográficas y simultáneamente obteniendo la ubicación del vehículo,

esta información adquirida podrá ser consultada por el usuario interesado vía web.

1.1.2. Objetivos Específicos

Diseñar el sistema físico y operacional capaz de capturar imágenes fotográficas y

coordenadas de posicionamiento, transmitiendo los datos obtenidos a través de la red celular

a un servidor remoto.

Diseñar una base de datos para almacenar la información recibida y ser consultada vía web.

Validar, comparar y analizar la veracidad de los datos transmitidos y recibidos, realizando

diversas pruebas en vehículos y ubicaciones diferentes.

14

2. METODOLOGÍA

A continuación, se describe la metodología implementada para el diseño del hardware y el software

utilizado para el funcionamiento general del proyecto.

2.1. Diseño del Hardware

Para el desarrollo completo del dispositivo físico se realizó con el diseño Top-Down. El diseño Top-

Down consiste en capturar una idea con un alto nivel de abstracción, implementarla partiendo de la

misma, e incrementar el nivel de detalle según sea necesario. El sistema inicial se va subdividiendo en

módulos, estableciendo una jerarquía. Cada módulo se subdivide cuantas veces sea necesario hasta

llegar a los componentes primarios del diseño como muestra el esquema de la figura.

Figura 1: Modelo Top-Down para el diseño de Hardware.

2.2. Diseño Web y base de datos

Para el desarrollo WEB y creación de la base de datos, la elección del modelo de software para este

caso fue el modelo cascada, el desarrrollo secuencial de las fases permite que a medida que se

termina un bloque, le de vida al siguiente y permita compactar y complementar el desarrollo y

ejecución del diseño. Este modelo, fue la mejor práctica encontrada para el tipo de proyecto

implementado. A continuación la respresentación del esquema.

15

Figura 2: Modelo cascada para el diseño de software

2.3. Fases del proyecto

Para dar cumplimiento a los objetivos específicos, se siguieron una serie de actividades, las cuales dan

indicios del proceso seguido para la finalidad del proyecto.

En la siguiente tabla, se relacionan las actividades principales.

Diseño del sistema físico local

Investigación y análisis de las posibilidades de dispositivos electrónicos y nuevas tecnologías que faciliten la creación del hardware requerido.

Elección de la mejor opción en relación costo-beneficio y adquisición de los materiales indispensables para la fabricación del hardware.

Diseño de un diagrama del circuito, acoplando los diferentes módulos que interfieren en el dispositivo.

Acoplamiento e implementación de los módulos electrónicos para la función requerida.

Pruebas y revisión del funcionamiento del dispositivo, verificando la compatibilidad, tiempos de respuesta y capacidad de almacenamiento.

Diseño del sistema físico remoto

Evaluar características, ventajas y desventajas sobre el servidor a utilizar para el desarrollo, procesamiento y visualización de la información.

Integración y configuración del servidor remoto, para el almacenamiento de archivos FTP, base de datos y pagina web.

16

Configuración local de red del servidor para ser identificado en internet y lograr recibir información externa enviada del dispositivo Raspberry.

Programación de código fuente

Estudio sobre los diferentes lenguajes de programación necesarios.

Manejo de comandos en la Shell del sistema operativo de la Raspberry.

Creación del código en Python para el control de los módulos y el procesamiento de los archivos en la Raspberry Pi.

Manejo y aplicación del API de Google Maps para la incorporación y modificación, en código JavaScript, PHP y HTML.

Importación de la información recibida con sentencias SQL, y programación en HTML, PHP y JavaScript para la publicación de la información.

Validación, comparación y

análisis de los datos transmitidos y

recibidos

Adquisición de los datos primordiales, como imágenes y coordenadas de posicionamiento.

Pruebas de captura de imágenes, con diferentes entornos y cambios de iluminación, al igual que el almacenamiento de manera local.

Validación de la transmisión de los datos a través de la red local y la red 3G, diagnosticando tiempos, cantidad de datos, costos y perdidas de conectividad.

Revisión de la veracidad y concordancia de los datos transmitidos con los recibidos, registrados en la base de datos y visualización en la página web por usuario registrado.

Tabla 1: Fases del proyecto

17

3. MODELO DE FACTIBILIDAD TECNOLÓGICA

Tabla 2: Comparación entre plataformas electrónicas modernas compuestas.

18

Tabla 3: Comparación entre lenguajes de programación.

19

20

Tabla 4: Comparación entre servidores de mapas.

Tabla 5: Comparación entre los tiempos de respuesta de los mapas.

21

4. MARCO TEÓRICO

4.1. HTML (HyperText Markup Language)

Es el lenguaje que se emplea para el desarrollo de páginas de internet.

HTML es un lenguaje de marcado que nos permite indicar la estructura de nuestro documento

mediante etiquetas. Este lenguaje nos ofrece una gran adaptabilidad, una estructuración lógica y es

fácil de interpretar tanto por humanos como por máquinas, ya que siguen un esquema de árbol

donde existe un elemento raíz y donde el resto de etiquetas se insertan de manera lógica y

estructurada. Además, se trata de un fichero de texto, y solo se necesita un editor como el bloc de

notas para generar un documento HTML.

4.1.1. Estructura de cabecera

Información contextual de la página. Estos metadatos nos permiten indicar información que

puede no quedar clara en el contenido.

Referencia a otros ficheros. Todos aquellos recursos que necesite nuestra página deben estar

referenciados desde la cabecera. Por ejemplo, archivos de CSS y JavaScript, el icono de la

barra de direcciones, etc.

Scripts y estilos. Si estos no se definen en un fichero independiente, se incluyen en la sección

de cabecera para que estén disponibles en todo el documento y no tener que repetirlos.

Por otro lado, en el cuerpo se encuentra todo el contenido de la página, desde el texto a las

imágenes, pasando por vídeos, enlaces, etc. Este contenido debe estar estructurado en diferentes

secciones y marcado correctamente. [2]

4.2. PHP (Hypertext Preprocessor)

A diferencia de Java o JavaScript que se ejecutan en el navegador, PHP se ejecuta en el servidor, por

eso nos permite acceder a los recursos que tenga el servidor; ejemplo: una base de datos. El

programa PHP es ejecutado en el servidor y el resultado enviado al navegador. Al ser PHP un lenguaje

22

que se ejecuta en el servidor, no es necesario que su navegador lo soporte, es independiente del

navegador, sin embargo para que las páginas PHP funcionen, el servidor donde están alojadas debe

soportar PHP. [3]

4.2.1. Características PHP

Algunas de las características más relevantes de PHP son:

1. Libertad de elegir el sistema operativo y el servidor web. Además, se tiene la posibilidad de

utilizar programación por procedimientos o programación orientada a objetos (POO), o una

mezcla de ambas.

2. Una de las características más potentes y destacables de PHP es su soporte para un amplio

abanico de bases de datos. Escribir una página web con acceso a una base de datos es simple

utilizando una de las extensiones específicas de bases de datos (ejemplo: MySQL) o utilizar

una capa de abstracción como PDO, o conectarse a cualquier base de datos que admita el

estándar de Conexión Abierta a Bases de Datos por medio de la extensión ODBC.

3. PHP también cuenta con soporte para comunicarse con otros servicios usando protocolos

tales como LDAP, IMAP, SNMP, NNTP, POP3, HTTP, COM (en Windows) y muchos otros.

También se pueden crear sockets de red puros e interactuar usando cualquier otro protocolo.

[4]

4.3. WAMP SERVER

Es un acrónimo para describir un sistema de infraestructura que usa las siguientes herramientas

(Windows-Apache-MySQL-PHP, Perl o Python), este entorno de desarrollo web permite tener un

servidor propio o host local (instalado en el equipo). Es usado (entre otros) por desarrolladores y/o

programadores para realizar prácticas de sus proyectos web antes de subirlos al servidor web en

internet. [5]

Características:

Manejo de Bases de datos con MySQL

Software para servidor web Apache

Software para poder programar script con PHP (generalmente).

Permite el manejo sencillo de Bases de Datos con PHPMyAdmin y SQLiteManager

Es gratuito.

23

Figura 3: Entorno de Administración WampServer. [5]

4.4. CSS

El concepto de hojas de estilo apareció por primera vez en 1996 cuando W3C publicó una

recomendación nueva intitulada "Hojas de estilo en cascada" o CSS, su sigla en inglés.

El principio de las hojas de estilo, consiste en la utilización de un solo documento para almacenar las

características de presentación de las páginas asociadas a grupos de elementos. Esto implica nombrar

un conjunto de definiciones y características de presentación de las páginas, y activar esos nombres

para aplicarlos a una parte del texto. Por ejemplo, se pueden configurar los títulos de una sección

para que aparezcan en fuente Arial, en color verde y en cursiva.

Las hojas de estilo se desarrollaron para compensar los defectos de HTML con respecto a la

presentación y al diseño de las páginas. HTML tiene varias etiquetas para modificar la presentación y

definir los estilos del texto, pero cada elemento tiene su propio estilo, independientemente de los

elementos que lo rodean. Al utilizar hojas de estilo, cuando se necesite cambiar la apariencia de un

sitio que tiene cientos de páginas Web todo lo que hay que hacer es editar las definiciones de la hoja

de estilo en un solo lugar para cambiar la apariencia del sitio completo.

Se denominan "hojas de estilo en cascada" porque se pueden definir múltiples hojas y los estilos

pueden aplicarse a todas las páginas (con un sistema predefinido para resolver conflictos).

Las hojas de estilo pueden utilizarse para:

Lograr una apariencia uniforme de todo el sitio al activar una sola definición de estilo en cada

página.

Cambiar un aspecto en todo el sitio Web con tan sólo editar unas pocas líneas.

Hacer que los códigos HTML sean más fáciles de leer ya que los estilos se definen por

separado.

Permitir que las páginas se carguen más rápido ya que hay menos cantidad de HTML en cada

página.

Posicionar los elementos de la página de una manera más uniforme. [6]

24

4.5. JAVA SCRIPT

JavaScript es un sencillo lenguaje de programación, que presenta una característica especial: sus

programas, llamados comúnmente scripts, se enlaza en las páginas HTML y se ejecutan en el

navegador (Mozilla Firefox, Microsoft Internet Explorer,...). Estos scripts normalmente consisten en

unas funciones que son llamadas desde el propio HTML cuando algún evento sucede. De ese modo,

podemos añadir efectos como que un botón cambie de forma al pasar el ratón por encima, o abrir

una ventana nueva al pulsar en un enlace. [7]

4.5.1. API de Google Maps

Es sólo HTML, CSS y JavaScript trabajando junto. Los mapas son solo imágenes que se cargan en el

fondo a través de peticiones ejecutadas por la tecnología de AJAX, y se insertan en un <div> en la

página HTML. Mientras navegas en el mapa, el API envía información acerca de las nuevas

coordenadas y los niveles de “zoom” del mapa a través de AJAX y esto retorna las imágenes.

El API consiste de archivos JavaScript que contienen las clases, métodos y propiedades que se usan

para el comportamiento de los mapas. La última versión del API es la 3.0.

Figura 4. Representación de mapa en Google Maps. [8]

Las coordenadas están expresadas usando números decimales separados por coma. La latitud

siempre precede la longitud. La latitud es positiva si va después del punto mostrado en el mapa y

negativo si va antes. La longitud es positiva si va arriba del punto y negativa si va debajo.

El código a utilizar es el siguiente:

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

Es importante que el código mencionado anteriormente, se encuentre debajo del elemento

<script> que incluye el API, para que así se pueda cargar todas las clases, métodos y propiedades a

usar. Las clases, métodos y propiedades comienzan con google.maps. A eso se le conoce

como namespace. [8]

25

4.6. SERVIDOR WEB

Los servidores web son los encargados de recibir las peticiones referidas a páginas o elementos de la

web a través del protocolo http o https y de devolver el resultado de la petición, que suele ser un

recurso alojado en el servidor. Normalmente es el navegador el que pide al servidor web el recurso

que desea el usuario, para finalmente recibir dicho recurso (si fue válida la petición) y traducirle si es

necesario a su forma legible por el usuario (es decir la traducción de HTML la hace el navegador). [9]

4.7. SERVIDOR FTP

Uno de los servicios más antiguos de Internet, File Transfer Protocol permite mover uno o más

archivos con seguridad entre distintos ordenadores proporcionando seguridad y organización de los

archivos así como control de la transferencia.

La seguridad se ha convertido en un tema candente. Durante años, los servidores ftp comunicaban

con los clientes "en abierto," es decir, que la información de la conexión y de la contraseña era

vulnerable a la interceptación. Ahora, los servidores ftp, tales como BulletProof FTP, SecureFTP,

SurgeFTP, TitanFTP, y WS_FTP, soportan SSL/TLS y utilizan el mismo tipo de cifrado presente en los

sitios web seguros. Con SSL/TLS, los servidores ftp pueden cifrar los comandos de control entre los

clientes del ftp y el servidor, así como los datos del archivo. Con la ayuda del PGP, como en WS_FTP

pro, los datos del archivo se aseguran todavía más con el cifrado público. [10]

4.8. MD5 (Message-Digest Algorithm)

El algoritmo MD5 se utiliza como una función de codificación o huella digital de un archivo. A menudo

empleado para codificar contraseñas en bases de datos, el MD5 es igualmente capaz de generar una

huella de archivo para asegurar que no haya cambios en el mismo tras una transferencia, por

ejemplo. Un hash MD5 está compuesto por 32 caracteres hexadecimales. [11]

4.9. BASES DE DATOS

Un sistema de bases de datos sirve para integrar los datos, organizar campos, registros y archivos. Lo

componen los siguientes elementos:

Hardware. Máquinas en las que se almacenan las bases de datos. Incorporan unidades de

almacenamiento masivo para este fin.

Software. Es el sistema gestor de bases de datos. El encargado de administrar las bases de

datos.

26

Datos. Incluyen los datos que se necesitan almacenar y los metadatos que son datos que

sirven para describir lo que se almacena en la base de datos.

Usuarios. Personas que manipulan los datos del sistema. Hay tres categorías:

Usuarios finales. Aquellos que utilizan datos de la base de datos para su trabajo cotidiano

que no tiene por qué tener que ver con la informática. Normalmente no utilizan la base

de datos directamente, si no que utilizan aplicaciones creadas para ellos a fin de facilitar

la manipulación de los datos. Estos usuarios sólo acceden a ciertos datos.

Desarrolladores. Analistas y programadores encargados de generar aplicaciones para los

usuarios finales.

Administradores. También llamados DBA (Data Base Administrator), se encargan de

gestionar las bases de datos. [12]

4.9.1. Tipos de bases de datos

Las bases de datos se pueden clasificar de varias maneras, según el contexto que se esté manejando o

su utilidad.

Según variabilidad de datos.

Bases de datos estáticas

Estas son bases de datos de solo lectura, utilizadas primordialmente para almacenar datos históricos

que posteriormente se pueden utilizar para estudiar el comportamiento de un conjunto de datos a

través del tiempo, realizar proyecciones y tomar decisiones.

Bases de datos dinámicas

Estas son bases de datos donde la información almacenada se modifica con el tiempo, permitiendo

operaciones como actualización, borrado y adición de datos, además de las operaciones

fundamentales de consulta.

De acuerdo a su modelo de administración de datos:

Bases de datos Jerárquicas

En este modelo los datos se organizan en una forma similar a un árbol (visto al revés), en donde

un nodo padre de información puede tener varios hijos. El nodo que no tiene padres es llamado raíz,

y a los nodos que no tienen hijos se los conoce como hojas. Son especialmente útiles en el caso de

aplicaciones que manejan un gran volumen de información y datos muy compartidos permitiendo

crear estructuras estables y de gran rendimiento.

Bases de datos de red

27

Éste es un modelo ligeramente distinto del jerárquico; la diferencia fundamental es la modificación

del concepto de nodo: se permite que un mismo nodo tenga varios padres (posibilidad no permitida

en el modelo jerárquico). Mejora la redundancia de datos sin embargo la administración es más

compleja y limita el uso del usuario final.

Bases de datos transaccionales

Son bases de datos cuyo único fin es el envío y recepción de datos a grandes velocidades, estas bases

son muy poco comunes y están dirigidas por lo general al entorno de análisis de calidad, datos de

producción e industrial.

Bases de datos relacionales

Éste es el modelo utilizado en la actualidad para modelar problemas reales y administrar datos

dinámicamente. En este modelo, el lugar y la forma en que se almacenen los datos no tienen

relevancia (a diferencia de otros modelos como el jerárquico y el de red). Esto tiene la considerable

ventaja de que es más fácil de entender y de utilizar para un usuario esporádico de la base de datos.

La información puede ser recuperada o almacenada mediante "consultas" que ofrecen una amplia

flexibilidad y poder para administrar la información.

Bases de datos multidimensionales

Son bases de datos ideadas para desarrollar aplicaciones muy concretas, los campos o atributos de

una tabla pueden ser de dos tipos, o bien representan dimensiones de la tabla, o bien representan

métricas que se desean estudiar.

Bases de datos orientadas a objetos

Este modelo, bastante reciente, y propio de los modelos informáticos enfocado a objetos, trata de

almacenar en la base de datos los objetos completos (estado y comportamiento). Paradigma,

herencia y polimorfismo son de los principales conceptos que incorpora el paradigma de objetos.

Bases de datos documentales

Permiten la indexación a texto completo, y en líneas generales realizar búsquedas más potentes.

Tesaurus es un sistema de índices optimizado para este tipo de bases de datos.

Bases de datos deductivas

Es un sistema de base de datos pero con la diferencia de que permite hacer deducciones a través de

inferencias. Se basa principalmente en reglas y hechos que son almacenados en la base de datos. Las

bases de datos deductivas son también llamadas bases de datos lógicas, a raíz de que se basa en

lógica matemática. [13]

28

4.9.2. Sistema Gestor de Base de Datos

Un Sistema Gestor de Base de Datos (SGBD) es un sistema de software que permite la definición

de bases de datos; así como la elección de las estructuras de datos necesarios para el

almacenamiento y búsqueda de los datos, ya sea de forma interactiva o a través de un lenguaje de

programación. Un SGBD relacional es un modelo de datos que facilita a los usuarios describir los

datos que serán almacenados en la base de datos junto con un grupo de operaciones para manejar

los datos.

Los SGBD relacionales son una herramienta efectiva que permite a varios usuarios acceder a los datos

al mismo tiempo. Brindan facilidades eficientes y un grupo de funciones con el objetivo de garantizar

la confidencialidad, la calidad, la seguridad y la integridad de los datos que contienen, así como un

acceso fácil y eficiente a los mismos. [14]

Algunos de los principales gestores de bases de datos son:

MySQL

Microsoft SQL Server

PostgreSQL

Oracle

Figura 5: Gestores de bases de datos. [14]

4.9.3. MySQL

Es un sistema gestor de bases de datos relacionales rápido, sólido y flexible. Es idóneo para la

creación de bases de datos con acceso desde páginas web dinámicas, así como para la creación de

cualquier otra solución que implique el almacenamiento de datos, posibilitando realizar múltiples y

rápidas consultas. Está desarrollado en C y C++, facilitando su integración en otras aplicaciones

desarrolladas también en esos lenguajes.

Es un sistema cliente/servidor, por lo que permite trabajar como servidor multiusuario y de

subprocesamiento múltiple, o sea, cada vez que se crea una conexión con el servidor, el programa

servidor establece un proceso para manejar la solicitud del cliente, controlando así el acceso

simultáneo de un gran número de usuarios a los datos y asegurando el acceso a usuarios autorizados

solamente. [15]

29

4.9.4. Modelo de Entidad – Relación

El Modelo de Entidad Relación es un modelo de datos basado en una percepción del mundo real que

consiste en un conjunto de objetos básicos llamados entidades y relaciones entre estos objetos,

implementándose en forma gráfica a través del Diagrama Entidad Relación.

Hablamos de ejemplares cuando nos referimos a una clase de objetos con características similares

(ejemplares=registros). Se puede definir como Entidad a cualquier objeto, real o abstracto, que existe

en un contexto determinado o puede llegar a existir y del cual deseamos guardar información.

Los Atributos son características o propiedades asociadas a la entidad que toman valor en una

instancia particular. Ejemplo: nombre, cédula, teléfono.

Clave primaria: Se denomina Clave principal o primaria al atributo o conjunto mínimo de atributos

(uno o más campos) que permiten identificar en forma única cada instancia de la entidad, es decir, a

cada registro de la tabla. Las claves principales se utilizan cuando se necesita hacer referencia a

registros específicos de una tabla desde otra tabla. En un principio se puede identificar más de un

atributo que cumpla las condiciones para ser clave, los mismos se denominan Claves candidatas.

Tipos de relaciones

Clasificación por cardinalidad:

Relación Uno a Uno: Cuando un registro de una tabla sólo puede estar relacionado con un

único registro de la otra tabla y viceversa. En este caso la clave foránea se ubica en alguna de

las 2 tablas.

Relación Uno a Muchos: Cuando un registro de una tabla (tabla secundaria) sólo puede estar

relacionado con un único registro de la otra tabla (tabla principal) y un registro de la tabla

principal puede tener más de un registro relacionado en la tabla secundaria. En este caso la

clave foránea se ubica en la tabla secundaria.

Relación Muchos a Muchos: Cuando un registro de una tabla puede estar relacionado con

más de un registro de la otra tabla y viceversa. En este caso las dos tablas no pueden estar

relacionadas directamente, se tiene que añadir una tabla entre las dos (Tabla débil o de

vinculación) que incluya los pares de valores relacionados entre sí.

Clasificación por modalidad:

Dadas las tablas A y B, que se encuentran relacionadas: Si para todo registro de A debe existir siempre

al menos un registro de B asociado, se dice que la relación en sentido A->B es Obligatoria. Si para

todo registro de A, pueden existir o no, uno o varios registros de B asociados, se dice que la relación

en sentido A->B es optativa. La modalidad de las relaciones se debe analizar en ambos sentidos. [16]

30

4.10. GPS

Dado que el concepto principal de nuestro proyecto se basa en la tecnología GPS, veremos a

continuación algunos conceptos básicos sobre el Sistema de Posicionamiento Global, GPS.

4.10.1. Introducción

El Global Positioning System (GPS) o Sistema de Posicionamiento Global originalmente

llamado NAVSTAR, es un Sistema Global de Navegación por Satélite (GNSS) el cual permite

determinar en todo el mundo la posición de una persona, un vehículo o una nave, con una desviación

de cuatro metros. El sistema fue desarrollado e instalado, y actualmente es operado, por

el Departamento de Defensa de los Estados Unidos.

4.10.2. Elementos que lo componen

Sistema de satélites: Formado por 21 unidades operativas y 3 de repuesto en órbita sobre la tierra a

20.200 km con trayectorias sincronizadas para cubrir toda la superficie del globo. Se abastecen

mediante paneles de energía solar.

Estaciones terrestres: Envían información de control a los satélites para controlar las órbitas y realizar

el mantenimiento de toda la constelación.

Terminales receptores: Nos indica la posición en la que estamos, conocidas también como Unidades

GPS, son las que podemos adquirir en las tiendas especializadas.

4.10.3. Funcionamiento

El receptor GPS funciona midiendo su distancia de los satélites, y usa esa información para calcular su

posición. Esta distancia se mide calculando el tiempo que la señal tarda en llegar al receptor.

Conocido ese tiempo y basándose en el hecho de que la señal viaja a la velocidad de la luz (salvo

algunas correcciones que se aplican), se puede calcular la distancia entre el receptor y el satélite.

Cada satélite indica que el receptor se encuentra en un punto en la superficie de la esfera con centro

en el propio satélite y de radio la distancia total hasta el receptor.

Obteniendo información de dos satélites se nos indica que el receptor se encuentra sobre la

circunferencia que resulta cuando se intersectan las dos esferas.

Si adquirimos la misma información de un tercer satélite notamos que la nueva esfera solo corta el

círculo anterior en dos puntos. Uno de ellos se puede descartar porque ofrece una posición absurda.

De esta manera ya tendríamos la posición en 3-D. Sin embargo, dado que el reloj que incorporan los

receptores GPS no está sincronizado con los relojes atómicos de los satélites GPS, los dos puntos

determinados no son precisos.

31

Teniendo información de un cuarto satélite, eliminamos el inconveniente de la falta de sincronización

entre los relojes de los receptores GPS y los relojes de los satélites. Y es en este momento cuando el

receptor GPS puede determinar una posición 3-D exacta (latitud, longitud y altitud). Al no estar

sincronizados los relojes entre el receptor y los satélites, la intersección de las cuatro esferas con

centro en estos satélites es un pequeño volumen en vez de ser un punto. La corrección consiste en

ajustar la hora del receptor de tal forma que este volumen se transforme en un punto.

Figura 6: Cálculo de la posición usado tres satélites. [17]

4.10.4. Fiabilidad de los datos

Debido al carácter militar del sistema GPS, el Departamento de Defensa de los Estados Unidos se

reserva la posibilidad de incluir un cierto grado de error aleatorio que puede variar de los 15 a los 100

metros.

Aunque actualmente no aplique tal error inducido, la precisión intrínseca del sistema GPS depende

del número de satélites visibles en un momento y posición determinados. Sin aplicar ningún tipo de

corrección y con ocho satélites a la vista, la precisión es de 6 a 15 metros; pero puede obtenerse más

precisión usando sistemas de corrección (Ej: DGPS).

4.10.5. Fuentes de error

Retraso de la señal en la ionosfera y troposfera.

Señal multirruta, producida por el rebote de la señal en edificios y montañas cercanos.

Errores de orbitales, donde los datos de la órbita del satélite no son completamente precisos.

Número de satélites visibles.

Geometría de los satélites visibles.

Errores locales en el reloj del GPS.

32

4.10.6. GPS diferencial

DGPS (Differential GPS) o GPS diferencial es un sistema que proporciona a los receptores de GPS

correcciones a los datos recibidos de los satélites GPS. Estas correcciones, una vez aplicadas,

proporcionan una mayor precisión en la posición calculada.

El sistema de correcciones funciona de la siguiente manera:

Una estación base en tierra, con coordenadas muy bien definidas, escucha los satélites GPS.

Calcula su posición por los datos recibidos de los satélites.

Dado que su posición está bien definida, calcula el error entre su posición verdadera y la

calculada, estimando el error en cada satélite.

Se envía estas correcciones al receptor a través de algún medio.

Existen varias formas de obtener las correcciones DGPS. Las más usadas son:

Recibidas por radio a través de algún canal preparado para ello, como el RDS en una emisora

de FM.

Descargadas de Internet con una conexión inalámbrica.

Proporcionadas por algún sistema de satélites diseñado para tal efecto. En Estados Unidos

existe el WAAS, en Europa el EGNOS, en Japón el MSAS y en India el GAGAN, todos

compatibles entre sí.

Para que las correcciones DGPS sean válidas, el receptor tiene que estar relativamente cerca de

alguna estación DGPS, generalmente, a menos de mil kilómetros.

La precisión lograda puede ser de unos dos metros en latitud y longitud, y unos tres metros en altitud.

[18]

4.10.7. Coordenadas GPS

Las coordenadas geográficas son un conjunto de líneas imaginarias que permiten ubicar con exactitud

un lugar en la superficie de la Tierra. Este conjunto de líneas corresponden a los meridianos y

paralelos.

Estas líneas o círculos son trazados por los cartógrafos sobre los mapas.

Cualquier punto de nuestro planeta puede ubicarse al conocerse el meridiano de longitud y el

paralelo de latitud. [19]

33

Figura 7. División de la superficie terrestre en paralelos y meridianos. [20]

Latitud

La latitud de un punto es la medida del ángulo formado por el plano ecuatorial con la línea que une a

éste punto al centro de la tierra.

Por regla general está comprendido entre -90 ° y 90 °. Los valores negativos son para ubicaciones en

el hemisferio sur, y el valor de la latitud es de 0 ° en el ecuador.

Longitud

La longitud tiene el mismo principio, con la diferencia en que no existe una referencia natural como lo

es el ecuador para la latitud. La referencia para la longitud ha sido establecida arbitrariamente en el

Meridiano de Greenwich (que pasa a través del Real Observatorio de Greenwich en las afueras de

Londres), y la longitud de un punto es la medida angular formada por el semiplano del eje de la tierra

que pasa por el meridiano de Greenwich, y el semiplano del eje de la tierra que pasa por el punto.

Como hay 180 meridianos en cada hemisferio, la mayor longitud que se puede medir en cada uno es

de 180°, tanto en dirección este como en dirección oeste.

Un tercer componente

Los lectores meticulosos habrán notado que hace falta un tercer elemento para localizar un punto,

este es la altitud. En la mayoría de los casos las coordenadas GPS son necesarias para ubicar lugares

en la superficie terrestre, lo que le resta importancia a dicho parámetro. Sin embargo, es igual de

necesario que la latitud y longitud para poder definir una ubicación GPS de manera completa y

precisa.

4.10.8. Múltiples sistemas de coordenadas para coordenadas geográficas

Como hemos visto, las definiciones anteriores toman en cuenta varios parámetros que deben ser

establecidos o identificados para futuras referencias:

34

El plano ecuatorial y el modelo de la forma de la tierra elegida.

Un conjunto de puntos de referencia.

La posición del centro de la tierra.

El eje de la tierra.

El meridiano de referencia.

Estos cinco criterios son las bases de los distintos sistemas de coordenadas usados a través de la

historia.

Actualmente el sistema geodésico más usado es el WGS 84 (usado mayormente para las coordenadas

GPS).

4.10.9. Unidades de medida para las coordenadas GPS

Las dos principales unidades de medidas son las coordenadas decimales y sexagesimales.

Coordenadas decimales

La latitud y longitud son números decimales con las siguientes características:

- Latitud entre 0° y 90 °: Hemisferio Norte.

- Latitud entre 0° y -90°: Hemisferio Sur.

- Longitud entre 0° y 180°: Al este del meridiano de Greenwich.

- Longitud entre 0° y -180°: Al oeste del meridiano de Greenwich.

Coordenadas sexagesimales

Las coordenadas sexagesimales tienen tres componentes: grados, minutos y segundos. Cada uno de

estos componentes suele ser un número entero, pero se puede usar un número decimal en los

segundos si se desea una mayor precisión.

Un grado tiene 60 minutos y un minuto consiste de 60 segundos de ángulo del arco.

A diferencia de las coordenadas decimales, las sexagesimales no pueden ser negativas. En dicho caso,

las letras E u O son añadidas a la longitud para especificar la posición este-oeste desde el meridiano

de Greenwich, y a la latitud se le agregan las letras N o S para designar el hemisferio (Norte o Sur).

[21]

Coordenadas Decimales Coordenadas Sexagesimales

Latitud Longitud Latitud Longitud

0° a 90° 0° a 180° N E

0° a 90° 0° a -180° N O

0° a -90° 0° a 180° S E

0° a -90° 0° a -180° S O

Tabla 6: Correlación entre coordenadas Decímales y Sexagesimales. [21]

35

4.11. TRANSMISIÓN DE DATOS EN LA RED CELULAR

Para reflejar la evolución de las tecnologías utilizadas en la telefonía móvil se utiliza el concepto de

“generación”, de forma que cada generación engloba un conjunto de estándares de transmisión de

datos (y de voz) que ofrecen unas determinadas prestaciones y calidad de servicio.

1G – Fue la primera generación de telefonía móvil y utilizaba tecnología analógica para la transmisión

de información. Se utilizó en los años 80.

2G – Es la segunda generación de telefonía móvil que utiliza fundamentalmente GSM (Global System

for Mobile Communications, sistema global para las comunicaciones móviles) como estándar de

transmisión de telefonía digital. Permite la transmisión tanto de voz como de datos (por ejemplo,

mensajes cortos de texto o SMS). Utiliza varias bandas de frecuencia dependiendo de la región o país.

4.11.1. Telefonía Móvil 3G

El primer estándar 3G: EDGE

EDGE (Enhanced Data rates for GSM of Evolution o Tasas de Datos Mejoradas para la evolución de

GSM) también conocida como EGPRS (Enhanced GPRS) es el siguiente estándar que aparece en la

telefonía móvil para la transmisión de datos. Esta tecnología funciona con redes GSM que tengan

implementado GPRS y las actualizaciones necesarias propias de EDGE, por lo que es relativamente

sencilla su implementación por parte de los operadores.

Debido a su compatibilidad con GSM hay autores que la consideran una tecnología puente entre 2G y

3G, es decir, 2.5G. Sin embargo, EDGE puede alcanzar una velocidad de transmisión teórica de 384

Kbps, con lo cual cumple los requisitos de la ITU para una red 3G, también ha sido aceptado por la ITU

como parte de IMT-2000, de la familia de estándares 3G.

EDGE utiliza modulación GMSK (Gaussian Minimum-Shift Keying) y modulación 8-PSK (8 Phase Shift

Keying) para algunos de los esquemas de modulación y codificación de datos aumentando así su

eficacia.

Banda ancha en la telefonía móvil: UMTS

UMTS (Universal Mobile Telecommunications System o Servicio Universal de Telecomunicaciones

Móviles) es el nombre con el que se engloban todas las tecnologías incluidas en 3G desligadas de las

redes GSM. Precisamente el hecho de que los operadores hayan necesitado una gran inversión para

implantar las redes UMTS ha ocasionado un gran retraso en su implementación. Este retraso ha sido

cubierto en muchos casos con las tecnologías intermedias 2.5G. La tecnología de transmisión utilizada

en UMTS es WCDMA.

WCDMA es una tecnología móvil inalámbrica de tercera generación que aumenta las tasas de

transmisión de datos de los sistemas GSM. Utiliza como técnica de

36

multiplexación CDMA (multiplexación por división de código). Soporta de manera satisfactoria una

tasa transferencia de datos que va de 144 hasta 512 Kbps para áreas de cobertura amplias aunque en

el estándar se especifican velocidades de hasta 2 Mbps. El estándar de WCDMA fue desarrollado

como el proyecto de la sociedad 3GPP, que es el acrónimo de 3rd Generation Partnership Project.

Esta organización realiza la supervisión del proceso de elaboración de estándares relacionados con

3G.

El despliegue de redes UMTS facilita la aparición del servicio conocido como Internet móvil ya que las

velocidades que se pueden alcanzar con esta tecnología permiten hacer uso de una gran parte de los

servicios ofrecidos en Internet, típicamente la navegación web. De esta forma aparecen en el

mercado tanto teléfonos móviles que soportan la tecnología 3G como módems 3G utilizados para

proporcionar conectividad a ordenadores. Normalmente la conexión de estos dispositivos al

ordenador es mediante un puerto USB. [22]

4.11.2. Comparación de la velocidad de los estándares de la telefonía móvil

Tabla con la comparación de la velocidad de transmisión de subida y bajada, que permiten los

distintos estándares funcionando actualmente en la telefonía celular.

Tecnología Velocidad promedio de bajada Velocidad promedio de subida

GSM (2G) 1.8 kB/s 1.8 kB/s

GPRS (2.5G) 7.2 kB/s 3.6 kB/s

CDMA2000 1×RTT 18 kB/s 18 kB/s

EDGE (2.75G) 29.6 kB/s 29.6 kB/s

UMTS 3G 48 kB/s 48 kB/s

EDGE (type 2 MS) 59.2 kB/s 59.2 kB/s

EDGE Evolution (type 1 MS) 148 kB/s 59 kB/s

EDGE Evolution (type 2 MS) 237 kB/s 118 kB/s

HSPA (3.5G) 1,706 kB/s 720 kB/s

HSPA+ 5.25 MB/s 1.437 MB/s

LTE (2×2 MIMO) 21.625 MB/s 7.25 MB/s

LTE (4×4 MIMO) 40.750 MB/s 10.750 MB/s

Tabla 7: Comparación de la velocidad de los estándares de la telefonía móvil. [23]

37

4.12. RASPBERRY PI

Raspberry Pi es una placa computadora (SBC) de bajo costo desarrollada en Reino Unido por la

Fundación Raspberry Pi. En realidad, se trata de una diminuta placa base de 85 x 54 milímetros (del

tamaño aproximado de una tarjeta de crédito) en el que se aloja un chip Broadcom BCM2835 con

procesador ARM hasta a 1 GHz de velocidad (modo Turbo haciendo overclock), GPU VideoCore IV y

512 Mbytes de memoria RAM (Las primeras placas contaban con sólo 256MB de RAM).

Figura 8: Placa Raspberry pi. [24]

4.12.1. Hardware Raspberry Pi

Con unas dimensiones de placa de 8.5 por 5.3 cm, en su corazón tiene un chip integrado Broadcom

BCM2835, que contiene un procesador ARM11 con varias frecuencias de funcionamiento y la

posibilidad de subirla (haciendo overclocking) hasta 1 GHz sin perder la garantía, un procesador

gráfico VideoCore IV, y 512MB de memoria RAM. La última Raspberry Pi 2 cuenta con 1GB de

memoria RAM. Todo ello equivale en la práctica a un ordenador con unas capacidades gráficas

similares a la XBOX de Microsoft y con la posibilidad de reproducir vídeo en 1080p.

En la placa nos encontramos además con una salida de vídeo y audio a través de un conector HDMI,

con lo que conseguiremos conectar la tarjeta tanto a televisores como a monitores que cuenten con

dicha conexión. En cuanto a vídeo se refiere, también cuenta con una salida de vídeo compuesto y

una salida de audio a través de un minijack. Posee una conexión Ethernet 10/100.

En su parte inferior cuenta con un lector de tarjetas SD (micro SD para los modelos A+, B+ y Pi 2), lo

que abarata enormemente su precio y da la posibilidad de instalar un sistema operativo en una

tarjeta de memoria de 4 GB o más (clase 4 o clase 10). De esta forma tenemos también la posibilidad

de minimizar el espacio que necesitamos para tener todo un ordenador en un volumen mínimo. [24]

38

Figura 9: Raspberry pi Modelo B. [25]

Conexiones GPIO

Raspberry Pi A +, B + y 2 B incluyen 40 pines GPIO. Los modelos A y B tienen sólo los primeros 26

pines.

GPIO # Función Pin #

Pin # Función GPIO #

N / A + 3V3 1

2 + 5V N / A

GPIO2 SDA1 (I2C) 3

4 + 5V N / A

GPIO3 SCL1 (I2C) 5

6 GND N / A

GPIO4 GCLK 7

8 TXD0 (UART) GPIO14

N / A GND 9

10 RXD0 (UART) GPIO15

GPIO17 Gen0 11

12 GEN1 GPIO18

GPIO27 GEN2 13

14 GND N / A

GPIO22 GEN3 15

16 GEN4 GPIO23

N / A + 3V3 17

18 GEN5 GPIO24

GPIO10 MOSI (SPI) 19

20 GND N / A

GPIO9 MISO (SPI) 21

22 GEN6 GPIO25

GPIO11 SCLK (SPI) 23

24 CE0_N (SPI) GPIO8

N / A GND 25

26 CE1_N (SPI) GPIO7

(Modelos A y B paran aquí)

EEPROM ID_SD 27

28 ID_SC EEPROM

GPIO5 N / A 29

30 GND N / A

GPIO6 N / A 31

32 - GPIO12

GPIO13 N / A 33

34 GND N / A

GPIO19 N / A 35

36 N / A GPIO16

GPIO26 N / A 37

38 Digital IN GPIO20

N / A GND 39

40 OUT digital GPIO21

Tabla 8: Conexiones GPIO. [26]

39

Modelo B revisión 2 también tiene un pad (llamado P5 en el tablero y P6 en los esquemas) de 8 pines

que ofrecen acceso a un adicional de 4 conexiones GPIO.

GPIO # Función Pin #

Pin # Función GPIO #

N / A + 5V 1

2 + 3V3 N / A

GPIO28 GPIO_GEN7 3

4 GPIO_GEN8 GPIO29

GPIO30 GPIO_GEN9 5

6 GPIO_GEN10 GPIO31

N / A GND 7

8 GND N / A

Tabla 9: Extensión de conexiones GPIO para modelo B versión 2. [26]

Modelos A y B proporcionan acceso GPIO para el LED de estado ACT usando GPIO 16. Modelos A+ y

B+ proporcionan acceso GPIO para el LED de estado ACT usando GPIO 47, y el LED de estado de

alimentación usando GPIO 35. [26]

4.12.2. Accesorios para Raspberry Pi

Cuando adquirimos la Raspberry Pi recibimos exactamente eso, una placa sin más. Para ponerla en

funcionamiento necesitamos de una serie de accesorios tales como una fuente de alimentación de al

menos 1000mah, un cable HDMI, una tarjeta de memoria SD/microSD con el Sistema Operativo y un

adaptador WiFi o un cable RJ45 para poder conectarnos a internet. Además por estética o por

protección podemos adquirir una de las muchas cajas que existen a la venta. [24]

Otros periféricos y carcasas son comercializados por empresas ajenas a la fundación. Por ejemplo

la Gertboard, que ha sido creada con propósito educativo, sirve para hacer uso del puerto GPIO y

poder interaccionar con LEDs, interruptores, señales analógicas, sensores, y otros dispositivos.

También incluye un controlador opcional para Arduino para poder interaccionar con el Raspberry Pi.

[27]

Cámara

Es una cámara capaz de capturar vídeo con una resolución de 1080p. La cámara cuenta con un sensor

Omnivisión de 5 megapíxeles que además de vídeo en alta definición y a 30 fotogramas por segundo,

es capaz de hacer fotos con una resolución de 2.592 X 1.944 píxeles.

La conexión de este pequeño módulo se vende con el tradicional acabado de Raspberry Pi (o lo que

es lo mismo, sin ningún acabado, en un circuito puro y duro) como podemos observar en la imagen.

Figura 10: Modulo cámara para Raspberry pi. [28]

40

Carcasa

Otro de los accesorios imprescindible si se quiere resguardar la Raspberry Pi es la carcasa. Las hay de

todos los colores, formatos, materiales, diseños e incluso carcasas caseras fabricadas por los mismos

usuarios. [28]

Modulo GPS Ublox NEO 6M

El módulo NEO 6M de la empresa suiza UBlox es una excelente alternativa de precisión y costo

beneficio. Es de un tamaño reducido por lo que es fácilmente portable en tus proyectos. Se

comunica a través de puerto serial UART. Esta presentación viene en modo modular para que se

pueda usar en cualquier plataforma como Arduino, Raspberry Pi, pcDuino o con un Laptop. Mide

parámetros como latitud, longitud, velocidad, altitud.

Figura 11: Modulo GPS Ublox NEO 6M. [29]

Características:

- Ultra sensibilidad: -165dBm

- 22 tracking/66 acquisition-channel receiver

- Soporta estándares WAAS/EGNOS/MSAS/GAGAN

- Frecuencia de actualización 5Hz

- Velocidad de desplazamiento máxima: 500m/seg

- Protocolo NMEA (a 9600bps)

- 01 puerto serial

- Antena incorporada de 18.2 x 18.2 x 4.0 mm

- Rango de temperatura: -40 to 85 C

- Cumple estándar RoHS

- Tamaño reducido, 30mm x 20mm x 11.4mm [30]

Especificaciones:

Tipo de receptor L1 frequency band, C/A code 22 Tracking / 66 Canales de lectura

Sensibilidad Tracking Acquisition

-165dBm -148dBm

Precisión

Posición Velocidad Timing (PPS)

3mts. 3D RMS sin SA 0.1m/s sin SA 60ns RMS

Tiempo de lectura Cold Start 36s

41

Warm Start Hot Start Re-Acquisition

33s 1s <1s

Consumo de energía Tracking Acquisition Sleep/Standby

<30mA @ 3V Vcc 40mA TBD

Frecuencia de actualización de datos de navegación

1Hz

Límites de operación Altitude Velocity Aceleración

Max 18,000m Max 515m/s Menor a 4g

Antenna Specifications

OutlineDimension Center Frequency Bandwidth Impedance Axial Ratio Polarization

18.2 x 18.2 x 4.0 mm 1575 ± 3 MHz 10 MHz min 50 Ω 3 dB max RHCP

Dimensiones y peso Dimensiones Peso

30mm x20mm x 11.4mm 9g

Fuente de poder VCC Corriente

5V ±5% 55mA(typical)

Entorno

Temperatura de operación Temperatura de almacenamiento Humedad

40 ~ +85 (sin batería de respaldo) 0 ~ +125

Tabla 10: Es pesificaciones técnicas del módulo GPS. [30]

4.12.3. Software para Raspberry Pi

El Raspberry Pi usa mayoritariamente sistemas operativos basados en el núcleo Linux. Raspbian, una

distribución derivada de Debian que está optimizada para el hardware de Raspberry Pi, se lanzó

durante julio de 2012 y es la distribución recomendada por la fundación para iniciarse.

El chip ARM11 en el corazón del Pi (modelos de primera generación) se basa en la versión 6 de

la ARM . Las versiones actuales de varias versiones populares de Linux, incluyendo Ubuntu , no se

ejecutarán en el ARM11. No es posible ejecutar Windows en el Raspberry Pi original, aunque en el

nuevo Raspberry Pi 2 es capaz de ejecutar Windows 10 . El Raspberry Pi 2 actualmente sólo es

compatible con Ubuntu Snappy Core , Raspbian , OpenELEC y RISC OS. [27]

Software Incluido en Raspbian

La distribución viene con algunas aplicaciones preinstaladas como los navegadores Midori, Dillo y

NetSurf. Además contiene herramientas de desarrollo como IDLE para el lenguaje de programación

Python o Scratch, y diferentes ejemplos de juegos usando los módulos Pygame. Destaca también el

menú “raspi-config” que permite configurar el sistema operativo sin tener que modificar archivos de

configuración manualmente y el wifi-config, el cual permite configurar redes inalámbricas si usamos

un receptor WiFi USB. [31]

42

4.13. PYTHON Y RASPBERRY

La fundación Raspberry Pi recomienda el uso de Python como lenguaje de programación, sin

embargo, no limitan el uso de lenguaje C, C++, Java, Scratch y Ruby ya que vienen instalados por

defecto en Raspbian. Es posible utilizar cualquier software de programación siempre y cuando pueda

ser ejecutado en un procesador ARMv6.

El entorno de desarrollo integrado (IDE) para programar en Python viene incluido en Raspbian, se

llama IDLE. [32]

4.13.1. Python

Python es un lenguaje de programación creado por Guido van Rossum a principios de los años 90

cuyo nombre está inspirado en el grupo de cómicos ingleses “Monty Python”. Es un lenguaje similar a

Perl, pero con una sintaxis muy limpia y que favorece un código legible.

Se trata de un lenguaje interpretado o de script, con tipado dinámico, fuertemente tipado,

multiplataforma y orientado a objetos.

Lenguaje interpretado o de script

Un lenguaje interpretado o de script es aquel que se ejecuta utilizando un programa intermedio

llamado intérprete, en lugar de compilar el código a lenguaje máquina que pueda comprender y

ejecutar directamente una computadora (lenguajes compilados).

La ventaja de los lenguajes compilados es que su ejecución es más rápida. Sin embargo los lenguajes

interpretados son más flexibles y más portables.

Python tiene, no obstante, muchas de las características de los lenguajes compilados, por lo que se

podría decir que es semi interpretado. En Python, como en Java y muchos otros lenguajes, el código

fuente se traduce a un pseudo código máquina intermedio llamado bytecode la primera vez que se

ejecuta, generando archivos .pyc o .pyo (bytecode optimizado), que son los que se ejecutarán en

sucesivas ocasiones.

Tipado dinámico

La característica de tipado dinámico se refiere a que no es necesario declarar el tipo de dato que va a

contener una determinada variable, sino que su tipo se determinará en tiempo de ejecución según el

tipo del valor al que se asigne, y el tipo de esta variable puede cambiar si se le asigna un valor de otro

tipo.

Fuertemente tipado

43

No se permite tratar a una variable como si fuera de un tipo distinto al que tiene, es necesario

convertir de forma explícita dicha variable al nuevo tipo previamente. Por ejemplo, si tenemos una

variable que contiene un texto (variable de tipo cadena o string) no podremos tratarla como un

número (sumar la cadena “9” y el número 8). En otros lenguajes el tipo de la variable cambiaría para

adaptarse al comportamiento esperado, aunque esto es más propenso a errores.

Multiplataforma

El intérprete de Python está disponible en multitud de plataformas (UNIX, Solaris, Linux, DOS,

Windows, OS/2, Mac OS, etc.) por lo que si no utilizamos librerías específicas de cada plataforma

nuestro programa podrá correr en todos estos sistemas sin grandes cambios.

Orientado a objetos

La orientación a objetos es un paradigma de programación en el que los conceptos del mundo real

relevantes para nuestro problema se trasladan a clases y objetos en nuestro programa. La ejecución

del programa consiste en una serie de interacciones entre los objetos.

Python también permite la programación imperativa, programación funcional y programación

orientada a aspectos. [33]

44

5. DESARROLLO DEL PROYECTO

La idea de este proyecto es crear un localizador GPS portátil con Raspberry Pi que almacene en un

archivo local su posición exacta cada cierto tiempo o evento especial, acoplar una cámara fotográfica

para capturar imágenes en el mismo instante que la posición. Inmediatamente almacenados estos

archivos, se transmitirán a un servidor remoto a través de internet, haciendo uso de la red móvil 3G y

almacenando estos datos definitivos en el servidor de base de datos. Posteriormente se podrá

visualizar la foto, accediendo de forma remota a una página web, al igual que la posición, la cual

representaremos en un mapa interactivo de Google Maps aprovechando su API.

Al realizar el prototipo como objeto principal del proyecto, hubo varios factores decisivos, antes, al

inicio y en el proceso del desarrollo, los cuales se tuvieron en cuenta para lograr los mejores

resultados, sin afectar el presupuesto, el rendimiento y utilizando medios tecnológicos

implementados en los sistemas modernos. Dando cumplimiento a lo anterior, se escogieron

componentes de hardware y software, con facilidad de adquisición, versátil, compatibilidad para

acoplamiento y buenas fuentes de documentación y de conocimiento.

El diseño del prototipo se distribuye en varias fases correlacionadas entre sí. Iniciando con el diseño y

acople del dispositivo físico y los módulos necesarios con funciones específicas. Posteriormente, se

debe configurar y programar el dispositivo en su totalidad para controlar su funcionamiento, según lo

requerido y con un rendimiento óptimo. Luego, se realiza el diseño de la base de datos y el montaje

del servidor, donde se alojará la base de datos y se almacenarán los datos finales. Finalmente, se crea

una plataforma web, la cual podrá ser consultada por el usuario final, para realizar consulta de la base

de datos existente, con los archivos y datos correspondientes.

5.1. DISEÑO DE HARDWARE

Como base del hardware, se utilizó la plataforma educativa “Raspberry Pi 2 Modelo B”, la cual

presenta varias ventajas relacionándolo con sus antecesores y con otros dispositivos de fines

similares. Al tratarse de un ordenador de placa reducida, podemos encontrar gran diversidad de

funcionalidades, sin que el dispositivo sufra saturación o bajo rendimiento.

Entre otras, las principales ventajas que se puede encontrar son, el costo y facilidad de adquisición,

compatibilidad con diferentes sistemas operativos, facilidad en la configuración y programación al

45

encontrar gran cantidad de documentos explicativos que tratan sobre el dispositivos y sus diferentes

módulos, versatilidad para trabajar en diferentes ámbitos y contextos.

5.1.1. Inicio de Raspberry Pi

Materiales Necesarios

Como mínimo, para iniciar a funcionar el Raspberry Pi, se necesita:

Memoria micro SD de al menos 4 GB.

Adaptador micro SD a SD.

Computador con lector de tarjetas SD.

Adaptador de alimentación micro USB.

Teclado.

Mouse.

Cable HDMI o bien adaptador activo de HDMI a VGA.

Televisor o monitor.

Software Necesario

Paso 1. Preparar la tarjeta SD para copiar el Sistema Operativo

En el siguiente link se puede descargar la aplicación que permite formatear la tarjeta. El software se

llama SD Formatter, de los mismos creadores del estándar para almacenar información en las tarjetas

SD, por lo tanto es seguro de utilizar.

https://www.sdcard.org/downloads/formatter_4/SDFormatter4exe.zip

Una vez el archivo ha sido descargado, descomprimir el archivo y hacer clic en el archivo con el

nombre setup.exe. Este programa inicializará el proceso de instalación, instalar con las opciones

predeterminas.

Figura 12: Interfaz del programa SD Formatter. [34]

46

Insertar la tarjeta SD en el lector del PC o portátil. Una vez ha sido reconocida por el sistema, ejecutar

el programa instalado. Utilizar las opciones predeterminadas, sin embargo, hay que fijarse bien en

utilizar la opción “QUICK FORMAT” para que borre toda la información de la tarjeta en el menor

tiempo posible. A partir de este momento, toda la información contenida en la tarjeta será borrada

permanentemente. Este proceso tomara unos minutos dependiendo de la capacidad de la tarjeta.

Con la tarjeta SD formateada, ahora es posible instalar el sistema operativo con NOOBS. Esto se hace

mediante una copia directa de los archivos en la tarjeta SD. Para hacer la copia se debe seguir los

siguientes pasos. [34]

Paso 2. Descarga de Noobs y copia en la tarjeta SD

Descargar el Sistema Operativo directamente del sitio oficial de Raspberry Pi

(http://www.raspberrypi.org/downloads), en este link se encuentra que hay diferentes versiones

disponibles. Lo recomendable es inicialmente utilizar NOOBS, el cual contiene las siguientes versiones

de sistemas operativos:

Archlinux

OpenELEC

Pidora

RISC OS

RaspBMC

Raspbian

Seleccionar el archivo con el nombre NOOBS. Después de unos segundos el archivo empezará a

descargarse, esto tomará bastante tiempo ya que el archivo es de 737 MB.

Una vez el archivo ha descargado por completo, descomprimir el archivo en un lugar conocido. Al

final debería obtener una carpeta. Esta carpeta es la que contiene todo el sistema operativo. Luego

abrir la carpeta donde se descargó el sistema operativo y proceder a copiar o mover todo el

contenido.

Con estos pasos, el sistema operativo ha sido copiado en la tarjeta SD y ahora se puede proceder a

instalar el sistema operativo. [35]

Paso 3. Instalación y configuración inicial del Raspberry Pi (raspi-config)

Una vez la tarjeta ha sido preparada y NOOBS ha sido copiado, el sistema operativo se reinicia y el

primer programa que se ejecuta es Pi Recovery, este programa sirve para instalar la versión del

sistema operativo deseada.

En la pantalla inicial, seleccionar Raspbian para instalar el sistema operativo. Este proceso tomará

entre 15 a 20 minutos.

47

Figura 13: Pantalla inicial de Pi Recovery. [36]

Después que Raspbian “Wheezy” ha sido instalado, hay que configurar el Sistema operativo

para que funcione en español. Los siguientes pasos muestran las diferentes opciones

disponibles.

Al reiniciar el dispositivo el primer programa que se ejecuta se llama raspi-config, este

programa solo se ejecuta en inglés. En caso de que ya haya instalado el sistema operativo y

se desee realizar alguna de estas modificaciones, se puede hacer ejecutando el siguiente

comando desde la terminal:

sudo raspi-config

El primer menú que muestra contiene 9 diferentes opciones disponibles, a continuación se

revisará cada una de las opciones disponibles:

Figura 14: Menú principal de configuración de Raspbian. [36]

1. Expandir el sistema de archivos (Expand Filesystem). 2. Cambiar la contraseña del usuario Pi (Change User Password).

3. Activar el escritorio al iniciar (Entable Boot to Desktop).

4. Opciones de internacionalización (Internationalisation Options).

48

Esta opción permite modificar el lenguaje del sistema operativo, la zona horaria y la distribución de su

teclado.

Figura 15: Menú de opciones de internacionalización de Raspbian. [36]

La opción I1 sirve para indicar donde se encuentra ubicado, esta opción configura el lenguaje del

sistema operativo, los caracteres, la denominación de la moneda, etc. Buscar y seleccionar el modo

de codificación:

es_CO. UTF-8 UTF-8

Para confirmar oprimir espacio y luego enter.

La opción I2, sirve para cambiar la zona horaria del sistema, la cual se ajusta de acuerdo a la ciudad

donde vive o la más cercana. El sistema ha sido configurado como Colombia, Bogotá.

La opción I3, permitirá cambiar la configuración del teclado, si la marca y tipo del teclado no aparece,

seleccionar el predeterminado “PC genérico 105 teclas (intl)”.

Luego seleccionar el idioma del teclado, si en la primera pantalla no aparece Español seleccionar otro.

En la siguiente ventana hay una lista de opciones, seleccionar “Español” o “Español

(Latinoamericano)”.

Luego seleccionar la distribución del teclado, se recomienda utilizar la primera opción, solo “Español

Latinoamericano”.

5. Activar la cámara (Enable camera)

Esta opción sirve para dar soporte a la cámara de Raspberry Pi, permite activar el puerto para que

haya comunicación entre la CPU y el controlador de la cámara. Seleccionar la opción “Enable”, ya que

posteriormente se hará uso del módulo de la cámara.

6. Adicionar a Rastrack (Add to Rastrack)

7. Overclockig

8. Opciones avanzadas (Advanced Options) [36]

Paso 4. Conexión del Raspberry Pi a Internet usando cable de red

49

Es recomendable que el Raspberry Pi tenga conexión disponible a Internet para poder actualizar

programas. Existen 3 diferentes métodos para conectar la Raspberry Pi, entre ellos están:

Conexión directa a través del Router

Conexión con dongle WiFi

Conexión directa al PC

Para realizar la conexión con cable de red se necesitan los siguientes materiales.

Router con puerto RJ-45 disponible (Puede ser o no WiFi)

Conexión a internet

Cable RJ-45

La manera más sencilla de conectar el Raspberry Pi a internet o a la red casera es a través del puerto

RJ-45 del router inalámbrico. Para esto solamente hay que conectar el cable de red RJ-45

directamente desde el Raspberry Pi al router.

Para la mayoría de los routers que se encuentran en nuestra casa, el Raspberry Pi debería conectarse

directamente sin ninguna otra conexión extra. En caso que no se pueda conectar, verifiicar que el

router está configurado para DHCP (Dynamic Host Configuration Protocol), el cual le asigna

aleatoriamente la dirección IP al dispositivo.

Para verificar si la conexión es exitosa, es necesario cerciorarse que el Router le ha asignado

una dirección IP al Raspberry Pi. Esto se puede hacer desde la línea de comando utilizando el

siguiente comando:

ifconfig –a

Si el Router asignó una dirección IP al Raspberry Pi, ahora puede verificar si está conectado a

internet. [37]

Paso 5. Conexión remota al Raspberry Pi usando Xming

En el mundo Linux existen muy buenas alternativas para ejecutar escritorios remotos. Una opción,

entre varias es XMING. Esta opción permite ejecutar el escritorio remoto del Raspberry Pi usando el

sistema de gestión gráfico llamado X11 o X Windows. Esta es una aplicación tipo cliente-servidor,

donde se necesita instalar aplicaciones en ambos lados tanto en el servidor como en el cliente. Para

este caso el servidor es el Raspberry Pi y el cliente un PC con Windows. El Raspberry Pi usa X Windows

como el gestor de su ambiente gráfico, por ende no se necesita instalar nada adicional. Sin embargo,

para el PC con Windows, es necesario instalar la aplicación Xming para que pueda interpretar los

comandos recibidos por el Raspberry Pi en un ambiente gráfico.

Hay que tener en cuenta que Xming transfiere la información gráfica a través de Putty, por lo tanto

este debe ser instalado con anterioridad, y los pasos a seguir.

50

El programa que se tiene que instalar en el PC se llama XMING, este se puede descargar directamente

de la página del desarrollador en el link http://sourceforge.net/projects/xming/. Descargar el

archivo y luego ejecutar el instalador con todos los parámetros que trae por defecto.

Una vez haya terminado la instalación, ahora es necesario crear un archivo de configuración para

conectarse al Raspberry Pi, para esto buscar la aplicación Xlaunch en el escritorio o en la barra de

inicio, dependiendo de la versión de Windows que se tenga instalada.

Al ejecutar la aplicación, la primera pantalla indica como desea que se ejecute el ambiente X

Windows. Para poder terminar la conexión, necesitará hacer click derecho sobre Xming en la barra de

tareas y luego cerrar.

En la siguiente opción, seleccionar “start a program”. Esto indicará que tan pronto inicie Xming, esta

aplicación se debe ejecutar desde el Raspberry Pi.

Como el interés es ejecutar el escritorio del Raspberry Pi llamado LXDE, se debe hacer el llamado de

esta aplicación. Para esto en el campo start program ingresar startlxde. En el cuadro de la

configuración, seleccionar Using PuTTY (plink.exe). En el campo “connect to computer” ingresar la

dirección IP de la Raspberry Pi. En el campo login user ingresar el nombre del usuario del Raspberry

Pi, en este caso es el común “Pi”, siguiente a esto la contraseña que se haya asignado a este usuario,

el predeterminado es “raspberry”.

Figura 16: XMING con Raspberry Pi iniciar startlxde. [38]

Si se desea copiar texto entre el PC y el Raspberry Pi, dejar activada la casilla Clipboard. Esta función

es muy práctica cuando desean copiar textos entre los ambientes. Sin embargo, copiar imágenes o

archivos en general no es posible con este método.

Una vez se haya terminado, volverá a la venta anterior. Ahora solo es necesario hacer click en

“finish” y se ejecutará la conexión remota al Raspberry Pi. [38]

51

5.1.2. Adaptación de módulos y Programación de Raspberry Pi

A continuación se hará una descripción de las conexiones de los módulos requeridos con el propósito

ya sabido. Así mismo, se incluirá la configuración y programación indispensable para el satisfactorio

acople de todos y cada uno.

Para los scripts programados en la plataforma de la Raspberry, se usó el lenguaje de programación

Python, instalado de forma predeterminada con el sistema operativo Raspbian. A lo largo del capítulo

se hará mención de varios scripts en Python y una descripción de las funciones de cada uno y su

relación entre sí, los cuales son “principal.py”, “pulsador.py”, “temporales.py”, “picam.py”,

”iniciogps.py”, “envioFTP.py”, “envioEmail.py” y un script en PHP nombrado “mapa.php”. Todos estos

códigos están guardados en la ruta “/home/pi” de la Raspberry Pi y podrán ser observados con

detalle en los anexos.

Scripts iniciales

Habrán tres scripts que se ejecutarán automáticamente al iniciar el arranque con el encendido de la

Raspberry Pi y controlan la ejecución de los demás scripts.

A continuación, se adiciona el código del script “principal.py”, este es el primero en iniciar y estará en

ejecución constantemente para realizar captura de datos de la cámara y el GPS automáticamente

cada 10 minutos contados a partir de la última captura finalizada. Este script hace un llamado de la

función “principal” en el script “picam.py” y define el estado como “Automático”, este mismo se

incluirá en la publicación final de la página web y se tendrá en cuenta en los siguientes scripts.

Seguido a esto, se inicia el script “pulsador.py”, el cual tiene como función testear continuamente la

pulsación del botón de pánico incorporado a los pines GPIO 03 (numeración BCM) y Ground o pines

GPIO 05 y 09 (numeración estándar). Se toma el pin GPIO 03, aprovechando su resistencia de pull-up

interna que viene activada por defecto, así no es necesario agregar resistencias externas.

Este script también está en continua ejecución, esperando un voltaje bajo en el pin 03 configurado

como entrada. Al tener un estado bajo en el GPIO 03, inicialmente se modifica el estado a “S.O.S.” o

de emergencia. Seguidamente, se hace llamado a la función “principal” en picam.py. Este último

proceso, permitirá grabar un video de 10 segundos, configurables, ya que al tratarse de un estado de

52

emergencia, requerirá de mayor precisión en los datos, por esto obtendremos mejor visualización de

la situación con un video y no con una fotografía, como en el caso del estado “Automático”.

Por último, se inicia el script “temporales.py”. El propósito de este script es, intentar realizar una

conexión efectiva con el servidor para enviar los archivos que estén en la carpeta

“/home/pi/TemporalEnvio”, los cuales están almacenados y que no lograron ser enviados al servidor

en el momento de obtenerlos, por alguna falla en la conexión. Este proceso se repite cada 5 minutos,

intentando realizar conexión con el servidor en cada momento.

Para iniciar los scripts al encender la Raspberry se utiliza la herramienta “cron” de los sistemas Unix,

cron es un administrador de procesos en segundo plano. Al agregar líneas de texto en el archivo

“crontab” se incluyen estos procesos al cron, dependiendo de su configuración. En este caso se

agregan las siguientes líneas:

Conexión y configuración de la Cámara

Antes de conectar la cámara, localizar la CSI y luego tirar de la pestaña suavemente hacia

arriba. Ahora empujar el cable plano del módulo de la cámara en la ranura, con los contactos de plata

en el cable de espaldas al puerto Ethernet. Recordar que no se debe empujar el cable muy profundo.

53

Ahora mantenerlo en su lugar con una mano y empujar la lengüeta CSI hacia abajo con la otra mano

para bloquear la cinta de la cámara.

Figura 17: Conexión de la cámara a la interfaz CSI de la Raspberry Pi. [39]

Con el hardware en su lugar, ahora es el momento de instalar el software. Antes de activar la cámara,

asegurar de que se está ejecutando la última versión del firmware Raspberry Pi con estos comandos:

sudo apt-get update

sudo apt-get upgrade

Dependiendo de qué tan antigua es la instalación de Raspbian, y la velocidad de conexión a internet,

estos comandos pueden tomar más de media hora para completar.

Una vez que se ha completado, iniciar el script "ROSSP-config", este ayuda a configurar la Pi:

sudo ROSSP-config

Desplazarse por la lista hasta el elemento que dice "Enable Camera" y pulsar la tecla enter. En la

siguiente pantalla, se pedirá confirmar la elección seleccionando la opción "Enable". A continuación,

volverá a la pantalla principal de la utilidad de configuración. Ahora puede seleccionar la opción

"Finish" y reiniciar el Raspberry Pi.

Una vez que se haya reiniciado el Raspberry Pi, ahora se puede usar las dos utilidades de línea de

comandos, raspistill y raspivid para capturar imágenes fijas y vídeos respectivamente. [40]

Detección de movimiento

Para detectar el movimiento con la cámara se utiliza el script en Python escrito por miembros de la

comunidad de Raspberry Pi.

El script se basa en la biblioteca de imágenes de Python que es una biblioteca para el análisis y la

manipulación de las imágenes, así que hay que realizar la siguiente instalación:

sudo apt-get install python-imagen-tk

Ahora, se debe guardar el script y hacerlo ejecutable:

54

wget –c http://pastebin.com/?raw.php i = Yh77jhZ9W –o picam.py

chmod +x picam.py

Después que el script “principal.py” o “pulsador.py” hagan el llamado de la función “principal.picam

(estado)”, empezará a ejecutarse el código de “picam.py”, con el cual se busca detectar movimiento

antes de tomar una fotografía.

Tendremos que ajustar algunos aspectos de la secuencia de comandos para asegurar que funciona

para nuestras necesidades. Básicamente, se realizaron modificaciones en el script en la parte de la

toma de la fotografía final y el almacenamiento de la misma.

El script está diseñado para almacenar las imágenes en un directorio llamado "PICAM" bajo el

directorio personal, pero para nuestra conveniencia esta ruta se modificó por

/home/pi/TemporalEnvio.

El script encenderá el LED de color rojo de la cámara y empezará a tomar imágenes de baja

resolución. Luego va a compararlas y determinar si hay movimiento mediante la comparación de los

píxeles de las imágenes. Si detecta cambios, el script capturará una imagen de mayor resolución.

El script es muy eficiente y elimina automáticamente las imágenes de baja resolución que captura

para la comparación y sólo almacena las imágenes de alta resolución que han capturado el

movimiento.

Al lograr detectar una variación considerable en los pixeles de las imágenes de test, se modifica el

valor de la variable takePicture (takePicture = True), de esta manera la condición y el código mostrado

en la imagen se ejecutan.

A continuación, se invoca la función interna “saveImage (camerasettings, saveWidth, saveHeight,

saveQuality, diskSpaceToreserve)”. En estas líneas de código es donde se obtiene la fotografía o video

definitivo con la configuración, resolución y calidad, predefinidos al inicio del script, para lograr una

estabilidad entre calidad de la imagen y el tamaño de almacenamiento. El nombre del archivo de la

foto está definido como “image + fecha + hora + .jpg”, por ejemplo “image20150715164615.jpg”,

asegurando que ningún nombre de archivo se pueda repetir, evitando perdida de información. Y

análogamente el nombre de archivo del video está definido de igual forma, únicamente cambiando la

palabra “image” por “video” y el formato por .mp4, por ejemplo “video20150715164615.mp4”. Estos

archivos se enviarán seguidamente al servidor FTP, en caso de no lograr enviarlo o de no poder

conectar con el servidor, serán almacenados en la carpeta “/home/pi/TemporalEnvio”, a la espera de

poder ser enviados.

55

La variable “FTPnamePic” hace referencia al nombre con el cual se guardará la imagen en el servidor

de archivos, lo cual es necesario especificar al realizar el envío de los archivos a través del protocolo

FTP.

Después de guardar la foto o video se ejecuta el script “iniciogps.py” con la ayuda de la función

“os.system ()”, que permite escribir líneas de comando de la Shell del sistema. Con este script se

obtendrán datos como coordenadas GPS, dirección, fecha y hora de la adquisición de los datos, todos

estos alojados en un archivo temporal en la ruta “/home/pi/datos.txt”. En este mismo archivo de

texto se adiciona la ruta de almacenamiento de la imagen en el servidor, el estado, anteriormente

mencionado y el identificador de dispositivo. Más adelante, se hará referencia a dicho archivo con

más detalle.

Conexión y configuración del módulo GPS

El módulo no tiene pines soldados donde conectar los cables, así que, o se sueldan los cables

directamente a la placa, o se adquiere una cabecera de pines y se sueldan.

Para comunicar el módulo Ublox M6 con la Raspberry Pi se usará el puerto serie “/dev/ttyAMA0”.

Para ello se conecta el módulo GPS a la Raspberry tal como indica el esquema, los cables TX y RX

deben estar cruzados, es decir, el pin TX de la Raspberry va conectado al pin RX del módulo GPS y el

56

pin RX de la Raspberry va conectado al pin TX del módulo GPS. Se alimenta el módulo desde los pines

GPIO de 3.3V y GND de la Raspberry.

Figura 18: Esquema y conexión de módulo Ublox M6 a Raspberry pi. [41]

El puerto serie “dev/ttyAMA0”, no está disponible por defecto y hay que desbloquearlo. Para ello se

abre el archivo “/boot/cmdline.txt”, desde la Raspberry y cambiar:

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1

root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

por:

dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4

elevator=deadline rootwait

Seguidamente abrir el archivo “/etc/inittab”, y en la última línea poner un ‘#’.

Modificaría:

T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

Por:

#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

Para que estos cambios tengan efecto reiniciar la Raspberry Pi, una vez reiniciada ya se tiene el

puerto serie listo para usarlo. Ahora instalar algunas dependencias que harán falta para interpretar

los datos del módulo GPS con este comando desde la terminal:

sudo apt-get install gpsd gpsd-clients python-gps

GPSD es una aplicación que corre en segundo plano y que recoge los datos GPS del módulo y los

envía a través de un socket que necesita ser activado cada vez que inicia la Raspberry, por eso

introducir en la terminal:

57

sudo gpsd /dev/ttyAMA0 -F /var/run/gpsd.sock

Para que el socket se inicie automáticamente al arrancar la Raspberry, se abre el archivo

“etc/rc.local” y se pone justo antes de “exit 0”, la línea anterior.

Si se ha hecho todo bien al introducir el comando “cgps -s”, debería mostrar algo como esto:

Figura 19: Pantalla de terminal con datos del GPS. [41]

Ahora que las pruebas de conexión del GPS con la Raspberry Pi están finalizadas y satisfactorias se

puede implementar un script para su accionar. [41]

Al tener iniciado el socket GPSD y ya teniendo el receptor GPS activado y conectado con los satélites,

solo basta obtener las coordenadas de posición. En el script, constantemente está obteniendo los

datos latitud y longitud, en busca de valores efectivos, por esto se realiza una condición para que al

obtener datos diferentes a 0 (cero), guarde las coordenadas en variables locales y al igual la dirección

de esa ubicación.

El script “iniciogps.py” importa, entre otras, principalmente las librerías “gps” y “pygeocoder”,

librerías exclusivas para el uso con un receptor GPS. La primera, se encarga de crear un streaming de

datos GPS y constantemente está obteniendo datos de posición, y la segunda tiene como único

propósito traducir las coordenadas geográficas obtenidas, en una dirección legible, conocido como

geo codificación inversa.

58

Al obtener las coordenadas y la dirección, se realiza validación si el estado actual es “S.O.S.” para

hacer un envío inmediato de un correo electrónico con los datos básicos de ubicación, haciendo un

llamado a la función “enviar” en el script “envioEmail.py”. Esto, con el propósito de poder tener una

reacción oportuna a la emergencia. Se podrá ver en detalle el código del script “envioEmail.py” en los

anexos.

Figura 20: Correo electrónico recibido de emergencia.

Posteriormente, se realiza lectura del archivo “mapa.php” guardado con anterioridad en la ruta

“/home/pi/mapa.php”, se busca la palabra clave “coordenadas” dentro de todo el texto en el archivo

y se modifica por “latitud, longitud”, siendo latitud y longitud las coordenadas obtenidas por el GPS.

Se guarda el archivo modificado en la ruta “/home/pi/TemporalEnvio” con un nombre diferente de la

misma forma en que se nombró la imagen, quedando como “map + fecha + hora + .html”.

Adicionalmente, se crea un archivo temporal “datos.txt” para agregar los datos obtenidos (latitud,

longitud, dirección, fecha, hora, URL del mapa, …). Al finalizar el script de “iniciogps.py” y retomar el

final del script “picam.py” se adicionan más datos al archivo “datos.txt” (…, URL de la imagen, estado,

idUser). Al completar la escritura de este archivo se guarda en la ruta “/home/pi/TemporalEnvio” con

el mismo formato para el nombre utilizado para la imagen y el mapa, quedando como “date + fecha +

hora + .txt”. En la siguiente imagen se observa la forma en que se guarda el texto.

Figura 21: Datos almacenados para la importación en la base de datos.

Obsérvese que cada dato está encerrado entre los caracteres “|”. La finalidad de este carácter

especial está en la importación de estos datos a la base de datos, previo envío del archivo al servidor,

y ya encontrándose guardado en una carpeta exclusiva dentro del servidor.

59

Los archivos definitivos se almacenan en conjunto en la ruta “/home/pi/TemporalEnvio”, como ya se

ha mencionado. Al final de los scripts “iniciogps.py” y “picam.py” se intenta realizar el envío

inmediato de los archivos respectivos al servidor a través del protocolo FTP. Es en este momento,

cuando se realiza el llamado de la función “enviar” dentro del script “envioFTP.py”

Transmisión de archivos al servidor remoto

Como ya se ha venido mencionando, el envío de los archivos se hace a un servidor de archivos a

través del protocolo FTP, mientras se tenga una conexión estable a internet. La librería “ftplib”

importada en el script “envioFTP.py” permite de forma sencilla realizar el envío de los archivos. Para

concretar la transacción, inicialmente se debe establecer una conexión con el servidor, por esto se

debe indicar el nombre del servidor o su IP publica, usuario, clave y carpeta donde se guardará el

archivo. Si la conexión es satisfactoria, se realiza el envío indicando la ruta de archivo origen y ruta de

archivo destino. Finalizada la transacción el archivo enviado se elimina del almacenamiento local.

Si por cualquier motivo no se logra concretar la conexión con el servidor y/o no se puede enviar el

archivo, el script “envioFTP.py” finalizará su ejecución sin insistir en la conexión y el archivo seguirá

guardado temporalmente en el dispositivo local, hasta que se ejecute el script “temporales.py” y

seguida la función “listaArchivos” del script “envioFTP.py” y se realice nuevamente un intento

satisfactorio de conexión con el servidor, enviando efectivamente los archivos pendientes.

La intención de la función “listaArchivos” es realizar un listado de todos los archivos guardados en la

carpeta “/home/pi/TemporalEnvio”, los cuales se encuentran en espera de envío al servidor. Este

programa es ejecutado por el script “temporales.py” y se ejecuta automáticamente desde el arranque

de la Raspberry Pi, realizando el mismo proceso cada 5 minutos. Para dar cumplimiento, se agrega

una línea de código en el “crontab”, ya mostrado anteriormente.

5.1.3. Internet móvil con el modem 3G USB Huawei E173 en la Raspberry

La instalación de un modem 3G / 4G USB en un Raspberry Pi no es una tarea sencilla. El principal

problema es que la mayoría de los módems USB actúan como dos dispositivos, un dispositivo de

almacenamiento USB y un módem USB. Cuando se conecta a la Raspberry PI el dispositivo es por lo

general iniciado en modo de almacenamiento USB. Hay un programa llamado usb_modeswitch que

podemos utilizar para hacer la conmutación.

Inicialmente, se debe instalar el programa con el siguiente comando.

sudo apt-get install usb-modeswitch

Se tiene que conseguir los códigos del dispositivo USB en el modo de almacenamiento USB y

el modo de módem USB.

Conectar el módem USB y reiniciar el Raspberry PI sin LAN o conexión WiFi.

sudo reboot

60

Una vez reiniciado, abrir una ventana de terminal y escribir “lsusb”.

La salida será similar a la siguiente imagen. El módem debe ser catalogado como uno de los

dispositivos USB. Hay que tener en cuenta los números subrayados, estos son los códigos de

proveedores de productos y dispositivos.

En este caso aparece 12d1: 1c24. Este código hace referencia a la conexión en modo de

almacenamiento. Se puede comprobar escribiendo “tail –f /var/log/messages”, y se observa

que el modem se inició como “cdrom”.

Si ahora se desconecta el modem y se vuelve a conectar, se verá modificación en el modo de

conexión del modem, ya es reconocido en modo modem USB.

61

Es decir, se ha cambiado correctamente. Aparece en ttyUSB0, ttyUSB1, ttyUSB2 y ttyUSB3 conexiones

de modem GSM, y luego la tarjeta SD. Y podemos ver la actuación de usb_modeswitch, cambiando el

código a 12d1:1c23. Escribir “lsusb” para corroborar:

Ahora lo que se debe lograr es que este cambio se realice siempre, desde el inicio de la Raspberry o

en cualquier momento que se conecte el modem. Para lograrlo, hay que añadir lo siguiente en el

archivo “/etc/rc.local”, antes de la línea “exit 0”:

sudo service udev stop

sleep 2

sudo service udev start

El “/etc/rc.local” se ejecuta en cada arranque, y al añadir esas líneas se está diciendo que pare el

servicio udev, espere 2 segundos y lo vuelva a arrancar.

Instalando pppd, UMTSKeeper y Sakis3G

El programa más utilizado para realizar la conexión 3G es Sakis3g. Sin embargo, antes de instalarlo, se

tiene que saber que es muy frecuente perder la conexión 3G cada cierto tiempo, por lo que se suele

recurrir a otro programa, UMTSKeeper, que está constantemente comprobando la conexión y

recuperándola cuando se cae. Este último programa también realiza la instalación de Sakis3G.

Lo primero es instalar el servicio pppd:

sudo apt-get install ppp

A continuación, instalar UMTSKeeper:

cd ~

mkdir umtskeeper

cd umtskeeper

wget http://mintakaconciencia.net/squares/umtskeeper/src/umtskeeper.tar.gz

tar -xzvf umtskeeper.tar.gz

chmod +x sakis3g umtskeeper

Ahora, configurar sakis:

sudo ./sakis3g --interactive

62

Figura 22: Pantalla inicial de Sakis 3G interactivo.

Seleccionar los siguientes ítems, en orden de aparición, dando enter sobre la opción:

Connect with 3G.

USB device.

Huawei mobile.

Interface #2.

Reported by your modem (internet.comcel.com.co).

Usuario de APN: comcel.

Clave de APN: comcel.

Al finalizar estos pasos satisfactoriamente, ya está conectado a la red móvil 3G a través de “Claro”

utilizando el protocolo ppp0.

Y por último, configurar UMTSKeeper, según los parámetros que se escogieron anteriormente al

ejecutar Sakis3G. Ejecutar el siguiente comando (una sola línea), que luego se añadirá

a “crontab” para que se ejecute siempre que se arranque la Raspberry Pi:

sudo /home/pi/UMTSkeeper/umtskeeper --sakisoperators "OTHER='USBMODEM'

USBMODEM='12d1:1c23' USBINTERFACE='2' APN='internet.comcel.com.co' APN_USER='comcel'

APN_PASS='comcel'"

Consultar el fichero /var/log/umtskeeper.log y ver que está todo en orden. Probar a desconectar y

reconectar el modem, y que tras medio minuto vuelve a conectarse automáticamente.

63

5.2. DISEÑO DE APLICATIVO

5.2.1. Instalación WAMP Server:

El entorno de desarrollo escogido para el almacenamiento, captura y procesamiento de la

información fue WAMP server v2.2, Apache v2.2.22, MySQL v5.2.24 y PHP v5.4.3 este entorno fue

instalado en un equipo con Sistema Operativo Windows 7.

Configuraciones iniciales para el funcionamiento del servidor

1. Se cambió el puerto de escucha por defecto “80” por el puerto “81”, realizando modificación

httpd.conf en sus líneas 46 y 171.

También se modifica el archivo wampmanager.tpl, en las líneas 121 y 122 de esta versión. Al

realizar estas modificaciones siempre se realiza reinicio de los servicios para que los cambios

tomen efecto.

2. En el archivo Host del equipo se asigna la IP pública como “localhost”, de este modo y

solicitando la apertura del puerto 81, será posible visualizar el contenido de la información vía

web a través del enlace: http://miippublica:81/, internamente http://localhost:81 o

http://miipprivada:81.

Configuraciones básicas de seguridad del servidor

1. Realizar los cambios respectivos de permisos de tal manera que el acceso al phpmyadmin, se

pueda realizar únicamente de manera local:

<Directory "c:/wamp/apps/phpmyadmin3.5.1/">

Options Indexes FollowSymLinks MultiViews

AllowOverride all

Order Deny,Allow

Deny from all

Allow from 192.168.0.100

</Directory>

2. Establecer una contraseña a la consola MySQL con el comando SET PASSWORD

FOR root@localhost=PASSWORD('Su_Clave_Aqui');

64

3. Modificar el archivo config.inc.php, para que se solicite el usuario y contraseña para acceder

al phpmyadmin: se configura el usuario y contraseña y se modifica para que en el acceso pida

la contraseña:

Figura 23: Interfaz de logeo de phpMyAdmin

5.2.2. Transferencia de información

Para el transporte de la información, se utilizará el protocolo FTP, haciendo uso de la librería “ftplib”

en la Raspberry PI, para el envío de archivos hacia el Servidor FTP. En el caso del almacenamiento de

la información en el servidor, se utilizó el servidor FTP TYPSoft. En este servidor se configuran los

diferentes usuarios FTP para diferentes dispositivos y se asignan los respectivos permisos a las

carpetas a las que tendrán acceso.

65

Figura 24: Interfaz TYPSoft FTP Server

5.2.3. Creación de base de datos, tabla y conexión de MySQL con PHP

Para la creación y modificación de las base de datos y tablas, se manejaron de 2 maneras: Usando la

consola MySQL o a través de phpmyadmin:

Diseño y creación de base de datos: Para el diseño y creación de la base de datos, era necesario

pensar desde la perspectiva del usuario final. Los datos relevantes que requiere un usuario es

acceder, consultar y visualizar la información del dispositivo que monitorea su vehículo, que sea muy

intuitiva y entendible.

Por tal motivo, en el desarrollo se realizó la creación de 2 tablas en la base de datos para la

importación y procesamiento de la información:

Tabla monitoreo

En esta tabla se importará la información almacenada en el servidor FTP de manera automática

gracias al servicio de Windows instalado.

La tabla está compuesta por los siguientes campos:

CREATE TABLE IF NOT EXISTS `monitoreo` (

`id` int(10) unsigned NOT NULL AUTO_INCREMENT,

`latitud` varchar(100) DEFAULT NULL,

`longitud` varchar(100) DEFAULT NULL,

`direccion` varchar(100) DEFAULT NULL,

`fecha` varchar(100) DEFAULT NULL,

`hora` varchar(100) DEFAULT NULL,

`mapa` varchar(100) DEFAULT NULL,

66

`foto` varchar(100) DEFAULT NULL,

`estado` varchar(100) DEFAULT NULL,

`id_user` text DEFAULT Ninguna,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=41 ;

Tabla 11: Tabla de Monitoreo en MySQL

Campo id: Este campo es tipo entero e incremental, de esta manera permitirá tener un

conteo global de todos los registros importados para el administrador de la base.

También juega un rol importante en la publicación de los registros vía web de manera

ordenada y descendente, lo que permite visualizar del último registro importado al

primero.

Campo latitud: Almacena la información de la latitud del registro importado.

Campo longitud: Almacena la información de la longitud del registro importado.

Campo dirección: Almacena la información de la dirección del registro importado,

generada por la función codificada de georreferenciación inversa.

Campo fecha: Almacena la información de la fecha del registro importado.

Campo hora: Almacena la información de la hora del registro importado.

Campo mapa: Almacena la información del link de acceso al mapa del registro

importado. En la visualización web por medio de un icono redirecciona por hipervínculo

a una nueva pestaña al archivo *.html almacenado en el servidor que contiene el mapa

con su respectivo marcador.

Campo foto: Almacena la información del link de acceso a la foto del registro importado.

En la visualización web por medio de un icono redirecciona por hipervínculo a una nueva

pestaña al archivo de la foto o el almacenamiento del video, esto depende del estado

reportado en el campo estado.

67

Campo estado: Este campo almacena el estado automático o S.O.S, dependiendo del

estado reportado, el campo foto puede tener un link que direccione a una foto o video.

Campo id_user: Este campo almacena el ID del dispositivo de cada reporte, es de vital

importancia para el acceso del usuario registrado y para el filtrado de la información.

Tabla registro

En esta tabla se almacenará la información correspondiente a los usuarios registrados, la contraseña

es codificada con MD5 para brindar una mayor seguridad de la información.

CREATE TABLE IF NOT EXISTS `registro` (

`id_user` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(100) NOT NULL,

`nickname` varchar(100) NOT NULL,

`pass` varchar(32) NOT NULL,

PRIMARY KEY (`id_user`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=43 ;

Tabla 12: Tabla de registro

Campo id_user: Este campo es tipo entero e incremental, de esta manera permitirá tener

un conteo global de todos los usuarios registrados, para el administrador de la base. La

importancia de este campo, radica en que será el ID de usuario otorgado para que la

persona pueda ingresar a la plataforma una vez realizado el proceso de registro.

Campo name: En este campo se almacena el nombre de la persona que se registra. Es un

campo obligatorio para realizar el registro de manera satisfactoria.

Campo nickname: Este campo no solo es obligatorio para realizar el registro de manera

satisfactoria, sino también para acceder a los registros en la plataforma web mediante

autenticación de usuario.

Campo pass: Campo obligatorio que almacena la contraseña en codificación MD5, por

seguridad este campo es necesario para la autenticación del usuario registrado.

Diagrama Entidad- Relación

En el diagrama se encuentran las tablas “monitoreo” y “registro” creadas en la base de datos “php”,

estas contienen información de los usuarios registrados y de los reportes generados para cada uno de

los dispositivos.

68

Figura 25: Esquema entidad relación

Conexión MySQL con PHP

Para establecer la conexión es necesario configurar los campos de:

IP del servidor.

Nombre de usuario.

Contraseña.

Base de datos.

Formulario de registro

Para el formulario de registro, serán requeridos 4 campos a ingresar en la página registro.html:

Nombres y Apellidos.

Nick Usuario.

Contraseña.

Repetir contraseña.

Cuando el usuario llena los campos y procede a finalizar el registro, en la página registro.php se valida

que los campos de contraseña y repetir contraseña sean iguales para hacer efectivo el registro. Si el

registro se realiza de manera satisfactoria se almacenarán los datos en la tabla “registro”, y al usuario

le indicará por medio de un aviso “registrado correctamente” con su respectivo ID de dispositivo, de

lo contrario indicará si las contraseñas no coinciden o si no ha llenado alguno de los campos

requeridos.

Importación de datos

La importación de datos es posible realizarla, gracias a un servicio Windows que siempre está activo.

Este servicio realiza la tarea de importación automática cada 15 segundos, sobre los archivos de datos

“*.txt” enviados desde la Raspberry a la carpeta /captura/CapturaArchivos.

69

Para que el servicio funcione es necesario establecer la conexión a la base de datos y colocar la URL

de la carpeta donde se almacenarán los archivos a importar.

También se configura en una variable las líneas para la importación de los archivos.

El complemento adicional de este servicio es que cada vez que importa un archivo lo elimina de la

carpeta dejando limpio el almacenamiento y a la espera de un nuevo archivo a importar.

70

Figura 26: Diagrama de bloques del registro de usuario

Inicio de Sesión

Para el inicio de sesión del usuario registrado, se creó la página principal “index.html”, donde se

solicita ingresar el nombre de usuario y contraseña. En el caso de la contraseña la entrada se coloca

de tipo “password”, de esa manera la contraseña estará oculta a la vista del usuario. Cuando se

ingresan los datos, son validados en la página “login.php”, si son incorrectos saldrá un mensaje

advirtiendo que el usuario y/o contraseña no son válidos, de lo contrario establece una sesión y

guarda los datos.

Después de validar, el usuario es direccionado a la página principal “index.php”. En esta página se

asociará el número de ID asociado, que posteriormente será utilizado para el filtrado de contenido y

71

que únicamente pueda visualizar la información que le corresponde al ID del dispositivo. Ejemplo:

http://miippublica:81/index.php?userid=”$userid”.

En el siguiente código se podrá observar que se almacena como variable global la información del

“userid”, obtenida de la dirección URL. Esto con el objetivo de identificar el ID del dispositivo

autenticado y proceder a comparar con el ID de dispositivo de la tabla, de esa manera garantizar que

únicamente publique la información cuando el “userid” obtenido de la dirección del link sea igual al

ID de dispositivo de la tabla.

Figura 27: Diagrama de bloques inicio sesión

Por otra parte, se ingresa una variable como “bandera” para identificar cuando el usuario registrado

tiene datos almacenados y cuando no los tiene. Cuando el estado de la bandera está en “1”, significa

que ya se ha cargado información procedente de la Raspberry, el estado de la bandera en “0”,

significa que para el usuario autenticado no se ha enviado información o no se ha configurado el

dispositivo para el envío, por tanto se publicará información sobre los campos “no data load”.

72

Figura 28: Entorno Web, consulta sin datos de tabla monitoreo

El campo “estado” puede ser “Automático” o “S.O.S.”. En el primer caso, la Raspberry inicia en estado

“Automático”, enviando un reporte cada 10 minutos, con una fotografía adjunta. El estado “S.O.S” se

activa cuando se pulsa el botón de emergencia, envía un reporte con un video adjunto.

Posteriormente, continúa en estado “Automático”.

5.2.4. Visualización

Visualización página web

Los datos que el usuario podrá visualizar, serán los enviados desde la Raspberry e importados en la

tabla “monitoreo” en un entorno más amigable como se observa en la siguiente figura.

Figura 29: Entorno Web consulta datos tabla monitoreo

En la parte izquierda aparece filtrado por el ID del dispositivo, en los demás campos de la tabla

aparecerá la información relevante como Latitud, Longitud, Dirección, Fecha, Hora, Mapa, Foto y

Estado.

Visualización mapa en Google Maps

Para el campo Mapa, está relacionado un icono que funciona como hipervínculo hacia la URL donde

se almacenó el archivo en el servidor y cuyo nombre de archivo contiene fecha y hora de captura. Por

ejemplo, http://miippublica:81/captura/mapa+fecha+hora.html.

73

El archivo “*.html” del mapa se envía ya creado desde la Raspberry. Este archivo contiene las

coordenadas obtenidas por el dispositivo GPS y por medio de un script, se invoca la API de Google

Maps, que está abierta a los desarrolladores y al público en común, y por medio de parámetros en

una función, se definen las características de la publicación y la inclusión de las coordenadas para la

ubicación en el mapa.

Georreferenciación Inversa: Como se explica en el marco teórico, la georreferenciación inversa hace

posible que a partir de las coordenadas obtenidas, se pueda traducir a una dirección legible e

interpretable por el usuario común por medio de un marcador como se observa en la siguiente figura.

Figura 30: Captura de coordenadas en Google Maps

74

Visualización Foto

La visualización de la foto, es un icono referenciado a un hipervínculo que apunta a la URL donde se

encuentra almacenado el archivo “*.JPG”. Por ejemplo,

https://miipublica:81/captura/imagen+fecha+hora.jpg.

75

6. Pruebas técnicas

Se realiza una última prueba en una página de Google llamada

https://developers.google.com/speed/pagespeed/insights/, en esta se permite analizar la experiencia

de usuario navegando en la página desde un ordenador de escritorio así como de un dispositivo

móvil.

A continuación se observa que la calificación para la navegación desde un equipo de escritorio es de

95/100, donde las recomendaciones es hacer cambios en la ejecución de JavaScript y CCS.

Figura 31: Google Developers equipo escritorio.

En cuanto a la experiencia en móviles hacen observaciones respecto a incorporar y adecuar el tamaño

de los botones para facilitar el manejo táctil. La puntuación fue de 71/100.

76

Figura 32: Google Developers dispositivo móvil.

6.1. Prueba de Estrés:

Para llevar a cabo las pruebas, una herramienta disponible vía web es: http://loadimpact.com. Con

esta herramienta web, se puede poner a prueba escenarios de conexión múltiple y reflejar los

tiempos de respuesta a medida que se aumenta la carga de usuarios.

Como se puede observar en la siguiente figura, la convención “VU load time” hace referencia a la

traza del tiempo de carga a medida que se incrementan los usuarios, cuya convención es “VUs

active”. Se puede apreciar que el tiempo promedio de carga esta en 1.2 s. Este tiempo promedio de

carga para tratarse de un servidor local en un equipo de hogar es bueno e indica que los tiempos de

respuesta y eficiencia de operatividad mejorarían significativamente si los serivicios son migrados a

un servidor público con mayores recursos y disponibilidad.

Figura 33. Prueba de carga de conexión con 25 usuarios.

77

También pueden ser evaluados los tiempos de respuesta de los estilos gráficos e imágenes.

Figura 34. Respuesta de páginas y estilos.

Pruebas de conexión y tiempos de respuesta:

Para evaluación de tiempo de respuesta se realizó a través de la herramienta web

http://www.webpagetest.org/, donde se ingresa la dirección a ser consultada, en este caso la

dirección principal “http://miipublica:81/index.php”. En la siguiente imagen se aprecia como la

segunda consulta a diferencia de la primera es mucho más rápida, tanto en la carga de documentos

así como en la carga completa de la página

Figura 35. Tiempo respuesta plataforma web.

78

7. Conclusiones

Se logró diseñar e implementar el prototipo de seguridad de manera eficiente y apropiada

para el desarrollo del proyecto. El estudio de la viabilidad técnica y la creación de nuevas

plataformas y dispositivos electrónicos multilenguaje y compatibles con diversos sistemas

operativos fueron facilitadores en la integración de los componentes Hardware y Software.

La georreferenciación es una herramienta potente y debe seguir siendo aprovechada al

máximo en las diferentes aplicaciones informáticas, de seguridad, ubicación, etc. Contar con

este recurso tecnológico permitió generar mapas de localización con un rango de error muy

bajo y acoplado con el “reverse Geocoding” permite conocer la dirección física donde se

encuentra el vehículo, haciendo que el prototipo sea confiable en la veracidad de la

información que proporciona.

El desarrollo de la base de datos, le permite a los usuarios consultar vía WEB de manera

amigable y entendible la información que le corresponde del dispositivo al que está

relacionado. Este logro es fundamental porque muchos proyectos, incluyendo este, están

orientados al usuario común.

La integración de los lenguajes (HTML, PHP, JavaScript, Phyton) optimizan significativamente

el rendimiento e integración de las aplicaciones. Contar con un sistema robusto y actualizado

en sus tecnologías permite ofrecer un dispositivo de alta fidelidad sin importar, en ocasiones,

la limitación de los recursos que se puedan tener.

79

A. Anexo: Script “principal.py”

import picam from time import * estado = "Automatico" iduser = ‘5’ while (True): StateFile = open("/home/pi/estado.txt", 'w') StateFile.write(estado) StateFile.close() picam.principal(estado, iduser) sleep (600)

80

B. Anexo: Script “pulsador.py”

import os import time import RPi.GPIO as GPIO import picam GPIO.setmode(GPIO.BCM) GPIO.setup(3,GPIO.IN) estado = "S.O.S." iduser = ‘5’ while True: input = GPIO.input(3) if (input==0): print ("Boton pulsado") StateFile = open("/home/pi/estado.txt", 'w') StateFile.write(estado) StateFile.close() picam.principal(estado, iduser)

81

C. Anexo: Script “temporales.py”

#!/usr/bin/env python # -*- coding: utf-8 from envioFTP import listaArchivos from time import * while True: listaArchivos() sleep(300)

82

D. Anexo: Script “picam.py”

#!/usr/bin/python import StringIO import subprocess import os import time from datetime import datetime from PIL import Image import picamera import envioFTP tiempo = time.strftime threshold = 20 sensitivity = 30 forceCapture = False forceCaptureTime = 60 * 60 filepath = "/home/pi/Temporalenvio" PrefixPic = "image" PrefixDate = "date" diskSpaceToreserve = 40 * 1024 * 1024 camerasettings = "" prefixWeb = "http://186.154.5.153:81/captura/" saveWidth = 1296 saveHeight = 972 saveQuality = 10 testWidth = 100 testHeight = 75 testAreaCount = 1 testBorders = [ [[1,testWidth],[1,testHeight]] ] debugMode = False def captureTestImage(settings, width, height): command = "raspistill %s -w %s -h %s -t 200 -e bmp -n -o -" % (settings, width, height) imageData = StringIO.StringIO() imageData.write(subprocess.check_output(command, shell=True)) imageData.seek(0) im = Image.open(imageData) buffer = im.load() imageData.close() return im, buffer def saveImage(settings, width, height, quality, diskSpaceToReserve, estado): keepDiskSpaceFree(diskSpaceToReserve) global localNamePic

83

global FTPnamePic global horaArchivo horaArchivo = tiempo("%Y%m%d_%H%M%S") horaPublicar = tiempo("%A, %d/%m/%Y, %X") if estado == 'Automatico': localNamePic = filepath + "/" + PrefixPic + horaArchivo + ".jpg" FTPnamePic = PrefixPic + horaArchivo + ".jpg" with picamera.PiCamera(resolution=(width, height), led_pin=False) as foto: foto.annotate_text = horaPublicar time.sleep(0.05) foto.capture(localNamePic, quality=quality) foto.close() print "Captured %s" % localNamePic elif estado == 'S.O.S.': localNamePic = filepath + "/" + PrefixVid + horaArchivo + ".mp4" FTPnamePic = PrefixVid + horaArchivo + ".mp4" with picamera.PiCamera(resolution=(640,480)) as camera: time.sleep(0.1) camera.start_recording('/home/pi/video.h264', quality=25) camera.wait_recording(10) camera.stop_recording() comando = "MP4Box -fps 30 -add /home/pi/video.h264 %s" %(localNamePic) os.system (comando) def keepDiskSpaceFree(bytesToreserve): if (getFreeSpace() < bytesToreserve): for localNamePic in sorted(os.listdir(filepath + "/")): if localNamePic.startswith(PrefixPic) and localNamePIc.endswith(".jpg"): os.remove(filepath + "/" + localNamePic) print "Deleted %s/%s to avoid filling disk" % (filepath,localNamePic) if (getFreeSpace() > bytesToreserve): return def getFreeSpace(): st = os.statvfs(filepath + "/") du = st.f_bavail * st.f_frsize return du def principal(estado, iduser): image1, buffer1 = captureTestImage(camerasettings, testWidth, testHeight) lastCapture = time.time() while (True): image2, buffer2 = captureTestImage(camerasettings, testWidth, testHeight) changedPixels = 0 takePicture = False if (debugMode): debugimage = Image.new("RGB",(testWidth, testHeight)) debugim = debugimage.load() for z in xrange(0, testAreaCount): for x in xrange(testBorders[z][0][0]-1, testBorders[z][0][1]): for y in xrange(testBorders[z][1][0]-1, testBorders[z][1][1]): if (debugMode): debugim[x,y] = buffer2[x,y]

84

if ((x == testBorders[z][0][0]-1) or (x == testBorders[z][0][1]-1) or (y == testBorders[z][1][0]-1) or (y == testBorders[z][1][1]-1)): debugim[x,y] = (0, 0, 255) pixdiff = abs(buffer1[x,y][1] - buffer2[x,y][1]) if pixdiff > threshold: changedPixels += 1 if (debugMode): debugim[x,y] = (0, 255, 0) if (changedPixels > sensitivity): takePicture = True if ((debugMode == False) and (changedPixels > sensitivity)): break if ((debugMode == False) and (changedPixels > sensitivity)): break if ((debugMode == False) and (changedPixels > sensitivity)): break if (debugMode): debugimage.save(filepath + "/debug.bmp") print "debug.bmp saved, %s changed pixel" % changedPixels if forceCapture: if time.time() - lastCapture > forceCaptureTime: takePicture = True if takePicture: saveImage(camerasettings, saveWidth, saveHeight, saveQuality, diskSpaceToreserve) os.system("sudo python /home/pi/iniciogps.py") datos = open("/home/pi/datos.txt", 'a') datos.write("|%s%s|%s|%s" %(prefixWeb, FTPnamePic, estado, iduser)) print (estado) datos.close() horaArchivo = tiempo("%Y%m%d_%H%M%S") localNameDate = filepath + "/" + PrefixDate + horaArchivo + ".txt" FTPnameDate = "CapturaArchivos/" + PrefixDate + horaArchivo + ".txt" os.rename("/home/pi/datos.txt",localNameDate) envioFTP.enviar (localNameDate, FTPnameDate) envioFTP.enviar (localNamePic, FTPnamePic) break image1 = image2 buffer1 = buffer2

85

E. Anexo: Script “iniciogps.py”

#! /usr/bin/python # -*- coding: utf-8 import os from gps import * from time import * import time import threading import envioFTP from pygeocoder import Geocoder import envioEmail tiempo = time.strftime filepath = "/home/pi/TemporalEnvio" PrefixMapa = "map" prefixWeb = "http://190.26.41.106:81/captura/" gpsd = None os.system('clear') class GpsPoller(threading.Thread): def __init__(self): threading.Thread.__init__(self) global gpsd gpsd = gps(mode=WATCH_ENABLE) self.current_value = None self.running = True def run(self): global gpsd while gpsp.running == True: gpsd.next() if __name__ == '__main__': gpsp = GpsPoller() try: gpsp.start() senal = 0 StateFile = open("/home/pi/estado.txt", 'r') estado = StateFile.read() while True: os.system('clear') print 'Latitud: ' , gpsd.fix.latitude print 'Longitud: ' , gpsd.fix.longitude print 'Estado: ', estado

86

if abs(gpsd.fix.latitude) > 0.0 and abs(gpsd.fix.longitude) > 0.0: print "GPS OK" latitud = "%s" %(gpsd.fix.latitude) longitud = "%s" %(gpsd.fix.longitude) direccion = Geocoder.reverse_geocode(gpsd.fix.latitude, gpsd.fix.longitude) if estado == 'S.O.S.': envioEmail.enviar (direccion, tiempo("%X, %d/%m/%Y")) horaArchivo = tiempo("%Y%m%d_%H%M%S") horaPublicar = tiempo("%A, %d/%m/%Y|%X") localNameMapa = filepath + "/" + PrefixMapa + horaArchivo + ".html" FTPnameMapa = PrefixMapa + horaArchivo + ".html" mapa = open("/home/pi/mapa.php", 'r') mapa_nuevo = mapa.read() mapa_nuevo = mapa_nuevo.replace("coordenadas", latitud + "," + longitud) mapa.close() nuevo = open(localNameMapa,'w') nuevo.write(mapa_nuevo) nuevo.close() datos = open("/home/pi/datos.txt", 'w') datos.write("|%s|%s|%s|%s|%s%s" %(latitud, longitud, direccion[0], horaPublicar, prefixWeb, FTPnameMapa)) datos.close() envioFTP.enviar (localNameMapa, FTPnameMapa) break else: print "Esperando GPS..." if estado == "Automatico": if senal == 60: horaPublicar = tiempo("%A, %d/%m/%Y|%X") datos = open("/home/pi/datos.txt", 'w') datos.write("|Sin senal|Sin senal|No hay dato|%s|No existe archivo" %(horaPublicar)) datos.close() break senal = senal + 1 sleep (1) gpsp.running = False gpsp.join() except (KeyboardInterrupt, SystemExit): print "\nDesconectando GPS..." print "Ok.\nSaliendo..."

87

F. Anexo: Script “envioFTP.py”

#!/usr/bin/env python # -*- coding: utf-8 import ftplib import os global s path = '/home/pi/TemporalEnvio/' ftp_servidor = '190.26.41.106' ftp_usuario = 'gps' ftp_clave = '4m3r1c42014*' ftp_raiz = '/captura' def enviar (archivoOrigen, archivoDestino): fichero_origen = archivoOrigen fichero_destino = archivoDestino try: s = ftplib.FTP(ftp_servidor, ftp_usuario, ftp_clave) try: f = open(fichero_origen, 'rb') s.cwd(ftp_raiz) s.storbinary('STOR ' + fichero_destino, f) f.close() s.quit() except: print "No se ha podido encontrar el fichero " + fichero_origen else: os.remove(fichero_origen) except: print "No se ha podido conectar al servidor " + ftp_servidor def listaArchivos (): lstFiles = [] lstDir = os.walk(path) #os.walk()Lista directorios y ficheros try: s = ftplib.FTP(ftp_servidor, ftp_usuario, ftp_clave) for root, dirs, files in lstDir: for fichero in files: (nombreFichero, extension) = os.path.splitext(fichero) if(extension == ".txt"): lstFiles.append(nombreFichero+extension) enviar (path + nombreFichero + extension, "CapturaArchivos/" + nombreFichero + extension) else: lstFiles.append(nombreFichero+extension) enviar (path + nombreFichero + extension, nombreFichero + extension) except: print "No se ha podido conectar al servidor " + ftp_servidor

88

G. Anexo: Script “envioEmail.py”

#!/usr/bin/python # -*- coding: utf-8 import smtplib import mimetypes import email import email.mime.application import sys msg = email.mime.Multipart.MIMEMultipart() msg['Subject'] = 'Activacion boton S.O.S.' msg['From'] = '[email protected]' msg['To'] = '[email protected]' def enviar (direccion, hora): cuerpo = ("Se ha detectado la activación del botón de pánico en su vehículo.\n\nDirección: %s\nHora: %s\n\nPodra visualizar la foto y la ubicación en el mapa accediendo a su cuenta a través del siguiente link. \n\nhttp://181.130.15.178:81/index.php" %(direccion[0],hora)) print "Enviando correo a " ,msg['To'] body = email.mime.Text.MIMEText(cuerpo) msg.attach(body) s = smtplib.SMTP('smtp.gmail.com:587') s.starttls() s.login('[email protected]','raspberrypi') s.sendmail('[email protected]',['[email protected]'], msg.as_string()) s.quit() print "Email enviado"

89

H. Anexo: Script “mapa.php”

<!DOCTYPE html> <html> <head> <meta name="viewport" content="initial-scale=1.0, user-scalable=no"> <meta charset="utf-8"> <title>Localización GPS Raspberry Pi</title> <style> html, body, #map-canvas { height: 100%; margin: 0px; padding: 0px; } </style> <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&signed_in=true"></script> <script> var geocoder; var map; var infowindow = new google.maps.InfoWindow(); var marker; function initialize() { geocoder = new google.maps.Geocoder(); var latlng = new google.maps.LatLng(coordenadas); var mapOptions = { zoom: 20, center: latlng, mapTypeId: 'hybrid' } map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions); codeLatLng(); } function codeLatLng() { var latlng = new google.maps.LatLng(coordenadas); geocoder.geocode({'latlng': latlng}, function(results, status) { if (status == google.maps.GeocoderStatus.OK) { if (results[0]) { map.setZoom(20); marker = new google.maps.Marker({ position: latlng, map: map }); infowindow.setContent(results[0].formatted_address); infowindow.open(map, marker); } else { window.alert('No results found'); } } else { window.alert('Geocoder failed due to: ' + status); } }); } google.maps.event.addDomListener(window, 'load', initialize); </script> </head> <body> <div id="map-canvas"></div> </body> </html>

90

8. Bibliografía

[1] Concejo de Bogotá D.C., “POR EL CUAL SE IMPLEMENTA UN SISTEMA TECNOLÓGICO DE SEGURIDAD EN VIDEO VIGILANCIA Y BOTONES DE PÁNICO EN EL SERVICIO DE TRANSPORTE PÚBLICO INDIVIDUAL Y COLECTIVO DE PASAJEROS EN EL DISTRITO CAPITAL.” Abril de-2014.

[2] “¿Cuáles son las características principales del HTML?,” Postgrado en Marketing Online, comunicación, Marketing Digital, postgrado online, uab, barcelona. .

[3] Rosselott, “Manual de PHP Básico - WebEstilo.” Jun-2003. [4] PHP Group, “PHP 5.4.45 Released.” 2015-2001. [5] Olga Cirauqui Elorz, “Instalar WAMP.” 02-Mar-2012. [6] “CSS: Hojas de estilo,” CCM. [Online]. Available: http://es.ccm.net/contents/156-css-hojas-de-

estilo. [Accessed: 06-Sep-2015]. [7] “Java Script,” prezi.com. [Online]. Available: https://prezi.com/_kd-lnphaoq6/java-script/.

[Accessed: 06-Sep-2015]. [8] “Google Maps API V3 introducción y primeros pasos,” Maestros del Web. . [9] Jorge Sánchez Asenjo, “Servidores de Aplicaciones Web.” 2012. [10] Masadelante.com, “¿Qué es un servidor FTP (FTP Servers)?” 2015-1999. [11] MD5online.org, “MD5 Online.” 2015-2012. [12] Jorge Sánchez, “Diseño Conceptual de Bases de Datos.” 2004. [13] “Tipos De Bases De Datos,” El blog de base de datos. [Online]. Available:

http://basededatos.over-blog.net/article-tipos-de-bases-de-datos-68319538.html. [Accessed: 06-Sep-2015].

[14] “¿Qué es un gestor y cuáles son sus tipos?” . [15] EcuRed, “Sistema Gestor de Base de Datos.” . [16] “Base de datos modelo entidad relacion,” 20:20:14 UTC. [17] Carl Rod Nave, “Satélites de Posicionamiento Global.” 2010. [18] “Qué es el GPS, funcionamiento general,” Penyagolosa.net - Senderismo en Castellón, 2015-2006.

[Online]. Available: http://www.penyagolosa.net/informacion-general/que-es-el-gps-funcionamiento-general.html.

[19] Querelle y Cia Ltda., “Coordenadas geográficas,” Profesor en Linea. [Online]. Available: http://www.profesorenlinea.cl/geografiagral/Coordenadasgeog.htm.

[20] “Coordenadas geográficas.” [Online]. Available: http://www.portaleducativo.net/quinto-basico/684/Coordenadas-geograficas. [Accessed: 06-Sep-2015].

[21] “Sistema de Coordenadas,” Coordenadas GPS, 2015. [Online]. Available: http://www.coordenadas-gps.com/sistema-de-coordenadas.

[22] ms.gonzalez, “La transmisión de datos en la telefonía móvil | Redes Telemáticas.” . [23] “Las redes de transmisión de datos usadas en los teléfonos celulares,” NorfiPC. [Online].

Available: http://norfipc.com/celulares/redes-transmision-datos-usadas-telefonos-celulares.php. [Accessed: 07-Sep-2015].

91

[24] “Raspberry Pi,” Raspberry Shop, 2015-2011. [Online]. Available: http://www.raspberryshop.es/index.php.

[25] winfernux, “Nuevo modelo de Raspberry Pi: La Model B+,” Life Bit Blog. . [26] “Raspberry Pi,” Wikipedia, the free encyclopedia. 09-Sep-2015. [27] “Raspberry Pi,” Wikipedia, la enciclopedia libre. 03-Aug-2015. [28] “Accesorios para Raspberry Pi,” Raspberry Shop, 2015-2011. [Online]. Available:

http://www.raspberryshop.es/accesorios-raspberry-pi.php. [29] “Modulo Gps Ublox NEO-6M,” arm32. [Online]. Available: http://www.arm32.cl/wireless/32-

modulo-gps-ublox-neo-6m.html. [Accessed: 10-Sep-2015]. [30] Botscience EIRL, “Módulo GPS para Arduino UBlox NEO 6M,” BOT Science, 2013. [Online].

Available: http://botscience.net/store/index.php?route=product/product&product_id=73. [31] “RASPBERRY PI | Historia de la Informática.” . [32] “Programando con Raspberry Pi B+ | botboss.” . [33] “Python PARA TODOS.” [Online]. Available:

http://www.academia.edu/8911458/Python_PARA_TODOS. [Accessed: 10-Sep-2015]. [34] “Tutorial 1 - Preparando la tarjeta SD para instalar el sistema operativo,” Frambuesa Pi Colombia

- Raspberry Pi en español. . [35] “Tutorial 2 - Descarga de NOOBS y copia en la tarjeta SD,” Frambuesa Pi Colombia - Raspberry Pi

en español. . [36] S. G. B. M. P. R. at C. U. L. de F. P. Estudi and o un P. de I. B. en C. U. L. E. y promotor de los

principios de R. P. para los que hablamos español, “Tutorial 3 - Instalación y configuración de inicial del Raspberry Pi (raspi-config),” Frambuesa Pi Colombia - Raspberry Pi en español. .

[37] “Tutorial 4 (Parte 1) - Conexión del Raspberry Pi a Internet usando cable de red,” Frambuesa Pi Colombia - Raspberry Pi en español. .

[38] “Tutorial 7 - Conexión remota al Raspberry Pi usando Xming,” Frambuesa Pi Colombia - Raspberry Pi en español. .

[39] “Raspberry Pi NoIR Infrared Camera Board v1.3 (5MP, 1080p),” Pi Supply. . [40] “Use the Raspberry Pi as a DIY Surveillance camera,” Make Tech Easier. [Online]. Available:

https://www.maketecheasier.com/raspberry-pi-as-surveillance-camera/. [Accessed: 10-Sep-2015].

[41] “Tracker GPS con Raspberry Pi y el módulo Ublox M6,” fpaez.com. .