Módulo Bluetooth HC-06 con Arduino y Android

En este proyecto, se aprenderá a utilizar el Bluetooth HC-06 por medio de Arduino, se controlarán varios actuadores desde una aplicación creada para Android, usando MIT App Inventor.

Las especificaciones detalladas de este módulo se encuentran en el siguiente enlace: https://www.olimex.com/Products/Components/RF/BLUETOOTH-SERIAL-HC-06/resources/hc06.pdf


Los módulos Bluetooth pueden configurarse como Maestro o Esclavo. Esto quiere decir que un módulo configurado como Maestro es el que inicia el emparejamiento o conexión, mientras que un módulo configurado como Esclavo espera a que otros se conecten a él. Por ejemplo, cuando conectamos un teclado Bluetooth a nuestro PC, este último solicitará un código de emparejamiento, entonces el PC hace las veces de Maestro y el teclado hace las veces de Esclavo. El módulo HC-06 es de tipo Esclavo y esto no se puede cambiar.

En cuanto a las conexiones con Arduino, hay que tener en cuenta los pines al respaldo del módulo, tenemos:
  • VCC: Que en algunos módulos se llama simplemente 5V. Es el pin de alimentación y va conectado al pin 5V o 3.3V del Arduino
  • GND: Es el ground o negativo del módulo. Va al GND del Arduino
  • TX: Este es el pin de transmisión de datos. A través de este pin, el módulo transmite hacia el Arduino los datos que le llegan desde un dispositivo conectado, como un móvil. Se conecta al pin RX del Arduino
  • RX: Este es el pin de recepción de datos. A través de este pin, el módulo recibe datos desde el Arduino para enviarlos hacia un dispositivo conectado, como un móvil. Se conecta al pin TX del Arduino

Cuando realizamos la anterior conexión, el módulo se encenderá y un LED empezará a parpadear. Esto significa que el módulo no está emparejado. El LED dejará de parpadear cuando se establezca una conexión entre el HC-06 y otro dispositivo.

En cuanto a la programación, no es necesario utilizar ninguna librería. Sólo basa con poner en el setup() la inicialización del puerto serial a una determinada velocidad de baudios:
  • Serial.begin(9600);
Se suele utilizar una velocidad de 9600 baudios porque esa es la velocidad a la que se comunica el HC-06 por defecto. En cuanto al setup() declaramos los pines como entradas o salidas con la función pinMode(), dependiendo de lo que tengamos conectado al Arduino (por ejemplo, un LED, un pulsador, un servo...).

En este tutorial se realizan varios ejemplos para demostrar las posibilidades de controlar a distancia diversos dispositivos en nuestros proyectos con Arduino. Todo se hará a través de aplicaciones desarrolladas para Android utilizando la plataforma MIT App Inventor.

Componentes utilizados:
  • Módulo Bluetooth HC-06
  • Teléfono con Android
  • Sensor de temperatura y humedad DHT22 o DHT11
  • Pantalla LCD de 16x2 (1602A)
  • Fotocelda
  • LEDs
  • Servomotor TowerPro SG90
  • Resistencias de 220 ohms
  • Resistencias de 10K ohms
  • Protoboard o breadboard
  • Cables
  • Tarjeta Arduino
Importante: Antes de subir un código al Arduino, se debe desconectar el módulo Bluetooth de los pines TX y RX de la tarjeta, ya que éstos son usados para la comunicación con el PC a la hora de subirle algún código. Luego de cargar el código, se vuelve a conectar el módulo al Arduino.

A la hora de conectar el HC-06 con nuestro teléfono Android, pedirá una contraseña para establecer la conexión. Por defecto es: 1234

El primer ejemplo consiste en controlar dos LEDs, los cuales se pueden encender y apagar. A través del Bluetooth llegan datos de tipo char por parte del móvil. El Arduino decide qué acción ejecutar de acuerdo al dato que recibe, por ejemplo, si recibe la letra 'A' entonces enciende un LED y si recibe la letra 'B' lo apaga.


El esquemático para este ejemplo es el siguiente:


El código en Arduino para este ejemplo se puede descargar desde aquí: https://drive.google.com/open?id=0Bxr9tDhyoU1ZZFRrb0xabWlQc28

El archivo .apk de la aplicación para este ejemplo se puede descargar desde aquí: https://drive.google.com/open?id=0Bxr9tDhyoU1ZV3pSYzk3UkhwZEk

El segundo ejemplo consiste en el uso de PWM, para variar el ángulo de un servomotor y el brillo de un LED. En este caso en particular, utilizamos deslizadores para enviar datos variables los cuales modificarán el ángulo del servo y brillo del LED.

El Arduino está recibiendo a través del Bluetooth dos datos: uno que le indica si se va a controlar el servo o LED y otro con el ángulo o nivel de brillo, según sea el caso. Cuando el Arduino recibe el dato que le ordena controlar el servo o LED, pasa a leer nuevamente el puerto serie para recibir los datos del ángulo o nivel de brillo, los cuales llegan como tipo char y son convertidos en datos tipo int, que son los que pueden mandar via PWM.

En este post se explica con detalle el funcionamiento y uso de un servomotor con Arduino
En este post se explica con detalle cómo modificar el brillo de un LED con señales PWM


El esquemático para este ejemplo es el siguiente:


El código en Arduino para este ejemplo se puede descargar desde aquí: https://drive.google.com/open?id=0Bxr9tDhyoU1ZSjNwZ2E1LUdxcmc

El archivo .apk de la aplicación para este ejemplo se puede descargar desde aquí: https://drive.google.com/open?id=0Bxr9tDhyoU1ZWmdQN1FSMUR0Qmc

El tercer ejemplo consiste en enviar texto para que pueda aparecer en una pantalla LCD de 16x2 conectada al Arduino.
En este post se explica con detalle el funcionamiento y uso de esta pantalla.

El Arduino está recibiendo a través del Bluetooth dos datos: uno que le indica que se va a controlar la pantalla LCD y otro con el mensaje que se desea mostrar en ella. Cuando el Arduino recibe el dato que le ordena controlar la pantalla, pasa a leer nuevamente el puerto serie para recibir los datos correspondientes al mensaje, los cuales llegan como tipo char y son convertidos en una cadena tipo String, para finalmente mostrarlos en la pantalla.


El esquemático para este ejemplo es el siguiente:


El código en Arduino para este ejemplo se puede descargar desde aquí: https://drive.google.com/open?id=0Bxr9tDhyoU1ZRjNmanN2d3Qwb2M

El archivo .apk de la aplicación para este ejemplo se puede descargar desde aquí: https://drive.google.com/open?id=0Bxr9tDhyoU1ZUFVHTi1kVzhYYU0

El cuarto y último ejemplo consiste en la recepción de datos por parte del Arduino. Se van a recibir datos de un sensor de temperatura y humedad DTH22 (se puede usar también un DHT11) y un sensor de luz (fotocelda) para mostrarlos en la pantalla del móvil. A través del Bluetooth, el Arduino envía los datos leídos de: temperatura, humedad y luz. Posteriormente la aplicación los recibe y los muestra en la pantalla del móvil.

En este post se explica con detalle el funcionamiento y uso de los sensores DHT22 y DHT11
En este post se explica con detalle el funcionamiento y uso de la fotocelda con Arduino


El esquemático para este ejemplo es el siguiente:



El código en Arduino para este ejemplo se puede descargar desde aquí: https://drive.google.com/open?id=0Bxr9tDhyoU1ZbFFYcl9vaFdFWDQ

El archivo .apk de la aplicación para este ejemplo se puede descargar desde aquí: https://drive.google.com/open?id=0Bxr9tDhyoU1ZZW13NGhVOWcxWms

Comentarios

  1. hello, i have error on the coding on arduino "Serial.print(“|”);". Can u help me?

    ResponderBorrar
  2. muy bueno, me gustaría revisar el código del apk para entender bien como funciona... saludos.

    ResponderBorrar
  3. saludos, podrias pasarme los archivos .aia, para entender el funcionamiento de la apk

    ResponderBorrar
  4. Este comentario ha sido eliminado por el autor.

    ResponderBorrar
  5. Excelente post, me ha sido de mucha ayuda, 10 estrellas xD

    ResponderBorrar
  6. Buenas, tengo un problema. Estoy haciendo un coche con un Nano Arduino controlado por Bluetooh pero no consigo configurar el módulo HC06. No sé si es el puerto serie (COM3) o por qué. Me podría echar una mano? Gracias!

    ResponderBorrar
  7. #include amigo la solcuioon me sale error de que no existe aiuda alguien

    ResponderBorrar
  8. Podrías pasarme el comando .aia a a este mismo correo?

    ResponderBorrar
  9. Can you share the blocks of programming.

    Thanks bro!

    ResponderBorrar
  10. Gracias! sirve a los que recién empiezan con arduino!

    ResponderBorrar
  11. Este comentario ha sido eliminado por el autor.

    ResponderBorrar
  12. Excelente proyecto. Podrias mandarme la programación de los bloques en el app inventor de como mandar los datos para el brillo del led por favor. Gracias

    ResponderBorrar
  13. los links para descargar los proyectos ya no existen

    ResponderBorrar
  14. por que me sale error516 : unable to write: broken pipe

    ResponderBorrar
  15. hola que tal me podrían dar el nombre de la app ya que el link no funciona. gracias

    ResponderBorrar
  16. hola ayúdenme por favor Select list item: Attempt t me aparace un cuadro de error. o get item number 2 of a list of length 1: (1 %)
    Note: You will not see another error reported for 5 seconds.

    ResponderBorrar
  17. ayuda porfa como aria solo para prender 2 led por 2 segundos y 1 led q este todo el tiempo prendido ayuda documento aia para arduino y programa en app inventor te agradescso mucha gracias tu ayuda

    ResponderBorrar
  18. El archivo .apk de la aplicación para este ejemplo se puede descargar desde aquí: https://drive.google.com/open?id=0Bxr9tDhyoU1ZWmdQN1FSMUR0Qmc

    Al parecer no me deja descargar la app no se por que sucede esto, alguien podria ayudarme por favor.

    ResponderBorrar
  19. Hola, es posible aceder a las app .apk. Parecen caídas del drive, o no están. Muchas gracias de antemano!

    ResponderBorrar
  20. Este comentario ha sido eliminado por el autor.

    ResponderBorrar
  21. Hola, muy útil el post, gracias
    ¿Podrías subir de nuevo el .apk parece que está caído?
    Gracias

    ResponderBorrar
  22. Muchas Gracias. Buen post, pero los códigos subidos no están en el link de descarga.

    ResponderBorrar
  23. Tiene un codigo para medir el nivel de alchol con arduino y android?

    ResponderBorrar
  24. hola, disculpa no me deja descargar la aplicacion apk me sale el error 404. Se ha producido un error.

    No se ha encontrado la URL solicitada en este servidor.

    ResponderBorrar
  25. https://www.youtube.com/watch?v=OO7vKKuJ9a0

    Aqui pueden encontrar como elaborar las aplicaciones apra los diferentes ejercicios.

    ResponderBorrar
  26. Muy bueno el ejemplo. Me gustaría saber de como serie el código con microcontrolador en C de ccs compiler. Me gustaría que hiciera un ejemplo de eso sin modificar el app. Solo con microcontrolador.

    ResponderBorrar
  27. fatal error: DHT.h: No such file or directory.
    Help me

    ResponderBorrar
  28. Error al descargar
    404. Se ha producido un error.

    No se ha encontrado la URL solicitada en este servidor. Eso es todo lo que sabemos

    ResponderBorrar
  29. En el último proyecto, los mensajes enviados desde Bluetooth al dispositivo nan ° C | nan% | 92 se ven así, y por mucho que busqué el problema, no encontré nada.

    ResponderBorrar
    Respuestas
    1. A mi también me da el mismo error.

      Borrar
    2. Lograron solucionar el error? Si es así me podrían ayudar a solucionarlo por favor?

      Borrar
  30. Amigo me puedes regalar el código de app donde realizaste los bloques gracias

    ResponderBorrar
  31. Hola, creo que el enlace para descargar la app está averiado, puedes checar eso porfa

    ResponderBorrar

Publicar un comentario