Resumen 1 Generalidades Arduino: es una plataforma de hardware libre, basada en una placa con un microcontrolador y
un entorno de desarrollo, diseñada para facilitar el uso de la electrónica en proyectos multidisciplinares. El microcontrolador en la placa Arduino se programa mediante el lenguaje de programación Arduino y el entorno de desarrollo Arduino. Arduino UNO: Consta de 14 entradas/salidas digitales digitales configurables que operan a 5 voltios Shield: es un complemento para tarjetas Arduino que extienden sus capacidades ofreciendo
nuevos servicios, por ejemplo: puertos de red, tarjetas bluetooth, USB, entre otros.
2
Lenguaje de Programación
Ambiente de Programación Arduino:
El ambiente de programación está escrito en Java y basado en software open source como avrgcc. El ambiente contiene un editor de texto, texto, un área de mensajes, una consola consola de texto, una barra de herramientas con funciones comunes y una serie de menús. Es muy sencillo, en el mismo ambiente uno selecciona el tipo de arduino que se está utilizando, uno puede: Verificar el código en busca de errores (código muy fácil basado en java) Subir el código al arduino. Solo se necesita un cable usb y el IDE se encarga de compilar el programa y cargarlo en la memoria del arduino. Estructura de un programa arduino: Un programa arduino (extensión .ino) está compuesto de dos partes: el método void setup(): Aquí va la configuración inicial del chip, chip, podemos inicializar variables, modos de pin, empezar a utilizar librerías. Se ejecuta al inicio una vez (o cuando reiniciamos el arduino) el método void loop() Método que se ejecutará infinitamente. Aquí va la funcionalidad de lo que estamos implementando. Puede ser una máquina de d e estados simple o simples operaciones que ejecutamos continuamente (ejemplo mediciones periódicas) Para más información acerca de los tipos, operadores, variables, funciones, interrupciones y otras cosas más del lenguaje vea el enlace: http://www.arduino.cc/en/Reference/HomePage (también está en la ayuda del IDE)
3 Ventajas y Debilidades Ventajas:
● ● ●
●
●
Asequible: Las placas Arduino son más asequibles comparadas con otras plataformas de microcontroladores. Multi-Plataforma: El software de Arduino funciona en los sistemas operativos Windows, Macintosh OSX y Linux. Entorno de programación simple y directo: El entorno de programación de Arduino es fácil de usar para principiantes y lo suficientemente flexible para los usuarios avanzados. Software ampliable y de código abierto: El software Arduino esta publicado bajo una licencia libre y preparado para ser ampliado por programadores experimentados. El lenguaje puede ampliarse a través de librerías de C++ o se puede dar el salto a la programación en el lenguaje AVR C en el que está basado. Hardware ampliable y de código abierto: Arduino está basado en los microcontroladores ATMEGA168, ATMEGA328, ATMEGA1280. Los planos de los módulos están publicados bajo licencia Creative Commons, por lo que diseñadores de circuitos con experiencia pueden hacer su propia versión del módulo, ampliándolo u optimizándolo.
Debilidades: ● No ofrece simulación con software IDE. ● Requiere conocimientos en programación
4
Requerimientos Un arduino Una USB Host Shield. Un teléfono o dispositivo Android Android versión 1.5+ para utilizar MicroBridge y 2.3.4 para utilizar el ADK.
5
Precios Kit básico arduino UNO (cables, protoboard, cable usb) $36 Dispositivo android: precio variable Arduino USB Shield : $ 25
6
Programación en Android a MicroBridge
Es una implementación del Android Debug Bridge (ADB) para microcontroladores. Permite a los dispositivos android comunicarse directamente con un host USB. El protocolo ADB soporta abrir un shell en el dispositivo android o emitir comandos shell directamente, poniendo archivos en el dispositivo, leyendo logs (logcat), y enviando a puerto s TCP y sockets Unix. Utilizando sockets TCP es posible establecer comunicación bidireccional entre un Arduino y un dispositivo Android. La aplicación Android escucha en un puerto, y el Arduino se conecta a ese puerto a través del ADB.
Cuando se pierde la conexión porque la aplicación se cae o el dispositivo USB fue desconectado, MicroBridge periódicamente intenta reconectar. Cuando el d ispositivo se vuelve a conectar, el enlace es automáticamente restablecido.
b ADK El ADK (Android Accessory Development Kit) es un sistema de integración con accesorios de hardware para los dispositivos Android basado en Arduino que puede utilizar la conexión USB para comunicarse. El ADK esta compuesto principalmente por: ● La "ADK Board" una placa basada en el Arduino Mega. La diferencia principal con la famosa placa de Arduino es que posee un puerto USB host por el que va conectado el teléfono o dispositivo Android. ● La "ADK Shield" una placa de demostración y desarrollo que posee dos relés de corriente continua, sensor de temperatura, sensor de luz, sensor capacitivo, tres leds RGB, tres pulsadores y un joystick. ● Y por último, librerías, ejemplos y demás software necesario para poner en funcionamiento el sistema. Sin embargo podemos utilizar un arduino y un USB Host Shield, y aprovechar el software del ADK para establecer la comunicación entre arduino y android. Conexión USB por medio del ADK
El ADK (Android Accessory Development Kit) puede utilizar la conexión USB para comunicarse. ●
Programación del USB
La biblioteca ADK requiere hacer algunas inicializaciones de la conectividad USB, por ejemplo setear los “accessory identification strings”: ADK L; void setup() { L.adkInit(); L.usbSetAccessoryStringVendor(...); L.usbSetAccessoryStringName(...); L.usbSetAccessoryStringLongname(...); L.usbSetAccessoryStringVersion(...); L.usbSetAccessoryStringUrl(...); L.usbSetAccessoryStringSerial(...); L.usbStart(); }
Estos strings deben calzar con la configuración de filtros especificados en la aplicación Android. Así el arduinopuede manejar peticiones de escucha y conexión. Esto lo hace llamando a adkEventProcess en la ejecución del método loop.
void loop(void) { ... L.adkEventProcess(); //let the adk framework do its thing ... }
El arduino debe chequear por la conexión USB para procesar comandos y enviar mensajes. Como se muestra en el ejemplo void loop() { if (L.accessoryConnected()) { int recvLen = L.accessoryReceive(msg, sizeof(msg)); if (recvLen > 0) { ... // process message } L.accessorySend(outmsg, outmsgLen); } L.adkEventProcess(); } Código de la aplicación Android USB
En el ADK 2012, las conexiones USB están encapsuladas en la clase UsbConnection. Esta clase levanta un BroadcastReceiver que se encarga de escuchar los eventos USB para intentar conectarse. Ejemplo: import com.android.future.usb.UsbAccessory; import com.android.future.usb.UsbManager; mUSBManager = UsbManager.getInstance(this); UsbAccessory acc = mUSBManager.getAccessoryList()[0]; if (!mUSBManager.hasPermission(acc)) return;
Es importante decir que la aplicación solo recibe eventos cuando la información de identificación del arduino calza con la información de res/xml/usb_accessory_filter.xml, referenciado en el manifiesto de la siguiente forma: <meta-data android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" android:resource="@xml/usb_accessory_filter" /> Una vez establecida la conexión, la aplicación puede comunicarse con el arduino a través de streams de entrada y salida como se muestra a continuación:
ParcelFileDescriptor mFD = mUSBManager.openAccessory(acc); if (mFD != null) { FileDescripter fd = mFD.getFileDescriptor(); mIS = new FileInputStream(fd); // use this to receive messages mOS = new FileOutputStream(fd); // use this to send commands }
7
Pasos para programar Android utilizando el ADK
Para desarrollar aplicaciones android que se comuniquen con Arduino, es necesario seguir estos pasos: Paso 1: Configurar el entorno de desarrollo. ● Instalar el SDK y la plataforma de desarrollo Eclipse. ● Entrar en Help/Install new software... ● Click en ADD (botón arriba a la derecha). ● Introducir en name "ADT Plugin" y en Location https://dl-ssl.google.com/android/eclipse/ ● Click en OK. ● Seleccionar Developer Tools y presionar Next, sale otra pantalla, otra vez Next. ● Aceptar los License Agreements, y presionar Finish. ● Si sale un aviso de seguridad presionar OK. ● Reiniciar Eclipse. ● Entrar en Window/Preferences (en Mac Eclipse/Preferences) ● Seleccionar Android en el panel izquierdo. ● Seleccionar si se quiere enviar datos a Google, luego presionar Proceed. ● En SDK Location presionar Browse y buscar la carpeta donde tenemos el SDK de android. ● Presionar Apply y luego OK Paso 2: Instalar el API que soporte el ADK ● En Eclipse entrar a Window/Android SDK and AVD Manager. ● Entrar en el panel de la izquierda en Avaliable packages. ● Dentro de Third Party Add-ons/Google inc buscar Android API 10 Revision 2, seleccionarla y presionar Install selected. ● Aceptar. Paso 3: Configurar ADK ● Descargar el último ADK. Descomprimirlo dentro de la carpeta del SDK de Android. ● Copiar la carpeta firmware/arduino_libs/AndroidAccessory a nuestra carpeta de librerías del IDE Arduino. ● En la carpeta de librerías IDE Arduino debe estar la librería del USB Host Shield. ● Abrir el sketch de Arduino con el IDE de programación de Arduino y cargarlo en el Arduino. Paso 4: Crear proyecto y ejecutarlo en el teléfono
● ● ●
Crear un proyecto Desarrollar el código para controlar el arduino Instalarlo y ejecutarlo en el dispositivo Android.
8
Referencias http://developer.android.com/tools/adk/adk2.html http://developer.android.com/tools/help/adb.html http://code.google.com/p/microbridge/ http://www.arduino.cc/en/Reference/HomePage http://mitchtech.net/android-arduino-usb-host-temperature-light/ http://blog.bricogeek.com/noticias/arduino/el-adk-de-google-en-un-arduino-uno/ http://www.amazon.com/Starter-Kit-Newsite-UnoBreadboard/dp/B0051QHPJM/ref=sr_1_1?ie=UTF8&qid=1352234702&sr=81&keywords=arduino+kit http://www.amazon.com/SparkFun-USB-HostShield/dp/B004G4ZKEW/ref=sr_1_2?s=electronics&ie=UTF8&qid=1352234746& sr=1-2&keywords=arduino+USB+Shield