Modulo bluetooth, Led RGB y Arduino + Android

En este tutorial lo que haremos será controlar un led RGB, por medio de tu celular usando bluetooth, todo esto a través de Arduino. Antes de comenzar debemos entender algunos conceptos básico del funcionamiento de un módulo bluetooth para lograr realizar el tutorial.

¿Qué significa bluetooth?

Bluetooth es una especificación industrial para Redes Inalámbricas de Área Personal (WPAN) que posibilita la transmisión de voz y datos entre diferentes dispositivos mediante un enlace por radiofrecuencia en la banda ISM de los 2.4 GHz.

Principales objetivos de esta especificación:

  • Facilitar las comunicaciones entre equipos móviles.
  • Eliminar los cables y conectores entre estos.
  • Ofrecer la posibilidad de crear pequeñas redes inalámbricas y facilitar la sincronización de datos entre equipos personales.

¿Qué es un módulo bluetooth?

Un módulo Bluetooth nos permite conectarnos con algún dispositivo de forma inalámbrica (bluetooth) estos módulos se pueden comportar como esclavo o maestro, los cuales sirven para escuchar peticiones de conexión y otros para generar peticiones de conexión. Si algún dispositivo se conecta, el modulo transmite a este todos los datos que recibe del Arduino y viceversa.

Los más utilizados son los módulos de JY-MCU, ya que son muy económicos y fáciles de encontrar en el mercado. Son módulos pequeños y con un consumo muy bajo que nos permitirán agregar funcionalidades Bluetooth a nuestro Arduino. Estos módulos contienen el chip con una placa de desarrollo con los pines necesarios para la comunicación serie.

¿Qué modelos de módulos bluetooth hay?

  • HC-06: El modelo HC-06 dispone de 4 pines y solo puede actuar como esclavo y además dispone de un juego reducido de instrucciones a las que atiende. Permite una conexión sencilla y sin problemas mediante comandos AT a través de una puerta serie
  • HC-05: el modelo HC-05 consta de 6 pines, el HC-05 puede actuar  como maestro o como esclavo y acepta un mayor número de órdenes de configuración. Es un módulo sencillo e  ideal para pequeños proyectos en los que buscas una comunicación fácil entre tu móvil y Arduino u otros microcontroladores.
  • HC-08: El módulo HC-08 permite transmitir y recibir datos a través del puerto serie del microcontrolador de manera inalámbrica. Pertenece la versión 4.0 de dispositivos Bluetooth, que tiene las mismas características que sus antecesores, pero con la diferencia de que este dispositivo es de bajo consumo energético. También añade la característica de ser compatible con productos de la marca Apple. Posee una frecuencia de trabajo de 2.4GHz ISM, modulación GFSK, máximo poder de transmisión de 4dBm, sensibilidad de recepción de -93dBm y 80 metros de comunicación en ambientes sin obstáculos.
  • NRF51822: El nRF51822 es un SoC de propósito general y ultra bajo consumo, ideal para aplicaciones inalámbricas patentadas Bluetooth® Low Energy y 2.4 GHz. Incorpora una rica selección de periféricos analógicos y digitales que pueden interactuar directamente sin intervención de la CPU a través del sistema de interconexión periférica programable (PPI). Los GPIO flexibles le permiten conectar interfaces digitales como SPI Master / Slave, TWI Master y UART a cualquiera de los 31 GPIO del dispositivo.
  • AT09 HM10: El módulo Bluetooth HM10 es un módulo bluetooth serial que puede usarse para reemplazar los módulos bluetooth HC-05 y HC-06 y hacer uso del protocolo bluetooth más reciente conocido como Bluetooth 4.0 o BLE. Al igual que módulos seriales anteriores, el HM10 emula un puerto serial sobre el protocolo bluetooth. También cuenta con el estándar Bluetooth Low Energy basado en los chips de Texas Instruments CC2540 o CC2541.
De todos los mencionados el que usaremos será el modulo bluetooth HC-06, ya que este nos funcionara para el tutorial que vamos a realizar.

¿Cómo se configuran los módulos bluetooth?

Hay dos formas de configurar los módulos bluetooth una es a través de comandos AT y la otra a través de librerías que ya existen para arduino para realizar las configuraciones de los módulos.

Antes de empezar con el tutorial veremos cuáles son las especificaciones del HC-06:

Especificaciones y características

  • Especificación bluetooth v2.0 + EDR (Enhanced Data Rate)
  • Voltaje de operación: 3.3 V a 5 V
  • Consumo de corriente: 30 mA a 40 mA
  • Chip de radio: CSR BC417143
  • Configuración: Comandos AT
  • Modo: Esclavo
  • Frecuencia: 2.4 GHz, banda ISM
  • Potencia de emisión: 4 dBm, clase 2
  • Modulación: GFSK
  • Antena: Incorporada en PCB
  • Baudrate: 9600, 8, 1, n.
  • Alcance: 5 m a 10 m
  • Sensibilidad: ≤ -81 dBm a 0.1% BER
  • Velocidad: Asincrónica: 2 Mbps (max.)/160 kbps,
  • Velocidad sincrónica: 1 Mbps/1 Mbps
  • Seguridad: Autenticación y encriptación (Password por defecto: 1234)
  • Perfiles: Puerto serial Bluetooth
  • Dimensiones: 1.52 cm x 3.57 cm
  • Temperatura de operación (Max): 75 ºC
  • Temperatura de operación (Min): -25 ºC

Material a utilizar

  • Hardware
    • Arduino Uno
    • Cable Arduino
    • Led RGB
    • Resistencia de 150 Ohms
    • 2 resistencias de 100 Ohms
    • Modulo Bluetooth HC-06
    • Cables dupont
    • Protoboard
    • Celular
  • Software
    • Arduino IDE
    • Appinventor

Diagrama Led RGB

¿Qué haremos?

Lo que realizaremos en este tutorial será a través de un módulo bluetooth controlar un Led RGB, por medio de una aplicación que realizaremos nosotros mismos, en este tutorial veremos cuál es la programación que tendremos que hacer para que arduino logre controlar el Led RGB a través de lo que reciba del módulo Bluetooth y también haremos la programación en bloques de la aplicación para el control de este mismo.

Conexión Modulo bluetooth a Arduino

  1. Conectaremos el Pin 11 al RX del módulo bluetooth.
  2. Conectaremos el Pin 10 al TX del módulo bluetooth.
  3. Conectaremos el voltaje de 5V y el GND del Arduino al protoboard.
  4. Conectaremos el voltaje y GND de la proto hacia el modulo en sus respectivos pines.

Conexión de Led RGB

Para esta conexión nos basaremos en el pinout del Led RGB que vimos al principio para saber cuál es cada pin correspondiente y en el diagrama de conexión que estamos viendo hacemos caso a los colores de los cables para hacer la conexión en el arduino.

El diodo Led RGB tiene un cátodo y tres ánodos (uno para cada color). Los colores son controlados a través de PWM. En su datasheet comprobamos que los voltajes de cada color a una intensidad de 20mA son los siguientes: Red 2 V, Green 3,2 V y Blue 3,2V. Sabiendo esto juntamente con que el voltaje de salida máximo de los pins del Arduino es de 5V podemos calcular las resistencias de cada color aplicando la ley de Ohm.

Como no vamos a encontrar resistencia de 90 Ohms lo que haremos será acercarnos al valor más cercano pero que supere los 90 Ohms en este caso sería una resistencia de 100 Ohms.

Aquí tenemos un diagrama más detallado de cómo deben ser las conexiones del LED y el modulo Bluetooth hacia el Arduino.

El programa que usaremos para el control del RGB será el siguiente:

/* Programa control RGB + APP
  www.cdmxelectronica.com
  Por J. Vazquez
*/
 
#include <SoftwareSerial.h> //Librería que permite establecer comunicación serie en otros pins
 
//Aquí conectamos los pins RXD,TDX del módulo Bluetooth.
SoftwareSerial BT(10,11); //10 RX, 11 TX.
 
int ledred=3; //Pin LED Red
int ledgreen=5;//Pin LED Green
int ledblue=6; //Pin LED Blue
 
void setup()
{
 
  BT.begin(9600);  //Velocidad del puerto del módulo Bluetooth
 
  pinMode(ledred,OUTPUT); //Declaramos que son salidas
  pinMode(ledgreen,OUTPUT); //Declaramos que son salidas
  pinMode(ledblue,OUTPUT); //Declaramos que son salidas
}
 
void loop()
{
    //Cuando existan datos disponibles
    while (BT.available()>0)
    {
        int red = BT.parseInt(); //Leemos el primer valor entero (Red) y lo almacenamos en la variable red
 
        int green = BT.parseInt(); //Leemos el segundo valor entero (Green) y lo almacenamos en la variable green
 
        int blue = BT.parseInt(); //Leemos el último valor entero (Blue) y lo almacenamos en la variable blue
        
          red = constrain(red, 0, 255); //Restringe el dato del numero obtenido y almacenado, dentro de un rango marcado 
          green = constrain(green, 0, 255); //Restringe el dato del numero obtenido y almacenado, dentro de un rango marcado 
          blue = constrain(blue, 0, 255); //Restringe el dato del numero obtenido y almacenado, dentro de un rango marcado 

        //Cuando lea el carácter fin de línea ('\n') quiere decir que ha finalizado el envío de los tres valores
        if (BT.read() == '\n')
        {
          //Enviamos los valores de los tres colores al LED RGB através de PWM
          analogWrite(ledred,red);
          analogWrite(ledgreen,green);
          analogWrite(ledblue,blue);
        }
  }
}

Realización de  aplicación en APP INVENTOR

Cabe aclarar que para usar APP Inventor necesitas estar conectado a internet ya que es un programa online que está asociado a Google, y también te dará acceso a través de una cuenta de Google.

Así se ve la interfaz de App Inventor y aquí es donde vamos a ir colocando todas las herramientas que vamos a usar en nuestra aplicación. Después de explicar cuáles serán las herramientas que usaremos explicaremos cómo será la programación en bloques para la aplicación.

Integraremos las siguientes herramientas para la aplicación las cuales seras:

  • User Interface
    • List Picker
    • Button
    • Label
    • Slider
  • Drawing and Animation
    • Canvas
    • Ball
  • Connectivity
    • BluetoothClient

Estas herramientas las encontraremos en la sección que se llama Palette todas esas las arrastramos hacia la pantalla del teléfono y las acomodamos (puede ser de la siguiente manera o de la forma que se acomoden en realidad no afecta a la programación).

Antes de empezar con la programación lo que haremos será configurar los sliders poniendo los rangos que se manejan para controlar el Led RGB, el rango que se maneja es de 0 a 255. Además de que debemos cambiar el nombre de los slider para facilitar la identificación de cada uno de estos al momento de estar realizando la programación en bloques.

Para realizar la modificación de estos rangos y de los nombres, nos iremos a la parte de Components y ahí es donde modificaremos el nombre de cada uno de los Sliders por medio del botón Rename. Para cambiar el rango de los sliders lo que haremos será seleccionar un slidery en la parte de Properties que se encuentra al lado modificaremos la parte donde dice MaxValue y pondremos 255 y en MinValue pondremos 0, repetimos esto con los Sliders restantes.

Después habrá que montarle una imagen al canvas, entonces lo que haremos será buscar una imagen de un circulo de color como el mostrado, o el que quieran utilizar, y una vez descargado en la parte de Components seleccionaremos el Canvas, después en la parte de properties donde dice BackgroundImage subiremos el archivo (de preferencia que sea .png) y modificaremos las medidas a las siguientes, Height a 45% y Width a 90%. Por último la herramienta Ball la colocaremos sobre el canvas.

Ya que tengamos la interfaz gráfica nos pasaremos a la parte de programación e bloques y esta se encuentra en la pestaña de la esquina superior derecha que dice Blocks. Una vez ahí esta será la programación encargada de hacer la conexión bluetooth del teléfono hacia el HC-06 y  del botón encargado de apagar el Led RGB.

Lo que hará este programa será que cuando selecciones Conexión BT y este activado el bluetooth en tu celular entraras a la interfaz para seleccionar el dispositivo que te quieres conectar, y si está disponible y hace la conexión el texto cambiara de color.

Después el último se encargara de que si vuelves a pulsar el de conexión cuando ya estas conectado a algún dispositivo este te desconectara automáticamente.

También está el bloque del botón de Led Off, en este lo que hace el programa es mandar los rangos de los sliders a 0 para así apagar el Led (hay otras formas de apagar el Led pero este es el más sencillo).

La siguiente programación es para configurar los sliders y que estos al momento de ser utilizados manden un dato al bluetooth, esta programación se tiene que hacer para cada uno de los sliders incluyendo cada uno de los colores del Led RGB. Ya que al final de la programación de cada slider está el \n, que es el que utilizamos al final de nuestro programa de Arduino para mandar el dato de los colores RGB.

La siguiente parte va a funcionar de la siguiente manera, nos ayudara a que a través de la herramienta Ball que pusimos obtengamos los valores de color del Canvas y al momento de obtener el dato este lo va a mandar al label para que muestre cual es el rango de color de cada uno de ellos.

Aquí es donde aparecerán los datos del rango de color obtenidos por la herramienta ball

La parte donde vamos a manejar los sliders servirá para mover los sliders automáticamente a los rangos que nos esté marcando la herramienta Ball.

Esta es la última parte de la programación para la aplicación, aquí lo que hace el programa es una vez recibido el color mandado por la herramienta Ball, nos mandara los datos del rango que recibe, estos los redondeara para así mandar un numero entero y este lo mandara a su propia categoría de color que ya habíamos especificado. Esta parte del programa se basa un poco en la función de los sliders para mandar datos, solo que los datos que manda aquí son los que recibe a través de Canvas y Ball.

Eso es todo lo necesario para hacer tu aplicación, y poder controlar un Led RGB por medio de Bluetooth y un Arduino. Así es como se ve la aplicación en el celular una vez terminado.