lunes, 8 de diciembre de 2014

Usa tu sensor IR siguelineas como un mando a distancia con Arduino y Protocoder

En este afán que nos da de vez en cuando por usar los sensores para otras distintas para las que se supone de están hechos, hoy nos preguntamos si podríamos utilizar uno de los sensores que se usan para hacer un robot siguelíneas para crearnos nuestro propio mando a distancia.






Además, no vamos a hacer un mando a distancia normal y corriente, que para eso ya tenemos uno, sino que vamos a hacer uno que funcione con la voz. Si, si, con la voz, chulo ¿verdad?

Como siempre, lo primero es aclarar que yo realmente no hago mucho, solo corto, pego y reinterpreto el trabajo de otros y lo reutilizo en mi proyecto del momento. Es por ello que desde ya agradecemos a todos aquellos que nos han ayudado con su generosidad al compartir y que serán mencionados al final de esta entrada.


Que Necesitamos


Para hacer nuestro proyecto no vamos a utilizar ningún sistema caro de reconocimiento de voz, simplemente necesitamos un móvil android, un sensor IR de los utilizados para un siguelíneas, una placa arduino y un módulo de bluetooth. Nosotros hemos utilizado la placa bqZUM BT-328 que ya viene con bluetooth incorporado.




Empezamos


Como se ve en el video, la idea es que mediante una aplicación en el móvil podemos decir el canal que queremos ver, este lo interpreta y mediante bluetooth manda un comando a nuestra placa arduino, la que, a su vez, codifica dicho comando y lo envía a través del sensor de IR al receptor.

Lo primero que vamos a hacer es decodificar nuestro mando a distancia, o sea, necesitamos conocer "el idioma que hablan nuestro mando y nuestro receptor". El mando a distancia envía un código cada vez que pulsamos una tecla y necesitamos conocerlos para poder comunicarnos con la televisión, ya que nosotros hemos utilizado el mando de nuestra tele, pero podría hacerse con cualquier otro dispositivo que funcione por infrarojos (por ejemplo un coche teledirigido).

Tanto para decodificar, como para codificar posteriormente, nuestro mando a distancia, hemos usado la librería multi-protocolo de IR de Ken Shirriff (este es su blog y la librería podéis descargarla de aquí). Esta es una muy buena librería que nos va a facilitar enormemente el trabajo a la hora de recibir y enviar códigos infrarojos.

Bien, para la decodificación, hemos utilizado un sensor detector de infrarojos como el de la imagen y que con una conexión simple a nuestra placa arduino y el programa que viene en los ejemplos de la librería de Ken Shirriff llamado IRrecvDump.ino obtenemos por el monitor serial el volcado en formato RAW del cada una de las teclas que vamos pulsando en el mando a distancia.













De todos estos valores, lo que nos interesa son los valores que obtenemos en la fila "Raw (68)". De todos estos, quitamos el primer valor que aparece y eliminamos los signos negativos de aquellos que los tengan, o sea, todos los valores que vamos a utilizar han de ser positivos. Por lo que nos quedaremos con algo así:

unsigned int T1[68] = {4450, 4400, 600, 1650, 550, 1650, 550, 1650, 600, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 1650, 550, 1650, 600, 1650, 550, 550, 550, 550, 550, 550, 550, 500, 600, 550, 550, 550, 550, 550, 550, 1650, 600, 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, 1650, 550, 1650, 600, 500, 600, 1650, 550, 1600, 600, 1650, 550, 1650, 600, 1600, 600};

Repetimos esta operación tantas veces como teclas queramos programar en nuestro mando.

Una vez que tenemos esto, el resto es fácil, solo hemos de codificar todos los códigos de las teclas en nuestro programa arduino y enviarlos a través del emisor IR en función de la tecla pulsada.

Pero, ¿como que tecla? ¿no habíamos dicho que íbamos a hacer un mando por voz?

Si, si, aquí está lo interesante. Vamos a utilizar nuestros móviles Android como sistemas de reconocimiento de voz, y vamos a programarlo con una aplicación llamada Protocoder.

¿Qué que es Protocoder? Bueno, según su autor, Victor Diaz, Protocoder es un entorno de codificación + un Framework Javascript que sirve para el prototipado rápido y la experimentación en dispositivos Android. O sea, es un entorno que llevamos en nuestro propio dispositivo Android y que gracias a él y a un poco de conocimiento de Javascript podemos hacer prototipos de aplicaciones Android muy rápidamente. 

No me voy a extender en Protocoder, os he dejado arriba el enlace a la página para poder descargarlo y en los próximos días va a empezar un curso en la página http://diwo.bq.com (este). Por mi parte, y como es costumbre, os dejo el enlace a todos los fuentes utilizados entre los que se encuentra el programa de Protocoder.

Otro video de otro experimento realizado con protocoder:




Código fuente

Agradecimientos:


  • Ken Shirriff que con su librería y ejemplos hemos hecho una gran parte del trabajo.
  • Jose Juan Sanchez que ya hizo un ejemplo en Protocoder para manejar un Printbot con la voz.
  • Otros blogs: http://as3breeze.com/arduino-sending-samsung-ir-codes/



4 comentarios:

  1. Muy bueno!!
    Yo anduve indagando en este proyecto también un tiempo, pero me fallaba la decodificación de los botones del mando me fallaba...Ahora que ya has dado la clave puedo seguir con el proyecto!
    Saludos

    ResponderEliminar
  2. hola me gusto mucho el post pero no veo el programme ke corresponde a la manipulacion del robot

    ResponderEliminar
    Respuestas
    1. El programa que recibe el comando de voz y lo emite por el sensor IR es este https://github.com/movilujo/proyectos/tree/master/MandoTVoz/Arduino/ControlIR_send

      Eliminar