bclose

Controlando Arduino con Android

 

Objetivos

.

 
    • Conectar los módulos Bluetooth a Arduino.
    • Presentar una aplicación Android llamada ArduDroid.
    • Ver como podemos usar ArduDroid para controlar Arduino desde el movil.
    • Montar un circuito de ejemplo.
 

Material requerido.

 

  Tienda España Tienda Mexico
Imagen de Arduino UNO  Arduino Uno R3 Arduino UNO R3
Modulo Bluetooth HC-06 Modulo Bluetooth HC-06 Bluetooth HC-06
Cables Dupont Macho-Hembra Cables Dupont Macho-Hembra Cables Dupont
Vista principal Una Protoboard  Una Protoboard
rojo verde amarillo Un par de leds  Un par de leds
Telefono celular Un móvil

 

 

Trabajando con HC-05 y Android

 

Una vez que hemos visto cómo usar los comandos AT para programar los módulos Bluetooth, en las sesiones anteriores, podemos pasar a la parte fácil que es usar nuestros móviles Android para controlar cualquier proyecto con BlueTooth. Es tan sencillo como conectarnos al módulo y escribir un pequeño programa que gobierne el flujo de control.

Podríamos hacerlo con comandos de texto directos, pero es demasiado poco elegante y aquí  nos gustan las cosas presentables, por lo que vamos a usar un programa de lo más simpático,  disponible para Android que se llama ArduDroid.

Está escrito por TechBitar, y podéis encontrar aquí su página Ardudroid.

Básicamente es un  programa Android con botones y deslizadores, más un esquema de programa Arduino que podemos usar para enviar y recibir comandos de una forma presentable, y que además funciona muy bien.

Para ello necesitaremos que descarguéis ArduDroid de la GooglePlay para Android y lo instaléis en vuestro teléfono.

 
  • Siento tener que decir, de nuevo, que los módulos HC-05 y HC-06 no son capaces de conectar con los móviles de Apple o al menos yo no lo he conseguido
 

Después basta con conectar cualquiera de los dos módulos a nuestros Duinos con un par de cables para GND y Vcc más Rxd y Txd.

Vamos a dedicar esta sesión a ver como conectamos uno de los módulos para la conexión normal de trabajo y cómo usar el Ardudroid para gobernar mensajes de texto, pines digitales y ya puestos algún pin PWM.

 

Diagrama de conexión

 

Vamos a montar inicialmente un pequeño circuito con tres diodos LED para que veamos cómo controlarlos desde el móvil, y luego iremos complicando un poco más el montaje (No, no es una amenaza).

Esquema electrico

 

El montaje de la protoboard es trivial para gente tan experimentada:

Esquema de protoboard

 

El programa de control ArduDroid

 

Ardudroid incluye un programa Arduino, que podemos utilizar como esqueleto para nuestros propios proyectos. Pero nosotros vamos a hacer algunos cambios en la conexión que él hace, porque no me gusta nada que usemos los pines 0 y 1 para comunicarnos con Arduino, así que nosotros usaremos los pines 2 y 3 para la conexión con el módulo BlueTooth.

 
  • Creo que ya comentamos que si usamos los pines 0 y 1 nuestro código funcionara, pero anularemos la conexión con el PC vía USB, que usa los pines 01 y 1.
  • El autor, que es un hombre de mundo, no tiene problemas, porque prueba los programas con un segundo módulo BT, y cuando tiene el programa pulido, no necesita volver a reprogramar, pero yo soy un poco más torpe y prefiero no cerrar esa puerta mantener abierto el USB para mensajes por ejemplo.
 

Vamos a ir presentando el programa de control de Arduino en pequeñas dosis para evitar asustar a nadie, y que los sufridos lectores huyan despavoridos, y de ese modo, además, podremos ir viendo poco a poco las diferentes secciones del programa, que estoy seguro ayudara a su mejor comprensión.

En primer lugar, necesitamos saber, que el programa Ardudroid envía todos los comandos con una sintaxis sencilla. Todas las ordenes empiezan por * y terminan en #, y si la orden incluye múltiples datos, esto vienen separados por el símbolo |

Cuando ArduDroid envía una orden típica, es algo así:  *10|3|2#

Por eso, porque las órdenes se envían codificadas, vamos a empezar con algunas definiciones previas:

#define START_CMD_CHAR '*'
#define END_CMD_CHAR '#'
#define DIV_CMD_CHAR '|'
#define CMD_DIGITALWRITE 10
#define CMD_ANALOGWRITE 11
#define CMD_TEXT 12
#define CMD_READ_ARDUDROID 13
#define MAX_COMMAND 20  // max command number code. used for error checking.
#define MIN_COMMAND 10  // minimum command number code. used for error checking.
#define IN_STRING_LENGHT 40
#define MAX_ANALOGWRITE 255
#define PIN_HIGH 3
#define PIN_LOW 2

Además usaremos la librería SoftwareSerial, para hablar con el modulo BlueTooth, mediante los pines digitales 2 y 3:

#include <SoftwareSerial.h>
SoftwareSerial BT1(3, 2); // RX | TX

Definiremos unas variables para contener los valores que leeremos del comando:

int ard_command = 0;
int pin_num = 0;
int pin_value = 0;

El cuerpo principal del loop es muy sencillo, Vamos a empezar recibiendo mensajes de texto:

Contenido solo disponible para suscriptores. ¡Accede al contenido!

      

Y aquí teneís un minivídeo con el resultado del programa

 

 

 

Resumen de la sesión

 

 
    • Hemos presentado el programa ArduDroid. Una aplicación de lo más simpática para manejar vuestros proyectos a través del móvil.
    • Hemos incluido un ejemplo de circuito para manejar desde el móvil.
    • Hemos presentado como complementar la aplicación Android con un programa base que nos proporciona Ardudroid, para manejar nuestros dispositivos.
 
 
 

 

 

 

Para porder realizar consultas a nuestros expertos, tienes que ser suscriptor. Suscribiendote nos ayudas a mantener este proyecto en marcha.

¡ Quiero Suscribirme !

Si ya eres premium y no puedes comentar haz login. Hacer login

(46) Comments

  • Avatar for Charly

    No, los comandos AT funcionan. El problema es que no consigo que la aplicación ArduDroid gobierne el Arduino a través del módulo bluetooth. ¿Podrías ayudarme?

  • Avatar for Charly
    • Ivan Uriarte

    Hola Sergio, tienes problemas al comunicar con el comandos AT, o al recibir de él hacia arduino desde un dispositivo blutooth?

  • Avatar for Charly
    • SERGIO

    Hola buenas. Tengo un módulo bluetooth HC-05, en particular el ZS-040, pero no consigo que arduino responda. ¿Sabéis que puede estar causando el problema?
    Un saludo.

  • Avatar for Charly
    • Ivan Uriarte

    Hola Hugo, de momento que yo sepa, no se puede. Un saludo.

  • Avatar for Charly

    Hay algun dato que nos proporcionoe la distancia del emisor bluetooth, por ejemplo si yo le mando un dato de mi celular que me pudiera decir la distancia a la que esta?, muchas gracias por su atencion.

  • Avatar for Charly
    • Admin

    ¿Que necesitas, Julio?

  • Avatar for Charly
    • Julio cesar

    Kiero q me ayunden xfavor estpy haciendo un sistema de encenddio automotriz por via bluetooth desde un celular

  • Avatar for Charly
    • Ivan Uriarte

    Hola Nomyas, en principio se pueden conectar varios esclavos (los móviles) a un maestro (el HC05), pero creo que dará problemas. Lo que puedes hacer es usar un Arduino Mega y usar 2 puertos series, con un HC-06 en cada uno. De esa forma creo que debería funcionar correctamente. Un saludo.

  • Avatar for Charly

    Hola a todos, tengo una duda, se podría conectar dos móviles al mismo HC-05 a la vez? Tengo en mente un proyecto en el que necesitaría controlar un tanque y que una persona controlará el movimiento y otra la torreta y por eso de experimentar pues me pareció curioso que se pudiera utilizar dos móviles en vez de los típicos mandos o joysticks.
    Un saludo

  • Avatar for Charly
    • Admin

    Israel, EN el propio ejemplo tienes la forma d eleiminar los caracteres indeseados, sin mas que usar parseInt, que los elimina por si mismo

  • Avatar for Charly
    • Israel Mateos

    Hola
    Tengo una pregunta, comentas que Ardudroid envía todos los comandos con una sintaxis sencilla donde todas las ordenes empiezan por * y terminan en #, y si la orden incluye múltiples datos, esto vienen separados por el símbolo | …no entiendo en que parte del código eliminas o filtras esos símbolos no deseados, estoy trabajando en un proyecto donde necesito enviar un valor desde la aplicación y al momento que quiero verla en el monitor serial del Arduino me muestra mi dato enviado pero con esos símbolos ya mencionados. Como puedo eliminarlos o filtrarlos si es que puede?? Gracias..

  • Avatar for Charly
    • Admin

    Hola Juan, no estoy seguro de cuel es tu consulta

  • Avatar for Charly
    • Juan

    Una pregunta soy nuevo en esto y estoy tratando de entender espero me quiten la duda
    En esta parte del codigo:

    char get_char = ‘ ‘; // Para leer BT1
    if (BT1.available())
    { get_char = BT1.read();
    //Serial.println(get_char);
    delay(25);

    if (get_char != START_CMD_CHAR)
    return; // Si no hay comando, vuelta a empezar

    ard_command = BT1.parseInt(); // Leemos la orden
    pin_num = BT1.parseInt(); // Leemos el pin
    pin_value = BT1.parseInt(); // Leemos valor

    supuesta mente cuando doy click o aplasto el botón mando dos datos o tres el cual luego este se guarda en cada una de las variables, pin numero, pin valu y commad

  • Avatar for Charly
    • Ivan Uriarte

    Hola Emiliano, he bajado el programa y compila bien. Si lo has copiado y pegado igual te has dejado sin copiar esas dos funciones. Te recomendamos que descargues directamente el programa en el enlace que hay hacia el final de la página. Un saludo.

  • Avatar for Charly
    • Emiliano

    Buenas noches
    Cuando quiero compilar el programa, me aparecen dos mensajes de error:

    Prog__72_1:69: error: ‘GetLine’ was not declared in this scope
    Prog__72_1:78: error: ‘processDW’ was not declared in this scope

    Cómo lo soluciono?
    Muchas gracias! Saludos

  • Avatar for Charly
    • DCDAMIAN

    Hoy retome el modulo bluetooth HC05. Después de 5 meses logre que funcione gracias al aporte de todos.
    Dejo unos comentarios:
    En un samsung j2 el botón que indica ser el menú, esta en la flecha que vuelve atrás, pulsandolo unos segundos.
    La velocidad del bluetooth, la configure a 38400 baudios y funciona bien.
    Y también tuve el problema de la intensidad de los led. Cambie probé otros led , otra board, otro arduino uno y siempre lo mismo. (Mejoro algo cuando puse una resistencia para cada led). Pero observe que los led 13 y 12 la intensidad es poca pero fija.
    En los led 6 y 9, se puede variar la intensidad y se pueden apagar y encender desde lo botones 6 y 11. Pienso que debe de ser un problema de alguna parte de los programas, bueno seguiré buscando la solución de los leds.
    Gracias.

  • Avatar for Charly

    Hola en Android Cuando no tenes boton fisico de menu mantenes el boton virtual de aplicaciones recientes y se convierte en boton menu.

    Saludos

  • Avatar for Charly
    • Admin

    Hola Damien no puedo hablar de un movil que desconozco, pero hay dos ideas importantes ene esto:
    1 – Puedes usar modulos BT 2.0 o BT 4.0 con Arduino y no todos los telefonos aceptan ambos, asegurate de que el tuyo acepta el que corresponde

    2 – El parpadeo de los led no es un buen indicador, ya que depende del firm del modulo que es cambiante. SI te conectas prueba a enviar y ecibir a ver que pasa

  • Avatar for Charly
    • DCDAMIAN

    Tengo el mismo problema con un Samsung no tiene el botón de menú pero le encontré por ahí en configuraciones BlueTooth y se conecta. Cambia la frecuencia del parpadeo de los led. Pero no logre recibir ni mandar ninguna señal del programa ardudroid al arduino, alguna sugerencia, Gracias.
    Probé con otro celular que si tiene el botón de menú y paso exactamente lo mismo.

  • Avatar for Charly
    • Admin

    Hola Adrian, pues me imagino que tendra algun sistema equivalente para hacer la misma funcion pero no sabria decirte

Para porder realizar consultas a nuestros expertos, tienes que ser suscriptor. Suscribiendote nos ayudas a mantener este proyecto en marcha.

¡ Quiero Suscribirme !

Si ya eres premium y no puedes comentar haz login. Hacer login