Вы находитесь на странице: 1из 8

Android + Arduino: ANDRUINO

Hola a todos! Hoy os traigo un tutorial sper interesante, o al menos a m


me lo parece! Vamos a aprender a crear una aplicacin Android (quien
tenga iPhone, iPod o iPad tambin la puede hacer, ya que es
multiplataforma) que encienda un LED, una lmpara, una lavadora, una
nevera, la televisin, lo que sea, a travs de Arduino y una conexin
WI-FI.
Bueno, os voy a pasar a explicaros de qu va esta curiosa aplicacin, que
puede ser vuestra por tan slo. NADA. Lo que hace la aplicacin, es
informarte y permitirte seleccionar si encendemos cualquier aparato
electrnico, activamos algo, o prcticamente lo que queramos. En este caso,
para hacerlo sencillo, vamos a encender un LED. Cuando el LED est
encendido, aparece la bombilla encendida en la pantalla de nuestro
telfono. Cuando el LED est apagado, se muestra una bombilla apagada.
Podemos encender el LED o apagarlo a nuestro gusto, cuando queramos,
con tan slo tocar la pantalla, es decir, no hay botones. El botn es la
propia pantalla. Tocaremos en cualquier parte y cambiar de
estado.
Cmo haremos esto? Utilizaremos Appcelerator para programar nuestra
aplicacin multiplataforma, en mi caso para Android. Tambin utilizaremos
una placa Arduino y su Ethernet Shield, que podis encontrar por Internet
realmente barata.
En este artculo, har un breve repaso de cmo configurar Arduino y el
Ethernet Shield. Para verlo ms en profundidad, podis leer el Tutorial
Arduino: Ethernet Shield + Relay, donde est todo explicado y
desarrollado. Tan slo he hecho un cambio en el cdigo, que es apagar el
LED cada vez que encendamos el Arduino. No os asustis con lo del relay,
ya que aqu tan slo vamos a utilizar un LED. Podis considerar el tutorial
que os he enlazado antes como la primera parte de este, al cual le
aadiremos la aplicacin Android.
Voy a hacer un pequeo repaso del tutorial anterior:
Todos los dispositivos que estn conectados a la misma red a la que est
conectado el Arduino, tendrn la posibilidad de interactuar con el aparato
que queramos encender o apagar (o los aparatos), es decir, quien est en la
red casa, de la oficina, del edificio, etc. Es por esto que este tutorial est
orientado a la domtica. A quin no le gustara controlar su casa con su
smartphone? A m por lo menos, s.
El Ethernet Shield lo vamos a utilizar para montar un servidor Web, el
cual nos proporcionar el cdigo poder verlo en nuestro navegador y poder,
as, interactuar con l y con la aplicacin Android que crearemos a
continuacin.

Para este tutorial, no vamos a realizar una conexin a Internet, sino que nos
quedaremos en una red local. Para acceder a la pgina Web que creemos,
deberemos acceder con una direccin IP perteneciente a nuestra red, que
ser la que le hayamos asignado al Ethernet Shield. En el cdigo que
podris descargar ms abajo, veris que la direccin IP que le he asignado
es 192.168.0.100/24.
Si queris saber si una cierta direccin est disponible, podis realizar un
ping a esa direccin. Est explicado en el tutorial enlazado arriba.
El cdigo del Ethernet Shield lo tenis abajo para descargar y, est
bastante claro su funcionamiento, aunque, por supuesto, si tenis
cualquier duda me la preguntis. No os cortis.
Voy a pasar a explicar el cdigo utilizado para la aplicacin, que se llama
ANDRUINO. Tambin est disponible para descargar al final de la entrada.
Lo primero que haremos, ser crear un nuevo proyecto, al que llamaremos
ANDRUINO, tal y como nos muestra la siguiente imagen:

A continuacin, como siempre, configuraremos el archivo tiapp.xml:

Tras esto, incluiremos nuestras imgenes personalizadas para el arranque


de la aplicacin y tambin para el icono de la aplicacin. Esto lo haremos en
las carpetas siguientes:

Las imgenes que pondremos tendrn el siguiente aspecto:

Vamos a ver el cdigo de la aplicacin. Lo primero que haremos es


crear una ventana, a la que llamaremos ANDRUINO:
1
2
3
4

var ventana=Ti.UI.createWindow({
title: "ANDRUINO",
backgroundColor:'white'
});

A continuacin, habr que poner una imagen de fondo a la ventana, que


podr ser una bombilla encendida o una bombilla apagada. Depender del
estado del LED.

Para ello, lo que vamos a hacer es guardar una variable llamada


encendido, la cual ser booleana (true: encendido, false: apagado). Esto lo
haremos con una funcin que guarde el estado aunque se salga de la
aplicacin. Esto se suele utilizar para guardar los ajustes de una aplicacin,
es decir, que cuando el usuario la cierre, no se reinicie todo. Para ello,
utilizaremos lo siguiente:
1
2if(Ti.App.Properties.getBool("encendido")==null)
Ti.App.Properties.setBool("encendido",false);
3if(Ti.App.Properties.getBool("encendido")==false){
ventana.backgroundImage='bombillaapagada.jpg';
4} else {
ventana.backgroundImage='bombillaencendida.jpg';
5}
6

Para acceder al valor de la variable:


1 Ti.APP.Properties.getBool("encendido");

Para asignar un valor a la variable:


1 Ti.App.Properties.setBool("encendido",false);
2 Ti.App.Properties.setBool("encendido",true);

A continuacin, crearemos un click listener para la ventana y, dentro


tendremos un condicional para ver qu imagen ponemos cada vez que
hacemos click en la pantalla y, tambin crearemos un cliente HTTP para
mandarle la peticin al Arduino.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

ventana.addEventListener('click', function(){
if(Ti.App.Properties.getBool("encendido")==false){
var url = 'http://192.168.0.100/?LED=F';
Ti.App.Properties.setBool("encendido",true);
ventana.backgroundImage='bombillaencendida.jpg';
} else {
var url = 'http://192.168.0.100/?LED=T';
Ti.App.Properties.setBool("encendido",false);
ventana.backgroundImage='bombillaapagada.jpg';
}
var client = Ti.Network.createHTTPClient({
onerror : function(e) {
alert('error');
},
timeout : 5000
});

17
18
19
20

client.open("GET", url);
//Mandar la peticin
client.send();
});

En funcin del estado del LED, escogeremos una URL u otra, es decir, o
apagamos el LED o lo encendemos. Para finalizar, abriremos la ventana:
1

ventana.open();

El cdigo completo es el siguiente:


1
2
3
4
5
6
7
8
9
1
0
1
1
1
2
1
3
1
4
1
5
1
6
1
7
1
8
1
9
2
0
2
1
2
2
2
3

/**
*
* Autor: Mario Prez Esteso
* www.geekytheory.com
* Android + Arduino = ANDRUINO
*
*/
var ventana=Ti.UI.createWindow({
title: "ANDRUINO",
backgroundColor:'white'
});
if(Ti.App.Properties.getBool("encendido")==null)
Ti.App.Properties.setBool("encendido",false);
if(Ti.App.Properties.getBool("encendido")==false){
ventana.backgroundImage='bombillaapagada.jpg';
} else {
ventana.backgroundImage='bombillaencendida.jpg';
}
ventana.addEventListener('click', function(){
if(Ti.App.Properties.getBool("encendido")==false){
var url = 'http://192.168.0.100/?LED=F';
Ti.App.Properties.setBool("encendido",true);
ventana.backgroundImage='bombillaencendida.jpg';
} else {
var url = 'http://192.168.0.100/?LED=T';
Ti.App.Properties.setBool("encendido",false);
ventana.backgroundImage='bombillaapagada.jpg';
}
var client = Ti.Network.createHTTPClient({
onerror : function(e) {
alert('error');
},
timeout : 5000
});
client.open("GET", url);
//Mandar la peticin
client.send();

2
4
2
5
2
6
2
7
2
8
2
9
3
0
3 });
1 ventana.open();
3
2
3
3
3
4
3
5
3
6
3
7
3
8

- MONTAJE

- VDEO

ANDRUINO EN GITHUB