Académique Documents
Professionnel Documents
Culture Documents
Hola! En esta srie de tutoriales os explicar cmo conectar Arduino con vuestro dispositivo Android y as
recibir datos de sensores, o enviar comandos para activar vuestro doomsday device os apuntis?
Claro que s.
A diferencia de lo que pueda parecer, comunicar Arduino con un sistema Android no es difcil gracias a los
mdulos HC 06. Sobre estos mdulos ya hemos hablado alguna vez en Robologs, pero sin intentar
conectarlos con Android.
Este primer tutorial servir para configurar el mdulo HC 06 (cambiar el nombre y el password) y aprender
a enviar comandos del mvil a Arduino. Concretamente, encenderemos y apagaremos el LED 13.
Eh, pero antes de empezar hay que poner buena msica. Los lectores habituales de Robologs sabis que
soy melmana y siempre propongo una pieza para escuchar mientras segus el tutorial. Qu os parece si
hoy escuchamos un poco de Vivaldi? Nisi Dominus, uno de los salmos que escribi Vivaldi en 1732. Los
salmos eran versos de la Bblia escritos de forma potica que se cantaban en Latn. Como una misa, pero
menos aburridos
Qu vamos a necesitar?
Arduino UNO
Jumpers para conectar Arduino con el mdulo
Cable USB compatible con Arduino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
void loop(){}
Hay que desconectar el mdulo Bluetooth de la placa Arduino antes de cargar el programa. La razn? El
HC 06 utiliza los pines RX y TX del Serial. Si lo dejsemos conectado no se cargara el programa.
Immediatamente despus de cargar el programa, conectamos el mdulo as:
Arduino RX HC06 TX
Arduino TX HC06 RX
(tenemos 15 segundos para conectarlo)
2- Sketch de Arduino
Debemos copiar este cdigo en la IDE de Arduino y cargarlo a la placa. Qu hace? Este programa sirve
para leer carcteres por Bluetooth. Si se enva una h, encender el LED 13, lo apagar con l y con i
enviar una lista con los comandos posibles. Si quieres, puedes aadir ms condicionales para encender
ms LEDs, controlar servos, etc.
Para poder cargar el programa a la placa el mdulo Bluetooth tiene que estar desconectado.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
void setup()
{
Serial.begin(9600); //Iniciar el serial
pinMode(13, OUTPUT); //Establecer el pin 13 como salida
}
void loop()
{
if(Serial.available()>=1)
{
char entrada = Serial.read(); //Leer un caracter
if(entrada == 'h' or entrada == 'H') //Si es 'H', encender el LED
{
digitalWrite(13, HIGH);
Serial.println("LED encendido");
}
else if(entrada == 'l' or entrada == 'L') //Si es 'L', apagar el LED
{
digitalWrite(13, LOW);
Serial.println("LED apagado");
}
else if(entrada == 'i' or entrada == 'I') //Si es 'I', mostrar un mensaje de ayuda
{
Serial.println("Comandos:n (i) - abrir esta listan (h)- encender ledn (l) ledn);
}
}
}
Buenas a todos! Si habis seguido la primera parte del tutorial, ya sabis cmo enviar rdenes de Android
a Arduino con Bluetooth Terminal. Eso est muy bien, pero qu os parecera poder crear nuestras propias
aplicaciones para poder enviar rdenes pulsando botones? As nos ahorraramos de tener que escribir
todos los comandos en la Terminal
En esta gua vamos a programar una aplicacin para Android con MIT App Inventor 2, un aplicativo web
que nos permitir construir aplicaciones rpidamente sin tener que programar. Controlaremos un LED al
igual que en el tutorial anterior, pero construyndonos una interfcie a medida.
Y antes de empezar, la msica del da os viene bien Tanhuser?
Para utilizar MIT App Inventor slo hay que tener una cuenta Google y entrar en su web.
Empezamos
Al igual que en el tutorial anterior, necesitamos:
Un mdulo Bluetooth HC 06
Jumpers, protoboard
Telfono Android
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
void setup()
{
Serial.begin(9600); //Iniciar el serial
pinMode(13, OUTPUT); //Establecer el pin 13 como salida
}
void loop()
{
if(Serial.available()>=1)
{
char entrada = Serial.read(); //Leer un caracter
if(entrada == 'h' or entrada == 'H') //Si es 'H', encender el LED
{
digitalWrite(13, HIGH);
Serial.println("LED encendido");
}
else if(entrada == 'l' or entrada == 'L') //Si es 'L', apagar el LED
{
digitalWrite(13, LOW);
Serial.println("LED apagado");
}
else if(entrada == 'i' or entrada == 'I') //Si es 'I', mostrar un mensaje de ayuda
{
Serial.println("Comandos:n (i) - abrir esta listan (h)- encender ledn (l)
ledn");
}
}
}
Diseo de la aplicacin
Al abrir MIT App Inventor por primera vez, veremos una pgina parecida a esta:
Aqu es dnde aparecen todos los proyectos en los que estamos trabajando. Pulsamos Start New
Project y nos pedir un nombre para nuestra aplicacin. Lo he bautizado como Robologs_tutorial.
La pgina que nos aparece es dnde decidiremos el diseo de la aplicacin: botones, colores, mens,
imgenes
A la izquierda, en el panel Palette, tenemos una paleta con elementos para aadir a nuestra aplicacin.
Hay desde botones y mens a navegadores, giroscopios y mdulos Bluetooth.
El espacio que hay en el medio y que parece una pantalla de mvil se llama Viewer y es una
previsualizacin de la aplicacin. Ahora est en blanco, pero podemos aadir elementos de la paleta
arrastrndolos hasta la zona en blanco.
A la derecha, en el panel Components, tenemos una lista con todos los elementos que hay colocados en
la pantalla, as es fcil seleccionarlos. De momento slo hay Screen 1, que es la pantalla. Si la
seleccionamos veremos que a su derecha hay un panel llamado Properties, dnde se pueden cambiar
todas las caractersticas de cada uno de los elementos de la lista.
Empezamos por ir a Palette y buscamos el elemento List Picker. Se trata de men desplegable, que
programaremos para que muestre los dispositivos Bluetooth cercanos y se conecte a uno. Lo arrastramos
hasta la pantalla.
A la derecha, en el men Properties, podemos cambiar el texto del List Picker. Vamos al campo Text y
escribimos Dispositivos.
Volvemos al men Palette y aadimos dos elementos de tipo Button a la aplicacin, de la misma forma
que hemos colocado el List Picker.
Veremos que justo debajo de la previsualizacin aparece el smbolo de Bluetooth. La aplicacin debera
lucir as:
Bueno, hasta
aqu el diseo. Es hora de configurar cada uno de los componentes. Cmo lo hacemos? Arriba a la
derecha hay dos botones juntos: Design y Blocks. El primero abre la ventana que tenemos ahora, la que
nos permite colocar todos los componentes de la aplicacin. En cambio, Blocks abre una ventana para
programar los bloques.
Aho
ra tenemos que decirle a ListPicker1 que se conecte a la direccin que el usuario seleccione en la lista.
Como ya sos unos expertos en aadir bloques, slo os enseo el resultado final:
Fina
lmente configuramos Button1 y Button2. Queremos que al pulsarlos se enve un texto a la direccin
Bluetooth a la que estamos conectados
Hor
a de exportar el programa! Arriba del todo, a la izquierda, hay un men que pone Build. Lo desplegamos y
seleccionamos App (save .apk to my computer)
Guardamos el archivo .apk y lo transferimos a nuestro mvil a travs de USB. Una vez transferido
utilizamos una App como FileBrowser para navegar por los directorios de nuestro mvil hasta encontrar el
archivo .apk de la aplicacin, y lo instalamos. Nos pedir permisos de WiFi y Bluetooth. Le damos a
Aceptar.
Abrimos nuestra App. Pulsamos el botn Dispositivos y buscamos Arduino. Ahora se conectar con el
mdulo HC06. Despus, podremos encender y apagar el LED 13 con los otros dos botones.
En resumen: ya conocemos una forma de construir aplicaciones para controlar Arduino. A partir de aqu
podemos ir complicando las aplicaciones con ms botones para activar ms luces, barras de
desplazamiento para controlar motores, etc.
El prximo da intentaremos hacer una aplicacin para controlar un robot teledirigido.
Hola, homo fabers! Qu hay? En esta tercera (y ltima) parte de la serie de tutoriales de Arduino,
Bluetooth y Android voy a explicaros cmo construir un robot con Arduino que pueda controlarse con el
mvil. As podris ir a recoger vuestra fuente de energa biolgica (comida) sin tener que levantaros del
silln.
Al igual que en la ltima parte, vamos a usar MIT App Inventor 2 para construir esta aplicacin, as que si
no lo habis hecho, os invito a leer el segundo tutorial de esta serie para entender qu es y cmo
funciona.
Para construir el robot voy a utilizar un controlador de motores DRV8835 con el chasis Zumo de
Pololu que tengo, pero tambin voy a explicar cmo hacerlo a partir del controlador de motores L298 HBridge o un L293D para que puedas utilizar cualquier otro chasis personalizado.
Bueno, basta de hablar! Ponemos un poco de msica y empezamos. Como este es el ao Sibelius (el da
12 se cumplieron 150 aos de su nacimiento) vamos a poner una parte del Concierto de Violn en do
menor.
Material:
Los que queris montar el robot con el chasis Zumo vais a necesitar:
Una placa Arduino UNO o equivalente, es muy importante que sea del mismo tamao
Un mdulo bluetooth HC 06
Sino, tenis la opcin de seguir el tutorial con otro chasis personalizado. Si es as debis conseguir:
Un mdulo bluetooth HC 06
I Preparar Arduino
Lo primero ser escribir una funcin para mover los motores, que ser diferente segn cul sea vuestro
controlador de motores. Despus habr que poner esa funcin dentro de otro cdigo de Arduino que leer
comandos por Bluetooth y variar la velocidad de los motores.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
pinMode(6, OUTPUT);
//Invertir el giro del motor 1 si es necesario
if(m1 < 0)
{
digitalWrite(8, HIGH);
digitalWrite(7, LOW);
m1 = -m1;
}
else
{
digitalWrite(8, LOW);
digitalWrite(7,HIGH);
}
//Invertir el giro del motor 2 si es necesario
if(m2 < 0)
{
digitalWrite(4, HIGH);
digitalWrite(2, LOW);
m2 = -m2;
}
else
{
digitalWrite(4, LOW);
digitalWrite(2,HIGH);
}
//Generar pulso PWM
analogWrite(10, m1);
analogWrite(6, m2);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
}
//Invertir el giro del motor 2 si es necesario
if(m2 < 0)
{
digitalWrite(4, HIGH);
digitalWrite(2, LOW);
m2 = -m2;
}
else
{
digitalWrite(4, LOW);
digitalWrite(2,HIGH);
}
//Generar pulso PWM
analogWrite(10, m1);
analogWrite(6, m2);
25
26
27
28
29
30
31
32
33
34
35
36
37
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
digitalWrite(8, LOW);
//Generar pulso PWM
analogWrite(10, m2);
analogWrite(9, m1);
26
27
28
}
Esta funcin motores recibe dos argumentos: m1 y m2, las velocidades del motor 1 y 2 (que van de 0>255). Despus comprueba si la velocidad m1 es menor que cero. En este caso, activa el pin D8 (este pin
invierte el giro) y convierte m1 a un nmero positivo (ya que el pin D10, que controla la velocidad, slo
acepta valores mayores que cero). Lo mismo para m2.
Las dos ltimas lneas generan un pulso PWM en los pines D9 y D10 para mover los motores.
Comprobar la funcin
Es posible que tengis cableados los motores al revs que yo. Para que esto no d problemas ms
adelante, vamos a testear la funcin y a modificarla si algn motor gira en la direccin que no debera.
Este cdigo mueve los motores as:
Debis aadir la funcin motores de vuestro controlador al final de todo. Por ejemplo, si utilizis el chasis
Zumo de Pololu, debis copiar la funcin que hay ms arriba y pegarla al final de este programa.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void setup()
{
}
void loop()
{
motores(100, 0);
delay(700);
motores(-100,0);
delay(700);
motores(0, 100);
delay(700);
motores(0, -100);
delay(700);
motores(100,100);
delay(700);
motores(-100,-100);
delay(700);
motores(0,0);
delay(700);
19
20
}
//Copiar la funcion de motores aqui
Programa Bluetooth
Bien, ahora ya funcionan los motores. Lo siguiente ser conectar el mdulo HC 06 y cargar el programa de
Arduino que recibir los comandos que enviaremos por el mvil.
Hay que conectar el mdulo Bluetooth de esta forma:
int val;
2
3
void setup()
{
Serial.begin(9600);
delay(7000);
6
7
8
9
10
11
void loop()
{
if(Serial.available() >= 1)
12
13
14
val = Serial.read();
15
16
if(val == 'a')
17
18
motores(250,250);
19
20
21
{
motores(-250, 250);
22
}
23
24
25
motores(0,0);
26
27
28
29
motores(-250,-250);
30
31
32
{
motores(250,-250);
33
}
34
}
35
36
37
38
39
Ya hemos terminado con Arduino! Estamos a mitad del camino: queda construir una App con MIT App
Inventor que nos permita controlar el robot
Entrad en MIT inventor y cread un nuevo proyecto con el ttulo Teledirigido. Una vez dentro, habr que
cambiar la orientacin de la pantalla a Landscape. Tambin recomiendo cambiar el fondo a un color
oscuro, para que los botones se vean bien. Estos parmetros pueden modificarse en el men
de Propiedades:
Despus hay que ir a Palette->Layout y aadir un TableArrangement a la pantalla. Servir para poder
distribuir los botones de las flechas en la pantalla.
Seleccionad el recuadro verde que aparece en pantalla. Esta es la tabla. Hay que cambiar su tamao a 7
filas y 5 columnas. Esto se hace en el men de Propiedades.
Ahora empezamos a aadir botones. Id a Palette -> User interface y arrastrad la opcin Button a la
pantalla:
Tambin recomiendo cambiar el nombre de este botn por Arriba. Para cambiar el nombre de un
elemento, hay que pulsar el botn Rename, que est al final del men, y escribir un nombre nuevo.
Como ste ser el botn para avanzar, podis cambiar el nombre por adelante o forward.
Como no creo que queris un botn feo con un texto que ponga arriba, vamos a cambiar la imagen de
este botn por una de las imgenes de flechas. Con el botn seleccionado, id al men propiedades y
cambiad estos parmetros:
Haced lo mismo con el resto de botones y ya tendris el mando. No os olvidis de cambiar su nombre!
(atras, derecha e izquierda)
Ahora slo queda aadir un men desplegable que mostrar las conexiones Bluetooth posible y, por
supuesto, un cliente Bluetooth.
Dentro de Palette -> User Interface aadid un ListPicker y en el men de Propiedades cambiad
su texto por Conectar.
El cliente bluetooth se encuentra en Palette -> Connectivity -> BluetoothClient.
Si vuestra App se ve as, es que lo habis hecho bien. Os habis ganado una recompensa! Os doy
permiso para ir a la cocina y comer una galleta.
Una vez acabis con los bloques del ListPicker, empezaremos con los botones. Queremos que al pulsar
el botn de adelante la aplicacin enve la orden de avanzar. Pero al dejar el botn, hay que enviar la
orden de parada o el robot continuar avanzando.
En el men Blocks seleccionad el botn adelante (o cmo se llame el vuestro) y en el panel que se
abre aadid un TouchDown y TouchUp al espacio de trabajo. TouchDown son las instrucciones que se
ejecutaran al pulsar el botn, y TouchUp al soltarlo.
Hay que mirar si el Bluetooth est disponible, y si lo est debe enviarse la instruccin de avanzar/parar.
Dentro de BluetoothClient1 aadid un bloque Available y un bloque Send Text. El primero va al lado
del if, y el segundo en el espacio then.
Por ltimo, hay que especificar el texto para enviar. Dentro de Text, aadid un bloque de texto al lado del
espacio SendText. Cambiad su contenido por a y s, como aparece en la imagen:
Recordad que el botn izquierdo debe enviar el comando i, el botn atrs debe enviar r y el botn
derecho d.
Lo ltimo que queda es compilar la aplicacin. Hay que ir al men Build -> App (save .apk to my
computer).
Y ya est! Guardad la aplicacin, instaladla en vuestro mvil Android y ya tenis vuestro programa.
Funciona casi igual que la ltima vez: el men desplegable sirve para seleccionar el dispositivo Bluetooth
al que enviar los comandos y los botones para mover el robot.
Hey! Y no os olvidis de encender el Bluetooth de vuestro mvil en el men de Preferencias!
http://robologs.net/2015/10/29/tutorial-de-arduino-bluetooth-y-android-2-crear-una-appcon-mit-inventor/