17 diciembre, 2013

Comunicación bluetooth y arduino

Añadirle la comunicación bluetooth al arduino es muy sencilla. Lo único que tenemos que hacer es conseguir un adaptador bluetooth HC-05 (KKmoon Wireless Bluetooth Maestro y Esclavo HC-05 del módulo de transceptor para Arduino ARM DSP PIC) o HC-06 (XINTE Inalámbrica Bluetooth Serial esclavo módulo HC-06 apto para Arduino).

Comunicación bluetooth con arduino

Este adaptador nos permite una comunicación serie con el dispositivo de comunicación bluetooth al que nos conectemos. Podemos configurarlo en modo maestro, el adaptador seleccionara el dispositivo al que se quiere conectar, o en modo esclavo, el adaptador estará a la espera de dispositivos que se quieran conectar a el.

El HC-05 / HC-06 es un componente de tipo smd, es decir, es como un integrado que tendremos que soldar a nuestra placa con conectores de superficie.

[singlepic id=36 w=320 h=320 float=center]

Pero hay en el mercado infinidad de montajes que ya bien preparados para su conexión directa con arduino (Arduino Uno R3). La alimentación estándar del HC-05/HC-06 es de 3.3v, pero el sistema ya viene preparado para poderlo alimentarlo hasta los 6v.

[singlepic id=37 w=320 h=320 float=center]

Para conectarlo al arduino lo podemos hacer de dos formas,

1º Modo: Conectarlo directamente a los pines de Tx-Rx del arduino.

Para ello solo tendremos que conectar el pin Tx del dispositivo bluetooth al Rx del arduino, y el Rx de la comunicación bluetooth al Tx del arduino. El problema que tiene este montaje, es que eliminamos la posibilidad de utilizar el monitor del ide del arduino para depurar el programa. Otro inconveniente que tiene, es que para poder programar el arduino, el bluetooth no puede estar conectado a la placa del arduino.

[singlepic id=34 w=320 h=320 float=center]

2º Modo: Conectarlo a cualquier pin y utilizar la librería «Software Serial»

Otra forma de conectarlo es utilizar las funciones que nos ofrece la librería «Software serial», para poder hacer que, cualquier pin del arduino, pueda funcionar como un puerto serie. Lo único que tenemos que tener en cuenta es que el pin donde este conectado el Tx del bluetooth sera el pin Rx, y donde este el Rx sera el Tx

[singlepic id=35 w=320 h=320 float=center]

Como programarlo

La programación es muy sencilla. Solo tendremos que crear una variable para poder manejar el puerto serie.

Si lo conectamos directamente a los pines Rx-Tx del arduino solo tendremos que poner

  Serial.begin(9600);

Si lo hacemos con la librería «Software Serial» tendremos que crear el puerto y luego inicializarlo

// Creamos el puerto serie, le pasamos los pines que serán 
// Tx (donde esta conectado en Rx del bluetooth)
// y Rx (donde esta conectado el Tx del bluetooth)
SoftwareSerial miPuetoSerie =  SoftwareSerial(rxPin, txPin);

// Y lo inicializamos como cualquier puerto serie
miPuetoSerie.begin(9600);

Con esto ya tenemos establecida la comunicación bluetooth con el arduino.

Para leer los datos mediante la comunicación bluetooth utilizaremos en los dos casos

char unChar = miPuertoSerie.read();

Y para escribir utilizaremos

miPuertoSerie.print("Información a enviar");

Ejemplo de funcionamiento bluetooth HC-05/HC-06 y arduino

Ejemplo de funcionamiento, enciende el led del arduino, pin 13, cuando recibe a través de la comunicación bluetooth un «1», y lo apaga cuando recibe un «0»

#include <SoftwareSerial.h>

#define rxPin 10
#define txPin 11
#define ledPin 13

// configura un nuevo puerto
SoftwareSerial miPuertoSerie =  SoftwareSerial(rxPin, txPin);

int unChar;

void setup()  {
  miPuertoSerie.begin(9600);
}

void loop() {
  // escucha la llegada de nuevos datos serie:
  char unChar = miPuertoSerie.read();
  // imprime el caracter:
  if (unChar > 0) {
    switch (unChar) {
      case '1':
        digitalWrite(ledPin, HIGH);
        miPuertoSerie.write("Led encendido");
        break;
      case '0':
        digitalWrite(ledPin, LOW);
        miPuertoSerie.write("Led apagado");
        break;
    }
  }
}

Para probarlo, solo tendremos que enlazar nuestro teléfono, ordenador, etc. al dispositivo de comunicación bluetooth, en el caso del HC-05 aparece como «HC-05» y en el caso del HC-06 como «linvor» o «HC-06». Y, con un programa de terminal, mandar un «1» o un «0».

En mi caso lo probé con mi teléfono y la aplicación «BlueTerm».

Como conseguirlo

HC-05: KKmoon Wireless Bluetooth Maestro y Esclavo HC-05 del módulo de transceptor para Arduino ARM DSP PIC

HC-06: XINTE Inalámbrica Bluetooth Serial esclavo módulo HC-06 apto para Arduino

Arduino: Arduino Uno R3

Protoboard: 2860 Tiepoint Protoboard Sin Soldadura Incluye Jumpwires