Tutorial Arduino Bluetooth HC-05, HC-06 con Android usando App Inventor 2
En este tutorial implementaremos la comunicación entre una placa Arduino UNO y un Smartphone utilizando Android para realizar dos sencillas cosas:
- Primero: vamos a enviar comandos (datos) desde el Smartphone hacia Arduino para que pueda encender tres leds.
- Segundo: leeremos del puerto analógico A0 una señal proveniente de un potenciómetro y desplegaremos su valor numérico en un cuadro de texto.
Definidas las dos tareas principales, no hay más que empezar listando los requerimientos de hardware y software, y para eso primeramente listamos los materiales necesarios:
- Placa Arduino Uno
- Módulo Bluetooth HC-05 o HC-06, si usas el módulo HC-05 debe estar configurado como esclavo y es el modo normal que traen de fábrica.
- Cables de conexión de preferencia Dupont.
- 3 Leds de diferente color para diferenciarlos fácilmente.
- 3 Resistencia de 330 ohm.
- Potenciómetro de 10k ohm.
- Smartphone con Android.
- Protoboard.
- Herramientas como pinzas de corte, de punta etc.
Conexiones físicas en la placa Arduino
Primeramente debemos visualizar al módulo de comunicación inalámbrica HC-05, como una extensión del puerto serie, como si en vez de un cable físico que sirve como medio de conexión, utilizáramos un “cable inalámbrico” a esto se le llama transparencia en el uso del módulo Bluetooth.
En la realidad esto quiere decir que todo funciona igualmente y el puerto de comunicación que programamos el envío y recepción de datos es el puerto serial que trae Arduino y el módulo Bluetooth se conecta a las terminales Tx y Rx de la placa Arduino, tal como se muestra en la Figura 1.
También conectamos los leds de color rojo, verde y azul a las terminales 2,3 y 4 respectivamente.
Como debemos leer una señal analógica de nuestro potenciómetro, conectamos la terminal A0 de Arduino a la terminal de en medio de nuestro potenciómetro y las terminales de los extremos del potenciómetro se alimentan con +Vcc y GND (no importa el orden).
Nota* Antes de conectar el modulo Bluetooth es recomendable comprobar su funcionamiento simplemente alimentándolo y creando una conexión con tu teléfono, hecho esto lo conectamos y debemos tener cuidado en colocar los cables de datos (Tx, Rx) al arduino y jamás a Vcc o GND, porque quemaremos nuestro chip.
Algoritmo de programación en Arduino
Nuestro programa debe de configurar las terminales de los leds en modo escritura y la velocidad en el puerto serie, comúnmente es a 9600 bps.
Cuando el puerto serie reciba un dato, este debe lee el buffer de entrada y si encuentra un carácter que haya sido asignado para prender/apagar un led, entonces debe realizar la acción y regresar un mensaje indicando que se realizó la acción.
Así mismo lee la entrada analógica A0 y transmite el dato por el puerto serie hacia el módulo Bluetooth con un carácter inicial que distingue entre este dato y un mensaje cualquiera, en nuestro caso utilizamos el símbolo de # (gato).
Es decir, cuando Android reciba una cadena de caracteres que empiece con # sabrá que es un dato de nuestro sensor (el valor de nuestro potenciómetro) que debe de mostrar en la gráfica.
En resumen, el algoritmo lo podemos visualizar en un diagrama de flujo como el siguiente:
En este diagrama, para realizar ciertas acciones debemos saber el estado de cada uno de los leds, por lo que vamos agregar variables de tipo booleano que no los indiquen.
Código del programa para Arduino
A continuación te dejo la liga para descargar el código del programa en Arduino.
El archivo anterior contiene el código siguiente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
const int ledRed = 2; // Terminal donde conectamos nuestro led Rojo const int ledGreen = 3; // Terminal donde conectamos nuestro led Verde const int ledBlue = 4; // Terminal donde conectamos nuestro led Azul const char separadorDatos = '#'; // Carácter que indica que es un Dato lo que enviamos boolean statusLedRed = true; boolean statusLedGreen = true; boolean statusLedBlue = true; void setup() { // Configuramos las terminales donde están conectados los leds como salidas pinMode(ledRed, OUTPUT); pinMode(ledGreen, OUTPUT); pinMode(ledBlue, OUTPUT); // Inicializamos los leds y deben de prenderse digitalWrite(ledRed, statusLedRed); digitalWrite(ledGreen, statusLedGreen); digitalWrite(ledBlue, statusLedBlue); // Inicializamos el puerto serial con una velocidad de 9600 Serial.begin(9600); } // Este método se ejecuta infinitas veces void loop() { // Agregamos el caracter # para indicar que es un dato Serial.print("#"); // Leemos la entrada analógica A0 y enviamos el resultado por el puerto serial Serial.println(analogRead(A0)); // Esperamos un tiempo de 20 milisegundos delay(20); } /*La función SerialEvent se ejecuta cuando un nuevo dato llega al hardware por la terminal Rx*/ void serialEvent() { // Si esta disponible el puerto serial leemos los datos while (Serial.available()) { // Obtiene el siguiente byte que se recibió, este es un carácter char comando = (char)Serial.read(); // Dependiendo del carácter recibido ejecutamos una acción switch (comando) { case 'r': cambiarLedRojo(); break; case 'a': cambiarLedAzul(); break; case 'v': cambiarLedVerde(); break; default: // Si no es ningún carácter de comando regresamos el siguiente mensaje Serial.println("Comando no reconocido"); break; } } } void cambiarLedRojo() { // Cambiamos el estado del LED statusLedRed = !statusLedRed; digitalWrite(ledRed, statusLedRed); Serial.println("Led Rojo cambio"); } void cambiarLedAzul() { // Cambiamos el estado del LED statusLedBlue = !statusLedBlue; digitalWrite(ledBlue, statusLedBlue); Serial.println("Led Azul cambio"); } void cambiarLedVerde() { // Cambiamos el estado del LED statusLedGreen = !statusLedGreen; digitalWrite(ledGreen, statusLedGreen); Serial.println("Led Verde cambio"); } |
Pruebas preliminares de la tarjeta Arduino
Compilado el código y cargado a nuestra placa Arduino, verificaremos su funcionamiento usando el puerto serie de la computadora, por lo que abrimos nuestro monitor serial de Arduino verificando la velocidad de conexión a 9600 y el número de puerto correcto.
Debemos de ver los datos numéricos con el carácter # al inicio, y esos son los que envía el Arduino UNO desde la entrada analógica A0.
Ahora debemos comprobar el funcionamiento de los led, escribiendo el comando adecuado, es decir si quiero prender/apagar el led rojo escribo una r y doy enter.
Y debe enviarme el mensaje que cambio el Led Rojo.
Si envió o escribo varias veces la letra a, consecutivamente cambia el estado del Led Azul
Y debemos observar en nuestra placa que efectivamente, se prenden y apagan los leds de acuerdo a la letra de comando que le asignamos, si enviamos cualquier otra letra, nos muestra el mensaje de comando no reconocido.
Finalizamos las pruebas en esta etapa y aseguramos el funcionamiento de nuestro algoritmo en la placa de Arduino.
Pruebas preliminares con el módulo Bluetooth
Ahora verificamos el buen funcionamiento de nuestro módulo Bluetooth, esto es, con nuestro teléfono con Android vamos a instalar una aplicación que se comunique con el puerto serie, en la playstore de google buscamos la aplicación “S2 Terminal for Bluetooth Free” que tiene el icono siguiente: