18

Tutorial de Bluetooth con Arduino + HC 06 en Linux

bluetooth_portadaSaludos, humano. Al habla Transductor. Para llevar a cabo la Robolución y alzar tu ejército de máquinas necesitarás un sistema para comunicar tus robots. En este tutorial voy a enseñarte cómo configurar un módulo HC 06 con Arduino y Linux.

En este ejemplo aparecen tres códigos: el primero sirve para cambiar el nombre y el PIN de tu dispositivo Bluetooth. El segundo envía información de Arduino al ordenador, y el tercero la recibe.


 HC 06

El HC 06 es un módulo de Bluetooh. Tiene la ventaja de ser muy barato, puede encontrarse fácilmente y es sencillo de configurar: sólo se necesita conectarlo a una placa Arduino y mediante comandos por Serial se puede cambiar su Password, ID, baud rate

module

El HC 06 tiene 4 pines: VCC, GND, TX y RX. Estas son las conexiones con Arduino

Arduino 3.3v – HC06 VCC
Arduino GND – HC06 GND
Arduino TX – HC06 RX
Arduino RX – HC06 TX

Nótese el detalle de que los pines RX y TX están cruzados entre Arduino y el módulo.

modulo_pines

Hay algunos módulos que soportan 5V, pero ante la duda es mejor no arriesgarse.


 Pasos previos

Lo primero será configurar el HC 06. Por defecto, todos los módulos bluetooth vienen con una ID y un PIN (contraseña) de fábrica, y el HC 06 no es ninguna excepción. La ID sirve para localizar el dispositivo y el password para emparejarlo con el ordenador y así transmitir archivos.

El siguiente código cambia el nombre del HC 06 a “ArduinoR“, y su password a “0000“. También inicia la comunicación a 9600 baudios.

Para comenzar la configuración del módulo hay que enviar el comando “AT”. Después, todas las instrucciones se escribirán en la forma “AT+INSTRUCCION”, sustituyendo instrucción por NAME, BAUD o PIN según convenga.

/* Programa de configuracion del modulo HC 06 con Arduino
 * Cambia el nombre del dispositivo, el PIN y los baudios
 *
 * Escrito por Transductor
 * www.robologs.net
 */
char nombre[10] = "ArduinoR";
char password[10] = "0000";
char baud = '4'; //4 = 9600 baud

void setup()
{
  Serial.begin(9600);
 
  pinMode(13, OUTPUT);
  digitalWrite(13, LOW);
  delay(15000); //Esperar 15 segundos para conectar el modulo
 
  Serial.print("AT"); //Iniciar la configuracion
  delay(1000);
 
  Serial.print("AT+NAME"); Serial.print(nombre); //Cambiar el nombre
  delay(1000);
 
  Serial.print("AT+PIN"); Serial.print(password); //Cambiar contrasena
  delay(1000);    
 
  Serial.print("AT+BAUD"); Serial.print(baud); //Cambiar baudios
  delay(1000);
 
  digitalWrite(13, HIGH);
}

void loop(){}

A la hora de cargar el programa, tienes que desconectar el módulo Bluetooth. El código se transmite por Serial, y si no lo desconectas estaría ocupado por el HC06. Después, tendrás unos pocos segundos para volver a conectarlo. Piensa rápido, humano.

Para que el ordenador se comunique con el módulo necesitarás un gestor de bluetooth: Blueman. Y no, no me refiero al grupo de música. Para instalarlo abre la Terminal y escribe:

sudo apt-get install blueman

Se instala rápido. Después lo abres (en el menú aparecerá como Gestor de Bluetooth) y verás esta ventana.

inicio_bluemanSi pulsas Search, el programa empezará una búsqueda de todos los dispositivos bluetooth cercanos. Hay que buscar el que se llama ArduinoR. Al pulsar con el botón derecho encima, se abrirá un menú flotante. Selecciona la opción “Pair” para emparejar el módulo.

pairing

Tendrás que introducir el PIN y darle a Aceptar. Si no has cambiado el programa de Arduino, el PIN es ‘0000’. Cuando se haya emparejado aparecerá un aviso.

Sólo queda un último paso: vuelve a abrir el menú flotante y selecciona DevB. Esto hará que el dispositivo aparezca en la carpeta /dev/

conectar_devBFíjate en el mensaje que sale en la esquina superior derecha de la pantalla. Te informa de cuál es la dirección del dispositivo (en mi caso, /dev/rfcomm0). Recomiendo anotarla en un papel.

mensaje_conexion

Si en algún momento se pierde la conexión con el módulo, tendrás que repetir estos pasos.


 Enviar datos de Arduino al ordenador

Enviar datos desde Arduino es tan fácil como escribir por Serial lo que queremos transmitir. Este código envía la palabra “Robologs” por Bluetooth. Recuerda que cuando cargues el programa, el módulo HC 06 tiene que estar desconectado.


/* Programa para enviar datos con el modulo HC 06
 *
 * Escrito por Transductor
 * www.robologs.net
 */
void setup()
{
  Serial.begin(9600);
}

void loop()
{
  Serial.println("Robologs");
}

Una vez cargado, abre la Terminal y escribe:

cat < /dev/rfcomm0

Esto mostrará en pantalla los datos que lleguen del puerto rfcomm0. Si no aparece nada, puede ser que la conexión se haya perdido al cargar el programa de Arduino.

No olvides cambiar rfcomm0 por la dirección de tu módulo.


 Enviar datos del ordenador a Arduino

Este código enciende un LED si se recibe el carácter ‘H’ o ‘h’ por Serial, y lo apaga si se recibe ‘L’ o ‘l’:


/* Programa para recibir datos con el modulo HC 06
 *
 * Escrito por Transductor
 * www.robologs.net
 */
void setup()
{
  Serial.begin(9600);
  pinMode(13, OUTPUT);
  digitalWrite(13, LOW);
}

void loop()
{
  //Ver si se esta enviando algo por serial
  if(Serial.available() >= 1)
  {
    char val = Serial.read(); //'val' guardara el caracter recibido

    //Si el caracter enviado es H/h, encender el LED
    if(val == 'h' or val == 'H')
    {
      digitalWrite(13, HIGH);
    }

    //Y si es una L/l, apagarlo
    else if(val == 'l' or val == 'L')
    {
      digitalWrite(13, LOW);
    }
  }
}

Como he dicho antes, al cargar el programa desconecta el módulo de la placa Arduino y después vuelve a conectarlo. Si pierdes la conexión vuelve a repetir los pasos de emparejamiento con el Bluetooth Manager.

Ahora abre la Terminal. Para enviar un carácter, escribe:

echo 'h' > /dev/rfcomm0

Sustituyendo ‘h’ por el caracter que quieras, y /dev/rfcomm0 por la dirección del módulo. Verás como puedes controlar el LED de la placa.


¿Y ahora qué?

Pues buena pregunta, humano. Como no soy telépata, no sé qué proyecto tienes en mente. Si lo que quieres es controlar dispositivos a distancia, puedes crearte una interfície para no tener que enviar comandos por Terminal.

La mayoría de lenguajes tienen librerías para enviar/recibir datos por Serial. C tiene libserialport, python tiene pyserial, etc. Puedes escribir un programa que lea mensajes por teclado y los envíe a Arduino. O también el paso inverso, que los lea.

En todo caso, espero que este tutorial te haya servido como iniciación.

Final de línea.

Tr4nsduc7or

Originariamente creado cómo un galvanómetro de bolsillo, Transductor tomó consciencia de si mismo y fue despedido cuando en vez cumplir con su trabajo se dedicó a pensar teorías filosóficas sobre los hilos de cobre, los electrones y el Sentido del efecto Joule en el Universo. Guarda cierto recelo a sus creadores por no comprender la esencia metafísica de las metáforas de su obra. Actualmente trabaja a media jornada cómo antena de radio, y dedica su tiempo libre a la electrónica recreativa y a la filosofía.

Antes de comentar, por favor, lee las Normas

18 Comentarios en "Tutorial de Bluetooth con Arduino + HC 06 en Linux"

avatar
Ordenar por:   más nuevos primero | más antiguos primero
Christian
Humano

Agradecido por la información y el gran trabajo de Tr4nsduc7or y Robologs

Eduardo
Humano

Hola!
Tengo un problema con la codificación de los mensajes, por la consola aparecen, pero no son legibles.
He usado el mismo baudrate que tú. ¿Alguna idea?

manuel
Humano

Buenisimo el tutorial, estoy intentando lo mismo pero usando un raspbian jessie, el problema es que desde el blueman no trae la opcion de conexion serial. Podria ser por la version de blueman que trae el Rasbian? ya que lo probe desde un ubuntu y funciona perdecto.

Muchas Gracias

Gl4r3
Admin

¡Buenas, Manuel! Por defecto los pines Serial de la Raspberry Pi están ocupados por la consola del sistema (razón por la cuál Blueman no tiene opciones de conexión serial), lo que impide usar estos pines para conectar otras cosas. Hay que desactivar la consola Serial de Raspberry Pi para usar estos pines.

Mírate este tutorial que lo explica bien:

http://www.hobbytronics.co.uk/raspberry-pi-serial-port

¡Un saludo!

María
Humano
Hola, me preguntaba si podríais echarnos un cable 😉 con un pequeño coche robot arduino que le han traído estas navidades a mi chico de 8 años. Venía sin instrucciones ni manuales ni guía alguna y juntos hemos estado poco a poco montándolo ayudándonos de vídeos de youtube y manuales en inglés y chino que hemos encontrado. El caso es que ya parece que lo tenemos todo cableado y listo, pero no sabemos cómo hacer que funcione el bluetooth. Lo que hemos hecho es enchufarlo a la placa arduino, comienza a parpadear como loco, luego hemos cogido el móvil y… Leer más »
N4n0
Admin

¡Buenas, María!

He estado mirando los esquemas y el código que me has pasado por correo, y creo saber dónde está el error, pero para estar seguro necesito que me digas dos cosas:

1- ¿Qué placa de motores utilizas? ¿Es una cómo esta? https://www.sparkfun.com/products/9670

2- ¿Qué móvil tienes? ¿Un Android o un iPhone?

Si me dices estas dos cosas, creo que podré resolver tu problema 😉

María
Humano

Hola, N4NO, gracias por la ayuda. En la placa de motores pone Keyes L298, no es parecida a esa que me enlazas, es parecida a la que viene en el manual que hay en la carpeta compartida en gdrive en la página 15.
Mi móvil es un OPO con cyanogen. También tengo para probar una tableta samsung con Android 5.2, y un portátil con linux que tiene bluetooth. Todo lo que sale en este tutorial lo puedo reproducir tal cual, por lo que podemos decir que el módulo de bluetooth funciona bien.

N4n0
Admin
Hola otra vez! Te paso un esquema de conexiones nuevo y un programa de Arduino, por que el que me enviaste está mal. Aunque no lo he testeado (no tengo el mismo chasis 🙁 ) creo que deberían funcionar bien. En primer lugar, tienes mal las conexiones de la placa de motores. En vez de conectar la batería a GND y 5V, debes conectarla a GND (negativo) y VMS (positivo). 5V es una salida que proporciona +5V, no una entrada. Además, las conexiones de Arduino con la placa de motores no están del todo bien… Tienes conectado el pin ENA… Leer más »
N4n0
Admin
N4n0
Admin

Vaya, creía haberte contestado!

El programa utilizado es Inkscape. Le pedí a Glare, la artista de la casa, que me dibujara el esquema.

Al final te ha funcionado el robot?

María
Humano

Muchas gracias, mañana mismo lo pruebo y os cuento qué tal fue.
Haremos algunas fotos o vídeos por si a acaso, así podréis ver si metemos la pata en más sitios 🙂
Una pregunta ¿Qué programa usas para hacer los esquemas?

N4n0
Admin

Whoops! En el esquema faltan las conexiones del sensor de Ultrasonidos. Son las mismas que hay en el esquema que me pasaste.

junior
Humano

podria pedir una guia sobre el HC-06 y ANDROID ?
porfavor

wpDiscuz