miércoles, 25 de mayo de 2011

Tutorial: Arduino UNO + ADK de Google






ESTA ENTRADA ESTA BASADA EN ESTE ARTÍCULO DE BRICOGEEK REALIZADO POR MI COMO COLABORADOR :)

Hace unos dias en el Blog de BricoGeek os presentaba el ADK de Google. Una plataforma que permite controlar el Arduino desde un terminal Android. La pega era que el kit de desarrollo costaba 300€.

Gracias al apoyo de BricoGeek conseguí hacerme con una USB Host Shield y me dispuse a replicar el kit de Google pero de una manera mas DIY.

Este es el tutorial de los pasos que he seguido. Al final el vídeo demostrativo. Una primicia mundial del sistema trabajando con todos los dispositivos sobre un Arduino UNO:)


Para empezar se necesita como mínimo:
  • Un Arduino que acepte shields. (El Mega de entrada no funciona por la situación de pines del SPI, pero se puede modificar para que funcione)
  • Una USB Host Shield.
  • Un teléfono o dispositivo Android con version 2.3.4 o 3.1

Empecemos con el Software del ordenador.

Debemos instalar el SDK y la plataforma de desarrollo Eclipse para hacer nuestro proyecto. Aquí tenéis un muy buen tutorial, seguidlo paso a paso hasta el punto 5.

Una vez llegados a ese punto y con el Eclipse abierto:
  1. Entramos en Help/Install new software... 
  2. Click en ADD (botón arriba a la derecha). 
  3. Introducimos en name "ADT Plugin" y en Location https://dl-ssl.google.com/android/eclipse/ 
  4. Click en OK. 
  5. Cuando nos salga, marcamos Developer Tools y le damos a Next, nos sale otra pantalla, otra vez Next. 
  6. Marcamos para aceptar los License Agreements, le damos a Finish. 
  7. Si nos sale un aviso de seguridad le damos a OK. 
  8. Reiniciamos el Eclipse. 
  9. Entramos en Window/Preferences (en Mac Eclipse/Preferences) 
  10. Seleccionamos Android en el panel izquierdo. 
  11. Nos pedira si queremos enviar datos a Google (como queráis) luego le damos a Proceed. 
  12. En SDK Location le damos a Browse y buscamos la carpeta donde tenemos el SDK de android. 
  13. Le damos a Apply y luego a OK 
Ahora ya tenemos el entorno de desarrollo completo.

Vamos a instalar el API que incluye el ADK:
  1. En Eclipse nos vamos a Window/Android SDK and AVD Manager. 
  2. Entramos en el panel de la izquierda en Avaliable packages. 
  3. Dentro de Third Party Add-ons/Google inc buscamos Android API 10 Revision 2, la marcamos y le damos a Install selected. 
  4. Aceptamos todo lo que nos diga y listo. 
Nos bajamos el último ADK. Lo descomprimimos dentro de la carpeta del SDK de Android para tener todo junto y seguimos estos pasos:
  1. Copiamos la carpeta firmware/arduino_libs/AndroidAccessory a nuestra carpeta de librerías del IDE Arduino. 
  2. Bajamos esta versión modificada de la libreria USB Host Shield y la descomprimimos en nuestra carpeta de librerías del IDE Arduino. 
  3. Bajamos este sketch de Arduino y lo abrimos con el la aplicación de programacion de arduino. 
  4. Lo subimos a nuestra placa Arduino como un código normal. 
Ahora solo nos queda mandar la aplicación a nuestro terminal, para ello:
  1. Abrimos Eclipse y vamos a File/New/Project. 
  2. Seleccionamos Android/Android Project. 
  3. En Project Name ponemos "DemoKit". 
  4. Le damos a Create project form existing source, le damos a Browse y nos ponemos en la carpeta del ADK "app" y le damos a Finish. 
  5. En Build target seleccionamos nuestra API 10 y Finish. 
  6. Ahora entramos en los ajustes de aplicaciones de nuestro Android y seleccionamos dentro de desarrollo "Depuración USB" 
  7. Conectamos el teléfono por cable USB al ordenador y le damos dentro de Eclipse al icono verde con una flecha que esta justo a la derecha de el icono del bicho (Run DemoKit). Esto nos instalará la aplicación para controlar el Arduino. 
Todo listo a la hora de software.

Ahora conectemos todo.

En la demo del vídeo enseño como desde el teléfono (en este caso un Nexus One) podemos leer entradas como un botón, un joystick, una resistencia variable con la luz LDR y un sensor de temperatura LM35. También controlo desde el teléfono las salidas, un servo, un LED RGB y un relé con el que podemos encender y apagar cualquier aparato conectado a la red eléctrica.

Podéis hacer la prueba con algún sensor o algún led, no hace falta tener todo conectado podeis probarlo por separado ya que funciona igual. Estos son los esquemas de conexión que he utilizado para conectar los dispositivos del vídeo:
Haz click para ampliar

Podéis guiaros en que pin va cada dispositivo dentro del código del Arduino. Tambien podeis modificar la situación de cada uno a vuestro antojo.

Una vez todo conectado al Arduino apagado, procedemos a alimentarlo. Necesitamos alimentación externa ya que la USB Host Shield se alimenta de Vin y con el voltaje que nos proporciona el cable del ordenador no nos llega. Una vez encendido conectamos por usb el Android y automáticamente se nos abrirá la aplicación. Si no se os enciende la luz de carga del móvil es que necesitamos mas alimentación en el Arduino. Si usáis un servo, estos consumen mucha corriente, por lo que pueden llegar a resetear el Arduino. Es recomendable o alimentarlos a parte, o que sean del tipo microservo que consumen un poco menos.
Las posibilidades de esta plataforma de intercomunicación son casi infinitas, pronto veremos incluso versiones inalámbricas o de control a través de internet.

Os dejo con el vídeo, espero que os guste.



Enlaces:

35 comentarios:

penguinolog dijo...

Excuse me, is used USB host from SparkFun or Circuits@Home?

TCRobotics dijo...

Sparkfun's one:)

Albert dijo...

Hola, estaba mirando el esquema y no entiendo bien como has conectado el pulsador. Lo has puesto sin resistencia, es porque el pin es analogico? Soy novato y aun no entiendo muy bien como funciona todo.
Gracias

TCRobotics dijo...

Hola Albert, tienes toda la razón. Lo normal para leer un pulsador es usar una entrada digital con una resistencia (sobre todo por que así no desperdiciamos una entrada analógica para algo que solo nos dará un uno o un cero).

Sin embargo aqui he replicado las conexiones que tiene la shield oficial del ADK. En dicha shield los tres botones están directamente conectados a masa. A mi también me sorprendió este hecho. No he modificado nada para usar la misma aplicación oficial.

Un saludo y gracias por tener el detenimiento de echarle una ojeada al circuito:)

Yeison Cardona dijo...

Muy interesante el tutorial, estudiaré como trabajarlo con Pinguino a ver que resulta.

Un saludo desde Colombia.

Santiago dijo...

Está muy interesante, pero lo que me hecha para atrás, la atadura del cable. Lo suyo sería poder hacerlo por wifi, y poder tener más funcoines domóticas.. conectando un módulo ethernet al arduino se podría hacer algo similar?

TCRobotics dijo...

Pues si, lo del cable es un estorbo, pero realmente es un paso de google para que los programadores jugueteemos y siempre bajo su plataforma Android.

Lo que se podría hacer es dejar un teléfono conectado a la shield y darle ordenes desde internet y que cuando las reciba este controle el arduino.

Ya hay trabajos de gente que controla un arduino con bluetooth desde una aplicacion android corriendo en un teléfono.También hay proyectos domóticos con una ethernet shield como comentabas. E incluso lo último presentado en la campus party de Valencia este año, una shield para Arduino con tarjeta sim movistar.

lascosasdemita dijo...

Ains qué cerquita estoy...
Todo bien hasta que voy instalar la aplicación en mi Android y el eclipse dice:
Installation error: INSTALL_FAILED_MISSING_SHARED_LIBRARY

Lo único que me ha extrañado es que a la hora de seleccionar la versión de Android del proyecto, se queda con la 2.3.3. He instalado la API 10 versión 2, pero no he conseguido que cambie esto. En el móvil sí que tengo la 2.3.4.

¿Alguna idea?

TCRobotics dijo...

mmm pues después de darle vueltas no se me ocurre. El tema de la librería es correcto, para el proyecto en el eclipse usas la 2.3.3 10 revision 2(que incluye el accesory) y el mobil debe tener minimo la 2.3.4. No te da mas info el error sobre que librería falta?

No se si habrá cambiado algo ya que desde que lo hice no volví sobre el tema, échale una ojeada en la web de desarrolladores a ver si encuentras alguna nueva forma de instalar o una nueva versión. Siento no serte muy útil:S

Si lo solucionas coméntalo por aqui!

asd dijo...

hay que tener en el terminal android dentro de system/framwewok el jar de esa libreria que te falta (la de usb) y en etc/permisson el xml del permiso correspondiente. a mi me pasó en un galaxy sII con 2.3.6. me faltaba el xml, lo metí, reinicie y listo. ()para meter el xml en esa ruta tienes que ser root)

Noel dijo...

Buenas tardes, intento hacer su tutorial y me funciona todo menos el paso de subirle el programa a arduino, le incluyo todas las librerias y me dice error de compilación, no encuentra el nombre byte dice que no es nombre de ningun tipo.

espero respuesta saludos

TCRobotics dijo...

Hola Noel,
Estás utilizando la última versión del IDE de Arduino, esta tiene cambios en librerias, por eso te falla la compilación. Prueba a compilarlo con la versión 022 (la tienes aun en arduino.cc) que es la que usé yo en su momento;)

Saludos!!

Noel dijo...

Ya me funciona Muchas Gracias.

Saludos

Noel dijo...

Buenas tardes, ahora tengo otro problemilla, he conseguido cargarlo en la placa y adaptar mi aplicacion a la version 3.2 de android ya que la 2.3.4 no era compatible con mi tablet un archos 101g9, ya la tengo que compila adecuadamente, y instalada en el tablet pero conecto la placa arduino mega al tablet alimentada externamente tambien y no hace nada me pone please connect a demokit board, quisiera saber si a la placa hay que tener algo conectado o no, tambien probe a intertarlo en un motorola defy , un lg optimus y un samsum galaxy s plus pero la version 2.3.4 no me dejaba instalar la aplicación, no serian compatibles supongos. Espero que me des un poco de guia sobre esto muchas gracias.


saludos

Noel dijo...

poseo una arduino mega adk supongo que el usb host shield no lo necesito pues lo trae incoporado lo que no se si me serviria la modificada de usted o tiene que ser la original .

saludos

camilo dijo...

Buenas noches, una pregunta que casi no entiendo, como se conecta o cual debe ser el cable para conectar el Arduino y el Android? gracias.

Noel dijo...

Que placa tienes? si tienes la arduino mega adk conectas el cable usb del android al puerto usb que es como de los pc, si por el contrario tienes el arduino que no posee usb host(solo posee uno cuadrado como el de las impresoras) tienes que incorporarle una placa usb host shield y conectarlo de ahi al dispositivo android.

saludos.

YAMILSOFT dijo...
Este comentario ha sido eliminado por el autor.
YAMILSOFT dijo...

Al crear el proyecto en la ubicacion lo pongo en C:\android-sdk-windows\ADK_release_0512\app

pero me tira error (esta carpeta no esta vacía) que hago mal?

error:
Folder 'C:\android-sdk-windows\ADK_release_0512\app' is not empty.

Manuel Plata dijo...

podria hacer el proyecto sin el USB host? solo necesito mover el servo y prender la bombilla?

saludos!

deivis dijo...

hol amigo, muy buen post, me gustaria saber si se necesita ser usuario root ???? gracias amigo¡¡¡

deivis dijo...
Este comentario ha sido eliminado por el autor.
Edward dijo...

Hola, quisiera saber que es lo que se utiliza como "USB host shield" Lo siento, es que soy novato en esto :S De antemano gracias :)

Carlos Rosales dijo...

hola... me gustaria saber como puedo crear un cliente en android, estoy haciendo una aplicacion para encender y apagar leds mediante mi tablet, pero de manera inalambrica... de antemano, muchas gracias

Anónimo dijo...

para los que tengan un error extraño de androidaccesory de la arduino , ademas del usb shield algún error de byte, no es necesario descargar la versión 022 de la arduino, me sirvió en la 1.0.2 solo deben copiar estas librerías https://mega.co.nz/#!u9xXUZAT!GzQ25HWeu2717GiLXygkzjZaLgcjwLSm4sNjt0SGczQ el código compilo sin errores.

Luis Fuertes dijo...

Hola, tengo en mente conectar con un móvil con android (Un Nexus One para ser exactos) un dispositivo arduino que solo tendria que accionar dos motores, es decir encender o apagar motor 1 o 2 según diga el móvil.

La conexión la quiero hacer por cable pues supongo que sera la manera mas eficiente en cuanto a gasto de energía, y el móvil y el arduino siempre van a estar juntos.

Necesitaría hacer algo parecido a esto? O hay formas mas sencillas? Que me recomiendas?

Muchas gracias y gran trabajo!

TCRobotics dijo...

Hola Luis, lo ideal es que te pilles un mega adk, que está todo integrado. Sinó tienes la opción del Arduino + usb host shield,(pero te va a costar más por tema de librerías y tal).
yo hice este apaño por qué de aquella no había el Arduino mega adk, sólo la placa de Google que costaba 300€.

Lo del motor lo puedes hacer utilizando un relé como hago en este ejemplo. Es la mejor manera. Ya que sino te tienes que meter con un lm293D y te loas más;)

Un saludo!

Luis Fuertes dijo...

Que sabes de esta placa? Vale también? Es que vale la mitad que la normal.

http://dx.com/es/p/arduino-compatible-freaduino-adk-main-board-module-145595?tc=EUR&utm_source=GoogleShoppingSP&utm_medium=CPC&utm_content=145595&utm_campaign=Arduino_

Roberto dijo...

Super interesante el sistema.
Ando buscando una solución para controlar algunos circuitos dende android con arduino y esta forma me puede servir.
No obstante se me va un poco de presupuesto, de momento la solución que mas me convence es esta:
Sistema Domotico
Pero esta solución es muuuuy a tener en cuenta, sobre todo en proximos proyectos que requieran mas configuración...

Rodolfo Roballo dijo...

Hola! tengo problema con el proyecto en Eclipse.
Me da 29 errores, el primero p.ej. es elimport com.android.future.usb.UsbAccessory;
Dice que no puede resolver el import com.android.future.

Seguí todos los pasos al pie de la letra e incluso me instalé después el bundle que publica google con eclipse y el ADT integrado.

Agradezco mucho su colaboración.
Saludos!
Rodolfo

Rodrigo Mompo dijo...

Tengo un problema, estoy usando una tablet con android 4.1 y no soy capaz de hacer que funcione. El problema parece ser que es cambiando el software. Podrias hacer un tutorial?

Jorge Ríos dijo...

Felicitarte por el trabajo realizado y agradecertelo.
Pero ahora las peticiones, podrías ayudarnos a todos actualizando la entrada para poder hacerlo correr con las nuevas versiones de adk, eclipse y con los moviles en general... en realidad se quedó un poco obsoleta.
Yo estoy utilizando un HTC Desire que no es gran cosa pero como el adk es ahora ADT bundle, los pasos son diferentes... y todo se compleca para los que no tenemos ni idea de este tema, sin embargo lo estoy intentando cambiar de la mejor manera. Si encuentro la solución al archivo de arduino y a la apk, la publico. Demomento solo me queda pedir un poco de ayuda. Gracias

Jorge Ríos dijo...

Mis conocimientos no llegan a tanto lo siento, muy buena idea pero si no nos funciona a los que lo leemos de poco sirve. Errores en la apk, en el sketch, lo intenté con arduino 0016, 0022 y con el 1.05 y nada. De cualquier forma gracias.

Blown dijo...

¿Podrías, como indica algún compañero, actualizar la entrada por favor? intenté seguir el tutorial pero en la actualidad se complica...

Gracias!

Rodrigo Mompo dijo...

La entrada me sirvio de mucho en su momento. En mi caso he conseguido actualizarla para funcionar con la versión de android 4.1. La unica pega es que solo funcionan unas pocas funciones, el resto no estan implementadas en el codigo modificado.Estaria bien que actualizaras la entrada. Pasaros por mi blog controlrobotics.rodrigomompo.com