Controlando un led RGB vía Bluetooth con Arduino desde Windows Phone

Arduino sin lugar a dudas es la placa didáctica y productiva de electrónica por excelencia. Entre la moda de usarlo hasta la sencillez con la que cuenta para poder crear miles de proyectos es sin dudas una referencia obligada para revisar y tomar muy en cuenta.

En el mundo del software tenemos como referencia a el famoso Hola Mundo para hacer siempre nuestros primeros ejercicios. En el caso de la electrónica es hacer un LED parpadear. Por eso este ejercicio que va desde ese punto hasta la capacidad de controlar el led desde Windows Phone puede ser el mejor punto de partida para iniciarnos en el mundo del Internet de las cosas.

El material

Lo que vas a necesitar para este ejercicio es:

Una placa de RGB marca Keyes (puedes utilizar un LED RGB de alta luminosidad pero obviamente esto requeriría el uso de resistencias de 200K Ω para cada ánodo).

KeyesLED

Un arduino UNO

Un módulo Bluetooth

Una protoboard

Algunos cables (de preferencia jumpers)

Y claro, tu teléfono.

El proceso

Cuando quieras hacer cualquier proyecto de este tipo debes saber que el primer paso siempre es el hardware, es decir, primero haces el armado de tu sistema de manera física y después te vas con la programación. Así que comenzaremos.

Primero debes juntar las entradas de la placa del LED RGB con los cables.

LedRGB

Después conecta los cables a tu Arduino de la siguiente manera (los colores del cable son equivalentes al color de la luz del LED).

Ground = GND

Red = Pin 8

Green = Pin 9

Blue = Pin 10

RGB Arduino

Después de eso coloca los jumper para el módulo Bluetooth, la secuencia es la siguiente.

GND = GND

VCC = 5V

RXD = 3 (Digital)

TXD = 2 (Digital)

Arduino Bluetooth

Al final tendrás algo parecido a la siguiente imagen.

Sitema Final

¡Listo! Ya quedó el hardware, con esto llevas la mitad del proyecto (yo diría que un poco más, pero lo digo de acuerdo a las fases del proyecto).

La programación

Arduino tiene un entorno de programación sumamente simple para la impresionante capacidad de cosas que puede hacer. De manera básica solo son necesarios dos métodos.

void setup()
{
 
}
 
void loop()
{
 
}

El método setup te permitirá configurar todas las entradas, salidas y puertos de comunicación necesarios para tu proyecto. El método loop es el encargado de ejecutar las instrucciones de manera cíclica. Fuera de eso, podrás crear tus variables, invocar espacios de nombres y establecer los métodos que desees. En este ejercicio lo primero que debes hacer es agregar la invocación a una biblioteca adicional y declarar las variables requeridas para cada color del LED RGB así como los pines asignados para el módulo Bluetooth.

#include <SoftwareSerial.h>
 
int red = 8;
int green = 9;
int blue = 10;
 
char rec;
SoftwareSerial bluetoothBridge(2,3);
 
void setup()
{
 
}
 
void loop()
{
 
}

Como puedes ver, cada número asignado a las variables corresponde al pin en el que el cable de cada color se encuentra, considera que nunca deberás declarar el valor de la tierra (GND), en el caso de la declaración del módulo de Bluetooth la secuencia de los parámetros es (TXD, RXD). Ahora, dentro del método setup debes establecer el tipo de manejo de información de los pines, como solo son de salida entonces debes escribir la palabra OUTPUT, para la variable de bluetooth, establece el puerto de comunicación (podrás usar siempre por defecto el 9600). El método println permite enviar un mensaje básico al dispositivo enlazado.

#include <SoftwareSerial.h>
 
int red = 8;
int green = 9;
int blue = 10;
 
char rec;
SoftwareSerial bluetoothBridge(2,3);
 
void setup()
{
bluetoothBridge.begin(9600);
bluetoothBridge.println("Connection established");
 
pinMode(red, OUTPUT);
pinMode(green, OUTPUT);
pinMode(blue, OUTPUT);
}
 
void loop()
{
 
}

En el método loop implementa una sentencia switch que funcionará de acuerdo a la información recibida a partir de la comunicación bluetooth. Cada caso invocará a un método en particular, siendo en total seis opciones.

void loop()
{
rec = bluetoothBridge.read();
switch(rec)
{
case '0':
turnRedOn();
bluetoothBridge.println("Red on");
break;
case '1':
turnRedOff();
bluetoothBridge.println("Red off");
break;
case '2':
turnGreenOn();
bluetoothBridge.println("Green on");
break;
case '3':
turnGreenOff();
bluetoothBridge.println("Green off");
break;
case '4':
turnBlueOn();
bluetoothBridge.println("Blue on");
break;
case '5':
turnBlueOff();
bluetoothBridge.println("Blue off");
break;
}
}

Crea un método para prender y otro para apagar cada uno de los colores del LED. Puedes comenzar con el color rojo y replicar lo mismo para los otros dos colores. Para hacerlo solo debes invocar el método digitalWrite y establecer dos parámetros, el primero es de la variable que modificarás y el segundo es el tipo de valor para el paso de corriente, solo tienes dos opciones, HIGH y LOW que equivalen a prendido y apagado respectivamente.

void turnRedOn()
{
digitalWrite(red, HIGH);
}
 
void turnRedOff()
{
digitalWrite(red, LOW);
}

Al final tu código completo puede lucir así.

#include <SoftwareSerial.h>
 
int red = 8;
int green = 9;
int blue = 10;
 
char rec;
SoftwareSerial bluetoothBridge(2,3);
 
void setup()
{
bluetoothBridge.begin(9600);
bluetoothBridge.println("Connection established");
 
pinMode(red, OUTPUT);
pinMode(green, OUTPUT);
pinMode(blue, OUTPUT);
}
 
void loop()
{
rec = bluetoothBridge.read();
switch(rec)
{
case '0':
turnRedOn();
bluetoothBridge.println("Red on");
break;
case '1':
turnRedOff();
bluetoothBridge.println("Red off");
break;
case '2':
turnGreenOn();
bluetoothBridge.println("Green on");
break;
case '3':
turnGreenOff();
bluetoothBridge.println("Green off");
break;
case '4':
turnBlueOn();
bluetoothBridge.println("Blue on");
break;
case '5':
turnBlueOff();
bluetoothBridge.println("Blue off");
break;
}
}
 
void turnRedOn()
{
digitalWrite(red, HIGH);
}
 
void turnGreenOn()
{
digitalWrite(green, HIGH);
}
 
void turnBlueOn()
{
digitalWrite(blue, HIGH);
}
 
void turnRedOff()
{
digitalWrite(red, LOW);
}
 
void turnGreenOff()
{
digitalWrite(green, LOW);
}
 
void turnBlueOff()
{
digitalWrite(blue, LOW);
}

Hasta aquí ya tienes tu proyecto de Arduino armado y programado. Primero verifica con el botón de validar que tu proyecto no tenga ningún error de sintaxis (solo puedes hacer eso, la depuración queda pendiente en este entorno) y después ejecuta en el micro controlador.

image

Después de eso, cuando veas que ya no tienes ningún error, descarga aquí el mismo código pero ahora refactorizado para que puedas ver como poder reducir tus líneas de código con la misma funcionalidad

La aplicación Windows Phone

Para poder continuar, descarga la aplicación BT Terminal de la tienda de Windows Phone, esta aplicación te permitirá trabajar de manera inicial con tu dispositivo. Solo arranca la aplicación y empareja con tu sensor, la clave se sincronización es 1234 como de costumbre. Puedes ver en el siguiente video el resultado final.

6 Comments

  • Pingback: Aplicación de Windows Phone para comunicarse vía Bluetooth con Arduino | El blog de Kañaz

  • sam
    25 noviembre, 2014 - 10:22 pm | Permalink

    que tal oye mi dispositivo se enlaza correctamente pero ala hora de enviar el numero para que prenda el RGB no hace nada.. ni imprimenada en la pantalla del celular.. saludos

  • Danny
    4 abril, 2015 - 2:06 am | Permalink

    de antemano te agradezco! soy novato en todo esto. me enviaron un proyecto así y la verdad no sabia como establecer la conexión! entre el arduino y un windows phone cosa que muy atípico de conseguir!
    créemelo te lo agradezco…

    saludos desde Ecuador

    • Amin Espinoza
      13 abril, 2015 - 9:03 pm | Permalink

      Gracias a tí por visitar el blog 😀

  • JuanMa
    24 junio, 2015 - 3:07 am | Permalink

    Amin… eres tu…? jajaja

    Que buena onda, la verdad me ayuda mucho esto, Gracias por compartir tu conocimiento 😉

    (TESI)

    • Amin Espinoza
      6 julio, 2015 - 3:47 pm | Permalink

      Si!! Soy yo!! Jajajaja un abrazo Juan.

  • Deja un comentario

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *