Siempre creciendo, siempre aprendiendo. Cultura maker.

¡Hombreeeee, qué sorpresaaaaa!. ¡Cuánto tiempo sin veros por aquí!. ¡Pasad!, ¡pasad!. ¡Me alegro mucho de veros!.

Hoy vamos a aprovechar una característica muy útil que incorporan nuestras placas Arduino, y que muchas veces no aprovechamos en todo su potencial: el puerto serie. Y para ello, acabaremos haciendo una práctica muy sencilla en la que encenderemos o apagaremos un led RGB mediante una aplicación en nuestro móvil a través de Bluetooth.

El puerto serie

El puerto serie es el modo de comunicarse de Arduino con nuestro ordenador, a través del cable USB. Podría intentar profundizar un poco en su estructura y funcionalidad, pero hoy tengo algo de prisa. Además, posiblemente escribiría un texto muy por debajo de tutoriales como éste de Luis LLamas. ¡Echadle un vistazo después, si queréis!. ¡Está muy bien!

Lo que a nosotros nos interesa, a grandes rasgos, es que Arduino puede enviar y recibir datos de nuestro ordenador cuando está conectado a través del cable USB. Para ello, en el IDE de Arduino, tenemos que pulsar en el siguiente botón:

 

Ya hemos hecho alguna práctica al respecto, como por ejemplo la del sistema automático de iluminación por LDR. Pero hasta ahora, sólo habíamos utilizado el puerto Serie como un canal de SALIDA, esto es, para que Arduino ofreciera datos al ordenador. Nuestra intención hoy es aprender a utilizarlo también como canal de ENTRADA, de modo que podamos dar instrucciones a nuestra placa. Cuando nos hayamos familiarizado con estos conceptos, usaremos este canal de comunicación vía ondas de radio, a través de un canal Bluetooth.

 

¡Vamos al lío!

El objetivo de nuestra primera práctica será conectar un diodo RGB de cátodo común (ya sabéis, el diodo de cuatro patillas que incluye tres LED de color rojo, verde y azul) a las patillas 10, 9 y 8 (por este orden) de Arduino. Cuando pulsemos la tecla 'R' mayúscula, se encenderá el diodo rojo. Las teclas 'G' y 'B' encenderán los diodos verde y azul, respectivamente. (Nota: el resultado será el mismo si no tenéis diodos RGB, pero conectáis tres LED de colores).

Los diagramas de conexión serán los siguientes:

 

diodoRGB bb 

diodoRGB esquema

 

El primer código que vamos a volcar en la Arduino es muy sencillito:vamos a declarar una variable de tipo char (un caracter) que recogerá lo que lea el puerto serie; en la función setup() pondremos en marcha nuestro Serial Monitor a 9600 baudios (as usual), y configuramos las salidas 8, 9 y 10 como tales mediante pinMode(entrada, OUTPUT); en la función loop() , finalmente, asignaremos a dicha variable lo que se lea en el puerto mediante la función Serial.read(); . Si la variable es igual a 'R', 'G' o 'B' se encenderá el LED correspondiente.

 

 char valor;
 void setup(){
pinMode(8, OUTPUT);
pinMode(9,OUTPUT);
pinMode(10, OUTPUT);
Serial.begin(9600);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
}
void loop(){
 valor=Serial.read();
if (valor=='R'){
    digitalWrite(10,HIGH);  
}
if (valor=='G'){
    digitalWrite(9,HIGH);  
}
if (valor=='B'){
    digitalWrite(8,HIGH);  
}
}

 

Una vez volcado el código, sólo necesitas activar el monitor Serial en la IDE de Arduino, asegurándote de que la velocidad de comunicación es de 9600 baudios, y de que están activados el retorno de carro y el salto de linea (BOTH NL&CR), como en el dibujo:

MonitorSerie

Como podrás ver, el código hace exactamente lo que le hemos pedido: las tres teclas especificadas (en mayúsculas), activan los colores rojo, amarillo y verde. ¡Ya sabemos dar órdenes a través del puerto serie!.

 

Algo va mal... No puedo apagar ningún diodo

No, nada va mal. Como hemos dicho, las tres teclas R, G y B sólo activan los diodos. Nadie ha dicho nada de desactivar. Para ello, vamos a necesitar llevar una memoria de si cada color se ha encendido ya o no. Para ello, necesitaremos tirar de otras tres variables, esta vez de tipo boolean (ya sabéis, verdadero o 'true' y falso o 'false'), que empezarán en falso (los tres diodos empezarán apagados), y cada vez que llamemos al color que sea, la variable booleana correspondiente nos dirá si ya hemos activado o no dicho color, para que actuemos en consecuencia y acto seguido cambiemos también el estado de dicha variable. Llamémoslas, por ejemplo, re, (por rojo encendido), ve y be.

El nuevo código sería algo así:

 

 boolean re;
 boolean ve;
 boolean ae;
 void setup(){
pinMode(8, OUTPUT);
pinMode(9,OUTPUT);
pinMode(10, OUTPUT);
Serial.begin(9600);
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
re=false;
ve=false;
ae=false;
}
void loop(){
char valor=Serial.read();
if (valor=='R'){
  if (re==true){
    digitalWrite(8,LOW);
    re=false;
  }else{
        digitalWrite(8,HIGH);
    re=true;
  }
}
if (valor=='G'){
  if (ve==true){
    digitalWrite(9,LOW);
    ve=false;
  }else{
        digitalWrite(9,HIGH);
    ve=true;
  }
}
if (valor=='B'){
  if (ae==true){
    digitalWrite(10,LOW);
    ae=false;
  }else{
        digitalWrite(10,HIGH);
    ae=true;
  }
}
}

 ¡Prueba ahora!. ¡A ver qué pasa! En teoría, debería salirte algo así (el video está algo oscuro para que pueda apreciarse cada color en el RGB):

Vale, funciona. ¡Estoy preparado para dar el salto a Bluetooth!

¡Estupendo, joven padawan!. Empecemos pues... Para empezar, debes saber que hay modelos de Arduino que ya incorporan esta tecnología, como Arduino BT. Una placa muy interesante con la que he trabajado estos últimos años es la Icezum de BT, aunque por desgracia a la hora de escribir estas líneas es dificilísimo conseguirla, dado que a la compañía no le resulta muy rentable fabricarlas y sólo lo hace bajo pedido de un número determinado, por lo que tengo entendido. Pero no debéis preocuparos por ello. Hay módulos que podemos conectar a nuestras placas de precio muy asequible (además, nos atendremos a nuestra idea-fuerza en cualquier instituto de educación pública: PRESUPUESTO LIMITADO. Nos conformaremos con nuestras viejas Arduino UNO, Nano, o el modelo antiguo del que dispongamos). Nosotros, en concreto, nos vamos a decidir por el módulo HC-06, fabricado por varias casas, disponible en Internet a precios realmente competitivos.

Nuestra práctica constará de cuatro fases

  1. Conectar el módulo BT HC-06
  2. Enlazar (vincular) nuestro móvil o tableta Android vía BT con nuestra Arduino
  3. Enviar datos a nuestra Arduino vía BT utilizando cualquier aplicación de consola de la Google Play Store para enviar caracteres y controlar el diodo RGB inalámbricamente.
  4. Crearemos nuestra propia aplicación para controlar el RGB utilizando una valiosa utilidad del MIT llamada AppInventor.

¿Por dónde empezamos?

Vale. En primer lugar, hay una cosa de la comunicación vía puerto serie en Arduino que debemos entender. Si bien la comunicación con el ordenador de Arduino se realiza a través del cable USB, la placa microcontroladora ATMEL que constituye el cerebro de Arduino utiliza los pines 0 (etiquetado como RX) para recibir los datos, y 1 (etiquetado como TX) para enviar dichos datos. Es a través de estos pines que volcamos los programas que realizamos en la IDE después de compilarlos, y es por eso que normalmente se recomienda fervientemente que no se utilicen dichos pines en nuestros proyectos, o que lo hagamos sólo en última instancia. De lo contrario, cada vez que tengamos que modificar nuestro código y volver a volcarlo, tendremos que desconectar dichos pines para que queden libres, lo que siempre es un engorro.

Por otro lado, existen librerías para Arduino que permiten utilizar pines distintos de 0 y 1, como <SoftwareSerial.h>. Sin embargo, queremos simplificar al máximo esta práctica, así que lo dejaremos para otro día.

Otra cosa: aseguraos, cuando compréis los módulos BT, de saber a qué velocidad trabajan. el HC-06, por defecto, suele ir a 9600 baudios, pero esto puede no ser así, dependiendo de dónde lo compréis. Además, utilizando comandos AT, podemos configurar esta y otras características, como nombre del dispositivo, etc... ¡Pero mejor otro día!. Eso sí, si sabéis que la velocidad es distinta de 9600 baudios, aseguraos de que ponéis ese mismo valor en vuestro Serial.begin(velocidad);

¿Cómo se conecta un módulo BT a una Arduino?

En principio, la mayoría de módulos de este tipo incorporan cuatro pines: dos de alimentación (Vcc y GND, como siempre), uno de transmisión de datos (TX, que conectaremos al pin 0/RX de Arduino) y otro de recepción de datos (RX, al pin 1/TX de Arduino). TX de uno al RX de la otra, y viceversa. ¡Parece lógico!.

La única "pega" es que el HC-06 está preparado para trabajar a 3,3 V, aunque admite una alimentación de hasta 6 V. Eso significa que podemos trabajar de modo normal con Vcc y GND. La patilla Tx tampoco necesita ningún "arreglo", dado que aunque trabaje a estos niveles, el pin RX de Arduino lo leerá sin problemas. Lo que nos deja con la patilla Rx. A ver: yo la he conectado directamente a Arduino, y hasta ahora no he tenido problemas, pero hay autores que sostienen que esto es perjudicial y podemos quemar el HC-06. Para resolverlo, lo que haremos será conectar tres resistencias iguales en serie entre el pin 1 de la Arduino y tierra, a modo de divisor de tensión. Por otro lado, conectaremos la RX del HC-06 A LA SEGUNDA RESISTENCIA DE ESTA TERNA, lo que hará que llegue un 66%  (3,3 V) de los 5 V de la Arduino al módulo. Es una solución sencilla y elegante.

De modo que enriqueceremos nuestro montaje en la protoboard del siguiente modo:

diodoRGBUSB bb

 Eso sí, una cosita, pero muy importante: MIENTRAS TENGAS EL MÓDULO BLUETOOTH CONECTADO A LOS PINES 0 Y 1 DE TU ARDUINO, EL PUERTO SERIE ESTARÁ OCUPADO, LO QUE SIGNIFICA QUE NI PUEDES TENER ABIERTO EL SERIAL MONITOR DE LA IDE DE ARDUINO NI PODRÁS MODIFICAR Y VOLCAR DE NUEVO EL CÓDIGO. Eso quiere decir que cada vez que tengas que hacer alguna modificación, deberías desconectar el módulo Bluetooth de la alimentación, lo que a su vez conllevará que tendrás que revincular (ver más abajo) dicho módulo con la app que estés utilizando.

¿Y con mi tablet/móvil que tengo que hacer?

Bueno, pues en primer lugar tenemos que VINCULAR ambos dispositivos. Para ello, todo depende un poco del sistema operativo de tu smartphone, tablet o lo que sea, pero tienes que ir a las opciones de configuración de Bluetooth, conectarlo (si no lo has hecho), hacerlo visible (sólo por si acaso, luego si quieres vuelves a tu configuración original), hacer una búsqueda de dispositivos cercanos, y finalmente vincularlo con tu dispositivo. El código de vinculación de fábrica es siempre 1111 (compruébalo con el fabricante a quien se lo hayas adquirido).

 

 Screenshot 2018 01 11 09 03 15 048 com.android.settings1  Screenshot 2018 01 11 09 03 01 698 com.android.settings1

En mi caso, el módulo HC-06 ya lleva unas cuantas batallas a las espaldas, he trasteado lo mío con comandos AT (si estáis muy interesados, decídmelo en los comentarios y volvemos sobre el tema otro día), y el nombre del dispositivo Bluetooth es AntonioBot9600 (lo de 9600 venía porque he cambiado muchas veces la velocidad de comunicación y ya perdía la cuenta de la que tenía asignada en ese momento).

¿Ya has vinculado el módulo con tu dispositivo?. ¡Genial! Ahora sólo queda instalar alguna aplicación que me permita enviar caracteres vía consola por Bluetooth. Esto ya queda a tu libre albedrío. En mi caso, todos los dispositivos móviles con los que trabajo tienen Android, así que he tirado de Google Play Store, y me he decidido por Serial Bluetooth Terminal 1.12 (la primera que me apareció):

Screenshot 2018 01 11 09 04 18 815 com.android.vending1

Una vez instalada la aplicación por la que te hayas decidido, sólo necesitas configurarla para que envíe la información al dispositivo que quieres, de entre todos los que tienes vinculados a tu smartphone o tablet (En mi caso, de los dos que tengo, quiero enviar la información a AntonioBot9600):

Screenshot 2018 01 11 09 12 36 869 de.kai morich.serial bluetooth terminal1

¡Y ya está!. ¡Compruébalo!. Sólo tienes que ir enviando los caracteres 'R', 'G' y 'B' y podrás comprobar que alternas los colores rojo, verde y azul en el diodo conectado a tu Arduino, ¡de forma totalmente inalámbrica!. ¡Felicidades!. ¡Eres un crack!.

¡Mis alumnos lo han logrado también, por cierto!. ¡Estaban tan contentos que han querido compartirlo con todos nosotros!. Así es como les quedó:

¡Y eso es todo por hoy!. El próximo día, enriqueceremos el contenido de este artículo creando nuestra propia aplicación en Android que se comunicará con nuestra Arduino vía Bluetooth para enviar información de modo más personalizado y acorde con nuestras necesidades. Pero eso, como decía Michael Ende, es otra historia, y tendrá que ser contada en otra ocasión. ¡Hasta la próxima! ¡Sed felices!. ¡Siempre creciendo!. ¡Siempre aprendiendo!. ¡Cultura Maker!