viernes, 8 de mayo de 2015

Arduino UNO como dispositivo HID

Bien hoy escribiré con el propósito de explicar como conseguir que nuestra tarjeta Arduino en mi caso un Arduino UNO funcione como un dispositivo de interfaz humana HID (Human Interface Device). Esta es un funcionalidad que se logra extra con un procedimiento reversible y es algo muy útil para algunos de nuestros proyectos cuando nuestro dispositivo necesita funcionar como una interfaz de entrada en diversos sistemas como por ejemplo una consola de vídeo juegos como un Xbox 360 o un PS3, o también como un teclado automático como anteriormente utilice una tarjeta Teensy 3.1 en este post que precisamente tiene esta función de fabrica y ahora podremos tenerla en nuestra tarjeta sin necesidad de adquirir ningún modulo.

Para comenzar debo explicarles que la tarjeta UNO se compone entre diversas cosas de un microcontrolador principal y uno secundario, probablemente los conozcamos a ambos pero sin duda estamos mas familiarizado con el principal el ATMEGA328 que es el que programamos directamente desde el IDE de Arduino, pero este no es el único microcontrolador con poder a bordo de la tarjeta también esta el ATMEGA16U2 este microcontrolador es el encargado de comunicar nuestra computadora con el ATMEGA328 pues entre otras cosas posee un puerto de USB que es el que en realidad utilizamos cuando conectamos la tarjeta a nuestro PC, este principalmente se encarga de "rutear" la comunicación de USB al serial del ATMEGA328 y viceversa es por ello que cuando conectamos nuestra tarjeta por USB nuestra computadora lo reconoce como un puerto Serial COM, es ahí donde radica el objetivo de este post ya que lo que aremos sera programar ese ATMEGA16U2 con otro firmware para que no funcione como un Serial COM si no como un teclado, un joystick, un mouse o un control de vídeo consola.

En la siguiente imagen se puede observar a rasgos muy generales como es la comunicación con el microcontrolador principal a través de la conexión directa USB del ATMEGA16U2.
Esquema general de la comunicación entre el PC con ATMEGA328 a través del ATMEGA16U2

Para conseguir grabar un sketch en Arduino basta con conectarlo a nuestra computadora seleccionar el puerto serial en el IDE y dar grabar, para grabar el ATMEGA16U2 el proceso es un poco diferente pero no por ello mas complicado solo que tendremos que descargar un software especial llamado FLIP que esta disponible para descargar de manera gratuita aqui desde la pagina de ATMEL ese sera el primer paso, ahora algo importante es que para poder conseguir la grabación necesitaremos entrar en modo DFU (Device Firmware Upgrade) para entrar en este modo sera  necesario unir por un instante los siguientes pines de nuestra tarjeta como se muestra en la fotografía siguiente esto para un Arduino UNO SMD si nosotros tenemos una placa UNO convencional sera necesario agregar una resistencia de 10kOhm como también puede observarse a continuación.

Puente necesario para la grabación

Resistencia necesaria si nuestra tarjeta no es SMD
Los firmwares son diferentes para cada una de las aplicaciones es decir hay un firmware para que opere como teclado otro para que opere como Joystick, aquí hay algunos de los firmware disponibles pero para comenzar yo recomiendo descargar estos 2 luego ya que dominen el proceso podrá experimentar con los demás.

Firmwares de prueba

1. firmware de fabrica para Arduino UNO, USB-SERIAL - DESCARGAR
2. firmware para operar como teclado HID - DESCARGAR
3. Aquí un Sketch de prueba para teclado - DESCARGAR

Bien para que sea mas claro describiré el procedimiento en una serie de pasos

  1. Descargar e instalar el software FLIP desde la pagina de ATMEL aquí
  2. Agregar el puente de resistencia si nuestra tarjeta no es SMD
  3. Conectar la tarjeta al PC y grabar el sketch que necesitemos
  4. Conectar la tarjeta al PC y aplicar la unión de los pines por 1 Segundo nuestro disposivos aparecerá como Dispositivo desconocido
  5. Ir al administrador de dispositivos e instalar el driver del ATMEGA16U2 que se encuentra en la siguiente ruta C:\Program Files\Atmel\Flip 3.4.7\usb
  6. Lanzar FLIP e ir a file/Load HEX file y seleccionar el archivo HEX perteneciente al firmware que deseamos grabar.
  7. En FLIP ir a Settings/Communication/ y seleccionar USB ó presionar Ctrl+U
  8. En el programa seleccionar Device/Erase y luego Erase/Program
  9. Desconectar nuestra tarjeta y conectar donde necesitamos el dispositivo HID
Es importante mencionar que el procedimiento se hace cada vez que hagamos una modificación al sketch es decir tendremos que grabar de nuevo el firmware original de la tarjeta para poder cargar el programa al ATMEGA328.

Bueno espero tener tiempo próximamente para actualizar esto con imágenes y de una manera un poco mas gráfica, si  mas espero que les sea de utilidad.






No hay comentarios: