Uso del Módulo Bluetooth HC-05 -...

14
Uso del Módulo Bluetooth HC-05 Veamos como añadir a Arduino la función de poder comunicarse sin cables con otros dispositivos mediante módulos Bluetooth. Es necesario saber que existen diferentes modelos de módulos Bluetooth entre los más populares se encuentran HC-06 y el HC05. El módulo HC-06 funciona como Slave y el HC-05 como Master y Slave (lo que podría confundir a algunos). Físicamente se diferencian por el número de pines. En el HC-06 tiene un conector de 4 pines mientras que el HC-05 trae uno de 6 pines. Existen varios modelos y versiones para el módulo HC-05, el que usaremos es el que se muestra en las siguientes imágenes, que como vemos tiene un pulsador, el que nos servirá para entrar en Modo AT (modo de funcionamiento que permite configurar algunos parámetros del módulo). EL modulo Bluetooth HC-05 viene configurado de fábrica como esclavo, pero se puede cambiar para que trabaje como maestro, además al igual que el HC-06, se puede cambiar el nombre, contraseña de vinculación, velocidad y otros parámetros cuando entra en modo AT. Modulo bluetooth hc-05 como esclavo: Cuando está configurado de esta forma espera que un dispositivo bluetooth maestro se conecte a él, generalmente se utiliza cuando se necesita comunicarse con un PC o Smartphone, pues estos se comportan como dispositivos maestros. Modulo bluetooth hc-05 como Maestro: En este modo, el HC-05 es el que inicia la conexión. Un dispositivo maestro solo se puede conectarse con un dispositivo esclavo. Generalmente se utiliza este modo para comunicar módulos bluetooth entre ellos. El módulo HC-05 viene por defecto configurado de la siguiente forma: - Modo : Esclavo - Nombre por defeco: HC-05 - Contraseña por defecto: 1234 - La velocidad por defecto : 9600 baudios EL Modulo HC-05 tiene 4 estados: Estado Desconectado: - Entra a este estado al alimentar el modulo y no se ha establecido una conexión bluetooth con ningún otro dispositivo - EL LED del módulo en este estado parpadea rápidamente - En este estado no puede interpretar los comandos AT Estado Conectado o de comunicación: - Entra a este estado cuando se establece una conexión con otro dispositivo bluetooth. - El LED hace un doble parpadeo. - Todos los datos que se ingresen al HC-05 por el Pin RX se trasmiten por bluetooth al dispositivo conectado, y los datos recibidos se devuelven por el pin TX. La comunicación es transparente Modo AT 1 - Para entrar a este estado después de conectar el modulo es necesario presionar el botón del HC-05. - En este estado, podemos enviar comandos AT, pero a la misma velocidad con el que está configurado. - EL LED del módulo en este estado parpadea rápidamente igual que en el estado desconectado.

Transcript of Uso del Módulo Bluetooth HC-05 -...

Uso del Módulo Bluetooth HC-05 Veamos como añadir a Arduino la función de poder comunicarse sin cables con otros dispositivos mediante módulos Bluetooth. Es necesario saber que existen diferentes modelos de módulos Bluetooth entre los más populares se encuentran HC-06 y el HC05. El módulo HC-06 funciona como Slave y el HC-05 como Master y Slave (lo que podría confundir a algunos). Físicamente se diferencian por el número de pines. En el HC-06 tiene un conector de 4 pines mientras que el HC-05 trae uno de 6 pines. Existen varios modelos y versiones para el módulo HC-05, el que usaremos es el que se muestra en las siguientes imágenes, que como vemos tiene un pulsador, el que nos servirá para entrar en Modo AT (modo de funcionamiento que permite configurar algunos parámetros del módulo).

EL modulo Bluetooth HC-05 viene configurado de fábrica como esclavo, pero se puede cambiar para que trabaje como maestro, además al igual que el HC-06, se puede cambiar el nombre, contraseña de vinculación, velocidad y otros parámetros cuando entra en modo AT. Modulo bluetooth hc-05 como esclavo: Cuando está configurado de esta forma espera que un dispositivo bluetooth maestro se conecte a él, generalmente se utiliza cuando se necesita comunicarse con un PC o Smartphone, pues estos se comportan como dispositivos maestros. Modulo bluetooth hc-05 como Maestro: En este modo, el HC-05 es el que inicia la conexión. Un dispositivo maestro solo se puede conectarse con un dispositivo esclavo. Generalmente se utiliza este modo para comunicar módulos bluetooth entre ellos. El módulo HC-05 viene por defecto configurado de la siguiente forma: - Modo : Esclavo - Nombre por defeco: HC-05 - Contraseña por defecto: 1234 - La velocidad por defecto : 9600 baudios EL Modulo HC-05 tiene 4 estados: Estado Desconectado: - Entra a este estado al alimentar el modulo y no se ha establecido una conexión bluetooth con ningún otro dispositivo - EL LED del módulo en este estado parpadea rápidamente - En este estado no puede interpretar los comandos AT Estado Conectado o de comunicación: - Entra a este estado cuando se establece una conexión con otro dispositivo bluetooth. - El LED hace un doble parpadeo. - Todos los datos que se ingresen al HC-05 por el Pin RX se trasmiten por bluetooth al dispositivo conectado, y los datos recibidos se devuelven por el pin TX. La comunicación es transparente Modo AT 1 - Para entrar a este estado después de conectar el modulo es necesario presionar el botón del HC-05. - En este estado, podemos enviar comandos AT, pero a la misma velocidad con el que está configurado. - EL LED del módulo en este estado parpadea rápidamente igual que en el estado desconectado.

Modo AT 2 - Para entrar a este estado es necesario tener presionado el botón en el momento de alimentar el modulo, es decir el modulo debe encender con el botón presionado, después de haber encendido se puede soltar y permanecerá en este estado. - En este estado, para enviar comandos AT es necesario hacerlo a la velocidad de 38400 baudios, esto es muy útil cuando nos olvidamos la velocidad con la que hemos dejado configurado nuestro modulo. - EL LED del módulo en este estado parpadea lentamente. EL HC-05 tiene 6 pines pero por ahora solo usaremos los 4 siguientes: - Vcc, Voltaje positivo de alimentación, aquí hay tener cuidado porque hay módulos que solo soportan voltajes de 3.3V, pero en su mayoría ya vienen acondicionados para que trabajen en el rango de 3.3V a 6V pero es bueno revisar los dato técnicos de nuestro modulo antes de hacer las conexiones - GND, Voltaje negativo de alimentación, se tienen que conectar al GND del Arduino o al GND de la placa que se esté usando. - TX, Pin de Transmisión de datos, por este pin el HC-05 transmite los datos que le llegan desde el PC o Móvil mediante bluetooth, este pin debe ir conectado al pin RX del Arduino - RX, pin de Recepción, a través de este pin el HC-05 recibirá los datos del Arduino los cuales se transmitirán por Bluetooth, este pin va conectado al Pin TX del Arduino Explicado esto, para comenzar a hacer pruebas y comprobar que nuestro HC-05 nos funciona correctamente, usando cables macho-hembra procedemos a realizar las siguientes conexiones entre nuestro modulo Bluetooth y nuestro Arduino UNO R3.

Importante: Para cargar el programa al Arduino, desconectaremos los pines RX0 y TX0 del Arduino, pues internamente el Arduino trabaja con los mismos pines para cargar el programa y si están conectados al módulo Bluetooth, no nos dejará cargar (para evitar este inconveniente se podría usar el software serial y usar otros pines). Ahora en el IDE de Arduino copiamos el siguiente código y luego lo cargamos a nuestro Arduino. void setup() { Serial.begin(9600); } void loop() { if (Serial.available()) //comprobamos si recibimos dato por bluetooth { char dato=Serial.read(); //leemos y guardamos en variable dato tipo char Serial.print("Dato recibido: "); Serial.println(dato); //devolvemos por bluetooth el dato recibido } }

Después de terminar de cargar, nuevamente volvemos a conectar los pines RX y TX. El programa que hemos cargado al Arduino básicamente devolverá por el Bluetooth cualquier dato que se reciba a través de él.

Conexión desde un dispositivo móvil al modulo Bluetooth hc-05: Primero tenemos que instalar una aplicación que haga la función de un Terminal Serie, para el caso de Android se puede utilizar la App Blue Term , existen otras aplicaciones, pero esta nos servirá. Antes de empezar a usar la aplicación, debemos vincular nuestro teléfono con el HC-05, esto solo se hace una vez, para esto vamos a Ajustes->Bluetooth y Buscar dispositivos, en la búsqueda nos debería aparecer nuestro HC05, al seleccionarlo nos pedirá la contraseña de vinculación, que como recordamos lo explicado al inicio generalmente es 1234.

Una vez vinculado abrimos la aplicación Blue Term, antes de hacer la conexión, con el botón menú entramos a preferencias y activamos la opción de Echo Local para que se muestre en pantalla los caracteres que se ingresan por teclado, que son los que se envían.

Volvemos y entramos a menú ->conectarse a un dispositivo

En la lista muestra todos los dispositivos vinculados en nuestro teléfono, escogemos el HC-05, La aplicación intentará conectar con el HC-05, si logra la conexión en la parte superior debe salir el estado de conectado. Una vez conectado, podemos empezar a enviar los datos, es bueno mencionar que la aplicación envía el carácter tan pronto se presione la tecla. Como el programa en nuestro Arduino devuelve el dato recibido, si todo anda bien, en nuestra aplicación se debería mostrar las teclas presionadas.

CONTROL DE UN LED MEDIANTE BLUETOOTH Ahora vamos a controlar el encendido y apagado de un LED a través de nuestro smartphone. Conectamos el LED a nuestro Arduino en el pin 13.

Cargamos en Arduino el siguiente código: (Acordarse de desconectar el HC-05 para que no interfiera en la carga a través del puerto serie y luego volver a conectarlo). char dato; const int pinLED=13; void setup() { pinMode(pinLED,OUTPUT); //Seleccionamos el pinLEDcomo salida Serial.begin(9600); //Inicializamos velocidad de transmisión. } void loop() { while (Serial.available()) //Mientras el puerto Serial este disponible se empieza el ciclo { char dato= Serial.read(); //Lleemos la variable enviada desde el Bluetooth. switch(dato) // Se podría hacer también fácilmente con estructura if { case 'H': //caso de ser H la varible enviada, entonces: { digitalWrite(pinLED,HIGH); //encenderá el LED. Serial.println("Led encendido"); //Se mostrará un mensaje en el teléfono. break; // se acaba el switch. } case 'L': //caso de ser L la variable enviada, entonces: { digitalWrite(pinLED,LOW); //LED apagado. Serial.println("Led apagado"); //Se mostrará un mensaje en el teléfono. break; } } } } Probamos con la la App Blue Term que hemos usado antes y veremos como el LED enciende y apaga.

CONTROL ANALÓGICO MEDIANTE BLUETOOTH Vamos a ver ahora como podemos controlar el nivel de luminosidad de nuestro LED desde el smartphone. Lo primero que tenemos que hacer es cambiar el pin de conexión ya que ahora tendremos que usar una salida PWM para poder variar el nivel de luminosidad (recordad que en esas salidas puede variar de 0 a 255). En este caso nuestro código tiene que reconocer el número enviado entre 0 y 255 para escribirlo en la salida analógica de nuestro LED. char datosimple; //variable que almacena caracteres String datoentero=""; //variable que almacena números de varios caracteres const int pinLED=5; //elegimos la salida PWM 5 void setup() { Serial.begin(9600); pinMode(pinLED, OUTPUT); } void loop() { datoentero=""; while(Serial.available() > 0) //leemos caracter a caracter hasta acabar de recibir todo el número { datosimple =Serial.read(); //leemos un caracter datoentero += datosimple; //añadiendo los caracteres recibidos para formar el nº completo delay(5); //damos un poco de tiempo } if (datoentero!="") //hemos recibido dato { if (datoentero == "H") { digitalWrite(pinLED,HIGH); Serial.println("Se ha encendido el LED"); datoentero=""; delay(15); }else if (datoentero =="L") { digitalWrite(pinLED, LOW); Serial.println("Se ha apagado el LED"); datoentero=""; delay(15); }else if (0< datoentero.toInt()&& datoentero.toInt()<=255) // nos ha llegado un nº {

analogWrite(pinLED, datoentero.toInt()); //convertimos de caracteres a un nº entero Serial.println("Variando intensidad de LED"); datoentero=""; delay(10); }else { Serial.println("NO ENTIENDO ESTA ORDEN"); datoentero=""; } } }

DESARROLLO DE UNA APP PERSONALIZADA CON APP INVENTOR App Inventor es una herramienta de software libre creada por Google Labs en 2011 para crear apps Android. Al cabo de poco tiempo, su desarrollo se traspasó al Massachusetts Institute of Technology (MIT). Se pueden crear online apps para Andoid de una manera visual y sencilla gracias a un conjunto de herramientas básicas. Una vez finalizado el diseño y la programación de la app, se descarga y se instala en un dispositivo Android o también podemos probarla en el emulador que nos proporciona App Inventor. Al abrir MIT App Inventor por primera vez nos aparece una pantalla donde se muestran nuestros proyectos anteriores.

Pulsamos Start New Project y nos pedirá un nombre para nuestra aplicación. La página que nos aparece es dónde decidiremos el diseño de la aplicación: botones, colores, menús, imágenes…

- A la izquierda, en el panel Palette, tenemos una paleta con elementos para añadir a nuestra aplicación. - En el medio tenemos una pantalla de móvil que se llama Viewer y podemos añadir elementos de la paleta arrastrándolos hasta la zona en blanco. - A la derecha, en el panel Components, tenemos una lista con todos los elementos que hay colocados en la pantalla, así es fácil seleccionarlos. De momento sólo hay ‘Screen 1’, que es la pantalla. Si la seleccionamos veremos que a su derecha hay un panel llamado Properties, dónde se pueden cambiar todas las características de cada uno de los elementos de la lista. En Palette buscamos el elemento List Picker (menú desplegable) que programaremos para que muestre los dispositivos Bluetooth cercanos y se conecte a uno. Lo arrastramos hasta la pantalla.

A la derecha, en el menú Properties, podemos cambiar el texto del List Picker. Vamos al campo Text y escribimos Dispositivos.

Añadimos dos elementos de tipo Button a la aplicación, de la misma forma que hemos colocado el List Picker. Seleccionamos cada uno de los botones y les cambiamos el nombre. Uno lo llamaremos “Encender” y el otro “Apagar”.

Lo que hemos añadido hasta ahora son componentes visibles. El usuario puede verlos e interactuar con ellos. Pero hay otro tipo de componentes, llamados non-visible components, que sirven para activar algunas funcionalidades como el Giroscopio, la antena WiFi o Bluetooth. Nos vamos a Palette->Connectivity y arrastramos Bluetooth Client a la pantalla. Veremos que justo debajo de la previsualización aparece el símbolo de Bluetooth. Arriba a la derecha hay dos botones juntos: Design y Blocks. El primero abre la ventana que hemos usado hasta ahora, en cambio, Blocks abre una ventana para programar los bloques.

Lo primero que vamos a hacer es programar el menú desplegable. A la derecha, seleccionamos ListPicker1 y se nos abrirá un menú en el que aparecen los bloques relacionados con este objeto.

Debemos decirle al desplegable dos cosas: qué debe hacer ANTES de seleccionar una opción del desplegable y DESPUÉS de seleccionar una. Antes de seleccionar una opción, queremos que inicialize una lista con los nombres de todos los dispositivos Bluetooth que hay cerca. Así que vamos a decirle que si el móvil tiene la comunicación Bluetooth activada, ListPicker1 establezca los nombres de los dispositivos cercanos como elementos de la lista. Dentro del menú de bloques de ListPicker1 arrastramos .BeforePicking al espacio en blanco.

Ahora vamos al apartado Control y seleccionamos el condicional if

Después seleccionamos el objeto BluetoothClient1 y añadimos un AdressesAndNames y Available:

Y finalmente seleccionamos ListPicker1 y añadimos un Elements:

Montamos todos los bloques para que queden así:

Ahora tenemos que decirle a ListPicker1 que se conecte a la dirección que el usuario seleccione en la lista.

Finalmente configuramos Button1 y Button2. Queremos que al pulsarlos se envíe un texto a la dirección Bluetooth a la que estamos conectados…

Al final, el programa debería verse así:

Para exportar el programa vamos arriba a la izquierda, al menú Build. Lo desplegamos y seleccionamos App (save .apk to my computer)

Guardamos el archivo .apk y lo transferimos a nuestro móvil a través de USB para instalarlo Abrimos nuestra App. Pulsamos el botón Dispositivos y buscamos el módulo HC05. Podremos encender y apagar el LED con los botones.

MEJORANDO NUESTRA APP DE CONTROL

Vamos a mejorar nuestra aplicación mejorando su aspecto y ampliando sus funcionalidades (algunas de ellas serán redundantes pero así aprenderemos a utilizarlas):

- Tendremos un botón para conectar a Arduino y otro para desconectar.

- Debajo de estos botones un cuadro de texto nos mostrará el estado en el que nos encontramos.

- Los botones de encender y apagar tendrán un aspecto mejorado y con distinto color.

- Añadiremos una barra de deslizamiento para hacer un control de luminosidad , es decir, la barra enviará valores entre 0 y 255 al LED conectado a una salida analógica.

- Arduino nos enviará mensajes indicándonos el estado en que se encuentra el diodo.

- Se producirá uin mesaje emergente en pantalla en el momento de conexión.

- Por último, también añadimos un mensaje de voz cuando se produzca la conexión entre nuestra app y Arduino.

En la ventana de diseño vamos añadiendo los elementos indicados separados en lineas horizontales: En primer lugar añadimos un Selector De Lista (SelectorDeLista1) para realizar la conexión y un botón para desconectar (Botóndesconectar) escogiendo los colores y texto (dentro de propiedades) que nos parezcan oportunos

En la segunda linea añadimos una label (labelconectado) que nos mostrará el estado de conexión

En la tercera linea colocamos los botones de control del LED ( Botónencender y Botónapagar ) con el aspecto que más nos guste

En la cuarta linea colocamos una label ( labelbarra ) que separe en la pantalla el control digital, de los botones anteriores, del control analógico que realiza la barra deslizante.

En la quinta linea colocamos el Slider ( Slider1 ) para el control analógico con valor mínimo 0 y máximo 255 en sus propiedades. Añadimos también una label ( Etiqueta1 ) que nos indique el valor concreto que tiene la barra en cada momento (colocamos la etiqueta a la derecha de la barra donde vemos el 0 en la imagen siguiente).

Añadimos una label nueva ( labelestadoled) que nos servirá para mostrar los mensajes que Arduino nos envíe sobre el estado del LED.

Añadimos un campo de texto ( CampoDeTexto1 ) que usaremos para el mensaje de voz en el momento en que nos conectemos.

Por último incluimos los elementos no visibles que nos aportan funcionalidades: ClienteBluetooth1 (conexión bluetooth ), TextoAVoz1 (mensaje de voz), Notificador1 ( mensaje emergente ) y Reloj1 (ponemos su intervalo a 1000 lo que permite realizar actualización de mensajes cada segundo)

Ahora vamos a la ventana de bloques para realizar la programación: El primer bloque para programar el Selector de Lista ya lo conocemos y no tiene nada nuevo.

En el segundo bloque vemos que además de activar la conexión bluetooth, igual que ya hemos hecho en los ejemplos anteriores, procedemos a realizar otras acciones:

- Activamos el Reloj1 poniendo su ( Enabled a true ). - Desactivamos el Selector de Lista ( Enabled a false ). - Cambiamos el color de texto del selector de lista para que se observe desactivado. - Activamos el botón de desconexión ( Enabled a trae ). - Activamos los botones de encender y apagar el LED. - Ponemos mensaje CONECTADO en pantalla ( labelconectado ). - Activamos el control analógico deslizante. - Mostramos el mensaje emergente en pantalla usando el Notificador. - Activamos el mensaje de voz que está guardado en el CampoDeTexto1.

En el código del botón para desconectar, además de cortar la conexión, desactivamos todo y activamos el Selector de Lista para poder volver a conectar. También mostramos el mensaje emergente de aviso.

En los bloques de código de los botones de encendido y apagado del LED enviamos el carácter E o el A respectivamente. Además al pulsar el botón de encender activamos el botón de apagar mientras el de encendido queda desactivado. Lo mismo ocurre al pulsar el botón de apagar pero a la inversa. En ambos casos borramos la etiqueta de estado del led para que quede libre para que Arduino envíe su mensaje de estado y se pueda mostrar en esta etiqueta.

El bloque Reloj1 se ejecuta periódicamente cada segundo ya que ese es el intervalo que hemos introducido en sus propiedades. Lo que hacemos es actualizar la etiqueta que nos muestra el estado del LED con los mensajes recibidos desde Arduino (LED encendido o LED apagado).

Por último, en el bloque de la barra de deslizamiento que permite el control analógico de luminosidad lo que se hace es poner en la Etiqueta1 el valor de la posición del Slider1 y además, evidentemente, enviar a Arduino esa posición para variar el valor de luminosidad. Igual que hicimos con los botones de encendido y apagado limpiamos la etiqueta de estado del LED para dejarla vacía y poder escribir el mensaje enviado por Arduino.