[:es]
Aprende a utilizar el módulo bluetooth HC-06. El robot DYOR utiliza para comunicar con un dispositivo móvil externo y poder ser controlador remotamente. Principio de funcionamiento, diagramas de conexión y ejemplo de programación con Facilino y Arduino.
¿Cómo funciona el módulo Bluetooth HC-06?
La comunicación por Bluetooth está basada en el módulo HC-06 (o similar) que no es más que un dispositivo que permite establecer una comunicación serie a través de una interfaz bluetooth y por tanto nos permite conectarnos de forma sencilla al robot desde cualquier dispositivo móvil o tableta.
La comunicación serie puede realizarse desde cualquier de los pines de Arduino Nano a excepción de los pines 0 y 1, ya que éstos están ocupados por la interfaz serie USB. En este sentido, la comunicación con el módulo bluetooth se realizará una interfaz serie por software, es decir que nos permite escoger los pines de comunicación. Por contra, la comunicación requiere del uso de la CPU de Arduino para codificar/decodificar la señal serie, pero esto es algo completamente transparente, con lo que no se le dará mayor importancia.
La forma más sencilla de comunicar entre Arduino y cualquier dispositivo es mediante el envío/recepción de «comandos» de un byte de información (valores entre 0 y 255), de forma que al intercambiar un byte de información ambos saben, previamente, a qué comando se refiere dicha información. No obstante, esto puede ser demasiado limitado en algunas aplicaciones y puede que sea necesario establecer un protocolo de comunicación más elaborado.
El módulo HC-05 es muy similar al módulo HC-06, simplemente que tiene la capacidad de ser maestro y/o esclavo de la comunicación bluetooth, queriendo implicar que podría utilizarse no sólo para comunicar el robot con un dispositivo, si no que podría utilizarse para comunicar dos robots.
IMPORTANTE: Para poder comunicar dos dispositivos bluetooth deben primero emparejase. La contraseña por defecto del módulo HC-06 es 1234. El nombre por defecto del dispositivo es HC-06, que podremos modificar para identificar mejor a nuestro robot.
Conexión del módulo Bluetooth HC-06
A continuación se describe cómo conectar el módulo Bluetooth a Arduino. Este módulo requiere de los pines de alimentación (VCC) y masa (GND), del pin de transmisión (TX) y del pin de recepción RX (desde el punto de vista del módulo HC-06). Es importante hacer notar que los pines de comunicación serie tienen que estar cruzados, es decir que el pin TX del módulo HC-06 tiene que estar conectado al pin de recepción RX de Arduino y viceversa.
- VCC: Alimentación. Conectar a los pines de +5V.
- GND: Masa. Conectar a los pines 0V (GND).
- TX (HC-06) -> RX(Arduino): Entrada digital (desde el punto de vista de Arduino). Conectar a los pines digitales de Arduino.
- RX (HC-06) -> TX(Arduino): Salida digital (desde el punto de vista de Arduino). Conectar a los pines digitales de Arduino.
A continuación se muestra un ejemplo de conexión a Arduino Nano v3.0 con placa de expansión con los pines TX (HC-06) y RX (HC-06) conectados a los pines 2 (RX para Arduino) y 4 (TX para Arduino), respectivamente:

Aquí podéis descargar el fichero Fritzing:
¿Cómo cambiar el nombre el dispositivo bluetooth?
Al utilizar el módulo por primera vez, tiene el nombre por defecto HC-06. Por tanto, si queremos identificar a nuestro robot debemos modificar el nombre del dispositivo. Una vez hechos los cambios, el nombre se queda cambiado permanentemente.
Los pines de conexión son como los mostrados en el diagrama anterior, por tanto, desde el punto de vista de Arduino la señal RX es el pin 2, mientras que la señal TX es el pin 4. La velocidad de comunicación por defecto es de 9600 baudios.

Aquí podéis descargar el fichero Facilino:
¿Cómo recibir comandos de mi App?
Tal y como se ha mencionado anteriormente, se pueden definir una serie de comandos que permitan realizar determinadas órdenes enviadas desde la App. Para ello, se deben establecer unas equivalencias entre el «comando» y el valor que representa a dicho comando. A continuación se incluye una tabla con toda la lista de comandos que se han definido por defecto. Si necesitáis comandos adicionales es conveniente utilizar los que están libres.

La instrucción «Bluetooth App» está pensada para recibir comandos desde una App a través de bluetooth o cualquier otra aplicación que envíe comandos por bluetooth. Se pueden agregar todos los comandos a procesar simplemente añadiendo nuevos comandos desde el botón con forma de estrella. Debemos especificar los pines de recepción y transmisión de la comunicación serie desde el punto de vista de Arduino. Cada comando que agreguemos, procesará un dato recibido según la tabla anterior. Existe la posibilidad de enviar un comando y ejecutar las instrucciones sólo cuando el comando es enviado (comandos simples) o se puede guardar en memoria un comando y repetirlo varias veces. Mediante esta utilidad, podemos repetir un conjunto de instrucciones como por ejemplo los modos de control autónomo del robot como la evitación de obstáculos y/o el seguimiento de líneas (entre otros), de forma que no tenemos que estar enviando comandos repetidamente. Para salir del modo de repetición sólo tendremos que enviar el comando «Interrumpir Blucle».
En el ejemplo que se muestra a continuación sólo procesamos los comandos «Feliz», «Enamorado» y «Do» por sencillez, pero lógicamente esto puede ser fácilmente ampliado agregando nuevos comandos. Concretamente el comando «Do» tiene la casilla Repite activada, con lo que si enviamos el comando «Do» desde nuestra aplicación, la nota se repitirá indefinidamente hasta que mandemos el comando «Interrumpir Bucle». Observad que mientras se repite un cierta instrucción podemos seguir enviando comandos simples como por ejemplo para cambiar la expresión de «Feliz» a «Enamorado».

Aquí podéis descargar el fichero Facilino:
Con objeto de hacer funcionar este ejemplo necesitaréis desarrollar una sencilla App con App Inventor. A continuación os incluimos unas imágenes tanto de la interfaz como de del código a desarrollar y también se facilita el código para que lo integréis en vuestros proyectos de App Inventor 2.



Como podéis observar, en este ejemplo, hemos añadido unos botones para conectar/desconectar el dispositivo bluetooth (supuestamente ya emparejado). Para conectarnos debemos de seleccionar al dispositivo que corresponda asegurándonos que no hay otro dispositivo bluetooth con el mismo nombre. En caso contrario, lo recomendable es cambiar el nombre de tu dispositivo. En el código mostrado, se observa que cada vez que pulsemos a alguno de los botones se envía el código de comando correspondiente.
Podéis descargar el código de la App para utilizar en App Inventor 2:
Aquí podéis instalaros directamente la App ya creada para enviar comandos a a partir del siguiente código QR:
[qrcode content=»https://dyor.webs.upv.es/ai2/apps/bluetooth_command_demo.apk» size=»150″ alt=»AI2 Bluetooth Demo App»]
[:en]Learn how to use the bluetooth module HC-06. DYOR robot uses this module to communicate with an external device, such as a mobile phone to be remotely controlled. Working principle, connection diagrams and Facilino programming example with Arduino Nano.
How does Bluetooth HC-06 module work?
Bluetooth communication based on the module HC-06 is quite easy, because it’s a device that allows to stablish a serial communication from the point of view of Arduino to any device, such as mobile phone or tablet.
Communication can be done with any of available pins of Arduino Nano, all but pins 0 and 1, because those pins are actually used by the USB serial interface. In this sense, the communication with the bluetooth module will be implemented with a software serial interface, which means that signals will be actually generated via software (not through a dedicated hardware), so we can freely choose the pins to implement the communication. The drawback is that Arduino’s CPU is dedicated to this purpose, which might affect to the overall performance and has some limitations in terms of the baudrate, although this is completely transparent.
The easiest way to communicate Arduino with any bluetooth device is by sending commands of one byte (values between 0 and 255), so that the number received/sent implicitly indicates which command to execute. Eventually, this can be too simple and we might need to stablish a more sofisticated communication protocol.
HC-05 module is very similar to HC-06 module, where the main difference is that HC-05 can be both master and slave of bluetooth communication, which can be used to communicate two robots.
REMARK: In orther to communicate with bluetooth, both devices must be paired. The default password for HC-06 is 1234, and the default name listed in the bluetooth search is HC-06, which is better to be changed in case of having several robots.
HC-06 Bluetooth module connection
Here we describe the HC-06 bluetooth connection to Arduino. This module uses power (VCC) and ground (GND), transmission (TX) and reception (RX) (transmission and reception from the point of view of the bluetooth module). It is important to remark that TX and RX pins must be crossed, so that from the point of view of Arduino, it’s TX pin must be connected to the RX pin of the bluetooth module and viceversa.
- VCC: Power. Connect to any +5V pin.
- GND: Ground. Connect to any 0V pin.
- TX (HC-06) -> RX(Arduino): Digital input (from Arduino’s point of view). Connect to digital pins of Arduino.
- RX (HC-06) -> TX(Arduino): Digital output (from Arduino’s point of view). Connect to digital pins of Arduino.
Here we show a connection diagram of HC-06 module to Arduino Nano v3.0 with the expansion board with pins TX (HC-06) and RX (HC-06) connected to pins 2 (RX for Arduino) and 4 (TX for Arduino), respectively:

Here you can download the Fritzing file:
How to change device name?
By default, HC-06 module has «HC-06» as default name. We can change this, this permanent changes.
Connection pins correspond to the previous diagram therefore, from Arduino’s point of view, RX pin corresponds to pin 2 and TX pin corresponds to pin 4. The default communication with the bluetooth module is 9600.

Here you can download Facilino file:
How to receive commands from my App?
As mentioned before, we can define a set of commands to execute a set of instructions in case an order is sent from the App. We need to stablish an «agreement» between the App and Facilino so that both previously know what each command means. Here we show a table with the list of commands defined by default. If you need more commands, you can use any free value.

The instruction «Bluetooth App» is precisely used to receive commands from the App trough bluetooth o any other application capable of sending bluetooth commands. We can add more commands simply by clicking to the «*» symbol (mutable). We must indicate bluetooth pins of transmission and reception (from Arduino’s point of view). For each command we add the set of instructions that will be stacked within the command will be executed. There are two main modes to execute a command, a simple command or a «loop» command in which the last command will be repeated until the «Break loop» command is sent. This «loop» command might be useful for autonomous applications in which the robot simply needs a trigger to start executing an application such as obstacle avoidance, line following, etc.
In this example, we show can to process «Happy», «Love» and «C4» (music note), based on this example, you can easily extend to new commands. In this particular example the «C4» note is repeated until the «Break loop» command is sent. As you can see, meanwhile a command is repeated, we can still send additional commands such as «Happy» or «Love».

Here you can download Facilino code:
In order to develop a simple App with App Inventor 2, here we include some images with the user interface as well as the code to be used in your projects.



As you can see, in this example, we have add some buttons to connect/disconnect the bluetooth device (remember that is must be paired before, which is not the same as «connected»). In order to connect, we must be sure that there’s no other device with the same name, otherwise we need to change the device name. Every time we push a button, we are actually sending a bluetooth command with the specific byte value.
Here you can download the App Inventor 2 App:
Here we can directly install the App with a QR code:
[qrcode content=»https://dyor.webs.upv.es/ai2/apps/bluetooth_command_demo.apk» size=»150″ alt=»AI2 Bluetooth Demo App»]
[:]