viernes, 7 de julio de 2017

Arduino y bluetooth ( I )


Arduino y bluetooth ( I )

Iniciaremos una serie de entradas relacionadas con Arduino y Bluetooth.
Sin profundizar demasiado, bluetooth es un tipo de comunicación inalámbrica entre dispositivos electrónicos. Su principal característica , es la facilidad con la que estos dispositivos se encuentran y se configuran de forma autónoma en función de los servicios que implementan.
Por contra, la distancia útil de esta comunicación, del orden de unos metros de alcance (unos 10 metros en los dispositivos habituales de bajo consumo sin antena), lo descarta para otro tipo de aplicaciones que necesiten  mayor alcance, robustez o velocidad de transmisión.
Necesitaremos por tanto añadir un dispositivo a nuestra placa de Arduino para dotarle de capacidad de conexión Bluetooth. Hay unos cuantos en el mercado , y de proveedores conocidos, pero me centraré en dos de los más conocidos y económicos ; -) , el HC-05 y el HC-06.

Módulo HC-06
Es el más sencillo de los dos. Dispone de tan solo 4 pins,  TX, RX, VCC, GND y sólo puede funcionar como esclavo, es decir no puede generar conexiones hacia otros dispositivos, y por lo tanto tan solo puede recibir órdenes de un dispositivo maestro. Es útil para todas aquellas aplicaciones en las que usemos un Smartphone, ordenador, etc , para enviar órdenes a nuestro Arduino, pero no necesitemos obtener un feedback.
Tiene la particularidad, de que se alimenta a 3.3V, por lo que para usarlo con nuestro Arduino lo correcto sería montar un divisor de tensión con dos resistencias para obtener esos 3.3V. En la práctica, todos los que he usado los he alimentado directamente con los 5Vcc de la placa de Arduino, y están vivos…
Módulo HC-05
Es un módulo con idéntico chip que el HC-06, pero con diferente firmware y dos pins adicionales State y Key (o WakeUP según versión). Este es un módulo Maestro-Esclavo, lo que le permite generar conexiones con otros dispositivos para establecer comunicación punto a punto. La diferencia es que un BlueTooth Slave solo puede conectarse a un master y a nadie más, en cambio un master BlueTooth, puede conectarse a varios Slaves o permitir que ellos se conecten y recibir y solicitar información de todos ellos. 
De momento, nos centraremos en el uso y  configuración del HC-06, que es el que usaremos para los próximos tutoriales.
Se puede apreciar como dispone de las dos entradas adicionales, pero no tienen soldado ningún pin. Hay algún tutorial de cómo convertirlo en un HC-05, pero te recomiendo que lo compres directamente, porque es bastante complejo.

Imagenes

Repaso de la librería SofwareSerial
Antes de empezar a explicar para que sirve, comentaré por qué la usaremos. Podríamos hacer un ejemplo tan sencillo como conectar los pins de Rx y TX, a los del Arduino, pines (Rx y Tx, 0 y 1 respectivamente) y funcionar. Pero tendremos el problema que son los mismos que usa para comunicar el CHIP UART del Arduino para la comunicación serie con nuestro ordenador, por lo que cada vez que quisiéramos cargar un código de prueba, necesitaríamos desconectar el módulo bluetooth, cargar el programa, desconectar la placa, conectar el módulo, y volver a emparejar con el móvil.
Un poco lío, ¿no?
Por eso esta librería, que implementa vía software un chip TTL-UART virtual. Tiene algunas limitaciones, como que pins se pueden usar según el tipo de placa de Arduino, y que en caso de implmentar varios puertos, solo uno puede puede recibir datos a la vez.
Para usarla, primero deberemos incluir esta librería en nuestro skecth, con la línea:
#include <SoftwareSerial.h>
Después se debe declarar una variable del tipo SoftwareSerial ,con los dos pins que usaremos como RX y TX. Sería algo como:
SoftwareSerial newSerial(txpin,rxpin);
Donde newSerial, es el nombre que queremos usar, y txpin y rxpin, el ´numero del pin donde van conectados
Si queremos llama a este puerto btserie, y usar el pin 2  como transmisor, y el pin 3 como receptor, quedaría:
SoftwareSerial btserie (2,3);

Para el resto de código, se usan las sentencias habituales con puerto serie.

A la hora de hacer el montaje, hay que tener en cuenta que las conexiones en serie van "cruzadas", y que por tanto el pin TX del HC-06 va al pin definido como RX en la placa Arduino y viceversa. Os debe quedar así:



Vamos con un ejemplo básico, que lee el puerto serie y encendería un LED al recibir un “1” y lo apagaría al recibir un “0”.


#include <SoftwareSerial.h>
//Variable para almcenar la lectura del puerto serie
char caracter;
/* En la siguiente sentencia declaramos los pines que vamos
 *  a usar para realizar la comunicación serie con el modulo
 *  bluetooth. Recuerda que se cablean cruzados. Rx Arduino
 *  con Tx módulo y viceversa
 */
SoftwareSerial btserie(2, 3);
void setup() {
  btserie.begin(9600);
  pinMode(13,OUTPUT);
}
void loop() {

// Este bucle qeda a la espera de una lectura por el puerto serie
// del módulo bluetooth

    while (btserie.available() == 0) {
    ;
  }
  caracter = btserie.read();

  if ( caracter == '0' ) digitalWrite(13, LOW);
  if ( caracter == '1' ) digitalWrite(13, HIGH);
  delay(100);
}



Los parámetros que he usado de velocidad son lo habituales para módulos comprados en tiendas web lowcost habituales, eso es velocidad de transmisión 9600 bauds y pin de conexión 1234. Si no obtuviese comunicación prueba con distintos valores de velocidad, 4800, 9600, 19200, 38400,57600, etc.
Para comunicarnos con nuestro módulo, yo he usado la aplicación Arduino Bluetooh Terminal. Es de una sencillez extrema y muy ligera. Los pasos a seguir son:

-          Cargar el programa en nuestro Arduino,
-          Descargar la plicación de la Play Store, e instalarla
-          En ajustes Bluetooth de nuestro teléfono, localizar el módulo HC-06 y vincularnos. El pin habitual es 1234,
-          Vamos a la aplicación y escribimos un 1, y pulsamos send, el led 13 se encenderá
-          Escribimos un 0 y send y se apagará.

Os dejo con un sencillo vídeo de cómo va el proceso.
Este programa es muy sencillo de hacer con app inventor, así que en la próxima veremos cómo crear nuestra propia aplicación de Android, para gestionar tantos dispositivos como queramos.

Nos vemos.