Conectando cosas a través de Bluetooth / Android / Arduino
Componentes y suministros
| × | 1 | ||||
| × | 1 |
Aplicaciones y servicios en línea
| ||||
|
Acerca de este proyecto
Una muy buena red inalámbrica de área local (y personal) es sin duda la Bluetooth (BT). Hoy en nuestro día a día es común encontrarnos usando teléfonos celulares, estéreos, cámaras, etc., interconectados con la ayuda de la famosa "lucecita azul".
En el mundo del IoT y la automatización en general, es muy común encontrar controles remotos a través de teléfonos móviles que utilizan tecnología BT. Esto se debe a dos componentes básicos, pero muy importantes:
- Plataformas de desarrollo simples para aplicaciones ANDROID (como MIT AppInventor2) y
- Módulos BT asequibles (como HC-06)
En este tutorial, desarrollaré algunas ideas sobre cómo controlar las salidas de Arduino a través de un dispositivo móvil para mover un robot, encender las lámparas de una casa, etc.
Paso 1:el módulo Bluetooth y el Arduino
En el mercado es muy común encontrar módulos BT 3.0 "Maestro-Esclavo" como el HC-05 y módulos "Esclavo" como el HC-06. Más recientemente, aparecieron los HC-08 y HC-10 trabajando con tecnología BT 4.0 o BLE ("Bluetooth Low Energy"). Los módulos BLE son los únicos que se pueden conectar a un iPhone, porque desafortunadamente Apple no brinda soporte para BT 3.0.
Para los proyectos discutidos aquí, usaré un HC-06 que es muy popular y barato (¡Adiós, iPhone! ¡Los androides son los reyes aquí!). El módulo BT se alimenta con 5V, lo que hace que se pueda conectar fácilmente a un Arduino UNO, por ejemplo. Sus pines de transmisión (Tx) y recepción (Rx) se pueden conectar directamente al UNO, sin necesidad de divisores de voltaje como vemos en el caso del ESP8266. Por lo general, el HC-06 debe conectarse directamente a los pines 0 y 1 Arduino ("Serial 0"):
- HC06-Tx al pin 0 de Arduino (Rx)
- HC06-Rx al pin 1 de Arduino (Tx)
Cuando utilice entradas "Serie 0" (el único puerto serie HW en UNO), es muy importante recordar que el HC-06 puede no estar conectado físicamente a los pines 0 y 1 durante la carga del programa, porque el puerto USB también usa el misma serie. Una forma sencilla de solucionar este pequeño problema (si su proyecto no utiliza muchos GPIO UNO) es utilizar un "puerto serie SW" a través de la biblioteca SoftwareSerial. En nuestro caso aquí, usaremos los pines 10 y 11 de UNO (Tx, Rx respectivamente).
Paso 2:probar y configurar el HC-06
El siguiente paso será escribir un código simple para probar, programar e inicializar el HC-O6:Para comenzar, incluya el Serial del Software de la Biblioteca, configurando la variable "BT" en el nuevo puerto serial.
#include SoftwareSerial BT (10, 11); // RX, TXString command =""; // Almacena la respuesta del dispositivo bluetooth setup () {Serial.begin (9600); Serial.println ("comandos de tipo AT"); BT.begin (9600); // HC-06 Por lo general, velocidad en baudios predeterminada}
Luego viene el cuerpo principal del código que simplemente espera los datos provenientes de BT. Cuando llegan, los datos se escriben en el Monitor de serie. Asimismo, los comandos AT se pueden enviar desde el monitor en serie al módulo HC-06.
void loop () {if (BT.available ()) // recibe datos si están disponibles. {while (BT.available ()) // "seguir recibiendo". {retraso (10); // Retraso agregado para hacer algo estable char c =BT.read (); // Ejecutar el comando de lectura en serie + =c; // Construye la cadena. } Serial.println (comando); comando =""; // No se repite} if (Serial.available ()) {delay (10); BT.write (Serial.read ()); }}
Una vez que el programa está cargado, use el monitor serial para hacer algunas pruebas básicas, por ejemplo:
- Envíe "AT", el módulo debe responder "OK".
- Preguntar versión de firmware:"T + VERSION", el módulo debe responder, por ejemplo:"linvorV1.8".
- Con HC-06 puede definir un nombre para el módulo, por ejemplo:"El T + NAMEMJRoBot_BT_HC06". Pero a diferencia de otros módulos, no puede saber cuál es el nombre que se establece para el módulo. Al enviar el comando anterior, el HC-06 simplemente responde:"OKsetname".
En general, el HC-O6 viene de serie con la contraseña (o PIN):1234. Puede establecer una nueva con el comando AT:
- AT + PIN xxxx donde 'xxxx' serán 4 números.
A continuación, el código Arduino para la prueba HC-06:
F08H931IL8LGG7U.ino
Paso 3:el dispositivo Android
¡OK! Módulo conectado a UNO y en funcionamiento. Es hora de presentar el dispositivo Android.
Hay muchas aplicaciones en la tienda de Google que se pueden usar. Usaré una aplicación que desarrollé con la herramienta MIT Application2 y que está disponible de forma gratuita en la tienda de Google:MJRoBot BT Digital Analog Voice Control
La aplicación envía comandos digitales (a través de botones o voz) y comandos analógicos para controlar dispositivos PWM como servos (enviar datos en un rango de 0 a 255).
- Descarga la aplicación
- Vaya a la configuración del dispositivo Android y busque el módulo BT y realice la conexión (ingrese el PIN 1234 o cualquier otro definido por usted). Esto debe hacerse una vez, ya que el dispositivo conservará los datos de conexión.
- Una vez que el dispositivo y el HC-06 estén hablando, inicie la aplicación. Por segunda vez, al iniciar la aplicación, el módulo BT debe conectarse automáticamente.
- Seleccione el nombre del módulo (en mi caso es el que tiene el HC-06 al final).
La aplicación mostrará "CONECTADO", informando que está "emparejada" con el HC-06. En este punto, pruebe los botones de la aplicación y observe en el monitor serial de su PC, qué datos está enviando la aplicación. Por ejemplo, presionando los botones "ON" y "OFF" secuencialmente para los 4 dispositivos, el resultado sería:
dev1ondev1offdev2ondev2offdev3ondev3offdev4ondev4off
Ahora que tenemos una aplicación para Android hablando con el módulo BT, ¡creemos algo útil!
Paso 4:Controlar las salidas de Arduino.
Construyamos el circuito como se muestra arriba. La idea es usar la App para ENCENDER y APAGAR los LED y también controlar su intensidad.
Conexiones:
- Dispositivo 1:"dev1on / dev1off" ==> LED rojo ==> Pin 3 UNO
- Dispositivo 2:"dev2on / dev2off" ==> LED amarillo ==> Pin 5 UNO
- Dispositivo 3:"dev3on / dev3off" ==> LED verde ==> Pin 6 UNO
- Dispositivo 4:"dev4on / dev4off" ==> LED azul ==> Pin 9 UNO
Es decir, para activar el "ON" relacionado con el botón "Dispositivo 1", se enviará el mensaje de texto "dev1on" al Arduino. Al recibir este mensaje, el LED rojo debería encenderse y así sucesivamente.
Tenga en cuenta que los 4 pines son los pines capaces de generar PWM (no todos los pines digitales UNO pueden hacerlo. Busque los del mercado con “ ~ ”. Esto es importante para el uso de "controles deslizantes" en la aplicación, para enviar datos numéricos para controlar la intensidad de los LED a través de PWM:
- Dev A0:"r / 0-255" ==> LED rojo ==> Pin 3 UNO
- Dev A1:"y / 0-255" ==> LED amarillo ==> Pin 5 UNO
- Dev A2:"g / 0-255" ==> LED verde ==> Pin 6 UNO
- Dev A3:"b / 0-255" ==> LED azul ==> Pin 9 UNO
En el caso de los controles deslizantes, antes del valor de datos de PWM (0 a 255), se envía un carácter al Arduino para informarle que se acerca un comando "control deslizante".
En el siguiente video, una demostración de la parte anterior del programa (Botones y control deslizante):
Debajo del código Arduino completo:
FA44NBUIL8LGGAY.ino
Paso 5:controle los dispositivos de IoT mediante combinaciones de voz
Para el control de dispositivos IoT, la voz es una tendencia en la actualidad. Obtener este tipo de control usando Arduino / HC-06 / Android es extremadamente simple. Los dispositivos Android ya tienen esta función de "fábrica". En la aplicación que desarrollé, se agregó un botón que hace que Android "escuche" un comando y lo envíe en formato de texto al Arduino. El código se encarga de "leer" la cadena que viene.
Agregué algunos ejemplos en mi código. Cuando el Arduino recibe un comando "Connect TV", por ejemplo, el LED verde (correspondiente al dispositivo 3) se enciende (en lugar del LED, podría tener un relé que conectaría el televisor).
Debe cambiar las cadenas que se encuentran en la parte Loop del código, con comandos en su idioma. Usé el portugués que es mi lengua materna y era más fácil de manejar en Google debido al diferente acento con mi inglés. Debes usar oraciones cortas o solo palabras allí. Lo importante es una combinación perfecta entre lo que escribió y lo que devuelve la aplicación de reconocimiento de voz de Google.
Aquí puede encontrar un enlace al archivo .aia que se puede ejecutar directamente en MIT AppInventor2. En el siguiente video, una pequeña demostración del control por voz:
Paso 6:Conclusión
Bueno, creo que con este tutorial, es posible que te des cuenta del enorme potencial de controlar "cosas" usando BT / Android / Arduino. Como siempre, espero que este proyecto pueda ayudar a otros a encontrar su camino en el apasionante mundo de la electrónica. , robótica e IoT. Para más proyectos, visite mi blog:MJRoBot.org
¡Saludos desde el sur del mundo!
¡Nos vemos en mi próximo tutorial!
Gracias
Marcelo
Código
- Fragmento de código n. ° 1
- Fragmento de código n. ° 2
- Fragmento de código n. ° 3
Fragmento de código n. ° 1 Texto sin formato
#includeSoftwareSerial BT (10, 11); // RX, TXString command =""; // Almacena la respuesta del dispositivo bluetooth setup () {Serial.begin (9600); Serial.println ("comandos de tipo AT"); BT.begin (9600); // HC-06 Por lo general, velocidad en baudios predeterminada}
Fragmento de código n. ° 2 Texto sin formato
void loop () {if (BT.available ()) // recibe datos si están disponibles. {while (BT.available ()) // "seguir recibiendo". {retraso (10); // Retraso agregado para hacer algo estable char c =BT.read (); // Ejecutar el comando de lectura en serie + =c; // Construye la cadena. } Serial.println (comando); comando =""; // No se repite} if (Serial.available ()) {delay (10); BT.write (Serial.read ()); }}
Fragmento de código n. ° 3 Texto sin formato
dev1ondev1offdev2ondev2offdev3ondev3offdev4ondev4off
Proceso de manufactura
- Robot Raspberry Pi controlado por Bluetooth
- Programación de la serie Atmel AT89 a través de Arduino
- Control remoto universal usando Arduino, 1Sheeld y Android
- Juguete controlado por Android con Raspberry Motor Shield
- ¡Arduino con Bluetooth para controlar un LED!
- Dispositivos Bluetooth controlados por voz con OK Google
- Arduino - Enviar temperatura a la web a través de serie
- Control de circuito sensible al movimiento a través de Intel Curie
- LED parpadeantes en Arduino desde iOS y Android
- Arduino Uno + Dispositivo eléctrico (bombilla) + Teléfono Android
- Controla el brazo del robot Arduino con la aplicación de Android