Prototipo de pantalla de información de autobuses con Arduino

Hoy publico en ecomovilidad.net Granada que una pantalla de información de autobuses fue instalada en la Facultad de Ciencias de la Educación. Y me resultaron curiosos dos datos:

  • Su coste, unos 3000€
  • Quién lo pone, al parecer sólo el ayuntamiento y a elección de este, quien además se hace cargo de poner ese dinero

Pensé que 3000€ igual era algo demasiado caro para una pantalla tipo LED que se encuentra guarecida dentro de un edificio, y que el hecho de que lo ponga el ayuntamiento (y tal como está el ayuntamiento) puede hacer que no se pongan muchos más pese a que haya más edificios que lo quieran instalar.

Y bajo estas premisas me puse manos a la obra, y como es mejor vivirlo que contarlo, monté mi propio prototipo de pantalla en dos días.

1. Ingredientes

  • Microcontrolador programable: Arduino MEGA
  • Display LCD 16×2
  • Cables, potenciometro de 10K, placa de prototipado, pines.
  • Soldador (prestado por @belzebit)
  • Ordenador con el software Arduino + Processing + Servidor LAP (Linux + Apache + PHP, sin MySQL xD).

2. Montaje físico

Hay que soldarle las patillas al display (si no vienen ya soldadas como en mi caso), luego hay que unir muy bien todos los componentes siguiendo el siguiente y práctico esquema:

Conectalo así 🙂

 

3. Programación

Dado que en los ingredientes me falta un módulo de red para el Arduino… Lo programo como pasivo, le paso los datos a través de puerto serie conectado a un ordenador con un mini-servidor escrito en processing que a su vez reclama datos a un aplicación PHP de otro servidor local que a su vez es el que solicita los datos a la web de Rober.

Si, un poco lío, pero en el fondo no es para tanto 😛

Si tuviera un módulo de red podría programarse el Arduino como activo y conectaría directamente con Rober sin intermediarios (o como pasivo sin intermediarios si los sistemas de Rober incluyeran un sistema que enviara datos al Arduino)

3.1 Microcontrolador

En este caso (sin módulo de red) el microcontrolador tiene una actitud pasiva. Se dedica a tres cosas: Recibir datos, mostrar aletas y mostrar tiempos de autobuses.

Los datos los recibe de una forma muy especial. El inicio de una trama siempre viene marcado con el carácter ‘<‘, luego viene el carácter 1 si se trata de un mensaje de tiempos o 2 si se trata de una alerta, en este último caso se espera además un carácter numérico que indica el número de veces que se repite la alerta. A continuación de estos caracteres de control vienen los mensajes, formateados como deberían salir en pantalla, cada línea se delimita con ‘>’ y el fin de trama es también un ‘>’. Existe comprobación de errores, en caso de tramas incompletas solo se traga lo que está relleno, y en caso de mal formateadas se gestiona el caso de que sea más larga de la pantalla, en cuyo caso se parte y se va a la siguiente línea. Ejemplo de trama:

[codigo]<19  CALETA    +15>23 REALEJO   +16>8  CARTUJA     7><23 Atencion!>Centro Cortado>[/codigo]

Todo esto lo guarda en una estructura de datos, tras recibir datos toca el turno a mostrar los mensajes de alerta si los hubiera (suelta el texto correspondiente parpadeando los primeros segundos, y luego fijo. Tras esto resta una repetición.) y luego muestra los tiempos de buses dónde va leyendo el vector de Strings de dos en dos y poniéndolos durante 5 segundos hasta que lo haya leído todo. Tras esto vuelve al principio, si no hay tiempos nuevos suelta lo que tenía ya cargado.

Todas las muestras en pantalla las realiza usando la librería LiquidCrystal.

3.2 Servidor en processing

Una pequeña aplicación hace de puente entre la aplicación que ya tenía (una “lectora-interpretadora” en PHP de la web de Rober) y la comunicación vía puerto serie. Este llama cada 40 segundos a un archivo XML (luego vemos cómo se genera esto) que trae consigo los datos de la parada. Los datos se leen, se formatean para que aparezcan bien en la pequeña pantalla, se incluyen en una trama de las que sabe interpretar el software que hay en el arduino y se mandan por puerto serie de forma asíncrona (trabaja el caché en el Arduino).

3.3 Aplicación PHP

Es la “lectora-interpretadora” de la web de Rober. Convierte el código HTML, que cualquier usuario puede ver, en datos concretos, al leer la página correspondiente a una parada sabe interpretar qué es un número de línea, qué es el texto de sentido de la línea y cuál es el tiempo de ese autobús. Luego esto lo devuelve en un formato XML fácilmente entendible por una aplicación informática.

4. Resultado

Como veis el resultado es un prototipo funcional de pantallita que avisa de los tiempos del bus por unos 40€. Si bien quiero señalar que no se puede comparar con las otras pantallas, esta es pequeña y no está preparada para producción, pero vemos cómo gracias al hardware libre (arduino), el software libre (librerías arduino, processing, apache, PHP, linux), internet, y un poco de maña (tomar datos de la web de TTs. Rober) se pueden hacer por muy poco dinero y en poco tiempo (2 días) proyectos con funcionalidades que antes parecían complejas de conseguir en casa.

También quiero destacar que un mayor compromiso de las administraciones públicas a liberar datos haría a los ciudadanos más libres y les permitiría y animaría a hacer cosas como esta.

Por ejemplo si Tts. Rober tuviera una política abierta de cara a dar estos datos y los pusiera a disposición de otras aplicaciones a través del lenguaje XML ahora mismo posiblemente yo no estaría hablando de esta pantallita, puede que estuviera hablando de algo más grande[1]

También una liberación de datos permitiría que un edificio público, una empresa o incluso una urbanización se ponga su pantallita en lugar de tener que ser el ayuntamiento el que tenga que elegirlos y poner la pasta.

Al liberar datos otras aplicaciones como TT Granada o TuBus no verían con recelo invertir su tiempo en mejorar sus sistemas y la información que dan a la ciudadanía, ahora mismo viven en un limbo legal y de incertidumbre que les hace no saber hasta cuándo funcionarán sus aplicaciones que gratuitamente nos ceden a los ciudadanos para completar los huecos que no saben llenar las administraciones públicas.

Footnotes    (↵ vuelve al texto)

  1. Quizás algo como la aplicación que estaba desarrollando hacía 2008 y que tuve que dejar de desarrollar porque Rober bloqueó el acceso de mi servidor (GIGA4) al suyo, y podéis comprobar cómo sigue bloqueado
    Que por cierto, mi proyecto es una idea muy parecida a lo que instalaron en el Hospital Virgen de las Nieves hace unas semanas

Plural: 7 Comentarios Añadir valoración

  1. Matías Lallave Vázquez dice:

    Lo más triste de todo es que ésto no obedece al ostracismo tecnológico ni a la falta de formación especializada por parte de la administración pública, sino al interés en engrosar facturas, que responden ante dinero público, que a saber en qué bolsillo acaba todo el dinero de más que con este artículo demuestras que no es necesario.

  2. Pablo dice:

    Me ha gustado mucho tu proyecto de Arduino, yo estoy pensando en montarme una pequeña estación meteorológica. También soy de Granada, has comprado las placas en alguna tienda de Granada? Por cuanto te salio la Arduino MEGA?

    1. Fran Torres dice:

      Gracias! Lo he comprado a través de internet a un vendedor de China, en fin ya sabes… lo que aquí te cuesta una sola cosa comprado allí es un pack completo.

      Compré dos packs muy parecidos a estos dos:
      http://www.ebay.es/itm/DIY-Starter-Kit-lcd-Relay-Stepper-Infrared-1602-for-ATmega-328-1280-2560-board-/160700175660?pt=LH_DefaultDomain_0&hash=item256a7a152c#ht_4438wt_1269
      http://www.ebay.es/itm/Arduino-Kit-Wires-Breadboard-LED-Resister-Potentiometer-blue-LCD-MEGA-/270876103603?pt=LH_DefaultDomain_0&hash=item3f117953b3#ht_2735wt_1269

      Pero según veo no está incluido el Arduino MEGA (cuando yo lo compré venía en el lote), pero búscalo, en cualquier cosa china te sale por “na y menos”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *