You are on page 1of 23

TALLER ARDUINO MAS BLUETOOTH

Material
-Arduino Uno Rev 3
-Mdulo Bluetooth JY-MCU
-Dispositivo Android con Bluetooth
-Leds rojo, amarillo y verde
-Resistencias 220 ohms x 3, 5K6, 10K
Mdulo Bluetooth
El Bluetooth es un estndar de comunicacin inalmbrica que permite
la transmisin de datos a travs de radiofrecuencia en la banda de
2,4 GHz. Existen muchos mdulos Bluetooth para usarlos en nuestros
proyectos de electrnica, pero los ms utilizados son los mdulos de
JY-MCU, ya que son muy econmicos y fciles de encontrar en el
mercado. Son mdulos pequeos y con un consumo muy bajo que nos
permitirn agregar funcionalidades Bluetooth a nuestro Arduino. Estos
mdulos contienen el chip con una placa de desarrollo con los pins
necesarios para la comunicacin serie.
Existen dos modelos de mdulos Bluetooth: el HC-05 que puede ser
maestro/esclavo (master/slave), y el HC-06 que solo puede actuar
como esclavo (slave). La diferencia entre maestro y esclavo es que en
modo esclavo es el dispositivo quien se conecta al mdulo, mientras
que en modo maestro es el mdulo quien se conecta con un
dispositivo.
Fsicamente, los dos mdulos son muy parecidos, solo varan algunas
conexiones. Los pins que encontraremos son los siguientes:
-Vcc: Alimentacin del mdulo entre 3,6V y 6V.
-GND: La masa del mdulo.
-TXD: Transmisin de datos.
-RXD: Recepcin de datos a un voltaje de 3,3V.
-KEY: Poner a nivel alto para entrar en modo configuracin del
mdulo (solo el modelo HC-05)

-STATE: Para conectar un led de salida para visualizar cuando se


comuniquen datos.

Comandos AT
Los comandos AT son un tipo de comandos que sirven para configurar
el mdulo Bluetooth a travs de un microcontrolador, un ordenador o
con cualquier dispositivo que posea una comunicacin serie (Tx/Rx).
Son unas instrucciones que nos permiten cambiar los baudios del
mdulo, el PIN, el nombre, etc. Para usar los comandos AT el mdulo
Bluetooth no debe estar vinculado a ningn dispositivo (led rojo del
mdulo parpadeando). Segn las especificaciones del mdulo, el
tiempo que se tiene que respetar entre el envo de un comando AT y
otro tiene que ser de 1 segundo. Si se enva un comando AT y en
menos de un segundo se enva otro, el mdulo no devuelve
respuesta.
Ahora vamos a configurar el mdulo Bluetooth a travs de comandos
AT enviados desde el Monitor Serial del Arduino. El cdigo del Arduino
necesario tanto por el mdulo HC-05 como el HC-06 es el siguiente:
#include <SoftwareSerial.h> //Librera
comunicacin serie en otros pins

que

permite

establecer

//Aqu conectamos los pins RXD,TDX del mdulo Bluetooth.


SoftwareSerial BT(10,11); //10 RX, 11 TX.
void setup()
{
BT.begin(9600); //Velocidad del puerto del mdulo Bluetooth
Serial.begin(9600); //Abrimos la comunicacin serie con el PC y
establecemos velocidad
}
void loop()
{
if(BT.available())
{

Serial.write(BT.read());
}
if(Serial.available())
{
BT.write(Serial.read());
}
}
Entre los dos modelos de mdulo Bluetooth existen diferencias a la
hora de enviar los comandos AT:
HC-06
En el HC-06 solo se necesitan cuatro pines: Vcc, GND, TXD y RXD. El
pin KEY no es necesario.
Al enviar un comando AT no se debe enviar ningn carcter de LF
(nueva lnea) ni CR (retorno de carro) al final del comando. En el
Monitor Serial del Arduino tenemos que poner No hay fin de lnea.

Los comandos AT que se pueden enviar en este mdulo son los


siguientes:

Una vez compilado el cdigo en el Arduino, abrimos el Monitor Serial y


enviamos el comando AT, vemos que el mdulo Bluetooth nos
responde con un OK.
HC-05
El HC-05 es necesario poner el pin KEY del mdulo a nivel alto (5V)
para enviar comandos AT. Adems, al enviar un comando AT hay que
enviar un carcter de LF (nueva lnea) y de CR (retorno de carro) al
final del comando. Por lo tanto, en el Monitor Serial de Arduino
pondremos Ambos NL & CR.

Recibir datos de un dispositivo Android


Ahora que ya sabemos cmo conectar y configurar un mdulo
Bluetooth en nuestro Arduino, vamos a vincularlo a un dispositivo
Android con Bluetooth y enviar datos al Arduino mediante la
aplicacin BlueTerm, que es un emulador de terminal que permite
comunicarse con un dispositivo Bluetooth para enviar y recibir
informacin va serie. La app es gratuita y se puede descargar
desde este enlace.
Conectaremos tres leds de diferentes colores al Arduino y mediante
unos comandos que ingresaremos en la app BlueTerm los
encenderemos y apagaremos. En este ejemplo hemos usado un
mdulo HC-06 pero se puede usar tambin un HC-05 ya que no hay
diferencia en este caso.

Cdigo Arduino
int
int
int
int
int

ledred=8;
ledgreen=9;
ledblue=10;
tx=1;
rx=0;

char inSerial[15];
void setup(){
Serial.begin(9600);
pinMode(ledred, OUTPUT);
pinMode(ledgreen, OUTPUT);
pinMode(ledblue, OUTPUT);
pinMode(tx, OUTPUT);
pinMode(rx, INPUT);
}
void loop(){
int i=0;
int m=0;
delay(500);
if (Serial.available() > 0) {
while (Serial.available() > 0) {
inSerial[i]=Serial.read();
i++;
}
inSerial[i]='\0';
Check_Protocol(inSerial);
}}
void allpinslow()
{
digitalWrite(ledred, LOW);
digitalWrite(ledgreen, LOW);
digitalWrite(ledblue, LOW);
}
void Check_Protocol(char inStr[]){
int i=0;
int m=0;
Serial.println(inStr);
if(!strcmp(inStr,"red")){
//Ledred ON
allpinslow();
digitalWrite(ledred, HIGH);
Serial.println("Red ON");
for(m=0;m<11;m++){
inStr[m]=0;}
i=0;}
if(!strcmp(inStr,"green")){
//Ledgreen ON
allpinslow();
digitalWrite(ledgreen, HIGH);
Serial.println("Green ON");
for(m=0;m<11;m++){
inStr[m]=0;}
i=0;}

if(!strcmp(inStr,"blue")){
//Ledblue ON
allpinslow();
digitalWrite(ledblue, HIGH);
Serial.println("Blue ON");
for(m=0;m<11;m++){
inStr[m]=0;}
i=0;}
if(!strcmp(inStr,"all on")){
//Ledred ON
allpinslow();
digitalWrite(ledred, HIGH);
digitalWrite(ledblue, HIGH);
digitalWrite(ledgreen, HIGH);
Serial.println("ALL ON");
for(m=0;m<11;m++){
inStr[m]=0;}
i=0;}
if(!strcmp(inStr,"all off")){
allpinslow();
Serial.println("ALL OFF");
for(m=0;m<11;m++){
inStr[m]=0;}
i=0;}

//Ledred ON

else{
for(m=0;m<11;m++){
inStr[m]=0;
}
i=0;
}}

El cdigo es bastante simple. Primero creamos un array de 256


posiciones tipo char llamado cadena para almacenar los caracteres
que recibiremos de la app. Cuando haya datos disponibles los vamos
guardando uno por uno en forma de carcter en la variable dato.
Despus ponemos estos caracteres por orden en el array cadena.
Cuando reciba un carcter de fin de lnea (\n), se compara el texto
almacenado en el array con el texto que deseamos. Para hacer la
comparacin se usa la funcin strstr() que procede de C++ y que
permite encontrar partes de texto en un String. Despus de esto, se
limpia el array poniendo a 0 todas las posiciones usadas para recibir
el siguiente comando.

Configurar app Android

Una vez descargada la app la


ponemos Conectarse a un dispositivo.

abrimos

en

ajustes

Pulsamos Buscar dispositivos y escogemos nuestro mdulo Bluetooth


que en nuestro caso le hemos puesto el nombre DIYMakers. Si no lo
habis cambiado pondr por defecto LINVOR o HC-06.

Ponemos el PIN del mdulo. Si no lo habis modificado ser 1234.

Despus
de
esto,
arriba
a
la
derecha
pondr conectado:<nombre> Significa que tenemos asociado nuestro
dispositivo Android con nuestro mdulo Bluetooth y el led de este
deja de parpadear y se queda fijo.

Luego solo hay que poner los comandos para encender y apagar los
leds. Cuando se escribe un comando tenemos que pulsar Enter del
teclado para enviarlos al Arduino. En el terminal no se pueden borrar
caracteres, por lo que si nos equivocamos pulsamos Enter y lo
volvemos a escribir.

Video: https://www.youtube.com/watch?v=Cr0PXxLFvZk

AppInventor. Android + Mdulo Bluetooth + Arduino

Esquema de conexiones:

Para explicar el uso de este mdulo voy a usar esta sencilla aplicacin
que consiste en encender y apagar 3 leds diferentes.

Este es el entorno donde vamos a trabajar:

A la derecha del editor nos aparecer una lista con todos los elementos que estamos usando, es muy
recomendable nombrar cada cosa para luego no volvernos locos en el editor de bloques.

Es fundamental aadir el cliente bluetooth para que funcione


de "Other stuff".

se encuentra en el men de la izquierda, dentro

Una vez tengamos hecho el diseo de la aplicacin toca asignar


funciones a cada elemento, para ello, abrimos el editor de bloques
con el siguiente botn:

Se nos abrir esta ventana, donde iremos colocando los bloques que

vamos a utilizar. En el men de la izquierda podemos ver todos los


que tenemos disponibles:

Ahora

vayamos

por

partes...

Empezaremos declarando la variable "MAC", asignndole la direccin


de nuestro mdulo bluetooth (podemos saber la direccin por ejemplo
con
la
app
Bluetooth
Terminal
- Link).
En el campo de texto donde pone "DIRECCION MAC", tendremos que
poner la direccin tal cual nos aparece en el mvil, algo as:
XX:XX:XX:XX:XX:XX

Seguimos ahora con el botn para conectarnos con el mdulo desde


la
aplicacin.
- Realizamos una comprobacin de la MAC del mdulo para ver si est
funcionando.
En

el

caso

de

que

si

lo

est:

Cambia
el
texto
del
botn
por "Desconectar"
Cambia
el
color
del
texto
a
gris.
- Se enva una cadena de texto cualquiera para que el otro extremo
"sepa con quien hablar".

Primero,

al

pulsar

el

botn

de

encender "on",

tenemos

que:

- Se enva un "1", que usaremos para encender en este caso el led


rojo
con
el
arduino.
- Desactivamos el
botn
de
encender
para
este
led.
- Activamos el botn de apagado (previamente en el diseo lo
marcamos
para
que
est
desactivado
en
el
inicio).
Segundo, una vez desactivado el botn de encender y activado el de
apagar "off",
si
pulsamos
este
ltimo:
- Se enva una "A", que usaremos para apagar en este caso el led rojo
con
el
arduino.
- Desactivamos el
botn
de
apagar
para
este
led.
- Activamos nuevamente el botn de encendido.

(Las cadenas de caracteres que le enviamos al arduino, pueden ser


cualquier texto, solo hay que poner luego lo mismo en la parte del
cdigo
donde
corresponda.)
De est forma quedara para los 3 leds:

Y este sera el resultado final, aadindole al botn "salir" la accin de cerrar la aplicacin:

Cdigo de arduino para este ejemplo:


cpp code

//Ejemplo de control de 3 LEDs mediante un mdulo bluetooth y un


dispositivo Android. SpainLabs.com
String dato;
datos recibidos

//Variable de tipo cadena para guardar los

int rojo= 8;
int naranja= 9;
int verde= 10;
void setup() {
Serial.begin(9600);

//Iniciamos comunicacin serial

//Salidas digitales
pinMode(rojo, OUTPUT);
pinMode(naranja, OUTPUT);
pinMode(verde, OUTPUT);
}
void loop() {
while (Serial.available()) {
delay(10);
if (Serial.available() > 0) {
char c = Serial.read();
guarda como carcter
dato += c;
la suma de los datos recibidos

//Cuando se recibe un dato, se


//Cadena de caracteres formada por

}
}
if (dato.length() > 0) {
"dato" tenga al menos un caracter

//Comprueba que la variable

if(dato == "1") {
//Comparamos la cadena de
caracteres con cada uno de los casos

Serial.println("Encender led rojo");


la accin realizada
digitalWrite(rojo, HIGH);

//Muestra por el monitor serial

//Enciende el led rojo

}
if(dato == "A") {
Serial.println("Apagar led rojo");
digitalWrite(rojo, LOW);
}
if(dato == "2") {
Serial.println("Encender led naranja");
digitalWrite(naranja, HIGH);
}
if(dato == "B") {
Serial.println("Apagar led naranja");
digitalWrite(naranja, LOW);
}
if(dato == "3") {
Serial.println("Encender led verde");
digitalWrite(verde, HIGH);
}
if(dato == "C") {
Serial.println("Apagar led verde");
digitalWrite(verde, LOW);
}
dato=""; //Declaramos la variable "vaca" para volver a guardar de
nuevo caracteres y compararlos con cada uno de los casos
}
}
Montaje en protoboard:

IMPORTANTE:
- El cdigo para emparejar el mdulo bluetooth con el dispositivo,
suele
ser
"1234".
- Si se usan los pines 0 y 1 del arduino (Rx y Tx), a la hora de cargar
el sketch hay que desconectarlos y una vez se haya cargado los
volvemos a conectar. En el caso de que queris usar otros pines
digitales para no tener problema con esto, tendris que usar la
librera SoftwareSerial.h.
Aqu
podis
encontrar
ms
informacin: http://arduino.cc/es/Reference/SoftwareSerial
AppInventor: http://appinventor.mit.edu/explore/classic.html
AppInventor
2: http://ai2.appinventor.mit.edu/
Versin
para
descargar
(Windows): http://beta.appinventor.mit.edu/learn/setup/setupwindows.html

http://beta.appinventor.mit.edu/#
345823017

You might also like