El primer POST recuperado del anterior servidor creemos que debía ser uno más de Arduino y exactamente el uso de un modulo Bluetooth (CZ-HC-05) y un ejemplo de uso de señales digitales y analógicas.
Empezamos con un circuito que nos permite conectarnos a un dispositivo (móvil android en nuestro caso) por Bluetooth, explicando no solo la forma en la que podemos usar el modulo de bluetooth (en nuestro caso CZ-HC-05 gomcu) en modo comando y comunicación sino también ya de paso el uso de señales digitales y analógicas con arduino.
El circuito y programa que vamos a explicar esta en “http://fritzing.org/projects/uso-de-bluetooth-modulo-hc-05”.
Necesitaremos para este montaje
Modulo bluetooth HC-05 que se puede comportar como maestro, yo he utilizado el CZ-HC-05)
- Un arduino, he utilizado un arduino UNO.
- Potenciómetro 100K
- 2 Led normales y uno RGB
- 5 resistencias (10K, 100Ω (2), 470Ω y 220Ω)
Pequeñas nociones de Bluetooth
El Bluetooth es una comunicación inalámbrica en la banda de 2,4 GHz. Existen dos modelos de módulos Bluetooth: el HC-05 que puede ser maestro/esclavo (master/slave), y el HC-06 que solo puede actuar como esclavo (slave). El maestro es el que conecta a los esclavos ya que no solo puede conectarse a uno sino puede tener una red de dispositivos, hasta 7 esclavos, los esclavos solo pueden hablar con el maestro y este con todos sus esclavos.
El dispositivo bluetooth tienen una dirección de dispositivo única de 48-bits “BD_ADDR”, como también puede tener un nombre que definimos nosotros esto es lo que usaremos “AT+NAME” ya que nos facilitara sus localización. Cuando un maestro lanza una búsqueda de dispositivos estos contestan con su dirección y nombre. Si dos dispositivos están vinculados no lanzan esta búsqueda cuando se encuentra en rango se conectan.
Los protocolos de comunicación de los dispositivos bluetooth, les llamamos perfile(https://es.wikipedia.org/wiki/Perfil_Bluetooth) y los más importantes son:
- SPP (Serial Port Protocol) Como si fuera una conexión serie y es el ideal para ráfagas de datos.
- HSP (Headset Profile ) Para comunicación con auriculares.
- HID (Human Interface Device Profile) Ratones y teclados.
Descripción de nuestro modulo HC-05
Como hemos dicho este modulo nos permite trabajar como esclavo o maestro, HC-05 podemos decir que es el integrado que usa nuestro modulo CZ-HC-05, esto permite poner 5v en VCC cuando en realidad el integrado HC05 trabaja con 3v.
El patillaje es el siguiente:
- VCC – 3,6-6v
- GND – Masa
- TXD – Va a la recepción del arduino
- RXD – Va a la transmisión del arduino 3,3v
- KEY – En alto se pone en modo comando. Para poder introducir comandos ATs.
- LED – Se conecta un led para ver cuando tiene comunicación.
Para poner el modo comando cortaremos la alimentación, pondremos en alto el pin KEY y volveremos alimentar. Para pasar a modulo de comunicación realizamos lo mismo pero con el KEY en bajo.
En modo comando podremos configurar mediante comandos ATs el modulo, recordar entre comando y comando deberemos esperar un segundo, y debemos terminar estos con un retorno de carro (\r código 13) y un fin de linea (\n código 10) y los comando más interesantes son:
- AT (es un test) la respuesta sera OK si la comunicación ha sido correcta.
- AT+VERSION Nos da la versión del modulo.
- AT+ORGL Que pone los parámetros de fabrica.
- AT+NAME? Da el nombre del dispositivo.
- AT+NAME= Ponemos un nuevo nombre al dispositivo.
- AT+ROLE=0 Nos ponemos en modo esclavo (podría se 1 maestro)
- AT+PSWD? Nos da la clave del dispositivo
- AT+PSWD= Ponemos una nueva clave
- AT+UART? Configuración de conexión
- AT+UART=<baudios>,<stop>,<paridad> Configuramos los parámetros de comunicación.
Explicación del código
Una vez que tenemos el circuito echo y programado pasamos a explicar partes del código que nos puede interesar.
Lo primero es indicar que partes del código nos permiten comunicarnos con el modulo, este se programa vía serie pero para no utilizar los pines (0 y 1) y así poder seguir usando la consola serie para depuración usaremos los pines (10 y 11)
#include <SoftwareSerial.h> // Comunicación serie en otros pins
SoftwareSerial BT(10,11); //10 RX, 11 TX. // Así tendremos el objeto BT que es por el que nos comunicamos.
Definimos la velocidad de comunicación, de la misma manera que se realizar el uso de la consola, ya que trabajaremos igual con la diferencia que en este caso la comunicación va por los pines definidos anteriormente.
BT.begin(38400); // Velocidad del equipo HC-05
Para poder pasar de modo comando a comunicación hemos creado la función modo_Comando que según se pase como parámetro 1 o 0 pondremos el modulo en una u otra forma de trabajo.
//////////////////////////////////////////////////////////////////////////////////////////////////////
// Modo_Comando(HIGH-Comamdo, LOW-Transmisión)
//
// Reinicia el modulo en modo comando o transmisión
/////////////////////////////////////////////////////////////////////////////////////////////////////
void modo_Comando(boolean modo)
{
digitalWrite(Pvcc, LOW); // Apaga el modulo
delay (500) ;
digitalWrite(Pkey, modo); // Pone el modo
delay (500) ;
digitalWrite(Pvcc, HIGH); // Enciendo el modulo en el estado.
if (modo) Serial.println(“Activamos el modo comando del HC-05”);
else Serial.println(“Activamos el modo transmisión”);
}
Vemos como con las funciones “digitalWrite” eliminamos la alimentación que se realiza por el pin 8, ya que el consumo del modulo es muy pequeño, y cambiamos el estado de la pata KEY que se conecta al pin 9.
Luego tenemos la función “comando” que envía una transmisión mediante la función “escribe” y espera una respuesta mediante la función “lee”. Estas dos funciones son las mismas que usamos en modo comunicación y la hemos aprovechador tanto que la escritura a otro dispositivo va con el retorno de carro y nueva linea necesario para los comando ATs, no estorban pero si nuestro protocolo no lo necesitara deberíamos retocar estas funciones.
Y así se trabaja con el modulo como podéis ver es muy sencillo, ya que el arduino espera datos de otro dispositivo y también los envía yo he utilizado una aplicación de android ya echa que es “Bluetooth Terminal” muy sencilla y nos permite depurar nuestros protocolos de comunicaciones, para luego poner los dispositivos adecuados. En nuestro caso el protocolo es sencillo ya que la aplicación es sencilla ya que una vez que hemos introducido todos los comandos de configuración necesarios, esto valdría una vez pues los guarda en memoria, por eso muchas veces esta la aplicación de configuración de módulos bluetooth y la de trabajo, pero en nuestro caso es para aprender y ver que podemos tener todo en uno y así justo después pasamos a modo comunicación y ya entramos en la función “loop” que se repite hasta que se apaga el arduino.
Lo primero que se hace en cada ciclo loop, es mirar si el boton que se controla en el pin digital 2 esta pulsado en este caso leemos el valor que tenemos en el potenciómetro conectado al pin analogico A0.
lectura = analogRead(PA0); // Leemos el valor de la entrada analógica A0
para escalar este valor con la función “map”, entre los valores de 100 a 1.000 y enviar ambos valores al dispositivo móvil que tiene la aplicación terminal.
Luego tenemos las pequeñas lineas de código que realizan el parpadeo del led conectado al pin 7, aquí lo que hacemos es usar la función “millis” que recoge los milisegundos que se lleva encendido el arduino (esta función nos aguanta 50 días que son los milisegundos que aguantaría el unsigned long, después se pone a 0) y mira si paso el tiempo especificado para cambiar su estado.
Y luego mira a ver llega algún comando del dispositivo móvil y solo pueden ser 2:
- L <tiempo> que lo que hace es que cambiaremos el tiempo de parpadeo, que se gestiona en el código anterior, que se encuentra en la variable “parpadeo“, la conversión a entero se realiza muy fácilmente con la función “toInt”
- C <rojo>,<verde>,<azul> que pasa los valores que pondremos en el led RGB que esta conectado a los pines 3,5 y 6. La conversión con la función que hemos comentado antes “toInt” y las funciones “substring” y “indexOf” nos permite de forma muy sencilla extraer cada uno de los tres parámetros.
Y ya finalizamos pero y para que era el otro led pues solo para ver como funciona la patilla LED del modulo bluetooth y así tener el chivato de cuando el otros dispositivo se ha conectado a nuestro modulo ya que se encenderá el led.
Os dejo el esquema eléctrico que puede servir de chuleta para ver como conectar sensores, en nuestro caso un potenciometro, a nuestro arduino, o botones.