Deusto
Facultad de Ingeniería Universidad Universid ad de Deusto
Ingeniaritza Fakultatea Deustuko Unibertsitatea
Grado en Ingeniería en Tecnologías de Telecomunicación Telekomunikazio Teknologien Ingeniaritzako Ingeniaritzak o Gradua Proyecto fin de grado Gradu amaierako proiektua VAV: diseño e implementación de un sistema que asiste mediante voz a personas con deficiencia visual ante semáforos, obstáculos, accesos y otros puntos de interés
Iñigo Esteban Oleaga
Bilbao, julio de 2015
Deusto
Facultad de Ingeniería Universidad Universid ad de Deusto
Ingeniaritza Fakultatea Deustuko Unibertsitatea
Grado en Ingeniería en Tecnologías de Telecomunicación Telekomunikazio Teknologien Ingeniaritzako Ingeniaritzak o Gradua Proyecto fin de grado Gradu amaierako proiektua VAV: diseño e implementación de un sistema que asiste mediante voz a personas con deficiencia visual ante semáforos, obstáculos, accesos y otros puntos de interés
Iñigo Esteban Oleaga
Bilbao, julio de 2015
PROYECTO FIN DE GRADO
Resumen El proyecto “Voice Aided Vision (VAV)”, en castellano, Visión Asistida por Voz, define el diseño y la implementación de un sistema emisor-receptor, que tiene por objeto transmitir información valiosa para usuarios con deficiencias visuales. El objetivo principal del sistema será informar al usuario, mediante voz, de la localización de un semáforo, su estado y el tiempo que resta para que éste cambie de color. Asimismo, este sistema permite al usuario identificar puntos de interés como pueden ser dependencias en el interior de un edificio, accesos a comercios y servicios públicos... o lugares que puedan entrañar peligro. Además, el dispositivo receptor dispone de un sensor de distancia ultrasónico con el fin de detectar obstáculos en las proximidades del usuario. Una Raspberry Pi (placa computacional) y un adaptador USB Bluetooth son los elementos hardware principales en los que se basa el proyecto. El adaptador USB Bluetooth proporciona la comunicación entre el emisor y el receptor mientras que la Raspberry Pi es la encargada de la gestión de la información y las conexiones. Ambos elementos son hardware de bajo coste, ya que el proyecto tiene vocación de ser accesible a todo tipo de usuarios, lo cual facilita también, que las entidades públicas y privadas puedan mostrar interés por la implantación del sistema, dando así un paso más hacia la construcción de una “Smartcity”. El proyecto VAV mejora la autonomía y la capacidad de identificación del entorno por el que se mueve el usuario con deficiencia visual, redundando en su calidad de vida.
Descriptores Visión Asistida por Voz Bluetooth Sensor de distancia Raspberry Pi Semáforo
iii
PROYECTO FIN DE GRADO
Índice de Contenido 1.
Introducción ............................................................................................................................ 1
2. Antecedentes ......................................................................................................................... 5 2.1
Hardware y Software personalizable ............................................................................ 5
2.2
Los Smartphones y sus aplicaciones ............................................................................ 5
2.3
Situación de las personas con problemas visuales ...................................................... 6
2.3.1 2.4
Aplicaciones para personas con problemas visuales ............................................... 6 Sistemas para ayudar a los invidentes a cruzar la calle implantados en ciudades
españolas. ................................................................................................................................. 7 2.4.1
Bilbao ......................................................................................................................... 7
2.4.2
Vigo ........................................................................................................................... 8
2.4.3
Elche .......................................................................................................................... 8
2.5
Otros sistemas para ayudar a los invidentes a cruzar la calle .................................... 10
2.5.1
Walking Green Android ........................................................................................... 10
2.5.2
Proyecto InMoBS de Siemens ................................................................................ 11
2.6
Estudio de las tecnologías .......................................................................................... 12
2.6.1
Estudio sobre la comunicación inalámbrica ............................................................ 12
2.6.2
Estudio sobre el Hardware ...................................................................................... 19
2.7
3.
Estudio de la semafórica para el pro yecto VAV .......................................................... 26
2.7.1
Componentes principales de un semáforo genérico ............................................... 27
2.7.2
Integración del dispositivo emisor del pro yecto VAV en un semáforo común ........ 31
Justificación .......................................................................................................................... 33 3.1
Debilidades .................................................................................................................. 33
3.2
Amenazas ................................................................................................................... 33
v
3.3
Fortalezas .................................................................................................................... 34
3.4
Oportunidades ............................................................................................................. 34
3.4.1
Aumento de personas con deficiencia visual en España ........................................ 34
3.4.2
Fácil acceso al diseño de aplicaciones móviles: ..................................................... 34
3.4.3
Inversión constante o intermitente por los ayuntamientos en la adaptación de las
ciudades a los discapacitados: ............................................................................................ 34 3.4.4
Creciente uso de dispositivos móviles por parte de toda la población, incluidos los
ciegos o de visibilidad reducida: .......................................................................................... 35 4.
5.
6.
Objetivo y alcance ................................................................................................................ 37 4.1
Objetivos...................................................................................................................... 37
4.2
Alcance ........................................................................................................................ 37
Metodología.......................................................................................................................... 39 5.1
Fase 0: Elaboración del Plan de Proyecto .................................................................. 39
5.2
Fase 1: Actividades previas ......................................................................................... 39
5.3
Fase 2: Com ienzo general de proyecto ...................................................................... 40
5.4
Fase 3: Desarrollo específico del proyecto ................................................................. 40
5.5
Fase 4: Experimentación y depuración del proyecto .................................................. 40
5.6
Fase 6: Elaboración del Plan de Negocio ................................................................... 41
Diseño y Desarrollo .............................................................................................................. 43 6.1 6.1.1
El emisor .................................................................................................................. 43
6.1.2
El receptor ............................................................................................................... 45
6.2
vi
Diseño del sistema VAV .............................................................................................. 43
Desarrollo .................................................................................................................... 46
6.2.1
Estudio en profundidad de las conexiones Bluetooth ............................................. 46
6.2.2
Configuración y funcionamiento del dispositivo emisor........................................... 49
6.2.3
Configuración y funcionamiento del dispositivo receptor ........................................ 80
PROYECTO FIN DE GRADO
7.
6.2.4
Configuración del arranque de los dispositivos emisores y receptores ................ 101
6.2.5
Resultados............................................................................................................. 104
6.2.6
Análisis de situaciones críticas ............................................................................. 108
6.2.7
Versiones del dispositivo re ceptor ........................................................................ 110
Planificación ....................................................................................................................... 113 7.1
Diagrama de Gantt del Proyecto ............................................................................... 113
8.
Presupuesto ....................................................................................................................... 115
9.
Conclusiones y líneas futuras ............................................................................................ 117 9.1
Conclusión ................................................................................................................. 117
9.2
Líneas futuras ............................................................................................................ 118
9.2.1
Redes “Mesh” ........................................................................................................ 118
9.2.2
Mejora del detector de obstáculos ........................................................................ 119
9.2.3
Sustitución de la Raspberry Pi por una placa computacional exclusiva ............... 120
9.2.4
Dotación de inteligencia independiente al emisor de los semáforos .................... 120
10.
Bibliografía .................................................................................................................... 121
10.1
Raspberry Pi .............................................................................................................. 121
10.2
Arduino ...................................................................................................................... 121
10.3
Bluetooth ................................................................................................................... 122
10.4
Wi-Fi .......................................................................................................................... 122
10.5
Python ....................................................................................................................... 123
10.6
Información adicional ................................................................................................ 123
10.7
Productos o aplicaciones .......................................................................................... 123
11.
Anexos........................................................................................................................... 125
11.1
Código de Emisor tipo “Semáforo”: “enviadortimer.py” ............................................. 125
11.2
Código de Emisor tipo “Ascensor”: “ascensor.py” .................................................... 127
vii
11.3
Código de Emisor tipo “Obstáculo”: obstaculo.py ..................................................... 128
11.4
Código de Emisor del tipo “Dependencia”: dependencia.py ..................................... 130
11.5
Código de Receptor en modo recepción de mensajes: clientecompleto.py ............. 131
11.6
Código de Receptor en modo detección de obstáculos: distancia.py....................... 134
11.7
Código de Pulsador del receptor: pulsador.py .......................................................... 136
viii
PROYECTO FIN DE GRADO
Índice de diagramas Diagrama 1: regulador semafórico genérico ............................................................................... 28 Diagrama 2: interruptores magnetotérm icos y diferencial monobloc .......................................... 29 Diagrama 3: elementos de Sistema VAV e interrelación de los mismos .................................... 43 Diagrama 4: conexión Bluetooth con el perfil GAVDP ................................................................ 46 Diagrama 5: modelo del perfil GAVDP ........................................................................................ 47 Diagrama 6: estados del dispositivo emisor................................................................................ 49 Diagrama 7: visión general del dispositivo emisor de tipo semáforo .......................................... 51 Diagrama 8: importación de librerías para el emisor del tipo "Semáforo” .................................. 52 Diagrama 9: declaración de variables en el emisor del tipo "Semáforo" .................................... 53 Diagrama 10: búsqueda de dispositivos receptores en el emisor de tipo "Semáforo" ............... 54 Diagrama 11: impresión en pantalla del resultado de la búsqueda ............................................ 54 Diagrama 12: apertura y lectura de ficheros en el emisor del tipo "Semáforo” .......................... 55 Diagrama 13: creación del socket y espera de recepción de conexión en el emisor del tipo "semáforo" ................................................................................................................................... 55 Diagrama 14: determinación de si el receptor está cerca o no en el emisor del tipo "Semáforo" ..................................................................................................................................................... 56 Diagrama 15: envío de mensajes dependiendo de la potencia de la conexión en el emisor del tipo Semáforo .............................................................................................................................. 57 Diagrama 16: análisis del tiempo restante para que el semáf oro cambie de estado ................. 58 Diagrama 17: espera de recepción de confirmación de reproducción en el dispositivo receptor ..................................................................................................................................................... 59 Diagrama 18: explicación general del emisor del tipo "Ascensor" .............................................. 60 Diagrama 19: importación de librerías necesarias en el emisor del tipo "Ascensor" .................. 61 Diagrama 20: declaración de variables en el emisor del tipo "Ascensor” ................................... 62 Diagrama 21: búsqueda de dispositivos receptores en el emisor del tipo "Ascensor” ............... 62
ix
Diagrama 22: impresión en pantalla del resultado de la búsqueda en el em isor del tipo "Ascensor" ..................................................................................................................................................... 63 Diagrama 23: creación de socket y establecimiento de la conexión en el emisor del tipo "Ascensor” ................................................................................................................................... 63 Diagrama 24: determinación de si el receptor está lo suficintemente cerca o no en el el emisor de tipo "Ascensor" ....................................................................................................................... 64 Diagrama 25: envío de mensaje Bluetooth dependiendo de la posición del receptor y espera de confirmación de reproducción ..................................................................................................... 65 Diagrama 26: explicación general del dispositivo emisor del tipo "Dependencia" ...................... 67 Diagrama 27: importación de librerías en el emisor del tipo "Dependecia" ................................ 68 Diagrama 28: declaración de variables en el emisor del tipo "Dependencia" ............................. 69 Diagrama 29: declaración de variables en el emisor del tipo "Dependencia" ............................. 70 Diagrama 30: impresión en pantalla del resultado de la búsqueda en el emisor del tipo "Dependecia" ............................................................................................................................... 70 Diagrama 31: creación de socket y petición de conexión en el emisor del tipo "Dependecia" ... 71 Diagrama 32: determinación de si el receptor está lo suficientemente cerca o no en el emisor del tipo "Dependecia" ........................................................................................................................ 72 Diagrama 33: envío de mensajes dependiendo de la distancia del receptor en el emisor del tipo "Dependecia" ............................................................................................................................... 73 Diagrama 34: explicación general del emisor del tipo "Obstáculo" ............................................. 75 Diagrama 35: importación de librerías en el emisor del tipo "Obstáculo" ................................... 76 Diagrama 36: declaración de variables en el emisor del tipo "Obstáculo" .................................. 77 Diagrama 37: búsqueda de dispositivo receptor en el emisor del tipo "Obstáculo" .................... 77 Diagrama 38: impresión en pantalla del resultado de la búsqueda en el emisor del tipo "Obstáculo" .................................................................................................................................. 78 Diagrama 39: creación de socket y petición de conexión en el emisor del tipo "Obstáculo" ...... 78 Diagrama 40: determinación de si el receptor está lo suficientemente cerca o no en el emisor del tipo "Obstáculo" ........................................................................................................................... 79
x
PROYECTO FIN DE GRADO
Diagrama 41: envío de mensajes según la distancia del receptor e n el emisor del tipo "Obstáculo" ..................................................................................................................................................... 80 Diagrama 42: estados del dispositivo receptor ........................................................................... 81 Diagrama 43: estados del receptor en modo de detección de obstáculos. ................................ 82 Diagrama 44: explicación general del dispositivo receptor ......................................................... 83 Diagrama 45: importación de librerías en el dispositivo receptor ............................................... 84 Diagrama 46: configuración de los pines GPIO en el dispositivo receptor ................................. 85 Diagrama 47: establecimiento del dispositivo receptor como descubrible ................................. 85 Diagrama 48: definición de la función semaforo () ..................................................................... 86 Diagrama 49: guardado y reproducción de los mensajes en la función semaforo() .................. 87 Diagrama 50: definición de la función ascensor() ....................................................................... 87 Diagrama 51: guardado y reproducción de los mensajes en la función ascensor() ................... 88 Diagrama 52: definición de la función obstaculo() ...................................................................... 89 Diagrama 53: guardado y reproducción de los mensajes en la función obstaculo() .................. 90 Diagrama 54: definición de la función dependecia() ................................................................... 91 Diagrama 55: guardado y reproducción de los mensajes en la función dependecia() ............... 92 Diagrama 56: definición de identificadores en dispositivo receptor ............................................ 93 Diagrama 57: aceptación de conexión del emisor y espera de recepción del identificador de tipo de dispositivo ............................................................................................................................... 94 Diagrama 58: explicación genera l de la función de reseteo ....................................................... 95 Diagrama 59: explicación general de la función de detección de obstáculos del dispositivo receptor ....................................................................................................................................... 96 Diagrama 60: importación de librerías en la función de detección de obstáculos en el dispositivo receptor ....................................................................................................................................... 97 Diagrama 61: establecimiento de la función de los pines GPIO del dispositivo receptor ........... 98 Diagrama 62: explicación de cómo se determina la distancia utilizando un sensor de distancia ultrasónico ................................................................................................................................... 99
xi
Diagrama 63: envío de un mensaje u otro dependiendo la distancia del objeto detectado ..... 101
xii
PROYECTO FIN DE GRADO
Índice de Tablas Tabla 1: aspectos destacables y carencias de las ayudas para cruzar la calle en la ciudad de Bilbao ............................................................................................................................................ 7 Tabla 2: aspectos destacables y carencias de las ayudas para cruzar la calle en la ciudad de Vigo ............................................................................................................................................... 8 Tabla 3: aspectos destacables y carencias de las ayudas para cruzar la calle en la ciudad de Elche.............................................................................................................................................. 9 Tabla 4: aspectos destacables y carencias de Walking Green Android ..................................... 11 Tabla 5: aspectos destacables y carencias del proyecto InMoBS .............................................. 12 Tabla 6: com parativa entre Bluetooth y W i-Fi ............................................................................. 18 Tabla 7: diagrama de Gantt del Proyecto ................................................................................. 114 Tabla 8: presupuesto de materiales del Proyecto ..................................................................... 116 Tabla 9: gastos de personal del Proyecto ................................................................................. 116
xiii
xiv
PROYECTO FIN DE GRADO
Índice de Ilustraciones Ilustración 1: Esquema de red Wi-Fi ........................................................................................... 15 Ilustración 2: Raspberry Pi 2 Model B ......................................................................................... 21 Ilustración 3: esquema de la Raspberry Pi 2 Model B ................................................................ 22 Ilustración 4: Arduino UNO ......................................................................................................... 24 Ilustración 5: esquema de Arduino UNO..................................................................................... 25 Ilustración 6: armario donde se encuentra la inteligencia de los semáforos .............................. 27 Ilustración 7: dispositivo em isor del sitema VAV conectado a un simulador de semáforo ......... 44 Ilustración 8: dispositivo emisor VAV .......................................................................................... 44 Ilustración 9: dispositivo receptor del Sistema VAV .................................................................... 45 Ilustración 10: detalle del dispositivo receptor del Sistema VAV (botón de reseteo) ................ 45 Ilustración 11: prueba de campo. Utilizando el simulador de semáforo en una escenario real 107 Ilustración 12: prueba de campo junto a un semáforo del Ayuntamiento de Bilbao ................. 107 Ilustración 13: distancias entre los semáforo de la intersección de Gran Vía con Almeda Urquijo y Alameda Mazarredo ............................................................................................................... 108 Ilustración 14: Redes "mesh" aplicadas a una Smartcity .......................................................... 119
xv
PROYECTO FIN DE GRADO
1. INTRODUCCIÓN En la presente memoria se detallan los procedimientos y recursos empleados en el diseño de un sistema de asistencia a personas con deficiencias visuales. Es el trabajo que cierra un ciclo de formación universitaria y que pretende demostrar que la formación recibida es suficientemente madura como para tener valor profesional y social.
Al sistema creado se le ha dado la denominación “Voice Aided Vision (VAV)”, que en castellano significa Visión Asistida por Voz, y que da idea ya desde el comienzo de este documento sobre la utilidad del mismo.
Se ha creado un logotipo que expresa de una manera visual la finalidad del proyecto. Por un lado se expresa mediante unas ondas que el proyecto se basa en telecomunicación. Por otro lado, los colores rojo y verde representan el origen de este proyecto, que tenía como referente los semáforos aunque en el desarrollo se ha ampliado a otras funcionalidades.
A lo largo de este documento se detallarán profusamente los diferentes pasos dados, los muchos esfuerzos, pruebas exitosas algunas y otras no tanto, que se han realizado. Se aportarán evidencias documentales, gráficos y
diagramas
que explicarán las
diferentes funcionalidades del sistema así como algunas líneas de desarrollo posterior.
Con finalidad fundamentalmente demostrativa se han elaborado recreaciones y prototipos que facilitarán la comprensión del funcionamiento del proyecto. Los materiales que se han utilizado para ello han sido elegidos atendiendo no tanto a la idoneidad en un producto final sino a su utilización en el trabajo presente. Por ello una implementación definitiva del producto conllevaría su adecuación.
1
INTRODUCCIÓN
En el proyecto se define el diseño y la implementación de un sistema emisor-receptor, que tiene por objeto transmitir información valiosa para usuarios con deficiencias visuales. El objetivo principal del sistema será informar al usuario, mediante voz, de la localización del semáforo, su estado y el tiempo que resta para el cambio de color del mismo. Asimismo, este sistema permite al usuario identificar puntos de interés como pueden ser dependencias en el interior de un edificio, accesos a comercios, a servicios públicos... o lugares que puedan entrañar peligro. Cabe destacar que existe la posibilidad de dotar al dispositivo receptor de un sensor de distancia ultrasónico con el fin de detectar obstáculos en las proximidades, aumentando así las prestaciones de utilización práctica del mismo.
Tanto el dispositivo emisor como el receptor es una “Raspberry Pi”. Este dispositivo es un ordenador de bajo coste que tiene muchas posibilidades de desarrollo. Esta placa tiene el tamaño de una tarjeta de crédito, y esto facilita su integración en diferentes elementos sin causar gran impacto.
El dispositivo que permite enlazar emisor con receptor es un adaptador USB Bluetooth. Este dispositivo es adecuado para el proyecto VAV tanto por su sencilla utilización y conexión como por su precio reducido.
Se utiliza hardware de precio asequible debido a que el proyecto tiene vocación de ser accesible a todo tipo de usuarios, lo cual facilita también, que las entidades públicas y privadas puedan mostrar interés por la implantación del sistema, dando así un paso más hacia la construcción de una “Smartcity”.
A continuación, se desarrolla a grandes rasgos el funcionamiento del sistema:
2
El emisor busca un receptor constantemente hasta encontrarlo.
El receptor está a la escucha.
Cuando el receptor es localizado por el emisor, se establece una conexión.
PROYECTO FIN DE GRADO
El emisor analiza la potencia de la señal Bluetooth para determinar si el receptor está a la distancia adecuada.
El emisor envía su identificador seguido de mensajes útiles para el usuario
El receptor captura la información recibida, la identifica, la guarda y la reproduce utilizando un sintetizador de voz.
El receptor envía una confirmación de la reproducción de los mensajes.
El emisor recibe la confirmación y repite el proceso desde el punto número 3 hasta que el receptor salga del campo de acción del emisor.
El sistema se reinicia.
En conclusión, el sistema VAV mejora la autonomía y la capacidad de identificación del entorno por el que se mueve el usuario con deficiencia visual, redundando en su calidad de vida.
3
INTRODUCCIÓN
4
PROYECTO FIN DE GRADO
2. ANTECEDENTES El crecimiento desmesurado de las tecnologías ha afectado a nuestra vida de una forma considerable, en gran medida por la evolución de las tecnologías móviles. En torno al año 2000, las PDA 1 y los primeros Smartphones 2 se hicieron notar y desde aquel entonces la usabilidad y utilidad de estas tecnologías ha aumentado exponencialmente.
2.1 HARDWARE Y SOFTWARE PERSONALIZABLE Tan grande es el aumento de las tecnologías de los dispositivos inteligentes que su uso se ha convertido en cotidiano. Cada vez son más los usuarios que no tienen suficiente con lo ya creado que dedican su tiempo en crear nuevos inventos y aplicaciones. Es por este motivo que últimamente se hayan puesto muy de moda las tarjetas Arduino 3 y Raspberry Pi, que son ordenadores de bajo costo y permiten desarrollar infinidad de aplicaciones y sistemas si disponemos de conocimientos básicos de programación.
2.2 LOS SMARTPHONES Y SUS APLICACIONES Los datos revelan que el Smartphone se ha consolidado definitivamente en nuestras vidas de tal modo que ya se puede hablar del mercado español como un mercado maduro. La penetración del Smartphone alcanza el 80% del total en 2013, frente al 59% de 2012 y del 39% del año anterior. 4
Además, el uso del Smartphone alcanza a todos los tramos de edad, si bien su uso está más extendido entre las capas más jóvenes de la población.
1 Del
inglés: Personal Digital Assistant. Ordenador de bolsillo. inglés: teléfonos inteligentes que tienen múltiples funciones a parte de poder realizar y recibir llamadas. 3 Ordenador de bajo costo 4 Estudio. Datos población Española. 2 Del
5
ANTECEDENTES
Adicionalmente, una de las tendencias más relevantes en el uso de los dispositivos móviles es el espectacular incremento del uso de las aplicaciones. En 2012, con la penetración del Smartphone en un 59%, el 41% de los usuarios se conectaba a Internet a través de aplicaciones. En el año 2013, con una penetración en el mercado del 80%, esa cifra alcanzaba ya al 71% de los usuarios.
2.3 SITUACIÓN DE LAS PERSONAS CON PROBLEMAS VISUALES Cada día salen nuevas aplicaciones, dispositivos o sistemas que nos facilitan la vida y se integran con objetos inteligentes. El caso es que, si bien todos estos avances están al alcance de la mayoría, no es así para algunos. Este es el caso de los ciegos o personas con deficiencia visual.
Según los datos de los afiliados a la ONCE (Organización Nacional de Ciegos Españoles) cada vez hay menos personas con ceguera, es decir, personas que no ven nada en absoluto o que solo perciben luz. Sin embargo, cada vez hay más afiliados con deficiencia visual, que son aquellos que mantienen un resto visual cuantificable.
Los ciegos en España son una minoría ya que representan el 0,26% de nuestra sociedad. Es decir, 1 de cada 400 personas tiene problemas de visión y por lo tanto, tienen problemas para desenvolverse en la vida cotidiana.
2.3.1 Aplicaciones para personas con problemas visuales En la actualidad, aún con un abanico bastante más limitado que el resto, los ciegos y personas con deficiencia visual también disponen de aplicaciones útiles para su vida cotidiana. Un ejemplo de ellas podría ser KNFB Reader, que lee textos escritos en voz alta, Ariadne GPS, que ubica al usuario en un mapa hablado o LookTel Money Reader, que es capaz de identificar billetes de todas las divisas.
6
PROYECTO FIN DE GRADO
Como hemos citado en la introducción el presente proyecto va a consistir en desarrollar una aplicación para este colectivo.
2.4 SISTEMAS PARA AYUDAR A LOS INVIDENTES A CRUZAR LA CALLE IMPLANTADOS EN CIUDADES ESPAÑOLAS. 2.4.1 Bilbao En el caso de Bilbao, todos los pasos de cebra tienen un embaldosado con sobre relieves, para que al ser pisados, los ciegos sepan que se encuentran ante un paso de peatones. No obstante, este tipo de baldosas puede resultar molesto cuando la suela del zapato que se lleva es fina y lo que es mucho más importante, son potencialmente peligrosas cuando están mojadas, ya que debido a los sobre relieves la superficie de agarre es mucho menor. A todo lo anterior habría que añadir que este sistema de embaldosado es caro tanto en su implantación como en su mantenimiento.
Además algunos de los semáforos disponen de un sistema de sonido que advierte mediante una señal sonora que el semáforo se encuentra en verde. Este sistema es activado por el propio invidente. Sin embargo, el sonido que emite el semáforo, pese a resultar de gran ayuda para la persona con problemas de visión, es molesto para el resto de viandantes y vecinos de la zona.
Destacable Cumple la función de ayudar a los
Carencias Señal acústica molesta.
invidentes a cruzar. Baldosas peligrosas y molestas. Es un sistema ya implantado en la mayoría de ciudades españolas. Tabla 1: aspectos destacables y carencias de las ayudas para cruzar la calle en la ciudad de Bilbao
7
ANTECEDENTES
2.4.2 Vigo En enero del 2014, en Vigo, Tráfico adapto los semáforos con un sistema Bluetooth con el objetivo de reducir las quejas de los vecinos por el ruido que emitido por los semáforos.
Una vez adaptados los semáforos, un móvil con tecnología Bluetooth es lo único necesario para que el mecanismo funcione. La ONCE tiene además unos dispositivos específicos para que sus afiliados puedan portar si carecían de móvil.
Para la coordinación con los semáforos solo es preciso realizar un pequeño cambio en la configuración del terminal. El funcionamiento es muy sencillo. Cada vez que el semáforo detecte su presencia, la señal acústica funcionará como de costumbre. Una vez que el peatón atraviese el paso, el pitido se apagará de inmediato sin ni siquiera esperar a que la luz vuelva a cambiar de verde a rojo.
Destacable
Carencias
Para la coordinación con los semáforos
La señal acústica continúa siendo el
solo es preciso realizar un pequeño
mismo y son todos los vecinos los que
cambio en la configuración del terminal.
oyen el sonido.
Bluetooth
sin
El ruido permite conocer el estado del
necesidad de que el invidente haga nada.
semáforo pero no el tiempo de cambio de
detecta
la
presencia
verde a rojo. Substituible por el aparato de la ONCE. Tabla 2: aspectos destacables y carencias de las ayudas para cruzar la calle en la ciudad de Vigo
2.4.3 Elche El Ayuntamiento de Elche, en colaboración con la Fundación ONCE, ha implantado dispositivos para que personas con discapacidad visual activen la acústica de los
8
PROYECTO FIN DE GRADO
semáforos, a través de un mando a distancia o por el Bluetooth del móvil. Los dispositivos funcionarán sólo cuando el usuario lo requiera para evitar así ruidos innecesarios.
El proyecto, denominado ‘Pasblue’, ha sido desarrollado por una empresa de la Fundación ONCE a partir de un procedimiento de aviso acústico para semáforos peatonales que se integra en una óptica de tecnología LED para que los peatones puedan cruzar la calzada con seguridad.
La información acústica emitida a través del sistema se basa en tonos de frecuencia y duración diferenciadas que permiten al usuario aproximarse y situarse en la zona de inicio del cruce. El método se activa bien mediante el mando a distancia proporcionado al usuario por la ONCE o por el Bluetooth del móvil cuando la persona lo precise.
En la actualidad se ha habilitado dicho dispositivo en siete cruces semafóricos de Elche, según las prioridades de los usuarios con problemas de visión.
Destacable
Carencias
Para la coordinación con los semáforos
La señal acústica continúa siendo el
solo es preciso realizar un pequeño
mismo y son todos los vecinos los que
cambio en la configuración del terminal.
oyen el sonido.
Bluetooth
sin
El ruido permite conocer el estado del
necesidad de que el invidente haga nada.
semáforo pero no el tiempo de cambio de
detecta
la
presencia
verde a rojo. Substituible por el aparato de la ONCE. Tabla 3: aspectos destacables y carencias de las ayudas para cruzar la calle en la ciudad de Elche
9
ANTECEDENTES
2.5 OTROS SISTEMAS PARA AYUDAR A LOS INVIDENTES A CRUZAR LA CALLE 2.5.1 Walking Green Android La Fundación I+D del Software Libre (Fidesol) ha firmado un convenio con Fundación La Caixa para el desarrollo de Walking Green Android, una aplicación para ayuda a invidentes, pensada para convertirse en el 'semáforo móvil'
Esta aplicación, diseñada para dispositivos móviles con el sistema operativo Android, permitirá a las personas invidentes o con visión reducida detectar si un semáforo está en verde o en rojo. Para ello la cámara del móvil realizará un barrido orientando hacia el lugar aproximado donde debe encontrarse el semáforo. Para ello analizará una serie de parámetros, como patrones, colores o luminosidad. En caso de que los parámetros coincidan con los necesarios para saber si el semáforo está en verde o en rojo, se indicará con una locución o vibración, pero si no se dan esos parámetros, continuará con el reconocimiento de la escena.
Los investigadores han utilizado algoritmos establecidos previamente en una biblioteca de Software Libre de visión artificial (OpenCV) con los cuales van a trabajar para la mejora del reconocimiento de los colores en tiempo real, pues, por ejemplo, el verde puede pasar desapercibido para el dispositivo si el semáforo está en sombra o en una zona excesivamente iluminada. Otras partes que mejorar son la adaptación de la aplicación según la memoria y la capacidad del móvil.
10
PROYECTO FIN DE GRADO
Destacable La
locución
o
vibración
Carencias se
emite
directamente al usuario de la aplicación.
Posibles fallos en la detección de los colores ya que funciona a través de la cámara del móvil.
Al usar la cámara y ser esta la que hace el barrido,
no
requiere
una
instalación
adicional en los semáforos.
Necesaria la cámara que implica un consumo alto de batería.
La aplicación depende de la memoria y la capacidad del móvil. Tabla 4: aspectos destacables y carencias de Walking Green Android
Extraído de “Tendencias21”, http://www.tendencias21.net/Una-app-ayuda-a-los-ciegos-
a-moverse-por-la-ciudad_a39494.html
2.5.2 Proyecto InMoBS de Siemens La multinacional alemana Siemens está desarrollando un sistema que ayuda a las personas ciegas y deficientes visuales a andar de forma segura a través de las ciudades.
En colaboración con la Universidad Técnica de Braunschweig y varios socios, Siemens está trabajando en un sistema de asistencia integral a las personas con discapacidad visual, en el marco de un proyecto de investigación titulado InMoBS (Inner-city mobility support for the blind and visually impaired).
La solución se basa en los datos transmitidos entre la infraestructura de tráfico y los dispositivos móviles de las personas ciegas. Las situaciones críticas se producen en las intersecciones, por ejemplo. Aunque las señales de los semáforos por lo general emiten un pitido para informar a las personas con discapacidad visual, éstas no saben cuánto tiempo va a estar la luz en verde o por dónde exactamente es seguro caminar. Para
11
ANTECEDENTES
proporcionar dicha información, Siemens integra en los Smartphones su tecnología car2x, que se utiliza para transmitir datos entre los coches y las infraestructuras de tráfico. De esta manera proporciona a sus usuarios un planificador de rutas en línea que pueden utilizar en casa para encontrar la ruta con menos barreras a sus destinos. La aplicación de Smartphone emite señales de vibración o guía verbalmente a los usuarios a lo largo de esta ruta.
Destacable
Carencias
Es una aplicación completísima, con
Necesario un sistema específico tanto en
muchísima
los coches, como los semáforos y por lo
información
tanto
conductores como viandantes.
para
tanto muy caro.
Sistema
poco
maduro
debido
a
la
complejidad y el tiempo necesario para llevarlo a cabo.
Proyecto a largo plazo. Tabla 5: aspectos destacables y carencias del p royecto InMoBS
2.6 ESTUDIO DE LAS TECNOLOGÍAS 2.6.1 Estudio sobre la comunicación inalámbrica Este proyecto trata de dar solución a un problema de accesibilidad y movilidad de las personas con deficiencia visual, por eso, la comunicación entre dispositivos tiene que ser “wireless”5 para tener libertad de movimiento. Para ello se estudiarán los dos tipos de tecnologías de conexión “wireless” por excelencia: la tecnología Bluetooth y la tecnología Wi-Fi.
5 Inalámbrico
12
PROYECTO FIN DE GRADO
2.6.1.1 Tecnología Bluetooth® 2.6.1.1.1
¿Qué es la tecnología Bluetooth®?
La tecnología Bluetooth® es un estándar inalámbrico que permite conectar dispositivos y servicios de forma segura. Fue creado por Ericsson en 1994, y la idea principal de esta tecnología era ser una alternativa a los cables de datos RS-232. Sin embargo, hoy en día, esta tecnología se utiliza para muchos más tipos de conexiones inalámbricas.
El núcleo del sistema Bluetooth consta de un transceptor de RF, de banda base, y la pila de protocolo. El sistema ofrece servicios que permiten la conexión de varios dispositivos y el intercambio de una gran variedad de clases de datos.
2.6.1.1.2
Alcance de la tecnología Bluetooth
Los dispositivos Bluetooth funcionan en la banda de 2.4 GHz que es una banda libre que no requiere de licencia para usarla. Se aplica un transceptor salto de frecuencias para combatir la interferencia y la decoloración de la señal.
Se definen dos modos de modulación. El modo obligatorio, denominado Tasa Básica (Basic Rate), utiliza una modulación FM binaria para minimizar la complejidad transceptor. El modo opcional, que se llama Velocidad de Datos Mejora (Enchanced Data Rate) utiliza una modulación PSK y tiene dos variantes: π / 4-QPSK y 8PSK. La velocidad de símbolo para todos los esquemas de modulación es 1 Mbps. La velocidad de datos en bruto es de 1 Mbps para la velocidad básica, 2 Mbps para la velocidad de datos mejorada utilizando π / 4-DQPSK y 3 Mbps para la velocidad de datos mejorada utilizando 8DPSK.
En la transmisión, que es full-duplex, se usa el esquema de transmisión por división del tiempo (TDD).
13
ANTECEDENTES
2.6.1.1.3
Capa de enlace Bluetooth
El Protocolo de Gestión de Enlaces (LMP, Link Manager Protocol) controla y negocia todos los aspectos de la operación de la conexión Bluetooth® entre dos dispositivos. Esto incluye la puesta a punto y el control de las comunicaciones lógicas y enlaces lógicos, y también de los enlaces físicos. El Protocolo de Gestión de Enlaces se utiliza para la comunicación entre los gestores de enlace (LM, Link Managers) en los dos dispositivos conectados por la comunicación lógica ACL.
Los dispositivos que están activos dentro de una piconet (red de comunicación que crean dos o más equipos Bluetooth, puede estar compuesta hasta un máximo de siete unidades ) tienen una comunicación lógica asíncrona predeterminada para el transporte de la señalización del protocolo LMP. Es lo que se conoce como comunicación lógica ACL. Esta comunicación es la que se establece cuando un dispositivo se une a una piconet. Se pueden crear comunicaciones lógicas adicionales si resulta necesario para transportar el flujo de datos síncronos.
2.6.1.2 Tecnología Wi-Fi 2.6.1.2.1
¿Qué es la tecnología Wi-Fi?
Wi-Fi es el nombre de la popular tecnología de red inalámbrica que utiliza ondas de radio para proporcionar conexiones inalámbricas de Internet y de la red de alta velocidad. Un error común es que el término Wi-Fi es la abreviatura de "Wireless Fidelity", sin embargo este no es así. Wi-Fi es simplemente una frase de marca registrada que significa IEEE 802.11x.
2.6.1.2.2
¿Cómo funciona la tecnología Wi-Fi?
Wi-Fi funciona sin conexión cableada física entre el emisor y el receptor mediante el uso de tecnología de radio frecuencia (RF), una frecuencia dentro del espectro
14
PROYECTO FIN DE GRADO
electromagnético asociado con la propagación de ondas de radio. Cuando una corriente de RF se suministra a una antena, se crea un campo electromagnético a continuación que es capaz de propagarse a través del espacio.
La pieza clave de cualquier red inalámbrica es un punto de acceso (AP, Access Point). El trabajo principal de un punto de acceso es transmitir una señal inalámbrica que los ordenadores pueden detectar y a la que se pueden conectar. Para conectarse a un punto de acceso y unirse a una red inalámbrica, las computadoras y los dispositivos deben estar equipados con adaptadores de red inalámbrica.
Ilustración 1: Esquema de red Wi-Fi
2.6.1.2.3
Servicios de la tecnología Wi-Fi
2.6.1.2.3.1
Autenticación
Antes de que un nodo pueda unirse a la red, debe establecer su identidad, para ello debe superar una serie de tests que permitan saber que quien se quiere conectar es quien dice ser. 802.11ofrece 2 tipos de servicios de autenticación:
Autenticación Abierta (Open System Authentication), significa que cualquiera que solicite autenticarse será aceptado.
Autenticación de llave compartida (Shared Key Authentication), significa que para poder autenticarse en la red, el nodo debe conocer la frase de paso.
15
ANTECEDENTES
2.6.1.2.3.2
Deautenticación
Ocurre cuando el AP o el nodo inalámbrico desea terminar la autenticación. Implica una desasociación.
2.6.1.2.3.3
Privacidad
Está satisfecha en 802.11 con un sistema de encriptación llamado WEP (Wired Equivalent Privacy). Cabe destacar que es opcional y que existen otros sistemas de encriptación.
2.6.1.2.3.4 Transporte de unidad de Servicios de capa MAC (MSDU: MAC Service Data Unit Delivery) Se ocupa de que la información necesaria para operación de la subcapa MAC sea transportada entre los distintos AP.
2.6.1.2.4
Capa de enlace Wi-Fi
La capa de enlace de Wi-Fi se divide en dos subcapas: La subcapa LLC (Logical Link Control) y la subcapa MAC (Media Access Control).
2.6.1.2.4.1
Sucapa LLC
Esta capa es exactamente igual a la capa LLC utilizada por las redes cableadas del tipo 802.3 con un sistema de direccionamiento de 48 bits idéntico (MAC Address). Esto permite simplificar al extremo los puentes (bridges) entre los dos tipos de red.
2.6.1.2.4.2
Subcapa MAC
El método de acceso múltiple en IEEE 802.11 es la llamada Función de Distribución Coordinada (Distributed Cordination Function, DCF) que utiliza el conocido método de Acceso Múltiple por Censado de Portadora con Prevención de Colisiones, (Carrier Sense Multiple Access/ Collision Avoidance, CSMA/CA). Este método requiere que cada nodo inalámbrico escuche el medio compartido para saber si otros nodos se encuentran
16
PROYECTO FIN DE GRADO
transmitiendo. Si el canal está desocupado, el nodo puede transmitir, caso contrario, el nodo escucha hasta que la transmisión finalice, y entra en un período de espera aleatorio para luego volver a ejecutar el procedimiento. Esto previene que algunas estaciones monopolicen el canal al comenzar a transmitir inmediatamente después que termine la otra. La recepción de los paquetes en el DCF requiere de confirmaciones por parte del destino. Hay un corto período de tiempo entre el envío del ACK por parte del destinatario llamado Short Inter Frame Space, SIFS. En 802.11, los paquetes de confirmación ACK tiene prioridad frente a cualquier otro tráfico, logrando una de las características sobresalientes que es la gran velocidad de las confirmaciones. Cualquier transmisión distinta a un ACK deberá esperar por lo menos un DIFS (DCF Inter Frame Space) antes de transmitir algún dato. Si el transmisor detecta un medio ocupado nuevamente, vuelve al tiempo de BackOff pero reduciendo el tiempo de espera. Así se repetirá hasta que el tiempo de espera llegue a CERO donde se habilita al nodo a transmitir, luego de que termine la próxima transmisión.
2.6.1.3 Comparativa entre Bluetooth y Wi-Fi Ambas tecnologías tienen grandes posibilidades y pueden servir prácticamente para lo que queramos. Sin embargo, atendiendo a las necesidades de este proyecto, la tecnología Bluetooth es la más adecuada. Apoyándose en la tabla de abajo, se desarrollan los motivos por los que Bluetooth es la tecnología elegida.
Características
Bluetooth
Wi-Fi
Frecuencia
2.4 GHz
2.4 / 3.6 / 5 GHz
Ancho de Banda
24 Mbps
1 Gbps
Seguridad
Baja
Moderada
17
ANTECEDENTES
Rango
30 metros
300 metros
Consumo
Reducido
Elevado
Tabla 6: comparativa entre Bluetooth y Wi-Fi
Si bien es cierto que la frecuencia de transmisión es importante, ambas se encuentran en el rango de 2.4 GHz, aunque Wi-Fi tenga la posibilidad de usar otros rangos también. Por lo tanto, a nivel de frecuencia no hay grandes diferencias entre las tecnologías.
Sin embargo, el ancho de banda del Bluetooth es bastante más reducido que el de WiFi. A pesar de que el estándar IEEE 807.11 tenga cuatro veces más ancho de banda que el Bluetooth, como la información que se transmitirá será poco pesada, es suficiente con 24 Mbps.
A lo que a seguridad se refiere, esta vez también, es la tecnología Wi-Fi la que más avanzada está. Los mensajes que se mandarán contendrán la información del color del semáforo y de la calle en la que se encuentra el usuario, por lo que no se necesitará seguridad en el canal de transmisión. Además, como se quiere que la conexión se haga lo más instantánea posible, el hecho de que haya menos seguridad agilizará bastante el proceso de conexión.
La tecnología Bluetooth requiere que los dispositivos que se van a comunicar estén cerca. Sin embargo Wi-Fi tiene un rango mucho mayor. En el caso de este proyecto, nos interesa que el usuario esté muy cerca del semáforo para que la conexión se realice cuando se esté al lado del semáforo. La tecnología Wi-Fi podría acarrear confusiones ya que podría sincronizar el dispositivo del usuario con un semáforo de una calle en la que el usuario no se encuentra.
Por último, el consumo de las tecnologías es algo muy a tener en cuenta. El proyecto plantea la utilización de dispositivos móviles que no pueden ser conectados a la
18
PROYECTO FIN DE GRADO
corriente eléctrica cuando se usan. Por este motivo es conveniente utilizar una tecnología que consuma poco, como es el caso del Bluetooth.
2.6.1.4 Conclusión La tecnología Wi-Fi tiene mejores características y por lo tanto más posibilidades en materia de Telecomunicaciones de propósito general. Sin embargo, el proyecto no requiere de grandes recursos ni prestaciones, aún más, la limitación de recursos puede considerarse una mejora en ciertos aspectos, tales como el alcance y la autonomía. Como en muchos otros órdenes la disponibilidad de recursos no es una ventaja en sí misma, sino la optimización del uso de dichos recursos. Por ello se entiende como preferente el uso de la tecnología Bluetooth que tiene los recursos idóneos para este proyecto.
2.6.2 Estudio sobre el Hardware Para desarrollar este proyecto es necesario el uso de unos aparatos que puedan ser utilizados como emisores y receptores y que además puedan programarse y personalizarse. Este es el caso de los ordenadores de bajo costo como Arduino y Raspberry Pi. No obstante, el Smartphone podría resultar ser una alternativa interesante como dispositivo receptor.
2.6.2.1 Smartphone Una de las opciones que ha sido objeto de estudio fue la utilización de un Smartphone como dispositivo receptor. En primera instancia, este tipo de dispositivo parecía ser el candidato perfecto para cumplir las funciones de receptor ya que está implantado en gran parte de la sociedad moderna. Además, los teléfonos móviles inteligentes llevan incorporado un módulo Bluetooth que facilitaría la comunicación con el emisor. Los Smartphones destacan por ser dispositivos inalámbricos que disponen de su propia fuente de alimentación autónoma.
19
ANTECEDENTES
No obstante, se ha desechado esta opción debido a que la versatilidad de las funciones de un Smartphone van en detrimento de las horas de autonomía de la batería, lo cual es un serio inconveniente si no se puede recargar el teléfono. Además, el sistema del proyecto VAV utiliza una batería de 10.000 mAh frente a los 2600 mAh que suelen disponer los Smartphones de gama media. Asimismo, el dispositivo receptor VAV hace un uso exclusivo de la batería para realizar las funcionalidades para las que ha sido programado, mientras que un Smartphone está dedicado a múltiples funcionalidades, y por lo tanto, un conlleva gasto energético mayor. A todo lo anterior, cabría añadir que la mayoría de usuarios de Smartphone utilizan el mismo sin apagarlo en ningún momento, haciendo un consumo constante de batería. Por el contrario, el usuario del sistema VAV enciende el dispositivo única y exclusivamente durante los tiempos que considera precisos.
Abundando en la idea de la preferencia de otros dispositivos distintos al Smartphone, el sistema VAV tiene la posibilidad de añadirle opcionalmente un sensor de distancia ultrasónico que le confiere la capacidad de detectar obstáculos, posibilidad no presente en un teléfono inteligente.
Un aspecto a analizar a la hora de elegir el tipo de dispositivos es el lenguaje de programación que utilizan, siendo la opción más deseable que el dispositivo emisor y receptor coincidan. Debido a que no se contempla utilizar un dispositivo Android como emisor, utilizar un dispositivo Android como receptor dificultaría las tareas de programación y detección de errores, lo cual sitúa al Smartphone en desventaja con otras opciones.
20
PROYECTO FIN DE GRADO
2.6.2.2 Raspberry Pi 2.6.2.2.1
¿Qué es la Raspberry Pi?
La Raspberry Pi es una placa de desarrollo que, desde su aparición en 2012, no ha dejado de ganar usuarios y posibilidades.
La Raspberry Pi Foundation es una organización sin ánimo de lucro que dio sus primeros pasos como fundación en 2008, pero que en realidad llevaba gestándose desde mucho tiempo atrás. En 2011 desarrolló la Raspberry Pi como ordenador de bajo coste para facilitar la enseñanza de la informática en los colegios, pero hasta 2012 no comenzó a fabricarse. La fundación recibe apoyos del laboratorio de informática de la Universidad de Cambridge y de Broadcom.
Ilustración 2: Raspberry Pi 2 Model B
2.6.2.2.2
Caracteristicas de la Raspberry Pi
La Raspberry Pi 2 (Model B) tiene en su corazón una CPU ARM Cortex-A7 de 4 núcleos a 900 MHz acompañada de 1 GB de memoria RAM LPDDR2. Muchos móviles son más potentes que este miniordenador y tienen hasta tres veces más memoria RAM, sin embargo, este nuevo modelo obtiene una puntuación 6 veces mayor que su antecesora en los principales test de rendimiento.
En lo referente a puertos, cuenta con 4 USB 2.0 y una ranura MicroSD. La Raspberry Pi no tiene disco duro propio, por lo que el usuario deberá conectarle un Pendrive o un
21
ANTECEDENTES
disco duro externo para almacenar los archivos y una tarjeta MicroSD para dotar a este pequeño ordenador de un sistema operativo.
Para conectarse a pantallas cuenta con un HDMI 1.4 con una resolución de hasta 1920x1200 píxeles. Su GPU Broadcom VideoCore IV 250 MHz. OpenGL ES 2.0 es muy capaz de reproducir contenido Full HD sin saltos ni cortes.
Para conectarse a Internet o a una red local cuenta también con un puerto Ethernet de 10/100 Mbps, aunque también se le puede añadir conexión Wi-Fi o incluso 3G a través de un módem USB que también habría que comprar por separado.
Ilustración 3: esquema de la Raspberry Pi 2 Model B
2.6.2.2.3
Sistemas Operativos
Raspberry Pi oferta oficialmente varios sistemas operativos. Además, para que su instalación resulte más fácil, la fundación también ofrece instaladores que hacen el trabajo de instalación automáticamente.
2.6.2.2.3.1
Instalador NOOBS
NOOBS es una buena opción para los que están empezando y quieren probar varios Sistemas Operativos. Este instalador ofrece, en el primer arranque, un menú de instalación de Raspbian, Pidora, varias opciones con XBMC, entre otros, para que, de
22
PROYECTO FIN DE GRADO
esta forma, tengamos muy fácil probar la distribución que mejor se ajuste a nuestras necesidades.
2.6.2.2.3.2
Sistema operativo Raspbian
Con todas las ventajas de una de las distribuciones Linux más veteranas y utilizadas, Raspbian se convirtió desde los días de la primera Pi en una de las distros 6 más populares para Raspberry Pi. Sus virtudes son las mismas que tiene Debian 7: una enorme comunidad de usuarios, miles de paquetes preparados desde el primer momento para ser utilizados -más de 35.000 en el caso de Raspbian y optimizados para la Pi.
2.6.2.2.3.3
Sistema operativo Pidora
Pidora es una mezcla con Fedora, una versión personalizada del sistema Fedora tipo Unix, que se ejecuta en el ordenador Raspberry Pi. Además es bastante rápido en su ejecución. Lanzado por primera vez en 2003, Fedora tiene una larga historia y se caracteriza por su estabilidad. Teniendo en cuenta que existen miles de paquetes disponibles en el repositorio para Pidora, se podrá encontrar casi cualquier funcionalidad o servicio que se pueda necesitar para cualquier proyecto.
2.6.2.2.3.4
Sistema operativo Windows 10 Pi 2
El centro de desarrolladores de Microsoft anunció la compatibilidad de Windows 10 con la Raspberry Pi 2. Se podrá instalar una versión de Windows 10 que está diseñada para instalar pequeñas aplicaciones que conecten dispositivos. Esta edición es gratuita y no será tan completa como la edición que puedes añadir a un PC. Windows 10 para Raspberry Pi está disponible desde finales del 2015.
6 Sistemas 7 Sistema
operativos operativo en base Linux
23
ANTECEDENTES
2.6.2.3 Arduino 2.6.2.3.1
¿Qué es Arduino?
Arduino es una plataforma de electrónica, en la que tanto el Software como el Hardware son de código abierto. Esto significa que en su página oficial puedes encontrar desde esquemas para montar tu propio dispositivo, hasta ejemplos de funcionamiento de lo más complejos, los cuales puedes modificar a tu antojo bien sea por comodidad, mejoría o simple gusto.
Los dispositivos Arduino están basados en un microcontrolador Atmel, que varía en función del modelo que se adquiera. Este microcontrolador viene ensamblado (o bien lo ensamblamos nosotros si adquirimos los componentes sueltos) en una placa junto a otros componentes, tales como resistencias, condensadores, osciladores, pulsadores, etc y una serie de “pines” o conectores, a través de los cuales conectaremos otros componentes para comunicarnos con el Arduino.
Ilustración 4: Arduino UNO
24
PROYECTO FIN DE GRADO
Casi la totalidad de dispositivos Arduino se conectan por usb al ordenador, y se emplea su propio entorno de desarrollo para escribir el código de nuestro programa y cargarlo al dispositivo.
2.6.2.3.2
Características de Arduino
Arduino cuenta con 14 entradas/salidas digitales, de las cuales 6 se pueden utilizar como salidas PWM (Modulación por ancho de pulsos) y otras 6 son entradas analógicas. Además, incluye un resonador cerámico de 16 MHz, un conector USB, un conector de alimentación, una cabecera ICSP y un botón de reseteado. La placa incluye todo lo necesario para que el microcontrolador haga su trabajo, basta conectarla a un ordenador con un cable USB o a la corriente eléctrica a través de un transformador.
Ilustración 5: esquema de Arduino UNO
2.6.2.4 Comparativa entre Raspberry Pi y Arduino Arduino es un microcontrolador programable. Es decir, lo conectamos a nuestro ordenador y le programamos una función a sus sensores. Por ejemplo, podemos programar que una luz parpadee o añadirle un servomotor y crear un robot que se mueva en círculos o se mueva evitando chocarse gracias a sensores ultrasónicos. La capacidad de Arduino está limitada a tu imaginación sí, pero los proyectos llevados a cabo por medio de esta gama de microcontroladores están enfocados a la electrónica y
25
ANTECEDENTES
la robótica básica. Arduino no piensa, no cuenta con un sistema operativo, no toma decisiones y no se conecta a internet salvo que compremos un “escudo” con Ethernet.
Por otro lado, Raspberry Pi no es ni más ni menos que un micro ordenador que corre con Linux. Cuenta con 512 MB o 1 GB de RAM y dispone de entradas y salidas para teclado, monitor, ratón y un cable Ethernet. Cierto es que Raspberry Pi se ha utilizado en numerosas ocasiones en combinación con Arduino para crear proyectos de robótica pero esta no es su función principal.
2.6.2.5 Conclusión Tras analizar las tres alternativas a lo que a hardware se refiere, se ha optado por seleccionar la Raspberry Pi como mejor opción por las siguientes razones: 1. Es un ordenador con capacidades técnicas para soportar el proyecto que se quiere llevar a cabo, así como cualquier ampliación o mejora. 2. Es un dispositivo de bajo coste. 3. Tanto el dispositivo emisor como el receptor usarían un mismo lenguaje de programación. 4. Tiene muchas posibilidades de personalización y adición de complementos. 5. Se puede conectar a un batería independiente de alta capacidad. 6. Tiene un tamaño reducido que facilita tanto la integración en otros elementos como la comodidad que va a proporcionar al usuario a la hora de portarla.
2.7 ESTUDIO DE LA SEMAFÓRICA PARA EL PROYECTO VAV Se considera oportuno estudiar el funcionamiento y los componentes de los semáforos, ya que se pretende integrar el sistema VAV en ellos. Cierto es que existen en el mercado diferentes modelos e incluso diferentes tecnologías de control semafórico, pero para este estudio tomaremos como referencia un modelo genérico.
26
PROYECTO FIN DE GRADO
2.7.1 Componentes principales de un semáforo genérico En el presente apartado se detallan los principales componentes de un semáforo genérico. Se debe tener en cuenta que la información que se detalla en los siguientes subapartados puede no ser del todo exacta dependiendo del modelo de semáforo.
2.7.1.1 Armario El armario contiene el conjunto de elementos necesarios para hacer funcionar un grupo de semáforos. Este armario es resistente a la corrosión y protege los elementos de las adversidades climatológicas.
Ilustración 6: armario donde se encuentra la inteligencia de los semáforos
2.7.1.2 Regulador semafórico El regulador semafórico presenta la arquitectura que se muestra en la siguiente figura:
27
ANTECEDENTES
Diagrama 1: regulador semafórico genérico
A continuación se describen las características y funciones de los elementos principales del regulador semafórico genérico:
2.7.1.2.1
Unidad central (CPU)
La unidad central del regulador tiene un sistema de vigilancia "watch-dog timer" de modo que efectúe un Reset del equipo si pasa un tiempo sin ser activado por el programa. Además, el regulador almacenará los parámetros en memoria no volátil (por ejemplo, memoria Flash) y no fácilmente extraíble. La integridad de los parámetros está garantizada mediante un código CRC.
2.7.1.2.2
Alimentación
El regulador se alimentará a la tensión nominal de 230 VAC (directamente de la acometida eléctrica) y debe funcionar correctamente dentro del rango de tensiones de
28
PROYECTO FIN DE GRADO
entrada de 184 VAC a 265 VAC (230 VAC, +15% -20%). La fuente de alimentación del regulador será la encargada de suministrar las tensiones necesarias para el funcionamiento de la electrónica y los 42 VAC para la alimentación de los semáforos
2.7.1.2.3
Acometida eléctrica
Se dispone de interruptores magnetotérmico y diferencial monobloc con rearme automático entre el SAI y el regulador, y entre la acometida eléctrica y el SAI, con el objetivo de garantizar la seguridad en cada etapa del circuito de alimentación.
Diagrama 2: interruptores magnetotérmicos y diferencial monobloc
SAI (Sistema de alimentación ininterrumpida): garantiza el funcionamento del sistema en caso de corte de suministro eléctrico.
El SAI deberá ser capaz de alimentar en plenas condiciones de funcionamiento y constantemente al conjunto regulador-semáforos, y opcionalmente a los detectores, a lo largo de toda la vida del SAI, durante: 2 horas en luminosidad plena 3 horas en luminosidad atenuada
2.7.1.2.4
Entradas digitales
Entradas para detectores y pulsadores: El regulador dispone al menos de 8 entradas digitales para detectores y pulsadores, activadas mediante contactos libres de tensión.
Entradas auxiliares: El regulador dispone al menos de 8 entradas auxiliares, activadas mediante contactos libres de tensión.
29
ANTECEDENTES
2.7.1.2.5
Salidas para control de grupos
El regulador dispondrá de un interruptor general de 2 posiciones con la siguiente funcionalidad:
Posición normal. Cuando el interruptor está en posición normal, el estado de las señales de salida a semáforos corresponderá a las órdenes dadas por el regulador.
Posición de test. Cuando el interruptor pase a la posición de test, el regulador entrará en estado de prueba.
2.7.1.2.6
Circuitos de gobierno de las salidas
Cada grupo tiene circuitos independientes para cada uno de los 3 colores (rojo, ámbar y verde) y cada uno de ellos soporta hasta 5 unidades ópticas en paralelo. Cada color puede gobernar una carga de 100W y está protegido por un fusible en caso de cortocircuito.
Cada grupo puede tener 2 colores activos. El estado de cada color será Encendido o Apagado, donde el estado Encendido para el conjunto del regulador físico, podrá tener 2 niveles: luminosidad plena o luminosidad atenuada
2.7.1.2.7
Circuitos de comprobación de las salidas
El regulador dispone de un mecanismo para detectar si las salidas de grupos de circuito reciben la tensión que les corresponde. En caso de percibir una anomalía, envía un aviso al centro de control.
2.7.1.2.8
Sincronismo (Coordinación por cable)
Receptor de sincronismo: el regulador tiene una entrada para sincronización.
Emisor de sincronismo: el regulador dispone de una salida para sincronizar con otros equipos. Esta salida permitirá la creación de áreas coordinadas mediante la conexión de equipos en cascada.
30
PROYECTO FIN DE GRADO
2.7.1.3 Llave de guardia El regulador tiene instalada una llave para control manual. Generalmente el uso de esta llave está reservado a la Policía Municipal. La llave tiene 2 posiciones:
Reposo: la llave no actúa sobre el regulador
Intermitente: el cruce se mantiene en intermitente,
2.7.1.4 Comunicaciones El regulador dispone de 4 puertos de comunicación:
Un puerto Ethernet 10/100Mb.
Un puerto RS232 para la conexión de un terminal portátil de mantenimiento.
Un puerto RS232 de reserva para otros usos.
Un puerto USB de reserva.
2.7.2 Integración del dispositivo emisor del proyecto VAV en un semáforo común El proyecto VAV pretende implementar un sistema genérico que pueda ser integrado en la mayoría de los semáforos. No obstante, se considera que cada semáforo puede ser distinto y que previo a la implantación del sistema habrá que hacer un estudio de integración en el tipo de semáforo que se requiera.
2.7.2.1 Colocación del dispositivo emisor El dispositivo emisor se colocará sobre las lámparas del semáforo de peatones. Deberá estar protegido por una cobertura similar a la que protege las lámparas. Además, el adaptador Bluetooth que llevará incorporado el dispositivo emisor deberá estar orientado hacia la acera, procurando así establecer una conexión con mayor facilidad para los usuarios que caminen por la misma. Asimismo, la pared que protege el lado del dispositivo el adaptador Bluetooth tiene que permitir un envío de señal sin atenuaciones. En caso de notar atenuaciones en la señal, esta pared deberá incluir un pequeño orificio para permitir el envío de una señal de calidad.
31
ANTECEDENTES
2.7.2.2 Conexión del dispositivo emisor al semáforo Después del estudio de los componentes y las funciones de un semáforo, se puede determinar que en la mayoría de los modelo, el regulador del cruce tendrá una salida por cada color del semáforo.
Para que el dispositivo emisor pueda recoger la información de los colores, se conectará cada salida del regulador a un pin de la Raspberry Pi. Esta salida deberá antes ser adaptada a 3.3V ya que éste es el voltaje que pueden soportar los pines de la Raspberry Pi. Por otro lado, el dispositivo emisor estará alimentado eléctricamente por la misma fuente que alimenta el semáforo, pero nuevamente, adaptando esa alimentación a 5V, que es el consumo que tiene la Raspberry Pi.
En caso de que el semáforo disponga de un temporizador, que muestra a los peatones el tiempo que queda para que el semáforo cambie de color, se puede conectar una o varias salidas del regulador (las necesarias para poder obtener el dato del temporizador) que transmitan esa información a la Raspberry Pi. Cabe destacar, que esta salida (o salidas) también deberá estar adaptadas a 3.3V.
32
PROYECTO FIN DE GRADO
3. JUSTIFICACIÓN Los sistemas implantados actualmente en las ciudades tratan de dar solución al problema al que se enfrentan los ciegos o personas con visión reducida al cruzar los semáforos. Sin embargo todos estos sistemas tienen carencias de algún tipo.
Los semáforos sonoros implantados en la mayoría de las ciudades españolas ayudan a los ciegos a cruzar las calzadas. Sin embargo, el sonido que emiten estos semáforos resulta molesto para los vecinos de la zona.
Es conveniente analizar las debilidades, amenazas, fortalezas y oportunidades de este proyecto para demostrar por qué es un proyecto viable y que cubre una necesidad social muy importante.
3.1 DEBILIDADES
Es necesario un acuerdo con el ayuntamiento de la ciudad elegida para la implantación del sistema.
La implantación final del sistema requiere de una inversión económica adicional.
Dependencia de un dispositivo móvil y otro fijo para que el sistema funcione.
3.2 AMENAZAS
Existencia de aplicaciones que tratan de resolver la misma necesidad.
Existencia de otros sistemas o mecanismos, ya implantados, que dan respuesta a esa necesidad.
Disminución del número de personas con deficiencia visual severas debido al avance de la medicina.
33
JUSTIFICACIÓN
3.3 FORTALEZAS
El desarrollo del sistema no requiere de mucha inversión económica.
El sistema propuesto responde a debilidades de sistemas similares existentes en el mercado.
El sistema puede ser actualizado y mejorado sin tener que cambiarlo por completo.
Flexibilidad de la aplicación del proyecto en diferentes sistemas semafóricos.
Da la respuesta a la necesidad de disminución de contaminación acústicas en las ciudades.
Sistema versátil con aplicaciones en ámbitos muy diversos.
3.4 OPORTUNIDADES 3.4.1 Aumento de personas con deficiencia visual en España Según datos proporcionados por la ONCE el número de afectados por deficiencias visuales va aumentando día a día, y esta tendencia se mantendrá durante los próximos años. Por ello, el alto número de beneficiarios de este proyecto le confieren valor al mismo.
3.4.2 Fácil acceso al diseño de aplicaciones móviles: La tecnología utilizada es hoy en día muy accesible y observando la evolución de los últimos años se prevé que su accesibilidad sea aún mayor. Por tanto, este proyecto podrá ser mejorado y depurado en el futuro con tecnologías cada vez más cercanas a usuarios y desarrolladores.
3.4.3 Inversión constante o intermitente por los ayuntamientos en la adaptación de las ciudades a los discapacitados: En los últimos tiempos es creciente la sensibilización de las instituciones por dar respuestas a todos los ciudadanos evitando discriminaciones de aquellos grupos que
34
PROYECTO FIN DE GRADO
tengan algún tipo de minusvalía. Por ello, las partidas presupuestarias que se dedican a este fin son cada vez mayores. Con este proyecto se podría dar una solución más eficiente que las que se utilizan en la actualidad ya que conseguiría resultados a un coste mucho menor que el actual.
3.4.4 Creciente uso de dispositivos móviles por parte de toda la población, incluidos los ciegos o de visibilidad reducida: Dado el alto número de usuarios de tecnología móvil, las empresas han visto rentable ofertar sistemas adaptados para dar respuesta a diferentes problemáticas que puedan tener dichos usuarios. Aprovechando, por tanto, el uso generalizado y cotidiano de estas tecnologías se puede implementar la propuesta del presente proyecto sin ser necesaria una formación específica de los usuarios.
35
JUSTIFICACIÓN
36
PROYECTO FIN DE GRADO
4. OBJETIVO Y ALCANCE 4.1 OBJETIVOS Los objetivos perseguidos en la realización del presente proyecto son los siguientes:
Construir un prototipo de semáforo emisor.
Construir un prototipo de emisor polivalente (emisor de obstáculo, dependencia...)
Construir un prototipo de dispositivo receptor del sistema VAV.
Comunicar una Raspberry Pi con la otra.
Conseguir que en una Raspberry Pi se reproduzcan mensajes utilizando un sintetizador de voz.
Conseguir una conexión automática entre Raspberry Pi.
Enviar automática y constantemente de mensajes Bluetooth.
Detectar obstáculos mediante un sensor de distancia ultrasónico
Conseguir determinar si el usuario está a la distancia adecuada del emisor.
4.2 ALCANCE El alcance directo de este proyecto es la creación de un prototipo que sea funcional a nivel de laboratorio. Posteriormente, dedicándole más tiempo y con un equipo se podría alcanzar las siguientes metas.
Implantación del sistema en un semáforo real de una calle del municipio de Bilbao.
Reducción del tamaño del dispositivo receptor (Raspberry Pi).
Diseño e implementación de una aplicación móvil para poder prescindir de un dispositivo receptor del sistema.
Comercialización y venta del sistema.
37
OBJETIVO Y ALCANCE
Implantación Implantac ión en los semáforos de una localidad concreta.
Fusión con algún proyecto de SmartCity 8.
8 Ciudad
38
inteligente y conectada.
PROYECTO FIN DE GRADO
5. METODOLOGÍA 5.1 FASE 0: ELABORACIÓN DEL PLAN DE PROYECTO 5.1.1 Objetivos
Analizar las soluciones actuales actuales del problema que afronta este proyecto.
Determinar las tareas tareas a llevar a cabo en la realización realización de este proyecto. proyecto.
Determinar de las duraciones de las tareas
5.1.2 Resultados
Listado de las características caracterís ticas de los productos existentes en el mercado a la hora de elaborar este proyecto.
Diagrama de Gantt donde se especifican especifican las las fechas fechas y duraciones de las tareas de este proyecto.
5.2 FASE 1: ACTIVIDADES PREVIAS 5.2.1 Objetivos
Analizar el funcionamiento funcionami ento de un semáforo genérico.
Comparar las características de Bluetooth y Wi-Fi.
Comparar las características de Arduino y Raspberry Pi
5.2.2 Resultados
Diagrama del funcionamineto funcionaminet o de un semáforo genérico.
Tabla comparativa comparativa de las las caracterísitcas caracterísitcas de conectividad conectividad entre Bluetooth Bluetooth y WiFi.
Tabla comparativa a nivel económico, de hardware y de software entre Arduino y Raspberry Pi.
39
METODOLOGÍA
5.3 FASE 2: COMIENZO GENERAL DE PROYECTO 5.3.1 Objetivos
Construir un prototipo de semáforo.
Configurar de la Raspberry Pi.
5.3.2 Resultados
Prototipo Prototip o de semáforo con leds sobre una protoboard. protoboard .
Raspberry configurada con el sistema operativo Raspbian y sistema Bluetooth de comunicación.
5.4 FASE 3: DESARROLLO ESPECÍFICO DEL PROYECTO 5.4.1 Objetivos
Enviar y recibir mensajes escritos interpretables interpretables mediante Bluetooth.
Relacionar el mensaje Bluetooth recibido con el archivo de sonido a reproducir.
Detectar distancia del usuario mediante el valor de de la potencia de recepción del Bluetooth.
5.4.2 Resultados
Recepción coherente con el mensaje enviado.
Tabla de asignación que relacione los identificadores identificador es con los sonidos.
Comportamiento Comportamie nto condicional del sistema en función de la distancia a la que se encuentre el usuario.
5.5 FASE 4: EXPERIMENTACIÓN Y DEPURACIÓN DEL PROYECTO 5.5.1 Objetivos
40
Analizar el alcance alcance real del Bluetooth Bluetooth en las las condiciones condiciones del proyecto. proyecto.
Analizar la velocidad de conexión entre emisor y receptor.
Experimentar el sistema en condiciones condiciones habituales. habituales.
PROYECTO FIN DE GRADO
Experimentar el sistema en condiciones excepcionales.
5.5.2 Resultados
Documento de Especificaciones Técnicas del sistema.
Documento de propuestas de mejora a tener en cuenta en las versiones posteriores del sistema.
5.6 FASE 6: ELABORACIÓN DEL PLAN DE NEGOCIO 5.6.1 Objetivos
Calcular el gasto total del prototipo.
Analizar los gastos de implantación en un semáforo.
Contactar con empresas y organismos susceptibles de estar interesadas en el proyecto.
5.6.2 Resultados
Memoria económica del presente proyecto.
Presupuesto de implantación del sistema en un semáforo real.
Listado de empresas y organismos con intereses afines al contenido del proyecto y una toma de contacto con los mismos.
41
METODOLOGÍA
42
PROYECTO FIN DE GRADO
6. DISEÑO Y DESARROLLO En el presente apartado se plasman los elementos de diseño y las líneas de desarrollo que proporcionan consistencia al proyecto.
6.1 DISEÑO DEL SISTEMA VAV El proyecto VAV define un sistema emisor-receptor que utiliza la tecnología Bluetooth para transmitir mensajes de texto que posteriormente son convertidos en mensajes de voz mediante el sintetizador de voz “Festival”.
Diagrama 3: elementos de Sistema VAV e interrelación de los mismos
Como puede verse en el Diagrama 3 el sistema está diseñado para que el dispositivo emisor utilice mensajes de diversos ámbitos (semáforos, dependencias...) y el dispositivo receptor los reciba mediante tecnología Bluetooth y los interprete. Al mismo tiempo, el usuario, interactúa con el sistema eligiendo entre dos modos de operación y uno de reseteo.
6.1.1 El emisor El emisor enviará información a los dispositivos receptores. Esta información hace referencia a la localización de lugares, dependencias, obstáculos y semáforos. Estos
43
DISEÑO Y DESARROLLO
últimos, también proveerán al usuario de información sobre el color y el tiempo que queda para que éste cambie.
Ilustración 7: dispositivo emisor del sitema VAV conectado a un simulador de semáforo
Ilustración 8: dispositivo emisor VAV
44
PROYECTO FIN DE GRADO
6.1.2 El receptor El receptor será el dispositivo encargado de recibir los mensajes que envían los emisores. Sin embargo, este dispositivo tendrá otra modalidad en la que el usuario podrá saber a qué distancia están los objetos y obstáculos a los que apunta con el mismo. Cabe destacar, que el receptor también dispone de un pulsador de reseteo del servicio Bluetooth que le permite asegurarse de que el sistema f unciona correctamente.
Ilustración 9: dispositivo receptor del Sistema VAV
Ilustración 10: detalle del dispositivo receptor del Sistema VAV (botón de reseteo)
45
DISEÑO Y DESARROLLO
6.2 DESARROLLO En este apartado se explican los diferentes pasos que ha servido para desarrollar el proyecto en sus diferente fases, así como los resultados que en cada una de ellas se han obtenido.
6.2.1 Estudio en profundidad de las conexiones Bluetooth En el presente apartado se hace referencia al estudio que ha sido necesario realizar para determinar cuál es la mejor forma de comunicar dos dispositivos mediante una conexión Bluetooth. En dicho estudio se realizaron tres fases:
6.2.1.1 Fase 1ª: Conexión de dispositivos con perfil GAVDP El perfil GAVDP (General Audio/Video Distribution Profile) es un perfil de Bluetooth que establece una conexión preparada para el “streaming” de audio y vídeo.
Diagrama 4: conexión Bluetooth con el perfil GAVDP
Este perfil parecía atractivo ya que toda la programación estaría concentrada en el dispositivo emisor, quedando para el receptor la única función de establecer la conexión. De este modo los mensajes se reproducirían en el dispositivo emisor y el dispositivo receptor haría de altavoz. Como se puede apreciar en la figura de arriba el dispositivo emisor adoptaría el papel de “iniciador” mientras que el otro dispositivo adoptaría el papel de “aceptador”. “Baseband”, LMP, L2CAP y SDP son protocolos de Bluetooth
46
PROYECTO FIN DE GRADO
necesarios para establecer la conexión. AVDTP es el protocolo de negociación donde se definen las características del “streaming”.
Diagrama 5: modelo del perfil GAVDP
Esta opción se desestimó debido a que resultaba complicado llevar un control exhaustivo de la conexión establecida. Debido a esto, no se sabía cuándo había finalizado la reproducción de un mensaje, o si se había reproducido este correctamente, para poder iniciar una nueva emisión del mensaje.
6.2.1.2 Fase 2ª: Creación de un socket mediante el protocolo L2CAP y envío de archivo de audio. El protocolo L2CAP, Logical Link Control and Adaptation Protocol (Protocolo de control y adaptación del enlace lógico) es utilizado dentro de la pila de protocolos de Bluetooth, para pasar paquetes con y sin orientación a la conexión.
Las funciones de L2CAP son:
Segmentación y reensamblado de paquetes. Acepta paquetes de hasta 64KB de sus capas superiores.
47
DISEÑO Y DESARROLLO
Multiplexación de varias fuentes de paquetes, comprobando el protocolo de las capas superiores para así adaptarlo antes del reensamblaje.
Proporcionar una buena gestión para la transmisión unidireccional a otros dispositivos Bluetooth.
Gestión de la calidad de servicio (QoS), del inglés Quality of Service; para los protocolos de las capas superiores. En esta f ase negocia el tamaño máximo del campo de datos de las tramas. Con ello, evita que algún dispositivo envíe paquetes tan grandes que puedan desbordar al receptor.
L2CAP se utiliza para comunicarse sobre el acoplamiento ACL del anfitrión, y su conexión se establece después de que el enlace ACL haya sido configurado.
Se pretendía enviar archivos de audio a través de este protocolo, pero como bien se ha detallado arriba, este protocolo sólo permite paquetes de un tamaño máximo de 64 KB, tamaño que se supera con facilidad a la hora de hablar de archivos de audio. Esta limitación implicaría tener que segmentar todos aquellos paquetes que superasen este límite lo que sucedería en la mayoría de los casos, provocando una utilización de CPU más exigente. A la hora de enviar un archivo de audio la segmentación también sería costosa en términos de tiempo provocando retrasos importantes en la recepción de los mensajes que dificultarían una sincronización con los cambios de estado de un semáforo.
Este protocolo funcionaba muy bien pero fue preciso buscar otra solución que permitiese enviar archivos más pequeños para evitar la segmentación.
6.2.1.3 Fase 3ª: Creación de un socket mediante el protocolo L2CAP y envío de texto plano. Esta tercera fase proporcionó la solución al problema de la segmentación de los paquetes de la segunda fase. La clave fue reducir el tamaño de los archivos a enviar y esto se consiguió enviando texto plano y obligando al receptor a asumir la reproducción
48
PROYECTO FIN DE GRADO
de dicho texto mediante un sintetizador de voz. Así se solucionaba de forma aceptable el problema de la sincronización con el cambio de estado de los semáforos.
6.2.2 Configuración y funcionamiento del dispositivo emisor Todos los dispositivos emisores están formados por una Raspberry Pi con un adaptador USB Bluetooth insertado en uno de sus puertos. No obstante, la programación de cada dispositivo puede cambiar dependiendo de dónde vaya a estar colocado.
Cabe recordar que hay 4 tipos de emisores desarrollados por el momento:
Emisor de semáforo: proporciona al usuario información sobre, la localización de un semáforo, su color y del tiempo que resta para cambiar de color (solo si la información del temporizador está disponible)
Emisor de ascensor: proporciona al usuario información de la localización del mismo.
Emisor de dependencia o lugar: proporciona al usuario información de la localización y de la dependencia o lugar a la que se puede entrar.
Emisor de obstáculo: proporciona al usuario la advertencia de un obstáculo y le propone una alternativa para evitar dicho obstáculo.
El comportamiento de este tipo de dispositivos se explica en el siguiente diagrama de estados:
Diagrama 6: estados del dispositivo emisor
49
DISEÑO Y DESARROLLO
A continuación se desarrollan en detalle las características, configuración y funcionalidades de cada uno de los tipos de emisor.
6.2.2.1 Emisor de semáforo Este tipo de emisor es el más complejo de todos debido a que debe capturar la información sobre el estado del semáforo y su temporizador.
6.2.2.1.1
Funcionamiento
Este dispositivo, al igual que el resto de los emisores, tiene la función de buscar un dispositivo receptor. Durante 4 segundos realiza esa búsqueda y si no encuentra ningún receptor vuelve a buscar. En caso de que sí encuentre un receptor, intenta conectarse al mismo. Una vez establecida la conexión, le manda un primer mensaje que contiene un identificador. En este caso, ese identificador será “S”. De esta forma el receptor sabrá que debe interpretar los mensajes de un semáforo (y no de un ascensor, dependencia u obstáculo). Después, el emisor manda tres mensajes seguidos, el primero de ellos con la localización de del semáforo, el segundo con el color del mismo, y el tercero con el tiempo que queda para cambiar de color. Después, el dispositivo se queda a la espera de recibir una confirmación de que los mensajes han sido transmitidos al usuario correctamente. Ese mensaje será la palabra “ok”. Cuando este mensaje sea recibido, el emisor intentará mandar de nuevo una secuencia actualizada de la localización del semáforo, el color y el tiempo que queda para el cambio de estado. Por último, a medida que el usuario se aleje del rango de acción del emisor y éste no pueda establecer conexión volverá al estado inicial, para buscar un nuevo usuario.
50
PROYECTO FIN DE GRADO
Diagrama 7: visión general del dispositivo emisor de tipo semáforo
51
DISEÑO Y DESARROLLO
6.2.2.1.2
Explicación por bloques del script que ejecuta el dispositivo
El script que ejecutará la Raspberry Pi se llama “enviadortimer.py” y está escrito en Python. Este programa se encuentra guardado en el directorio raíz del dispositivo.
6.2.2.1.2.1
Bloque 1º: importación de librerías necesarias
A continuación se importan las librerías necesarias para desarrollar el script:
import time: Importa la librería “time” para poder añadir retardos en el programa. import Bluetooth: Importa la librería “ Bluetooth” para poder crear sockts y mandar textos . from subprocess import call: Importa la función “call” de la librería “subprocess” para poder ejecutar comandos de Debian (ajenos al lenguaje Python). from subprocess import check_output: Importa la función “check_output” de la librería ”subprocess” para ejecutar comandos de Debian y guarda el elemento que devuelvan.
Diagrama 8: i mportación de librerías para el emisor del ti po "Semáforo”
6.2.2.1.2.2
Bloque 2º: definición de variables necesarias
Es importante definir las variables al comienzo del código para poder cambiarlas si fuera necesario:
port = 0x1001: Asigna el valor 0x1001 a la variable “port” . tcruce = 7: tiempo necesario para cruzar el paso de zebra delay = 3: tiempo de retraso por reproducción del mensaje en el receptor
52
PROYECTO FIN DE GRADO
target_name = "raspberrypi-0": El dispositivo que se quiere encontrar se llama “raspberrypi -o” . target_address = None: Se declara la variable donde se guardará la MAC del dispositivo encontrado. De momento no tiene valor, por lo tanto es “None” . localizacion = “Calle Sendeja con Ayuntamiento ” : se guarda la localización en una variable para
que sea más sencillo cambiarla si fuera necesario. lejos = “Estas lejos” : se guarda una variable con la frase “Estas lejos” para advertirle al usuario
de que se tiene que acercar más.
Diagrama 9: declaración de variables en el emisor del tipo "Semáforo"
6.2.2.1.2.3
Bloque 3º: búsqueda de dispositivo receptor
Este paso consiste en encontrar el dispositivo receptor y guarda su MAC para poder establecer una conexión:
nearby_devices = Bluetooth.discover_devices(duration = 4): Busca dispositivos cercanos y los guarda en una variable. for bdaddr in nearby_devices: Examina la variable recién guardada hasta encontrar lo que busca. if target_name == Bluetooth.lookup_name( bdaddr ): compara el nombre del dispositivo encontrado con el que se quiere encontrar. Y si se encuentra... target_address = bdaddr: ...guarda la MAC en la variable preparada para ello anteriormente. break: para el bucle de comparación una vez encontrado. call(["hciconfig","hci", "reset"]): resetea el dispositivo Bluetooth para detener cualquier proceso que se haya podido quedar a medias.
53
DISEÑO Y DESARROLLO
Diagrama 10: búsqueda de dispositivos receptores en el emisor de tipo "Semáforo"
6.2.2.1.2.4
Bloque 4º: sacar en pantalla en resultado de la busqueda
Para ayudar al testeo del script se imprime en pantalla lo ocurrido en la búsqueda:
if target_address is not None:: Si la MAC no es “None”... print "found target Bluetooth device with address ", target_address: impreme la MAC else::Si no... print "could not find target Bluetooth device nearby": Impreme que no ha encontrado la MAC
Diagrama 11: impresión en pantalla del resultado de la búsqueda
6.2.2.1.2.5
Bloque 5º: lectura de la información a enviar
Este es primero de los bloques de un bucle infinito. En esta primera parte se accede a la información del semáforo:
while 1:: comienza el bucle de envío de información color = open('color.txt', 'r'): se recupera la información del color guarda en un archivo color = color.read(): se lee la información del color tiempo = open('tiempo.txt', 'r'): se recupera la información del tiempo guarda en un archivo
54
PROYECTO FIN DE GRADO
tiempo = tiempo.read(): se lee la información del tiempo
Diagrama 12: apertura y lectura de ficheros en el emisor del tipo "Semáforo”
6.2.2.1.2.6 6.2.2.1. 2.6
Bloque 6º: establecimiento establecim iento de la conexión
Para poder enviar los mensajes es precioso crear un socket y conectarlo al receptor:
sock=Bluetooth.BluetoothSocket(Bluetooth.L2CAP): se crea elemento tipo “socket” sobre el protocolo L2CAP sock.connect((target_address, port)): conecta con el dispositivo cuya MAC a encontrado a través del puerto declarado anteriormente y espera aceptación para continuar
Diagrama 13: creación del socket y espera de recepción de conexión en el emisor del tipo "semáforo"
6.2.2.1.2.7 6.2.2.1. 2.7
Bloque 7º: determinación determinac ión de la distancia del usuario
Antes de enviar enviar ningún mensaje, se analizará analizará la la potencia de la señal señal para determinar determinar si el receptor está demasiado lejos o no. En caso de estarlo, el script vuelve a empezar:
value = check_output(["sudo","hcitool","rssi",target_address]): Se llama a la función “rssi”de la herramienta “hcitool” que devuelve un texto con la potencia en dB de la conexión establecida. if value is not 'Not connected.':: Si el valor es NO es “Not conected” y y por tanto haya detectado la potencia... value = list(value): ...guarda el mensaje como una lista de caracteres
55
DISEÑO Y DESARROLLO
i=0: declaración de una variable auxiliar while i<=18:: sabiendo que los primeros 18 caracteres son texto inútil value[i]='': Eliminamos dichos caracteres i=i+1: contamos una vuelta del bucle para quitar los caracteres value=''.join(value): Convertimos la nueva lista en una cadena de caracteres print value: Imprimimos el valor de la conexión en dB value = int(value): convertimos la cadena de caracteres a un número
Diagrama 14: determinación de si el receptor está cerca o no en el emisor del tipo "Semáforo"
6.2.2.1.2.8
Bloque 8º: envío de mensajes
Esta parte del código es la encargada de enviar los mensajes al receptor, enviando un mensaje u otro dependiendo de si el usuario está lo suficientemente cerca o no:
if value<-5:: si la potencia de la conexión es menor de -5dB sock.send("S"): se envía el identificador de “S” de semaforo sock.send(localizacion):: se envia la localización sock.send(localizacion) sock.send(lejos): se envia mensaje de que se está lejos sock.send(" ") confirmacion = sock.recv(1024): se espera recibir la confirmación print(confirmacion): se saca por pantalla la confirmación time.sleep(1): se espera 1 segundo antes de continuar sock.close(): se cierra el objeto socket time.sleep(3): se espera durante 3 segundos antes de continuar exit(): salimos del script.
56
PROYECTO FIN DE GRADO
else::: si la potencia de la conexión no es menos de -5dB else: sock.send("S"): se envía el identificador de “S” de semaf oro oro sock.send(localizacion): se envia la localización sock.send(color): se envía el color del semáforo
Diagrama 15: envío de mensajes dependiendo de la potencia de la conexión en el emisor del tipo Semáforo
6.2.2.1.2.9 6.2.2.1. 2.9
Bloque 9º: Análisis del tiempo para cambiar de color
Antes de enviar el tiempo tiempo que queda para para cambiar cambiar de color, script script analiza analiza si este tiempo es menor que el tiempo que se necesita para cruzar el paso de cebra. Si es menor, manda un mensaje que advierte de que el color cambiará inminentemente, si no, manda el tiempo correspondiente. correspondiente.
num = int(float(tiempo))-delay: Al int(float(tiempo))-delay: Al tiempo se le resta el tiempo que tarda el mensaje que oye el usuario en reproducirse
57
DISEÑO Y DESARROLLO
if num <= tcruce:: Se compara ese tiempo con lo que se estima que se tarda en cruzar el paso de zebra sock.send("Espere. Cambio de Color inminente"): Si es menor se le dice al usuario que espere al cambio de color else:: Si no, se le dice el tiempo que queda para el cambio de color sock.send(tiempo+" segundos para cambiar de color")
Diagrama 16: análisis del tiempo restante para que el semáforo cambie de estado
6.2.2.1.2.10
Bloque 10º: recepción de la confirmación
Una vez enviados todos los mensajes, se espera recibir una confirmación que indica que el receptor ya ha recibido y reproducido los mensajes. Si no se recibe nada es que algo ha ido m al y se reinicia el script.
confirmacion = sock.recv(1024): Se espera recibir la confirmación de la reproducción de los mensajes enviados print(confirmacion): Se saca en la pantalla el mensaje “Ok” sock.close(): se cierra el objeto socket else:: Si no se detecta la potencia de la señal... break: se sale del la condición y repite la conexión
58
PROYECTO FIN DE GRADO
Diagrama 17: espera de recepción de confirmación de reproducción en el dispositivo receptor
6.2.2.2 Emisor de ascensor Este tipo de emisor es sencillo. Se coloca a la entrada de un ascensor. 6.2.2.2.1
Funcionamiento
Este dispositivo, al igual que el resto de los emisores, tiene la función de buscar un dispositivo receptor. Durante 4 segundos realiza esa búsqueda y si no encuentra ningún receptor vuelve a buscar. En caso de que sí encuentre un receptor, intenta conectarse al mismo. Una vez establecida la conexión, le manda un primer mensaje que contiene un identificador. En este caso, ese identificador será “A”. De esta forma el receptor sabrá que debe interpretar los mensajes de un ascensor. Después, el emisor manda un único mensaje al receptor indicándole dónde se encuentra incluyendo la planta o el nivel. Posteriormente el dispositivo emisor queda a la espera de recibir una confirmación de la reproducción del mensaje enviado. Pasado un tiempo, si el receptor se encuentra en el rango de acción del emisor, este último vuelve a mandar el mensaje.
6.2.2.2.2
Explicación por bloques del script que ejecuta el dispositivo
El script que ejecutará la Raspberry se llama “ascensor.py” y está escrito en Python. Este programa se encuentra guardado en el directorio raíz del dispositivo.
59
DISEÑO Y DESARROLLO
Diagrama 18: explicación general del emisor del tipo "Ascensor"
60
PROYECTO FIN DE GRADO
6.2.2.2.2.1
Bloque 1º: importación de librerías necesarias
A continuación se importan las librerías necesarias para desarrollar el script.
import time: Importa la librería “time” para poder añadir retardos en el programa. import Bluetooth: Importa la librería “ Bluetooth” para poder crear sockts y mandar textos . from subprocess import call: Importa la función “call” de la librería “subprocess” para poder ejecutar comandos de Debian (ajenos al lenguaje Python). from subprocess import check_output: Importa la función “check_output” de la librería ”subprocess” para ejecutar comandos de Debian y guarda el elemento que devuelvan.
Diagrama 19: importación de librerías necesarias en el emisor del tipo "Ascensor"
6.2.2.2.2.2
Bloque 2º: definición de variables necesarias
Es importante definir las variables al comienzo del código para poder cambiarlas si fuera necesario.
port = 0x1001: asigna el valor 0x1001 a la variable “port” target_name = "raspberrypi-0": el dispositivo que se quiere encontrar se llama “raspberrypi -o” target_address = None: es declara la variable donde se guardará la MAC del dispositivo encontrado. De momento no tiene valor, por lo tanto es “None”
localizacion = "Ascensor Eside, segunda planta ": se guarda la localización del ascensor lejos = "estas lejos ": se guarda el mensaje de “estás lejos” para informar a usuario si se diera el caso
61
DISEÑO Y DESARROLLO
Diagrama 20: declaración de variables en el emisor del tipo "Ascensor ”
6.2.2.2.2.3
Bloque 3º: búsqueda de dispositivo receptor
Este paso consiste en encontrar el dispositivo receptor y guarda su MAC para poder establecer una conexión.
nearby_devices = Bluetooth.discover_devices(duration = 4): Busca dispositivos cercanos y los guarda en una variable. for bdaddr in nearby_devices: Examina la variable recién guardada hasta encontrar lo que busca. if target_name == Bluetooth.lookup_name( bdaddr ): compara el nombre del dispositivo encontrado con el que se quiere encontrar. Y si se encuentra... target_address = bdaddr: ...guarda la MAC en la variable preparada para ello anteriormente. break: para el bucle de comparación una vez encontrado. call(["hciconfig","hci", "reset"]): resetea el dispositivo Bluetooth para detener cualquier proceso que se haya podido quedar a medias.
Diagrama 21: búsqueda de dispositivos receptores en el emisor del tipo "Ascensor”
6.2.2.2.2.4
Bloque 4º: sacar en pantalla en resultado de la búsqueda
Para ayudar al testeo del script se imprime en pantalla lo ocurrido en la búsqueda.
if target_address is not None:: Si la MAC no es “None”...
62
PROYECTO FIN DE GRADO
print "found target Bluetooth device with address ", target_address: impreme la MAC else::Si no... print "could not find target Bluetooth device nearby": Impreme que no ha encontrado la MAC
Diagrama 22: impresión en pantalla del resultado de la búsqueda en el emisor del tipo "Ascensor"
6.2.2.2.2.5
Bloque 5º: establecimiento de la conexión
Para poder enviar los mensajes es precioso crear un socket y conectarlo al receptor.
while 1:: comienza el bucle de envío de información sock=Bluetooth.BluetoothSocket(Bluetooth.L2CAP): se crea elemento tipo “socket” sobre el protocolo L2CAP sock.connect((target_address, port)): conecta con el dispositivo cuya MAC a encontrado a través del puerto declarado anteriormente y espera aceptación para continuar
Diagrama 23: creación de socket y establecimiento de la conexión en el emisor del tipo "Ascensor”
6.2.2.2.2.6
Bloque 6º: determinación de la potencia de la conexión
Antes de enviar ningún mensaje, se analizará la potencia de la señal para determinar si el receptor está demasiado lejos o no. En caso de estarlo, el script vuelve a empezar.
63
DISEÑO Y DESARROLLO
value = check_output(["sudo","hcitool","rssi",target_address]): Se llama a la función “rssi”de la herramienta “hcitool” que devuelve un texto con la potencia en dB de la conexión establecida. if value is not 'Not connected.':: Si el valor es NO es “Not conected” y por tanto haya detectado la potencia... value = list(value): ...guarda el mensaje como una lista de caracteres i=0: declaración de una variable auxiliar while i<=18:: sabiendo que los primeros 18 caracteres son texto inútil value[i]='': Eliminamos dichos caracteres i=i+1: contamos una vuelta del bucle para quitar los caracteres value=''.join(value): Convertimos la nueva lista en una cadena de caracteres print value: Imprimimos el valor de la conexión en dB value = int(value): convertimos la cadena de caracteres a un número
Diagrama 24: determinación de si el receptor está lo suficintemente cerca o no en el el emisor de tipo "Ascensor"
6.2.2.2.2.7
Bloque 7º: envío de mensajes
Esta parte del código es la encargada de enviar los mensajes al receptor, enviando un mensaje u otro dependiendo de si el usuario está lo suficientemente cerca o no.
if value<-5:: si la potencia de la señal es mejor de 5dB sock.send("A"): se envía el identificador de “A” de Ascensor sock.send(localizacion+lejos): se envía la localización del ascensor indicando también que el usuario se encuentra demasiado lejos. confirmacion = sock.recv(1024): se queda a la espera de recibir una confirmación de la reproducción del mensaje enviado print(confirmacion): se imprime la confirmación recibida
64
PROYECTO FIN DE GRADO
sock.close(): se cierra el elemento socket y comienza el bucle de nuevo time.sleep(3): se espera durante 3 segundos exit(): se sale del script para ejecutarlo de nuevo. else: sock.send("A"): se envía el identificador de “A” de Ascensor sock.send(localizacion): se envía la localización del ascensor confirmacion = sock.recv(1024): se queda a la espera de recibir una confirmación de la reproducción del mensaje enviado print(confirmacion): se imprime la confirmación recibida. sock.close(): se cierra el elemento socket y comienza el bucle de nuevo. else:: si no estuviera conectado... break: comenzamos el bucle de nuevo
Diagrama 25: envío de mensaje Bluetooth dependiendo de la posición del receptor y espera de confirmación de reproducción
6.2.2.3 Emisor de dependencia o lugar Este tipo de emisor es sencillo. Se coloca a la entrada de una depenciencia o lugar, como por ejemplo la entrada a una universidad, como la entrada a uno aseos o la entrada a un comercio.
6.2.2.3.1
Funcionamiento
Este dispositivo, al igual que el resto de los emisores, tiene la función de buscar un dispositivo receptor. Durante 4 segundos realiza esa búsqueda y si no encuentra ningún receptor vuelve a buscar. En caso de que sí encuentre un receptor, intenta conectarse
65
DISEÑO Y DESARROLLO
al mismo. Una vez establecida la conexión, le manda un primer mensaje que contiene un identificador. En este caso, ese identificador será “D”. De esta forma el receptor sabrá que debe interpretar los mensajes de una dependencia o lugar. Después, el emisor manda un dos mensaje al receptor. El primero indicando el lugar o la dependencia encontrada y el segundo, indicando la localización de este lugar o dependencia. Posteriormente el dispositivo emisor queda a la espera de recibir una confirmación de la reproducción del mensaje enviado. Pasado un tiempo, si el receptor se encuentra en el rango de acción del emisor, este último vuelve a mandar los mensajes.
66
PROYECTO FIN DE GRADO
Diagrama 26: explicación general del dispositivo emisor del ti po "Dependencia"
67
DISEÑO Y DESARROLLO
6.2.2.3.2
Explicación por bloques del script que ejecuta el dispositivo
El script que ejecutará la Raspberry se llama “dependencia.py” y está escrito en Python. Este programa se encuentra guardado en el directorio raíz del dispositivo.
6.2.2.3.2.1
Bloque 1º: importación de librerías necesarias
A continuación se importan las librerías necesarias para desarrollar el script.
import time: Importa la librería “time” para poder añadir retardos en el programa . import Bluetooth: Importa la librería “ Bluetooth” para poder crear sockts y mandar textos . from subprocess import call: Importa la función “call” de la librería “subprocess” para poder ejecutar comandos de Debian (ajenos al lenguaje Python). from subprocess import check_output: Importa la función “check_output” de la librería ”subprocess” para ejecutar comandos de Debian y guarda el elemento que devuelvan.
Diagrama 27: importación de librerías en el emisor del tipo "Dependecia"
6.2.2.3.2.2
Bloque 2º: definición de variables necesarias
Es importante definir las variables al comienzo del código para poder cambiarlas si fuera necesario.
port = 0x1001: asigna el valor 0x1001 a la variable “port” target_name = "raspberrypi-0": el dispositivo que se quiere encontrar se l lama “raspberrypi -o”
68
PROYECTO FIN DE GRADO
target_address = None: es declara la variable donde se guardará la MAC del dispositivo encontrado. De momento no tiene valor, por lo tanto es “None”
localizacion = "Universidad de Deusto ": se guarda la localización auxiliar = “Entra da de Padre Arrupe”: se guarda un mensaje que oriente con más precisión al
usuario
Diagrama 28: declaración de variables en el emisor del tipo "Dependencia"
lejos = "estas lejos ": se guarda el mensaje de “estás lejos” para informar a usuario si se diera el caso
6.2.2.3.2.3
Bloque 3º: búsqueda de dispositivo receptor
Este paso consiste en encontrar el dispositivo receptor y guarda su MAC para poder establecer una conexión.
nearby_devices = Bluetooth.discover_devices(duration = 4): Busca dispositivos cercanos y los guarda en una variable. for bdaddr in nearby_devices: Examina la variable recién guardada hasta encontrar lo que busca. if target_name == Bluetooth.lookup_name( bdaddr ): compara el nombre del dispositivo encontrado con el que se quiere encontrar. Y si se encuentra... target_address = bdaddr: ...guarda la MAC en la variable preparada para ello anteriormente. break: para el bucle de comparación una vez encontrado. call(["hciconfig","hci", "reset"]): resetea el dispositivo Bluetooth para detener cualquier proceso que se haya podido quedar a medias.
69
DISEÑO Y DESARROLLO
Diagrama 29: declaración de variables en el emisor del tipo "Dependencia"
6.2.2.3.2.4
Bloque 4º: sacar en pantalla en resultado de la busqueda
Para ayudar al testeo del script se imprime en pantalla lo ocurrido en la búsqueda.
if target_address is not None:: Si la MAC no es “None”... print "found target Bluetooth device with address ", target_address: impreme la MAC else::Si no... print "could not find target Bluetooth device nearby": Impreme que no ha encontrado la MAC
Diagrama 30: impresión en pantalla del resultado de la búsqueda en el emisor del tipo "Dependecia"
6.2.2.3.2.5
Bloque 5º: establecimiento de la conexión
Para poder enviar los mensajes es precioso crear un socket y conectarlo al receptor.
while 1:: comienza el bucle de envío de información sock=Bluetooth.BluetoothSocket(Bluetooth.L2CAP): se crea elemento tipo “socket” sobre el protocolo L2CAP sock.connect((target_address, port)): conecta con el dispositivo cuya MAC a encontrado a través del puerto declarado anteriormente y espera aceptación para continuar
70
PROYECTO FIN DE GRADO
Diagrama 31: creación de socket y petición de conexión en el emisor del tipo "Dependecia"
6.2.2.3.2.6
Bloque 6º: determinación de la potencia de la conexión
Antes de enviar ningún mensaje, se analizará la potencia de la señal para determinar si el receptor está demasiado lejos o no. En caso de estarlo, el script vuelve a empezar .
value = check_output(["sudo","hcitool","rssi",target_address]): Se llama a la función “rssi”de la herramienta “hcitool” que devuelve un texto con la potencia en dB de la conexión establecida. if value is not 'Not connected.':: Si el valor es NO es “Not conected” y por tanto haya detectado la potencia... value = list(value): ...guarda el mensaje como una lista de caracteres i=0: declaración de una variable auxiliar while i<=18:: sabiendo que los primeros 18 caracteres son texto inútil value[i]='': Eliminamos dichos caracteres i=i+1: contamos una vuelta del bucle para quitar los caracteres value=''.join(value): Convertimos la nueva lista en una cadena de caracteres print value: Imprimimos el valor de la conexión en dB value = int(value): convertimos la cadena de caracteres a un número
71
DISEÑO Y DESARROLLO
Diagrama 32: determinación de si el receptor está lo suficientemente cerca o no en el emisor del tipo "Dependecia"
6.2.2.3.2.7
Bloque 7º: envío de mensajes
Esta parte del código es la encargada de enviar los mensajes al receptor, enviando un mensaje u otro dependiendo de si el usuario está lo suficientemente cerca o no.
if value<-5:: si la potencia de la señal es mejor de 5dB sock.send("D"): se envía el identificador de “ D” de Dependencia sock.send(localizacion+lejos): se envía la localización del ascensor indicando también que el usuario se encuentra demasiado lejos. sock.send( “ “ ): el envío del mensaje auxiliar se deja en blaco confirmacion = sock.recv(1024): se queda a la espera de recibir una confirmación de la reproducción del mensaje enviado print(confirmacion): se imprime la confirmación recibida sock.close(): se cierra el elemento socket y comienza el bucle de nuevo time.sleep(3): se espera durante 3 segundos exit(): se sale del script para ejecutarlo de nuevo. else: sock.send("D"): se envía el identificador de “ D” de Dependencia sock.send(localizacion): se envía la localización del lugar. sock.send(auxiliar): se envía el mensaje auxiliar. confirmacion = sock.recv(1024): se queda a la espera de recibir una confirmación de la reproducción del mensaje enviado print(confirmacion): se imprime la confirmación recibida.
72
PROYECTO FIN DE GRADO
sock.close(): se cierra el elemento socket y comienza el bucle de nuevo. else:: si no estuviera conectado... break: comenzamos el bucle de nuevo
Diagrama 33: envío de mensajes dependiendo de la distancia del receptor en el emisor del tipo "Dependecia"
6.2.2.4 Emisor de obstáculo Este tipo de emisor es sencillo. Se coloca en algún lugar que pueda conllevar un riesgo para el usuario, como por ejemplo, una escalera
6.2.2.4.1
Funcionamiento
Este dispositivo, al igual que el resto de los emisores, tiene la función de buscar un dispositivo receptor. Durante 4 segundos realiza esa búsqueda y si no encuentra ningún receptor vuelve a buscar. En caso de que sí encuentre un receptor, intenta conectarse al mismo. Una vez establecida la conexión, le manda un primer mensaje que contiene un identificador. En este caso, ese identificador será “O”. De esta forma el receptor sabrá que debe interpretar los mensajes de un obstáculo. Después, el emisor manda un tres mensaje al receptor. El primero advirtiendo del peligro encontrado, el segundo con la localización y el tercero ofreciéndole una alternativa. Posteriormente el dispositivo emisor queda a la espera de recibir una confirmación de la reproducción de los mensajes
73
DISEÑO Y DESARROLLO
enviados. Pasado un tiempo, si el receptor se encuentra en el rango de acción del emisor, este último vuelve a mandar los mensajes.
6.2.2.4.2
Explicación por bloques del script que ejecuta el dispositivo
El script que ejecutará la Raspberry se llama “obstaculo.py” y está escrito en Python. Este programa se encuentra guardado en el directorio raíz del dispositivo.
74
PROYECTO FIN DE GRADO
Diagrama 34: explicación general del emisor del tipo "Obstáculo"
75
DISEÑO Y DESARROLLO
6.2.2.4.2.1
Bloque 1º: importación de librerías necesarias
A continuación se importan las librerías necesarias para desarrollar el script.
import time: Importa la librería “time” para poder añadir retardos en el programa . import Bluetooth: Importa la librería “ Bluetooth” para poder crear sockts y mandar textos. from subprocess import call: Importa la función “call” de la librería “subprocess” para poder ejecutar comandos de Debian (ajenos al lenguaje Python). from subprocess import check_output: Importa la función “check_output” de la librería ”subprocess” para ejecutar comandos de Debian y guarda el elemento que devuelvan.
Diagrama 35: importación de librerías en el emisor del tipo "Obstáculo"
6.2.2.4.2.2
Bloque 2º: definición de variables necesarias
Es importante definir las variables al comienzo del código para poder cambiarlas si fuera necesario.
port = 0x1001: asigna el valor 0x1001 a la variable “port” target_name = "raspberrypi-0": el dispositivo que se quiere encontrar se llama “raspberrypi -o” target_address = None: es declara la variable donde se guardará la MAC del dispositivo encontrado. De momento no tiene valor, por lo tanto es “None”
localizacion = " Atencion” Escaleras ": se guarda la localización del lugar auxiliar = “ Segunda planta Eside ”: se añade un mensaje auxiliar
alternativa = “ Hay un ascensor en el pasillo ”: se añade un mensaje indicando cómo evitar el obstáculo
76
PROYECTO FIN DE GRADO
lejos = "estas lejos ": se guarda el mensaje de “estás lejos” para informar a usuario si se diera el caso
Diagrama 36: declaración de variables en el emisor del tipo "Obstáculo"
6.2.2.4.2.3
Bloque 3º: búsqueda de dispositivo receptor
Este paso consiste en encontrar el dispositivo receptor y guarda su MAC para poder establecer una conexión.
nearby_devices = Bluetooth.discover_devices(duration = 4): Busca dispositivos cercanos y los guarda en una variable. for bdaddr in nearby_devices: Examina la variable recién guardada hasta encontrar lo que busca. if target_name == Bluetooth.lookup_name( bdaddr ): compara el nombre del dispositivo encontrado con el que se quiere encontrar. Y si se encuentra... target_address = bdaddr: ...guarda la MAC en la variable preparada para ello anteriormente. break: para el bucle de comparación una vez encontrado. call(["hciconfig","hci", "reset"]): resetea el dispositivo Bluetooth para detener cualquier proceso que se haya podido quedar a medias.
Diagrama 37: búsqueda de dispositivo receptor en el emisor del tipo "Obstáculo"
77
DISEÑO Y DESARROLLO
6.2.2.4.2.4
Bloque 4º: sacar en pantalla en resultado de la busqueda
Para ayudar al testeo del script se imprime en pantalla lo ocurrido en la búsqueda.
if target_address is not None:: Si la MAC no es “None”... print "found target Bluetooth device with address ", target_address: impreme la MAC else::Si no... print "could not find target Bluetooth device nearby": Impreme que no ha encontrado la MAC
Diagrama 38: impresión en pantalla del resultado de la búsqueda en el emisor del tipo "Obstáculo"
6.2.2.4.2.5
Bloque 5º: establecimiento de la conexión
Para poder enviar los mensajes es precioso crear un socket y conectarlo al receptor.
while 1:: comienza el bucle de envío de información sock=Bluetooth.BluetoothSocket(Bluetooth.L2CAP): se crea elemento tipo “socket” sobre el protocolo L2CAP sock.connect((target_address, port)): conecta con el dispositivo cuya MAC a encontrado a través del puerto declarado anteriormente y espera aceptación para continuar
Diagrama 39: creación de socket y petición de conexión en el emisor del tipo "Obstáculo"
6.2.2.4.2.6
Bloque 6º: determinación de la potencia de la conexión
Antes de enviar ningún mensaje, se analizará la potencia de la señal para determinar si el receptor está demasiado lejos o no. En caso de estarlo, el script vuelve a empezar.
78
PROYECTO FIN DE GRADO
value = check_output(["sudo","hcitool","rssi",target_address]): Se llama a la función “rssi”de la herramienta “hcitool” que devuelve un texto con la potencia en dB de la conexión establecida. if value is not 'Not connected.':: Si el valor NO es “Not conected” y por tanto haya detectado la potencia... value = list(value): ...guarda el mensaje como una lista de caracteres i=0: declaración de una variable auxiliar while i<=18:: sabiendo que los primeros 18 caracteres son texto inútil value[i]='': Eliminamos dichos caracteres i=i+1: contamos una vuelta del bucle para quitar los caracteres value=''.join(value): Convertimos la nueva lista en una cadena de caracteres print value: Imprimimos el valor de la conexión en dB value = int(value): convertimos la cadena de caracteres a un número
Diagrama 40: determinación de si el receptor está lo suficientemente cerca o no en el emisor del tipo "Obstáculo"
6.2.2.4.2.7
Bloque 7º: envío de mensajes
Esta parte del código es la encargada de enviar los mensajes al receptor, enviando un mensaje u otro dependiendo de si el usuario está lo suficientemente cerca o no.
if value>-5:: si la potencia de la señal es mayor de 5dB sock.send("D"): se envía el identificador de “ D” de Dependencia sock.send(localizacion): se envía la localización del obstáculo sock.send( “auxiliar“ ): se envía el mensaje auxiliar. sock.send( “alternativa“ ): se envía el mensaje con la alternativa
79
DISEÑO Y DESARROLLO
confirmacion = sock.recv(1024): se queda a la espera de recibir una confirmación de la reproducción del mensaje enviado print(confirmacion): se imprime la confirmación recibida sock.close(): se cierra el elemento socket y comienza el bucle de nuevo else:: si no estuviera conectado... break: comenzamos el bucle de nuevo
Diagrama 41: envío de mensajes según la distancia del receptor en el emisor del tipo "Obstáculo"
6.2.3 Configuración y funcionamiento del dispositivo receptor El dispositivo receptor estará formado por una Raspberry Pi, un adaptador USB Bluetooth, un sensor de distancia ultrasónico, un pulsador y un conmutador. Este dispositivo tiene dos modos de funcionamiento. En el primero de los modos, la Raspberry Pi recibirá y reproducirá los mensajes que envíen los emisores.
80
PROYECTO FIN DE GRADO
Diagrama 42: estados del dispositivo receptor
En el segundo, comenzará a funcionar el sensor de distancia que informará al usuario si tiene algún obstáculo cerca. El conmutador servirá para cambiar de un modo a otro. Por último, el pulsador reinicia e servicio Bluetooth e informa al usuario de que el dispositivo está funcionando. Esta funcionalidad está pensada por si es usuario tiene dudas de que el dispositivo esté funcionando correctamente.
81
DISEÑO Y DESARROLLO
Diagrama 43: estados del receptor en modo de detección de obstáculos.
Cabe destacar que este dispositivo ejecutará tres scripts a la vez. Uno de ellos se encargará de recibir y reproducir los mensajes que envíen los emisores. El segundo, hará que cuando el usuario pulse el botón, la aplicación se reinicie y le informe de que está en funcionamiento. Por último, se ejecutará un tercer script que hará que cuando se cambie la posición del conmutador, la información de los emisores se silencie y se oigan los avisos que el sensor de distancia emita.
6.2.3.1 Explicación por bloques del script que escucha los mensajes de los emisores
82
PROYECTO FIN DE GRADO
Diagrama 44: explicación general del dispositivo receptor
83
DISEÑO Y DESARROLLO
6.2.3.1.1
Bloque 1º: importación de librerías necesarias
A continuación se importan las las librerías necesarias necesarias para poder poder desarrollar desarrollar el sript.
import Bluetooth: Importa la librería “ Bluetooth Bluetooth” para poder crear sock ets ets y mandar textos from subprocess import call: Importa la función “call” de la librería “subprocess” para poder ejecutar comandos de Debian (ajenos al lenguaje Python) import time: Importa la librería “time” para poder añadir retardos en el programa import RPi.GPIO as GPIO: importa GPIO: importa la librearía para controlar los pines de la Raspberry
Diagrama 45: importación de librerías en el dispositivo receptor
6.2.3.1.2
Bloque 2º: definición de la configuración de los pines GPIO
Esta parte del código es la encarga de asignar las funciones que tendrán los pines GPIO de la Raspberry. En este caso necesitamos configurar uno como entrada, para detectar en qué modo se está.
GPIO.setmode(GPIO.BCM): Se gestionarán la numeración de los pines será gestionada por el GPIO.setmode(GPIO.BCM): Se número que los define y no por el número que ocupan en la placa GPIO_SWITCH = 23: El 23: El GPIO que recibirá la información del switch será el 23 GPIO.setup(GPIO_SWITCH,GPIO.IN, pull_up_down=GPIO.PUD_DOWN): pull_up_down=GPIO.PUD_DOWN): configuramos ese pin como entrada y como apagado por defecto
84
PROYECTO FIN DE GRADO
Diagrama 46: configuración de los pines GPIO en el dispositivo receptor
6.2.3.1.3
Bloque 3º: establecimiento de modo descubrible
Para que un dispositivo emisor pueda conectar con el receptor, este último tiene que estar en modo descubrible.
call(["sudo","hciconfig","hci0","piscan"]): se llama a la función piscan para que los emisores puedan encontrar al receptor time.sleep(1): se retrasa un segundo para que los cambios se apliquen
Diagrama 47: establecimiento del dispositivo receptor como descubrible
6.2.3.1.4
Bloque 4º: definición de la función semaforo()
Se define la función semaforo(), que será la encargada de recibir los mensajes de los semáforos.
def semaforo():: comienzo de la función semaforo() print "Semaforo": se imprime la el nombre de la función en pantalla datacalle = client_sock.recv(1024): se espera recibir la localización del semáforo datacolor = client_sock.recv(1024): se espera recibir la color del semáforo datatiempo = client_sock.recv(1024): se espera recibir la tiempo para que el semáforo cambie de color print "received [%s]" % datacalle: se imprimen en pantalla la información recibida print "received [%s]" % datacolor print "received [%s]" % datatiempo
85
DISEÑO Y DESARROLLO
Diagrama 48: definición de la función semaforo ()
6.2.3.1.5
Bloque 5º: guardado y reproducción de la información recibida del
semáforo
Una vez la función haya recibido los mensajes, los guarda para poder reproducirlos con el sintetizador de voz “Festival”.
filename = 'texto': se crea una nueva variable con un texto file=open(filename,'w'): Se escribe esa variable en otra que se llama file file.write("Semaforo de "+datacalle+datacolor+datatiempo): Se reescribe la información del del semáforo junto con otras palabras para crea una oración file.close():se cierra el archivo if not GPIO.input(GPIO_SWITCH):: Si el switch no está pulsado... call('festival --tts --language spanish '+filename, shell=True): se llama a la función “festival” que reproducirá en español el texto recientemente escrito.
client_sock.send("ok"): se manda el mensaje de confirmación client_sock.close():: cerramos el primer socket server_sock.close():: cerramas el segundo socket Nota: Festival es el sintetizador de voz que transforma textos en voz hablada
86
PROYECTO FIN DE GRADO
Diagrama 49: guardado y reproducción de los mensajes en la función semaforo()
6.2.3.1.6
Bloque 6º: definición de la función ascensor()
A continuación se define la función ascensor(), la cual será la encargada de recibir los mensajes emitidos por los emisores del tipo ascensor (A).
def ascensor():: comienzo de la función semaforo() print "Ascensor": se imprime la el nombre de la función en pantalla localizacion = client_sock.recv(1024): se espera recibir la localización del ascensor print "received [%s]" % localizacion: se imprime la información recibida
Diagrama 50: definición de la función ascensor()
87
DISEÑO Y DESARROLLO
6.2.3.1.7
Bloque 7º: guardado y reproducción de la información recibida del
ascensor
Una vez la función haya recibido los mensajes, los guarda para poder reproducirlos con el sintetizador de voz “Festival”.
filename = 'texto': se crea una nueva variable con un texto file=open(filename,'w'): Se escribe esa variable en otra que se llama file file.write(localización): Se reescribe la información del semáforo junto con otras palabras para crear una oración file.close(): se cierra el archivo if not GPIO.input(GPIO_SWITCH):: Si el switch no está pulsado... call('festival --tts --language spanish '+filename, shell=True): se llama a la función “festival” que reproducirá en español el texto recientemente escrito.
client_sock.send("ok"): se manda el mensaje de confirmación client_sock.close():: cerramos el primer socket server_sock.close():: cerramas el segundo socket
Diagrama 51: guardado y reproducción de los mensajes en la función ascensor()
88
PROYECTO FIN DE GRADO
6.2.3.1.8
Bloque 8º: definición de la función obstaculo()
En este bloque se define la función obstáculo, encargada de recibir aquellos mensajes de los emisores del tipo “obstáculo (O)”.
def obstaculo():: comienzo de la función obstaculo() print "Obstaculo": se imprime el nombre de la función localizacion = client_sock.recv(1024): se espera recibir la localización del obstáculo auxiliar = client_sock.recv(1024): se espera recibir información auxiliar alternativa = client_sock.recv(1024): se espera recibir una ruta altenativa al obstáculo print "received [%s]" % localizacion: Se imprime la información recibida print "received [%s]" % auxiliar print "received [%s]" % alternativa
Diagrama 52: definición de la función obstaculo()
6.2.3.1.9
Bloque 9º: guardado y reproducción de la información recibida del
obstáculo
Una vez la función haya recibido los mensajes, los guarda para poder reproducirlos con el sintetizador de voz “Festival”.
filename = 'texto': se crea una nueva variable con un texto
89
DISEÑO Y DESARROLLO
file=open(filename,'w'): Se escribe esa variable en otra que se llama file file.write(localizacion+auxiliar+alternativa): Se reescribe la información del semáforo junto con otras palabras para crea una oración file.close(): se cierra el archivo if not GPIO.input(GPIO_SWITCH):: Si el switch no está pulsado... call('festival --tts --language spanish '+filename, shell=True): se llama a la función “festival” que reproducirá en español el texto recientemente escrito.
client_sock.send("ok"): se manda el mensaje de confirmación client_sock.close():: cerramos el primer socket server_sock.close():: cerramas el segundo socket
Diagrama 53: guardado y reproducción de los mensajes en la función obstaculo()
6.2.3.1.10
Bloque 10º: definición de la función dependencia()
En este bloque se define la función de dependencia. Esta función recibirá la informacion proveniente de los emisores del tipo “dependencia (D)”.
def dependencia():: definición de la función dependencia print "Dependencia": se impirme el nombre de la función
90
PROYECTO FIN DE GRADO
localizacion = client_sock.recv(1024): se espera recibir la información de la localización auxiliar = client_sock.recv(1024): se espera recibir información auxiliar print "received [%s]" % localizacion: se imprime la información recibida print "received [%s]" % auxiliar
Diagrama 54: definición de la función dependecia()
6.2.3.1.11
Bloque 11º: guardado y reproducción de la información recibida de la
dependencia
Una vez la función haya recibido los mensajes, los guarda para poder reproducirlos con el sintetizador de voz “Festival”.
filename = 'texto': se crea una nueva variable con un texto file=open(filename,'w'): Se escribe esa variable en otra que se llama file file.write(localizacion+auxiliar): Se reescribe la información del semáforo junto con otras palabras para crea una oración file.close(): se cierra el archivo if not GPIO.input(GPIO_SWITCH):: Si el switch no está pulsado... call('festival --tts --language spanish '+filename, shell=True): se llama a la función “festival” que reproducirá en español el texto recientemente escrito.
client_sock.send("ok"): se manda el mensaje de confirmación client_sock.close():: cerramos el primer socket
91
DISEÑO Y DESARROLLO
server_sock.close():: cerramas el segundo socket
Diagrama 55: guardado y reproducción de los mensajes en la función dependecia()
6.2.3.1.12
Bloque 12º: declaración de los indicadores:
Se define una lista que indica qué función se debe ejecutar dependiendo del identificad or
que se reciba. identificadores = { "A": ascensor, "O": obstaculo, "D": dependencia, "S": semaforo }
92
PROYECTO FIN DE GRADO
Diagrama 56: definición de identificadores en dispositivo receptor
6.2.3.1.13
Bloque 13º: Bucle que establece las conexiones Bluetooth
En este último bloque se implementa la primera parte de un bucle infininio (la segunda parte son las definiciones de las funciones). Será el encargado de recibir el primer mensaje, el identificador y ejecutar una función u otra dependiendo del mismo.
while 1:: comienzo de un bucle infinito server_sock=Bluetooth.BluetoothSocket( Bluetooth.L2CAP ): se crea un elemento socket sobre el protocolo L2CAP port = 0x1001: se define el puerto de la conexión, el mismo que usarán los emisores server_sock.bind(("",port)): se habilita el puerto para escuchar server_sock.listen(1): el dispositivo se queda a la espera de recibir una petición de conexión client_sock,address = server_sock.accept(): acepta la conexión recibida print "Accepted connection from ",address: impreme en pantalla un mensaje indicando la satisfactoria conexión identificador = client_sock.recv(1024): recibe el identificador de la conexión identificadores[identificador](): dependiendo del identificador ejecuta una de las funciones declaradas antes
93
DISEÑO Y DESARROLLO
Diagrama 57: aceptación de conexión del emisor y espera de recepción del identificador de tipo de dispositivo
6.2.3.2 Explicación del script que reinicia el servicio Bluetooth A continuación se escribe el desarrollo del script que reinicia el servicio Bluetooth cunado el usuario presiona el pulsador del dispositivo receptor. El script se llama “pulsador.py y está alojado en el directorio raíz del dispositivo.
import RPi.GPIO as GPIO: se importa la librería para gestionar los pines GPIO de la Raspberry Pi import time: se importa la librería de tiempo para poder gestionar éste from subprocess import call: de la librería “subprocess” se importa la función “call” que sirve para hacer llmadas fuera de el compilador Python GPIO.setmode(GPIO.BOARD) : se indica que la numeración de los GPIOs que se va a utilizar es la posición que ocupan en la placa GPIO.setup(12, GPIO.IN, pull_up_down=GPIO.PUD_DOWN): se establece el pin número doce como una entrada y se dice que por defecto esté apagado. while 1:: se crea un bucle infinito if GPIO.input(12):: si la entrada detecta algo... print "pulsando": se imprime en pantalla “pulsando” call(["sudo","service","Bluetooth","restart"]): se reinicia el servicio Bluetooth de la Raspberry Pi
94
PROYECTO FIN DE GRADO
time.sleep(1): se espera un segundo para dejar tiempo a que los cambios se apliquen call(["sudo","hciconfig","hci0","piscan"]): se estable el dispositivo en modo descubrible data = "Estoy en marcha": se crea un mensaje que informa de que el dispositivo “está en marcha”
filenamer = 'txto' : se crea un archivo filer=open(filename,'w'): se abre para escritura filer.write(data): se escribe el mensaje informativo filer.close(): se cierra el archivo call('festival --tts --language spanish '+filenamer, shell=True): Se reproduce el archivo mediante el sintetizador de voz “Festival”
else:: si la entrada no detecta nada... print "no estas pulsando": se impreme este mensaje en pantalla time.sleep(0.5): se espera medio segundo para reiniciar el bucle.
Diagrama 58: explicación general de la función de reseteo
6.2.3.3 Explicación por bloques del script que habilita el dispositivo receptor en modo “detector de o bstáculos” El dispositivo tiene un conmutador de dos posiciones. Cuando éste está en una de las posiciones, el dispositivo funciona como receptor de mensajes. Si está en la otra
95
DISEÑO Y DESARROLLO
posición, funciona como detector unidireccional de obstáculos. El script se llama “distancia.py y está alojado en el directorio raíz del dispositivo.
Diagrama 59: explicación general de la función de detección de obstáculos del dispositivo receptor
96
PROYECTO FIN DE GRADO
6.2.3.3.1
Bloque 1º: importación de librerías necesarias
En primer lugar, se importan las librerías necesarias para el desarrollo del script.
import RPi.GPIO as GPIO: se importa la librería para gestionar los pines GPIO de la Raspberry Pi import time: se importa la librería de tiempo para poder gestionar éste from subprocess import call: de la librería “subprocess” se importa la función “call” que sirve para hacer llmadas fuera de el compilador Python
Diagrama 60: importación de librerías en la función de detección de obstáculos en el dispositivo receptor
6.2.3.3.2
Bloque 2º: Definición de las funciones de los pines GPIO
A continuación se definen qué funciones van a realizar los pines GPIO de la Raspberry Pi. En este caso necesitaremos habilitar 3 pines, dos para las funciones del sensor, y otro para detectar la entrada que proporcione el conmutador.
GPIO.setmode(GPIO.BCM): se indica que la numeración de los GPIOs que se va a utilizar es el nombre de los mismos y NO la posición que ocupan en la placa GPIO_TRIGGER = 25: se usa el pin GPIO 25 como TRIGGER GPIO_ECHO = 7: se usa el pin GPIO 7 como ECHO
97
DISEÑO Y DESARROLLO
GPIO_SWITCH = 23: se usa el pin GPIO 23 como SWITCH GPIO.setup(GPIO_TRIGGER,GPIO.OUT): se configura el Trigger como salida GPIO.setup(GPIO_ECHO,GPIO.IN): se configura el Echo como entrada GPIO.setup(GPIO_SWITCH,GPIO.IN, pull_up_down=GPIO.PUD_DOWN): se configura el Switch como entrada GPIO.output(GPIO_TRIGGER,False): se pone el pin 25 en LOW
Diagrama 61: establecimiento de la función de los pines GPIO del dispositivo receptor
6.2.3.3.3
Bloque 3º: toma de distancia
En este bucle infinito se determina la distancia a la que está el obstáculo. El sensor emite un ultrasonido y lo recibe calculando el tiempo que ha tardado en volver. Ese tiempo, por la velocidad del sonido y entre dos nos da la distancia a la que está el obstáculo.
while True: se crea un bucle infinito if GPIO.input(GPIO_SWITCH): si la entrada del switch detecta algo GPIO.output(GPIO_TRIGGER,True)se envía un pulso de ultrasonidos time.sleep(0.00001): se hace una pequena pausa GPIO.output(GPIO_TRIGGER,False): se apaga el pulso start = time.time(): guarda el tiempo actual en la variable start while GPIO.input(GPIO_ECHO)==0:: mientras el sensor no reciba señal...
98
PROYECTO FIN DE GRADO
start = time.time(): se mantiene el tiempo actual while GPIO.input(GPIO_ECHO)==1:: si el sensor recibe señal... stop = time.time(): se guarda el tiempo actual en otra variable elapsed = stop-start: así se obtiene el tiempo transcurrido entre e nvío y recepción distance = (elapsed * 34300)/2: la distancia es igual a tiempo por velocidad partido por 2 D = (T x V)/2 print distance: se imprime la distancia (en centimetros) por pantalla
Diagrama 62: explicación de cómo se determina la distancia utilizando un sensor de distancia ultrasónico
6.2.3.3.4
Bloque 4º: reproducción de mensajes según la distancia detectada
En función de la distancia detectada, se reproduce un mensaje u otro, siendo estos: “Obstáculo a menos de un metros”, “Obstáculo a menos de metro y medio” y “Obstáculo a menos de dos metros”.
99
DISEÑO Y DESARROLLO
if distance < 100: si la distancia en menor a 100 metros filename = 'txt': se crea un archivo para poder reproducir el mensaje filee=open(filename,'w'): se abre para escritura filee.write("Obstaculo a menos de un metro"): se escribe el mensaje informativo filee.close(): se cierra el archivo call('festival --tts --language spanish '+filename, shell=True): Se reproduce el archivo mediante el sintetizador de voz “Festival”
time.sleep(1): se hace una pausa para no saturar el procesador de la Raspberry Pi else: if distance < 150: si la distancia es menor de 150 centímetros... filename = 'txt': se crea un archivo para poder reproducir el mensaje filee=open(filename,'w'): se abre para escritura filee.write("Obstaculo a menos de un metro y medio"): se escribe el mensaje informativo filee.close(): se cierra el archivo call('festival --tts --language spanish '+filename, shell=True): Se reproduce el archivo mediante el sintetizador de voz “Festival”
time.sleep(1): se hace una pausa para no saturar el procesador de la Raspberry Pi else: if distance < 200:: si la distancia es menor de 200 centímetros... filename = 'txt': se crea un archivo para poder reproducir el mensaje filee=open(filename,'w'): se abre para escritura
100
PROYECTO FIN DE GRADO
filee.write("Obstaculo a menos de dos metros"): se escribe el mensaje informativo filee.close(): se cierra el archivo call('festival --tts --language spanish '+filename, shell=True): Se reproduce el archivo mediante el sintetizador de voz “Festival” time.sleep(1): se hace una pausa para no saturar el procesador de la Raspberry Pi
Diagrama 63: envío de un mensaje u otro dependiendo la distancia de l objeto detectado
6.2.4 Configuración del arranque de los dispositivos emisores y receptores Es interesante que los dispositivos adquieran la configuración que necesitan nada más arrancar y de forma automática. Para ello se crea una función “bash” que ejecuta los scripts escritos en Python. Después, un ejecutador de tareas llamado “Cron” ejecuta las funciones “bash” al arranque de la Raspberry Pi.
101
DISEÑO Y DESARROLLO
6.2.4.1 Creación de la función “bash” Es interesante crear una función “bash” que ejecute los sripts Python en un bucle infinito. De esta manera se consigue rearrancar los sripts en caso de que fallen. Para ello, se debe crear un archivo sin extensión:
sudo nano semaforo Al abrirse el editor de texto se ha de escribir lo siguiente:
#!/bin/bash ### BEGIN INIT INFO # Provides:
blabla
# Required-Start:
$syslog
# Required-Stop:
$syslog
# Default-Start:
2345
# Default-Stop:
016
# Short-Description: blabla # Description: # ### END INIT INFO echo Iniciando la aplicacion Semaforo... #Muestra en pantalla un mensaje informando de la #ejecución de la función sudo hciconfig hci0 reset #se resetea el dispositivo Bluetooth para cercieorasa de que funciona sudo hciconfig hci0 piscan #se activa el modo descubrible del dispositivo while true; do #bucle infinito sudo python misriptenpython.py sudo hciconfig hci0 reset #se vuelve a resetear el dispositivo sudo hciconfig hci0 piscan #se vuelve a activar el modo descubrible done #fin del bucle, comienza de nuevo
Nota: las primeras líneas que están comentadas precedidas por una almohadilla (#) son necesarias para que la función “bash” funcione .
102
PROYECTO FIN DE GRADO
6.2.4.2 Otorgamiento de permisos Para poder ejecutar la función en el arranque de la máquina hemos de otorgarle los permisos. Se hace del siguiente modo
sudo chmod 775 elnombredenuestrafuncionbash
6.2.4.3 Configuración de las tareas que hacer al arrancar la máquina Para poder ejecutar las funciones que se creen en el arranque de l amáquina se ha de configurar el programa Cron. Es importante hacerlo como usuario y sin permisos de administrador:
crontab –e Se abrirá el editor de texto y se habrá de escribir lo siguiente al final del documento:
@reboot ./elnombredenuestrafuncionbash Por lo tanto, el documento quedaría así:
# Edit this file to introduce tasks to be run by cron. # # Each task to run has to be defined through a single line # indicating with different fields when the task will be run # and what command to run for the task # # To define the time you can provide concrete values for # minute (m), hour (h), day of month (dom), month (mon), # and day of week (dow) or use '*' in these fields (for 'any').# # Notice that tasks will be started based on the cron's system # daemon's notion of time and timezones. # # Output of the crontab jobs (including errors) is sent through # email to the user the crontab file belongs to (unless redirected). # # For example, you can run a backup of all your user accounts # at 5 a.m every week with: # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
103
DISEÑO Y DESARROLLO
# # For more information see the manual pages of crontab(5) and cron(8) # # m h dom mon dow command @reboot ./ elnombredenuestrafuncionbash Una vez definida la tarea, se ha de guardar el documento. De esta forma, la función “bash” se ejecutará en el arranque de la máquina .
6.2.5 Resultados En las diferentes fases de desarrollo del proyecto, se han realizado múltiples pruebas de control que han permitido ir mejorando y añadiendo funcionalidades al sistema VAV. La secuencia de resultados obtenidos tras la realización de dichas pruebas se relaciona a continuación.
6.2.5.1 Prueba 1ª Se realiza el envío de un mensaje de texto variando la distancia entre el dispositivo emisor y el receptor.
6.2.5.1.1
Resultado
Se considera apto en cuanto al tiempo de respuesta, que es en torno a 1 segundo. Sin embargo el resultado es muy pobre en lo referente a la estabilidad de la señal, dándose de forma arbitraria situaciones de fallo. Se decide mejorar las características del adaptador Bluetooth actual, aumentando la velocidad de transferencia y el alcance.
6.2.5.2 Prueba 2ª Se utiliza un adaptador Bluetooth 4.0 con un alcance nominal máximo de 50 metros y una velocidad de transferencia de 3 Mbps y se realizan d nuevo pruebas de transmisión de mensajes de texto.
104
PROYECTO FIN DE GRADO
6.2.5.2.1
Resultado
El resultado mejora claramente con respecto a la prueba 1. Se consigue que el sistema funcione sin falos, la velocidad es muy buena y el alcance es adecuado aunque se comprueba que el resultado real en este apartado ronda los 20-25 metros, valor muy alejado de los 50 metros que indica el fabricante.
6.2.5.3 Prueba 3ª Se realizan una serie de pruebas para calcular el intervalo de tiempo que transcurre desde que el dispositivo emisor envia el mensaje hasta que se reproduce en el recptor y se devuelve la confirmación de dicha reproducción.
6.2.5.3.1
Resultado
Tras realizar numerosas pruebas se llega a la conclusión de que el tiempo invertido en completar la secuencia envío-reproducción-confirmación, depende por un lado, de la longitud del mensaje, pero por otro lado tarda unos 3 segundos de media en devolver la confirmación de que ha recibido el mensaje. Este resultado no se considera aceptable por lo que se realizan nuevas pruebas para mejorarlo, lo que se consigue aumentando la velocidad de reproducción del sintetizador de voz Festival.
6.2.5.4 Prueba 4ª Se realizan pruebas en
las que hay varios emisores cercanos, para optimizar la
discriminación de los diferentes emisores y con ello mejorar el comportamiento del sistema.
6.2.5.4.1
Resultado
Comprobamos que, en un principio, el sistema se conectaba a uno u otro sin ningún criterio. Se entiende que es un comportamiento anómalo y que por ello este resultado necesitaba una mejora. Dicha mejora llegó al calcular la potencia de la señal emitida y
105
DISEÑO Y DESARROLLO
observarse que -5 db era el umbral para considerar que ambos dispositivos, emisor y receptor, estaban lo suficientemente cercanos. De esta manera si el emisor rechaza al receptor por no estar suficientemente cerca, la conexión se reinicia y permite que se conecte el otro emisor.
6.2.5.5 Prueba 5ª Se mide la demora que ocurre cuando el emisor, tras realizar la prueba de la potencia de señal, para detectar si el receptor está dentro de la distancia de conexión y en caso de que esté demasiado lejano, reinicia el sistema y tiene que volver a establecer la conexión.
6.2.5.5.1
Resultado
En las primeras mediciones el tiempo de demora era de 17 segundo. El resultado se consideró no apto y tras reajustes se ha logrado reducirlo a 10 segundos.
6.2.5.6 Prueba 6ª Se analiza el comportamiento del sensor de distancia ultrasónico, en relación a la calibración de las distancias y a la influencia de diferentes espacios.
6.2.5.6.1
Resultado
Las pruebas de calibración de distancia son satisfactorias. El sensor es preciso y t iene capacidad para medir distancias muy por encima de las que se utilizan en este proyecto. En cuanto a los diferentes ambientes espaciales se constata que en ambientes muy cerrados, como pasillos estrechos, las mediciones reflejan en ocasiones resultados erróneos debido a efectos de rebote de las ondas. Sin embargo, exceptuando esos espacios cerrados y estrechos, en todos los demás espacios interiores así como en espacios abiertos, el sensor funciona correctamente y las mediciones conseguidas son
106
PROYECTO FIN DE GRADO
fiables. Al realizar las pruebas se ha observado también que al tratarse de un sensor unidireccional, sólo detecta aquello que se encuentre enfrente.
6.2.5.7 Prueba 7ª Se calcula el tiempo que tarda en resetearse el servicio Blueototh cuando el usuario hace uso del pulsador de reseteo, que le permite comprobar que el sistema está activo.
6.2.5.7.1
Resultado
El reseteo lo hace muy rápido, prácticamente al instante, pero al hacerlo se elimina la conexión Bluetooth y el sistema tarda 6 segundos en conectar de nuevo.ç
Ilustración 12: prueba de campo junto a un semáforo del Ayuntamiento de Bilbao
Ilustración 11: prueba de campo. Utilizando el simulador de semáforo en una escenario real
107
DISEÑO Y DESARROLLO
6.2.6 Análisis de situaciones críticas En el funcionamiento del sistema VAV están previstas dos situaciones críticas.
6.2.6.1 Semáforos muy próximos entre sí Se ha contemplado la posibilidad de que dos semáforos se encuentren a corta distancia, con lo que se podría dar la circunstancia de que el dispositivo receptor que porta el usuario enlace con el semáforo no deseado.
Se ha identificado esta situación crítica con un escenario real de Bilbao, un cruce céntrico y muy denso en cuanto a la disposición de semáforos, el cruce de la calle Gran Vía con Alameda Mazarredo y Alameda Urquijo. En efecto, en esta localización hay un total de 12 semáforos regulando 6 pasos, 4 de ellos transversales transversale s a la calzada y dos de ellos oblicuos a la misma. En el diagrama se puede ver la disposición y las distancias que hay entre los semáforos y las fotografías corresponden a imágenes reales del escenario.
Ilustración 13: distancias entre los semáforo de la intersección de Gran Vía con Almeda Urquijo y Alameda Mazarredo
108
PROYECTO FIN DE GRADO
Para resolver esta situación crítica el sistema realiza una medición de la potencia de la señal recibida y y acepta valores inferiores a -5db, que corresponden corresponde n a distancias entre dispositivos emisor y receptor menores de 5 m, en cuyo caso acepta el valor y emite las informaciones correspondientes. En caso de que la potencia de la señal no sea menor a -5db, avisa de que se encuentra demasiado lejos y el dispositivo emisor se reinicia permitiendo así que el receptor se conecte a otro emisor diferente. En esta operación de reinicio se invierten varios segundos en los que el usuario se desplaza consiguiendo una localización diferente a la anterior.
En cualquier caso, esta situación crítica solamente se da en caso de dispositivos que entre sí tienen distancias inferiores a 5 metros, lo cual, aunque es posible, ocurre muy rara vez. Como puede verse en el caso del cruce que se ha tomado como referencia, sólo se da en los pasos oblicuos en los que lo previsible sería no instalar emisor alguno ya que parece más razonable y más seguro cruzar la calzada por los lugares más cort os.
6.2.6.2 Coincidencia de dos o más usuarios La segunda situación crítica es que coincidan al mismo tiempo dos usuarios con deficiencias visuales en el mismo semáforo. Esta contingencia se debe contemplar, aunque sea poco probable. Para dar respuesta a esta situación se debe proveer a cada punto de dos sistemas emisores, ambos realizarían la misma función y el segundo sólo sería necesario en caso de tener que contactar con dos usuarios simultáneamente. Este sistema de contingencia es similar al utilizado por muchas empresas que disponen de servicios duplicados para garantizar el servicio en caso de que uno de ellos falle. Cabría plantearse qué ocurriría si la coincidencia se diese entre tres o más usuarios, pero se entiende que es remota la probabilidad de que esto ocurriese sin que esos usuarios tuvieran relación entre sí y por ello pudieran recibir una única información válida para todo el grupo.
109
DISEÑO Y DESARROLLO
6.2.7 Versiones del dispositivo receptor En el presente apartado reseñamos brevemente las características de diferentes configuraciones que pueda equipar el receptor del sistema VAV.
6.2.7.1 Versión BASIC La versión BASIC del dispositivo receptor contiene los siguientes elementos:
Tarjeta programable Raspberry Pi 2.
Carcasa protección Raspberry.
Memoria SDHC 8GB Clase 4.
Adaptador Bluetooth Dongle de gama básica con un alcance de hasta 10 metros. Velocidad de transmisión de hasta 3Mbps. Bluetooth Versión 2.0
Batería de 2200 mAh
Puede realizar las siguientes funciones:
Identificación de semáforos: localización, estado y tiempo de espera.
Identificación de dependencias y luegares
Identificación de obstáculos
Identificación de ascensores
Coste total de los componentes: 50€
6.2.7.2 Versión STANDARD La versión STANDARD del dispositivo receptor contiene los siguientes elementos:
Tarjeta programable Raspberry Pi 2.
Carcasa protección Raspberry.
Memoria SDHC 8GB Clase 10.
Adaptador Bluetooth de gama media con un alcance de hasta 50 metros. Velocidad de transmisión de hasta 3Mbps. Bluetooth V2.0
Batería de 3000 mAh
Puede realizar las siguientes funciones:
110
Identificación de semáforos: localización, estado y tiempo de espera.
Identificación de dependencias y luegares
PROYECTO FIN DE GRADO
Identificación de obstáculos
Identificación de ascensores
Coste total de los componentes: 57 €
6.2.7.3 Versión PLUS La versión PLUS del dispositivo receptor contiene los siguientes elementos:
Tarjeta programable Raspberry Pi 2.
Carcasa protección Raspberry.
Memoria SDHC 8GB Clase 10.
Adaptador Bluetooth de gama alta con un alcance de hasta 200 metros. Velocidad de transmisión de hasta 3Mbps. Bluetooth Versión 4.0
Batería de 12000 mAh
Puede realizar las siguientes funciones:
Identificación de semáforos: localización, estado y tiempo de espera.
Identificación de dependencias y luegares
Identificación de obstáculos
Identificación de ascensores
Detector de obstáculos unidireccional
Coste total de los componentes: 75 €
111
DISEÑO Y DESARROLLO
112
PROYECTO FIN DE GRADO
7. PLANIFICACIÓN 7.1 DIAGRAMA DE GANTT DEL PROYECTO Mediante el presente diagrama se aprecia la secuenciación temporal de las diferentes tareas correspondientes a las fases de este proyecto.
SEMANAS
ACTIVIDAD
1
2
3
4
5
6
7
8
9
10 11 12 13 14 15 16 17
Análisis de las soluciones actuales del problema que afronta el proyecto Determinación las tareas a llevar a cabo en la realización de este proyecto Determinación de las duraciones de las tareas Análisis del funcionamiento de un semáforo genérico. Comparación de las características de Bluetooth y Wi-Fi. Comparación de las características de Arduino y Raspberry Pi Construción de un prototipo de semáforo Configuración de la Raspberry Pi Envío y recepción de mensajes escritos interpretables mediante Bluetooth. Reproducción del mensaje recibido mediante un sintetizador de voz Detección de la distancia del usuario mediante el valor de la potencia de recepción del Bluetooth. Implantación de un sensor de distancia ultrasónica en el dispositivo receptor Construcción del prototipo de receptor Análisis del alcance real del Bluetooth en las condiciones del proyecto Análisis de la velocidad de conexión entre emisor y receptor. Experimento el sistema en condiciones habituales. Calibrado y ajustes finales del sistema VAV
113
PLANIFICACIÓN
Cálculo del gasto total del proyecto. Elaboración final de la documentación. Preparación de la presentación de la defensa del Proyecto VAV
Tabla 7: diagrama de Gantt del Proyecto
114
PROYECTO FIN DE GRADO
8. PRESUPUESTO En la siguiente tabla se muestran los elementos necesarios para llevar a cabo el proyecto, así como su precio unitario y total. El precio de los elementos puede variar dependiendo de donde se compren. PRECIO UNITARIO
PRECIO TOTAL (€)
CONCEPTO
CANTIDAD
Arduino UNO
1
14,45 €
14,45
Batería externa
1
18,90 €
18,90
Bluetooth Dongle Marca "Coolbox"
1
9,00 €
Bluetooth Dongle Marca "Kloner"
1
5,00 €
Bluetooth Dongle Marca Netway
3
12,00 €
Breakout de GPIO para Raspberry Pi 2
1
8,51 €
Cable Ethernet
1
2,50 €
Cable HDMI
1
12,00 €
Cable Hembra-Hembra
40
0,10 €
4,00
Cable Macho-Macho
40
0,10 €
4,00
Carcasa Metacrilato para Raspberry Pi 2
2
19,00 €
Carcasa Plástico para Raspberry Pi 2
1
6,00 €
Conmutador
2
0,15 €
Cubo de metacrilato 13x13x13 cm
1
16,50 €
Embellecedor de diodo Led
3
0,05 €
Fuente de alimentación 5V
2
5,50 €
Gastos de envío y comisiones
3
8,20 €
Led monocromático
30
0,05 €
Material de oficina
1
15,00 €
15,00
Memoria MicroSD 8GB
5
8,95 €
44,75
Mini protoboard transparente
1
6,00 €
Módulo Bluetooth HC-06
2
8,75 €
Placa de metacrilalato 100x50cm
1
28,90 €
Protoboard
2
4,00 €
9,00 5,00 36,00 8,51 2,50 12,00
38,00 6,00 0,30 16,50 0,15 11,00 24,60 1,50
6,00 17,50 28,90 8,00
115
PRESUPUESTO
Pulsador
2
0,15 €
Raspberry Pi 2 Model
2
40,00 €
Resistencia 1KΩ
5
0,05 €
0,25
Resistencia 330Ω
5
0,05 €
0,25
Sensor de distancia ultrasónico
1
5,12 €
0,30 80,00
5,12
TOTAL
418,48
Tabla 8: presupuesto de materiales del Proyecto
A continuación se contemplan los gastos correspondientes al personal: Labor
Personas
Director de Proyecto (Ingeniero de Telecomunicaciones) Programador (Graduado en Ingeniería de Telecomunicaciones Total
Tabla 9: gastos de personal del Proyecto
116
Precio por hora (€)
Horas estimadas
Costo (€)
1
30,00
40
1.200,00
1
21,00
300
6.300,00 7.500,00
PROYECTO FIN DE GRADO
9. CONCLUSIONES Y LÍNEAS FUTURAS 9.1 CONCLUSIÓN Este proyecto utiliza las técnicas y tecnologías existentes con el objetivo de crear un producto basado en componentes sencillos y de bajo coste que sirva de ayuda a las personas con deficiencia visual.
Los objetivos programados y que se pueden ver en el apartado 4 de esta memoria, se han cumplido satisfactoriamente.
A lo largo de los 4 meses de elaboración de este proyecto, he analizado en profundidad los tipos de conexiones inalámbricas, sobre todo las conexiones Bluetooth, con el objetivo de enviar los mensajes de la forma más efectiva posible. Después de las pruebas de laboratorio y las pruebas de campo, se puede afirmar que el proyecto VAV funciona de forma eficaz.
Así mismo, para poder implementar los scripts que se ejecutan en las Raspberrys Pi he tenido que estudiar el lenguaje de programación conocido como Python. Por otro lado, el manejo del sistema operativo Raspbian (Linux) desde la línea de comandos ha supuesto un reto importante a la hora de llevar a cabo el proyecto.
Paralelamente a la elaboración del proyecto he descubirto todo un conjunto de posibilidades de utilización de la Raspberry Pi en la vida cotidiana.
A pesar de que el proyecto haya mostrado una eficacia satisfactoria, por el momento no se puede considerar un proyecto comercializable. Sin embargo, la idea del proyecto VAV es útil y puede ser puesta en práctica con unos medios y unos costes razonables. Los prototipos creados tienen una finalidad didáctica para mostrar los elementos y los
117
CONCLUSIONES Y LÍNEAS FUTURAS
tipos de conexiones utilizados. Es evidente que cualquier intento de comercialización pasaría por cambiar de forma considerable su aspecto y parte de los elementos.
El proyecto VAV ha de pasar por un entorno empresarial para poder desarrollar completamente sus funciones y oportunidades comerciales.
También creo que el proyecto podría formar parte de otro más grande, un proyecto de Smartcity, un mundo donde todo está conectado.
Después de realizar este proyecto mi sentimiento es satisfactorio porque el proyecto VAV responde a una necesidad de la sociedad. Resulta agradable sentir que se hace algo que ayuda a las personas.
Por último, he realizado este proyecto apoyándome en todos los conocimientos adquiridos en la carrera y aplicando las nuevas tecnologías y aprecio que las telecomunicaciones contribuyen a mejorar la calidad de vida de las personas.
9.2 LÍNEAS FUTURAS En las siguientes líneas se detallan posibles mejoras o modificaciones que podría adoptar el proyecto.
9.2.1 Redes “Mesh” Utilizando tecnología Wi-Fi en vez de Bluetooth se podrían crear redes “mesh”. Esto permitiría usar solomente 3 dispositivos emisores para gestionar un cruce completo. Para ello, habría que configurar el protocolo Babel en los dispositivos emisores y receptores, que permitiría localizar la situación exacta del receptor así como su trayectoria.
118
PROYECTO FIN DE GRADO
Este enfoque implicaría complejos cálculos matemáticos y estadísticos que permitirían conocer la localización y la trayectoria exacta del usuario. Esta complejidad excede la que le corresponde al presente proyecto.
Ilustración 14: Redes "mesh" aplicadas a una Smartcity
9.2.2 Mejora del detector de obstáculos Si bien es cierto que el detector de obstáculos del proyecto VAV puede sacar de un apuro al usuario, éste solo detecta obstáculos que estén en la línea de detección de este sensor, que normalmente será una línea perpendicular a la cadera del usuario. Debido a esta limitación este sensor no sería capaz de detectar obstáculos pequeños como por ejemplo peldaños o escalones.
Con la intención de mejorar esta característica del proyecto VAV, se contempla la idea de colocar dos sensores. Ambos estarían orientados al suelo, uno de ellos verticalmente y el otro con un ángulo.
El dispositivo debería ir colocado siempre a la misma altura en un bolsillo auxiliar del usuario. De esta manera uno de los sensores detectaría la distancia vertical que hay desde el dispositivo hasta el suelo, mientras que el otro detectaría una distancia oblicua
119
CONCLUSIONES Y LÍNEAS FUTURAS
al
suelo
cuyo
valor
permanecería
constante
hasta
encontrar
un
obstáculo.
Posteriormente, haciendo ciertos cálculos trigonométricos, podría indicar la distancia exacta a la que se encuentra el obstáculo.
9.2.3 Sustitución de la Raspberry Pi por una placa computacional exclusiva Esta mejora permitiría reducir el tamaño de los dispositivos y optimizarlos para el uso exclusivo del proyecto VAV con la consecuente mejora para la experiencia del usuario. La razón de ser de esta mejora reside en poder prescindir de todas las características que ofrece una Raspberry Pi que para este proyecto no son necesarias. Esta simplificación de la placa conllevaría una disminución de costes.
9.2.4 Dotación de inteligencia independiente al emisor de los semáforos Esta mejora implicaría integrar unas “micro -cámaras” en el sistema luminario de los semáforos, lo que permitiría conocer en tiempo real y sin depender de información externa, el estado del semáforo. Con ello se podría detectar si el semáforo no está funcionando correctamente y dar al usuario una información acorde a esa situación. Además, se podrían monitorizar los estados del semáforo pudiendo así calcular cuántos segundos quedan para que éste cambie de color.
120
PROYECTO FIN DE GRADO
10. BIBLIOGRAFÍA 10.1 RASPBERRY PI “Raspberry pi Spy”, http://www.raspberrypi-spy.co.uk/wpcontent/uploads/2012/06/Raspberry-Pi-GPIO-Layout-Model-B-Plus-rotated2700x900.png (abril 2015)
“Xataka Home”, http://www.xatakahome.com/ordenador es/raspberry-pi-que-es-comosacarle-partido-y-algunos-de-los-proyectos-mas-interesantes (abril 2015)
“Heraldo de Aragón”, http://www.heraldo.es/noticias/sociedad/2015/02/08/raspberry_ordenador_euros_3381 12_310.html
“ComputerHoy.com”, http://computerhoy.com/listas/software/mejores-distros-estrenartu-raspberry-pi-2-model-b-24013 (Marzo 2015)
“Raspberry para torpes”, http://raspberryparatorpes.net/raspberry-pi-sistemasoperativos/ (mayo 2015)
“Raspberry Pi Shop”, http://www.raspberryshop.es/descargas-software-raspberrypi.php (marzo 2015)
“Raspberry Pi”, https://www.raspberrypi.org/help/quick-start-guide/ (marzo 2015)
10.2 ARDUINO “ Arduino”,http://www. Arduino.cc/ (Marzo 2015)
“Ethek”, http://www.ethek.com/Arduino-que-es-y-para-que-sirve/ (Marzo 2015)
121
BIBLIOGRAFÍA
“Rduinostar.com”, http://rduinostar.com/documentacion/general/que-es-Arduino/(Marzo 2015)
“Menosmedia”, http://www.menosmedia.org/spip.php?article43 (Marzo 2015)
“Ethek”, http://www.ethek.com/raspberry-pi-vs-Arduino-cual-es-la-diferencia/ (Marzo 2015)
10.3 BLUETOOTH “Bluetooth”, http://www.Bluetooth.com/Pages/Fast-Facts.aspx (Marzo 2015)
“Bluetooth Developer Portal”, https://developer.Bluetooth.org/TechnologyOverview/Pages/Topology.aspx (Marzo 2015)
“Profesores.elo”, http://profesores.elo.utfsm.cl/~agv/elo323/2s06/projects/MontoyaToro/ (Mayo 2015)
An Introduction to Bluetooth Programming, http://people.csail.mit.edu/albert/bluezintro/index.html (Mayo 2015)
10.4 WI-FI “ADSLzone”, http://www.adslzone.net/2014/11/27/Wi-Fi-vs-Bluetooth-diferenciasventajas-e-inconvenientes/ (Marzo 2015)
“Webopedia”, http://www.webopedia.com/TERM/W/Wi_Fi.html (Marzo 2015)
“Edutecne”, http://www.edutecne.utn.edu.ar/monografias/standard_802_11.pdf (Marzo 2015)
122
PROYECTO FIN DE GRADO
10.5 PYTHON “Python”, https://docs.python.org/3/library/index.html (Mayo 2015)
“Python para principiantes”, https://librosweb.es/libro/python/(Junio 2015)
“Python”, https://docs.python.org/3/tutorial/index.html (junio 2015)
“Python”, https://docs.python.org/2/tutorial (junio 2015)
10.6 INFORMACIÓN ADICIONAL “Mácula-Retina”, http://www.macula-retina.es/ultimas-noticias/baja-vision/estadisticasen-espana-ceguera-y-baja-vision.html (Marzo 2015)
El confidencial, http://www.elconfidencial.com/tecnologia/2015-01-22/be-my-eyes-laapp-para-voluntarios-que-quieran-prestar-sus-ojos-a-los-invidentes_625452/ (Marzo 2015)
“Once”, http://www.once.es/new/servicios-especializados-en-discapacidad-visual (Marzo 2015)
“Universidad de La Rioja”, http://dialnet.unirioja.es/servlet/articulo?codigo=3344626&orden=275293&info=link (Marzo 2015)
10.7 PRODUCTOS O APLICACIONES “El Smartphone”, http://Smartphoneavancetecnologico.blogspot.com.es/p/historia-yevolucion-del-Smartphone.html (Marzo 2015)
“Faro de Vigo”, http://www.farodevigo.es/gran-vigo/2014/01/04/trafico-adaptasemaforos-senal-invidentes/941994.html (Marzo 2015)
123
BIBLIOGRAFÍA
“Diario Vasco”, http://www.diariovasco.com/v/20101002/bajo-deba/semaforos-mandopara-invidentes-20101002.html (Marzo 2015)
“Kapsys”, http://www.kapsys.com/fr/en/products/ (Marzo 2015)
124
PROYECTO FIN DE GRADO
11. ANEXOS En este apartado se incluyen todos los script sin comentarios utilizados para la elaboración del proyecto.
11.1 CÓDIGO DE EMISOR “ENVIADORTIMER.PY”
TIPO
“SEMÁFORO”:
import time import bluetooth from subprocess import call from subprocess import check_output
port = 0x1001 tcruce = 7 delay = 3 target_name = "raspberrypi-0" target_address = None localizacion = "Calle Sendeja con Ayuntamiento " lejos = "Estas lejos "
nearby_devices = bluetooth.discover_devices(duration = 3)
for bdaddr in nearby_devices: if target_name == bluetooth.lookup_name( bdaddr ): target_address = bdaddr break
call(["hciconfig","hci", "reset"])
125
ANEXOS
if target_address is not None: print "found target bluetooth device with address ", target_address else: print "could not find target bluetooth device nearby"
while 1: color = open('color.txt', 'r') color = color.read() tiempo = open('tiempo.txt', 'r') tiempo = tiempo.read() sock=bluetooth.BluetoothSocket(bluetooth.L2CAP) sock.connect((target_address, port)) value = check_output(["sudo","hcitool","rssi",target_address]) if value is not 'Not connected.': value = list(value) i=0 while i<=18: value[i]='' i=i+1 print value value=''.join(value) print value value = int(value) if value<-5: sock.send("S") sock.send(localizacion) sock.send(lejos) sock.send(" ") confirmacion = sock.recv(1024)
126
PROYECTO FIN DE GRADO
print(confirmacion) time.sleep(1) sock.close() time.sleep(3) exit() else: sock.send("S") sock.send(localizacion) sock.send(color) num = int(float(tiempo))-delay if num <= tcruce: sock.send("Espere. Cambio de Color inminente") else: sock.send("y quedan "+tiempo+" segundos para cambiar de color") confirmacion = sock.recv(1024) print(confirmacion) time.sleep(1) sock.close() else: break
11.2 CÓDIGO DE “ASCENSOR.PY”
EMISOR
TIPO
“ASCENSOR”:
import time import bluetooth from subprocess import call
port = 0x1001
127
ANEXOS
target_name = "raspberrypi-0" target_address = None
nearby_devices = bluetooth.discover_devices(duration = 4)
for bdaddr in nearby_devices: if target_name == bluetooth.lookup_name( bdaddr ): target_address = bdaddr break
call(["hciconfig","hci", "reset"])
if target_address is not None: print "found target bluetooth device with address ", target_address else: print "could not find target bluetooth device nearby"
while 1: sock=bluetooth.BluetoothSocket(bluetooth.L2CAP) sock.connect((target_address, port)) sock.send("A") sock.send("Ascensor Eside, planta numero 2") confirmacion = sock.recv(1024) print(confirmacion) sock.close()
11.3 CÓDIGO DE OBSTACULO.PY import time
128
EMISOR
TIPO
“OBSTÁCULO”:
PROYECTO FIN DE GRADO
import bluetooth from subprocess import call
port = 0x1001
target_name = "raspberrypi-0" target_address = None
nearby_devices = bluetooth.discover_devices(duration = 4)
for bdaddr in nearby_devices: if target_name == bluetooth.lookup_name( bdaddr ): target_address = bdaddr break
call(["hciconfig","hci", "reset"])
if target_address is not None: print "found target bluetooth device with address ", target_address else: print "could not find target bluetooth device nearby"
while 1: sock=bluetooth.BluetoothSocket(bluetooth.L2CAP) sock.connect((target_address, port)) sock.send("E") sock.send("Atencion!, escaleras, ") sock.send("Te encuentras en la segunda planta de Eside junto al campo de futbol, ") sock.send("Hay un ascensor en el pasillo ")
129
ANEXOS
confirmacion = sock.recv(1024) print(confirmacion) sock.close()
11.4 CÓDIGO DE EMISOR DEL TIPO “DEPENDENCIA”: DEPENDENCIA.PY import time import bluetooth from subprocess import call
port = 0x1001
target_name = "raspberrypi-0" target_address = None
nearby_devices = bluetooth.discover_devices(duration = 4)
for bdaddr in nearby_devices: if target_name == bluetooth.lookup_name( bdaddr ): target_address = bdaddr break
call(["hciconfig","hci", "reset"])
if target_address is not None: print "found target bluetooth device with address ", target_address else: print "could not find target bluetooth device nearby"
130
PROYECTO FIN DE GRADO
while 1: sock=bluetooth.BluetoothSocket(bluetooth.L2CAP) sock.connect((target_address, port)) sock.send("D") sock.send("Vedeles") sock.send("Te encuentras en la segunda planta de Eside") confirmacion = sock.recv(1024) print(confirmacion) sock.close()
11.5 CÓDIGO DE RECEPTOR EN MODO RECEPCIÓN DE MENSAJES: CLIENTECOMPLETO.PY import bluetooth from subprocess import call import time import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) GPIO_SWITCH = 23 GPIO.setup(GPIO_SWITCH,GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
#call("sudo","hciconfig","hci0","reset") call(["sudo","hciconfig","hci0","piscan"]) time.sleep(1)
def semaforo(): print "Semaforo" datacalle = client_sock.recv(1024) datacolor = client_sock.recv(1024) datatiempo = client_sock.recv(1024)
131
ANEXOS
print "received [%s]" % datacalle print "received [%s]" % datacolor print "received [%s]" % datatiempo
filename = 'texto' file=open(filename,'w') file.write("Semaforo de "+datacalle+datacolor+datatiempo) file.close() if not GPIO.input(GPIO_SWITCH): call('festival --tts --language spanish '+filename, shell=True) client_sock.send("ok") client_sock.close() server_sock.close()
def ascensor(): print "Ascensor" localizacion = client_sock.recv(1024) print "received [%s]" % localizacion
filename = 'texto' file=open(filename,'w') file.write(localizacion) file.close() if not GPIO.input(GPIO_SWITCH): call('festival --tts --language spanish '+filename, shell=True) client_sock.send("ok")
def escalera(): print "Escalera"
132
PROYECTO FIN DE GRADO
localizacion = client_sock.recv(1024) auxiliar = client_sock.recv(1024) alternativa = client_sock.recv(1024) print "received [%s]" % localizacion print "received [%s]" % auxiliar print "received [%s]" % alternativa
filename = 'texto' file=open(filename,'w') file.write(localizacion+auxiliar+alternativa) file.close() if not GPIO.input(GPIO_SWITCH): call('festival --tts --language spanish '+filename, shell=True) client_sock.send("ok") def dependencia(): print "Dependencia" localizacion = client_sock.recv(1024) auxiliar = client_sock.recv(1024) print "received [%s]" % localizacion print "received [%s]" % auxiliar
filename = 'texto' file=open(filename,'w') file.write(localizacion+auxiliar) file.close() if not GPIO.input(GPIO_SWITCH): call('festival --tts --language spanish '+filename, shell=True) client_sock.send("ok")
133
ANEXOS
identificadores = { "A": ascensor, "E": escalera, "D": dependencia, "S": semaforo }
while 1: server_sock=bluetooth.BluetoothSocket( bluetooth.L2CAP )
port = 0x1001 server_sock.bind(("",port)) server_sock.listen(1)
client_sock,address = server_sock.accept() print "Accepted connection from ",address
identificador = client_sock.recv(1024) identificadores[identificador]()
11.6 CÓDIGO DE RECEPTOR EN MODO DETECCIÓN DE OBSTÁCULOS: DISTANCIA.PY import RPi.GPIO as GPIO import time from subprocess import call GPIO.setmode(GPIO.BCM) GPIO_TRIGGER = 25 GPIO_ECHO = 7 GPIO_SWITCH = 23
134
PROYECTO FIN DE GRADO
GPIO.setup(GPIO_TRIGGER,GPIO.OUT) GPIO.setup(GPIO_ECHO,GPIO.IN) GPIO.setup(GPIO_SWITCH,GPIO.IN, pull_up_down=GPIO.PUD_DOWN) GPIO.output(GPIO_TRIGGER,False)
try: while True: if GPIO.input(GPIO_SWITCH): GPIO.output(GPIO_TRIGGER,True) time.sleep(0.00001) GPIO.output(GPIO_TRIGGER,False) start = time.time() while GPIO.input(GPIO_ECHO)==0: start = time.time() while GPIO.input(GPIO_ECHO)==1: stop = time.time() elapsed = stop-start distance = (elapsed * 34300)/2 por 2 D = (T x V)/2 print distance if distance < 100: filename = 'txt' filee=open(filename,'w') filee.write("Obstaculo a menos de un metro") filee.close() call('festival --tts --language spanish '+filename, shell=True) time.sleep(1) else: if distance < 150:
135
ANEXOS
filename = 'txt' filee=open(filename,'w') filee.write("Obstaculo a menos de un metro y medio") filee.close() call('festival --tts --language spanish '+filename, shell=True) time.sleep(1) else: if distance < 200: filename = 'txt' filee=open(filename,'w') filee.write("Obstaculo a menos de dos metros") filee.close() call('festival --tts --language spanish '+filename, shell=True) time.sleep(1)
except KeyboardInterrupt: print "quit" GPIO.cleanup()
11.7 CÓDIGO PULSADOR.PY
DE
PULSADOR
import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BOARD) GPIO.setup(12, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) from subprocess import call
while 1: if GPIO.input(12):
136
DEL
RECEPTOR: