Actualización: cambié esto a la wiki de la comunidad
Parece que Android va a admitir USB Host en el kernel. Android 3.1 ya tiene esto, creo que Android 2.4 lo tendrá portado nuevamente, y seguramente Android 4 lo tendrá. Por lo tanto, si tiene un micro que puede emular un dispositivo esclavo USB apropiado, debe poder comunicarse con Android de manera bastante simple y económica, siempre que su dispositivo Android sea capaz de hardware USB. La mayoría de los dispositivos más antiguos (por ejemplo, Droid, Droid Inc) son compatibles con hardware, y los nuevos dispositivos deberían ser.
No sé exactamente con qué dispositivos USB esclavos es fácil interactuar desde Android ( aquí hay una lista de los tipos de dispositivos existentes ), pero seguramente el teclado (es decir, HID) es fácil de probar.
Editar: Las API de host USB de Android se basan en la idea de tener un código de modo de usuario contenido dentro de las aplicaciones para realizar transferencias USB en bruto a los periféricos. Así que, en lugar del modelo de "controlador del kernel", este es el concepto de "la aplicación comprende los detalles de los periféricos": conceptualmente muy similar a los programas de escritorio que utilizan libusb o similar para hablar con un periférico. Las excepciones serían los dispositivos HID, como los teclados y ratones, que Android se habla a sí mismo y utiliza de la manera esperada para proporcionar información al sistema en general. También vale la pena señalar que (con la excepción de algunos dispositivos en los que el vendedor ha hecho lo contrario) el sistema no implementa el almacenamiento masivo USB, por lo que una aplicación que quiera usar dicho dispositivo debe implementar el código del sistema de archivos y el Protocolo de almacenamiento masivo USB, contra las API USB de Android sin procesar.
Hay una biblioteca AVR que proporciona una pila USB: enlace . Con esto, debería poder realizar la emulación de teclado u otro dispositivo desde un AVR habilitado para USB. Incluir esto en su compilación de firmware AVR genérico no es demasiado difícil. Como Mihailo señala en los comentarios, asegúrese de usar una frecuencia de oscilador compatible con USB (8 o 16 MHz). No estoy seguro de si es posible conseguir que esto funcione en el hardware estándar de Arduino.
Parece que la forma más fácil de abordar esto puede ser la nueva placa Arduino Leonardo: enlace
Estoy seguro de que los clones de Leonardo más baratos / más simples / más pequeños saldrán pronto, ¡o se lanzarán los tuyos!