Crear App para Arduino con App Inventor

CREAR APP PARA ARDUINO CON APP INVENTOR

(20/02/14)

En este tutorial vamos a crear una App Android con la herramienta App Inventor para controlar un Led RGB conectado a Arduino a través de Bluetooth.

Material

-Arduino Uno Rev 3

-Módulo Bluetooth JY-MCU

-Led RGB

-Dispositivo Android con Bluetooth

-Resistencias: 150 ohmios, 100 ohmios x 2, 10k, 5k6

-Fuente alimentación

¿Qué es 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). A través de web browser se pueden crear apps Andoid de una manera visual y sencilla gracias a un conjunto de herramientas básicas. En App Inventor se empieza diseñando la app a través de un entorno de desarrollo gráfico. Después para programar usa un lenguaje de programación basado en un lenguaje visual a partir de bloques Java (muy parecido a Scratch). Las librerías de estos bloques han sido desarrolladas por el MIT y son de uso libre. En estos bloques encontramos funciones, sentencias y elementos muy comunes en la mayoría de lenguajes de programación. Gracias a esto podemos crear apps Android de una manera rápida y sencilla sin tener muchos conocimientos de Java. 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.

Para empezar a usar App Inventor, solo tenéis que ir a su página web (App Inventor) y registrarse.

 

 

Crear un App para controlar un Led RGB conectado a Arduino

Lo que haremos en este tutorial será crear una app Android con App Inventor para controlar un Led RGB que estará conectado en el Arduino comunicados a través de Bluetooth. Primero de todo crearemos la app con App Inventor explicando su proceso paso a paso. Después haremos el código de Arduino y explicaremos los aspectos más importantes de este.

App Inventor

Cuando creamos un nuevo proyecto en App Inventor, nos saldrá el App Inventor Designer donde construiremos el diseño de nuestra app. En el centro tenemos la visualización de una pantalla de un dispositivo Android donde iremos poniendo todos los componentes que queramos. Estos componentes están en la parte izquierda y tenemos desde botones, etiquetas, sliders, etc… hasta el hardware del dispositivo Android como la cámara, GPS, acelerómetro, sonido, etc. Esto es muy útil ya que tenemos la posibilidad de usar los sensores de nuestro dispositivo Android junto a Arduino para nuestros proyectos. Para poner un componente a la pantalla de visualización, tenemos que arrastrarlo hasta esta. Por último, en la parte derecha de la pantalla tenemos un recuadro donde podremos cambiar las propiedades de los componentes que insertemos en la app tales como el color, nombre, valores…

En esta app hemos puesto un botón que servirá para conectarse al Arduino a través de Bluetooth, unas etiquetas para el título (LED RGB) y el nombre de los colores (RED, GREEN, BLUE), y tres sliders para controlar los tres colores RGB. También pondremos un Cliente Bluetooth para establecer la comunicación Bluetooth. En las propiedades de los sliders, pondremos MinValue 0 y MaxValue 255. También hemos puesto una imagen de icono de la app subiendo una imagen en Media, y colocando el archivo en Icon de las propiedades de la pantalla (Screen). Las demás propiedades de los componentes sirven para cambiar al gusto de cualquiera los colores, medidas y nombres de estos.

Uno vez terminado con el diseño de la app, clicamos en la el botón Blocks en la parte superior derecha de la pantalla para ir al App Inventor Blocks Editor. Aquí es donde programaremos la app en forma de bloques como si se tratase de un puzle. En Viewer tenemos una hoja en blanco donde pondremos los bloques. Estos bloques están en la parte izquierda en el apartado Blocks donde encontraremos los elementos y funciones más comunes en los lenguajes de programación tales como sentencias, funciones lógicas, funciones matemáticas, strings… También habrá los elementos y funciones específicos de los componentes que hemos insertado en la app, que en nuestro caso son Bluetooth, un botón y tres sliders.

 

La programación de nuestra app consta de dos partes:

Bluetooth: La comunicación Bluetooth depende del botón llamado CONECT que hemos puesto. Antes de pulsarlo, si el Bluetooth de nuestro dispositivo Android está listo, la app recogerá todas las conexiones Bluetooth listadas en este. Esto lo hará al principio de abrir la app. Una vez se pulse el botón CONECT nos saldrá este listado donde seleccionaremos el módulo Bluetooth conectado al Arduino. Cuando se conecte haremos que el texto del botón se ponga de color azul para saber que la comunicación Bluetooth está establecida.

 -Sliders: La parte de los tres sliders es la misma para cada uno. Consiste en que cuando haya un cambio de posición en uno de los sliders, primero se comprueba si la comunicación Bluetooth está establecida, y si es así, se envía el valor de la posición de los tres sliders siempre en este mismo orden: primero se envía el valor de Red seguido de una coma, después se envía el valor de Green seguido de otra coma y por último se envía el valor de Blue seguido de un carácter de nueva línea (“\n”).

Por ejemplo:    125   “,”   98   “,”   216   “\n”

Una vez finalizado con los bloques sólo queda poner a prueba nuestra app. Podemos hacerlo desde el emulador de App Inventor o instalando la app directamente en nuestro dispositivo Android. Para esto último tenemos que ir en el menú de la parte superior izquierda del App Inventor donde pone Build para obtener el archivo .apk de la app. Tendremos dos opciones: obtenerlo desde código QR que saldrá en el centro de la pantalla para enfocarlo directamente con la cámara de nuestro dispositivo Android para descargarlo e instalarlo directamente en este o descargar el archivo .apk en nuestro PC para copiarlo en la memoria del dispositivo Android. Sea cual sea la opción que escojamos, tendremos que poner en las opciones de nuestro dispositivo Android Permitir la instalación de aplicaciones de origen desconocido para poder instalar nuestra app. El aspecto de esta será este:

En la siguiente imagen hemos puesto un enlace donde podréis descargaros el archivo .apk de la app para instalarla en vuestros dispositivos Android. También hay una archivo .aia que es el proyecto App Inventor de la app para poder importarlo a vuestra cuenta App Inventor desde el menú Project, Import Project (.aia) from my computer …

 

Arduino

En el Arduino habrá conectado un Led RGB y un módulo Bluetooth JY-MCU (tanto el HC-06 como el HC-05 son validos). Si queréis saber más sobre estos módulos Bluetooth conectados a Arduino visitad el tutorial que hicimos sobre este tema en el siguiente enlace (Arduino + Bluetooth).

El diodo Led RGB tiene un cátodo y tres ánodos (uno para cada color). Los colores son controlados a través de PWM. En su datasheet comprobamos que los voltajes de cada color a una intensidad de 20mA son los siguientes: Red 2 V, Green 3,2 V y Blue 3,2V. Sabiendo esto juntamente con que el voltaje de salida máximo de los pins del Arduino es de 5V podemos calcular las resistencias de cada color aplicando la ley de Ohm.

Podemos poner resistencias de 100 ohmios en vez de 90 ohmios ya que estas últimas son poco comunes, el resultado final no influirá mucho ya que además hay que contar con la tolerancia de la resistencia.

Montaje

-Ajuntar las masas del Arduino y de la fuente de alimentación.

-Con las resistencias 5K6 y 10K creamos un divisor de tensión en la salida del pin 11 del Arduino para limitar el voltaje a 3,3V que es el voltaje que soporta el pin RX del módulo Bluetooth ya que la salidas del Arduino son de 5V.

-Un consejo: desconectar el cable USB del Arduino cuando no se use la comunicación serie porque pueden ocurrir fallos. Alimentar el Arduino con una fuente de alimentación a través del pin Vin o con el conector jack.

Código

Leer varios valores enteros en un String

Cuando se envían los valores de los sliders a través de Bluetooth hacia el Arduino, se envían los tres valores a la vez en un mismo String. Para almacenar cada uno de estos valores en una variable usaremos la función Serial.parseInt() que retorna el primer número entero hasta que encuentra un carácter que no sea un entero. Como en la app hemos programado que los valores de los sliders estén separados por una coma y finaliza con un carácter de nueva línea, esta función nos será muy útil.

Si por ejemplo el Arduino recibe este String en su buffer:              235 , 45 , 124 ‘\n’

Llamamos la función Serial.parseInt() y leerá solo el valor entero 235

Si volvemos a llamar la función, lo siguiente que leerá será 45

Y si la volvemos a llamar por tercera vez, leerá el último valor entero 124

    //Cuando haya datos disponibles
    while (BT.available()>0)
    {
        int red = BT.parseInt(); //Leemos el primer valor entero (Red) y lo almacenamos en la variable

        int green = BT.parseInt(); //Leemos el segundo valor entero (Green) y lo almacenamos en la variable

        int blue = BT.parseInt(); //Leemos el último valor entero (Blue) y lo almacenamos en la variable

Código completo

/*
  www.diymakers.es
  by A.García
  Crear App para Arduino con App Inventor
  Tutorial en: http://diymakers.es/crear-app-para-arduino-con-app-inventor/
*/

#include <SoftwareSerial.h> //Librería que permite establecer comunicación serie en otros pins

//Aquí conectamos los pins RXD,TDX del módulo Bluetooth.
SoftwareSerial BT(10,11); //10 RX, 11 TX.

int ledred=3; //Pin LED Red
int ledgreen=5;//Pin LED Green
int ledblue=6; //Pin LED Blue

void setup()
{

  BT.begin(9600);  //Velocidad del puerto del módulo Bluetooth

  pinMode(ledred,OUTPUT);
  pinMode(ledgreen,OUTPUT);
  pinMode(ledblue,OUTPUT);
}

void loop()
{
    //Cuando haya datos disponibles
    while (BT.available()>0)
    {
        int red = BT.parseInt(); //Leemos el primer valor entero (Red) y lo almacenamos en la variable

        int green = BT.parseInt(); //Leemos el segundo valor entero (Green) y lo almacenamos en la variable

        int blue = BT.parseInt(); //Leemos el último valor entero (Blue) y lo almacenamos en la variable

        //Cuando lea el carácter fin de línea ('\n') quiere decir que ha finalizado el envío de los tres valores
        if (BT.read() == '\n')
        {
          //Enviamos los valores de los tres colores al LED RGB através de PWM
          analogWrite(ledred,red);
          analogWrite(ledgreen,green);
          analogWrite(ledblue,blue);
        }
  }
}

67 thoughts on “Crear App para Arduino con App Inventor

  • Pingback: Crear App para Arduino con App Inventor - DIYMa...

  • Pingback: Crear App para Arduino con App Inventor | tecno...

  • Pingback: Crear App para Arduino con App Inventor | eduTI...

  • Avatar

    JORGE EDUARDO HERNANDEZ

    hola , sera que me pueden aclarar una duda soy un principiante y quisiera saber como podría conectar mas leds y un motor

    Reply
    • DIYMakers

      DIYMakers Post author

      Hola Jorge
      Podrías hacerlo poniendo más botones y slidders en la app que interactuen con las salidas del Arduino. Del mismo modo que se hace en el tutorial pero ampliado. Con un slidder podrías controlar la velocidad del motor por ejemplo.
      Un saludo

      Reply
      • Avatar

        JORGE EDUARDO HERNANDEZ

        gracias pero como haría para controlar los pines del arduino para que se mueva el motor y después los leds o viceversa o no hay ningún problema

        Reply
  • Avatar

    laura rodriguez

    hola, conecte un modulo th-06 y aparece error 507. unable to coneccet is the device turned on ? la pregunta es tengo que configurar el modulo primero o cual sera el problema gracias

    Reply
  • Avatar

    laura rodriguez

    me sale la lista de los dispositivos pero en el momento de seleccionar el modulo se retrocede y aparece ese mensaje pero no me pide contraseña (elmodulo) sera que tengo que enviarsela asi no me la pida o el modulo no es compatible con mi celular (estoy usando el emulador por wifi) gracias

    Reply
    • Avatar

      Mariángeles Glavina

      antes olvida al módulo de la lista de dispositivos bluetooth conocidos.
      Luego vuelve a buscar todos los dispositivos bluetooth que se encuentran a tu alrededor. Selecciona, te pedirá contraseña 1234. Y tendría que funcionar

      Reply
  • Avatar

    Verzza

    Me anduvo todo perfecto! Este es SIN DUDAS EL MEJOR tutorial que he visto sobre este tema. UN MILLON DE GRACIAS!!!!

    Reply
  • Avatar

    alexander

    amigo estoy interesado hacer algo parecido pero con mas leds y deseo controlar encedido /apagado incrementar o dismunir intensidad de voltaje y el tiempo que dure encedido pero no tengo idea como hacer la programacion de la app con una interfaz mas profesional y la programacion del arduino tengo la misma placa que la tuya si tienes algun tutorial o esquemas de circuitos similares a lo que busco te agradeceria mucho

    Reply
    • DIYMakers

      DIYMakers Post author

      Si quieres hacer una aap más profesional, tendrás que crearla a través de java. Con appInventor solo puedes hacer apps sencillas como esta.

      Reply
      • Avatar

        alexander

        si amigo eso es lo que andaba viendo usare android estudio otra cosa como podria programar el arduino que deberia usar para controlar el encendido y apagado y el tiempo que dure prendido elq tu usas sirve parar controlar la intensidad de voltaje es muy bueno pero mi proyecto de tesis se tratara de eso estoy algo desorientando si me puedes dar una idea que usar para instalar lo que me hace falta

        Reply
  • Avatar

    alexander

    amigo una pregunta si deseo por casualidad bajar la intensidad de los led con ese codigo sirve para cualquier led o solo para puro rgb??

    Reply
    • DIYMakers

      DIYMakers Post author

      Puedes controlar lo que quieras con este código. Si en vez de poner un led RGB pones tres leds a las 3 salidas que controlan el led RGB, controlaras la intensidad luminica de los 3 leds. Si solo quieres un led, solo tienes que usar un slidder.

      Reply
      • Avatar

        alexander

        buena amigo justo lo que necesitaba una cosa funcionaria se trabajara con modulos de rele y usando bombillos el codigo cambia o es el mismo????

        Reply
          • DIYMakers

            DIYMakers Post author

            En la app tienes que poner dos botones que envíen un carácter cada uno por ejemplo. En Arduino, depende del carácter que reciba, escribes en una salida digital un 1 o u 0 para encender/apagar la bombilla.

  • Avatar

    alexander

    buenas amigo una pregunta como haces para pasar el programa de arduino al pic me da error al momento de pasarlo nose xq si tienes una guia de los pasos a seguir que programador hay que usar y como deberia conectarlo seria bueno tengo la version arduino ide 1.0.6 mi programa funciona desde el ide pero alimentado afuera el bluetooh no enciende muchas gracias

    Reply
  • Avatar

    Jairo Ramírez Ávila

    Se podría conectar por arduino pero por USB, en vez de por el módulo bluetooth, tengo un cable USB-OTG.

    Reply
  • Avatar

    alex

    hola buen dia, tengo una duda, si quisiera controlar otro led rgb aparte con otros sliders, como podria saber que valores van a cada slider?, te felicito por tu aporte

    Reply
    • Avatar

      Emanuel Betancur Villamil

      Yo lo estoy haciendo con servos, es solo configurar los Slider de 0 a 180, y aplicar casi la misma programación, pero llamando los servos, y agregándole los grados que te llegue. Pero ten cuidado que aveces a alguno de los servos como los organice no le llega el primer numero y se reinicia ala posición anterior

      Reply
  • Avatar

    Juan Peralta

    Hola como andas? me gustaria hacer un bucle con tiempo, por ej 5s para hacer una funcion random para ir cambiando los colores solos, del codigo del arduino creo que no hay que modificar nada, pero en la app de android nose como hacer ese bucle que que vaya cambiando cada 5s en los colores que yo quiera.. me podrias dar una mano? Gracias

    Reply
  • Avatar

    Pilar Nunez

    Hola amigo.
    Soy un poco nueva en esta materia. Quiero hacer un app que me permita controlar el led rgb pero no con sliders, sino seleccionando desde una paleta de colores que coloque en un canvas. Logre seleccionar el color pixel pero no tengo idea de como se enviaría esto por BT. Coloque los siguientes bloques: «If bluetooth is available, then call bluetooth client, send text, round, canvas background color». Podrias ayudarme?

    Reply
  • Avatar

    David

    Hola amigo. Genial el tutorial, quería saber como hago para controlar la velocidad de dos motores con el slider del app inventor???

    Reply
  • Avatar

    juanjo

    hola soy nuevo en esto hice este tuto y me salio perfecto pero da muy poca luz con un led como podría ponerle mas leds? un saludo gracias

    Reply
  • Avatar

    Ingrid

    Hola, Como puedo hacer para mostrar en la app un mapa, esta en tiempo real me va a mostrar en la app si hay algun puesto libre, en la app alumbraria un bombillo verde para saber si esta desocupado y rojo para saber si esta ocupado.

    Reply
  • Avatar

    limon

    HOla espero pueda contestar mi pregunta quiero controlar con un slider los otros 3 sliders para que esten sicronizados gracias

    Reply
    • Avatar

      Isaias

      En el App Inventor agregale a la aplicación otro slider y configuralo asi:

      when [SliderAgregado] PositionChanged]
      do set [RedSlider] [ThumbPosition] to [SliderAgregado] [ThumbPosition]
      set [GreenSlider] [ThumbPosition] to [SliderAgregad]o [ThumbPosition]
      set [BlueSlider] [ThumbPosition] to [SliderAgregado] [ThumbPosition]

      y eso es todo, no tienes que hacer nada en Blocks

      Reply
  • Avatar

    Germán Lothar Robladillo Salva

    Amigo gracias por el post…
    Te comento que tengo el siguiente problema.
    Cuando le hago click en conectar, solo algunas veces conecta… He tratado de apagar y prender todo y nada. Luego intento instalar el apk y a veces funciona y a veces no.
    Sabes que podria ser el problema?

    Gracias,

    Reply
  • Avatar

    David Ruiz

    Hola que tal, tengo una duda, hice una app usando tu misma «programación», pero en el botón de conectar le puse uno personalizado (una imagen que dice: conecter)… mi duda es esta ¿se puede hacer que cuando se conecte al módulo cambie esa imagen por otra que hice que dice conectado? lo he intentado cambiando algunas ordenes pero no le entiendo muy bien

    Reply
  • Avatar

    Emanuel Betancur Villamil

    Tengo un problema, hice lo mismo pero con dos servo y sucede que al servo que le corresponde el Slider 1, le llegan los datos pero después de moverse se redirige a la posicion 0 o una aleatoria en algunos casos, a que se debe esto ?

    Reply
  • Avatar

    Adrian

    hola muy bueno, pero porque a mi en la parte de hacer la app en la parte de block, no me aparece el block «conectar elements a», lo busque y no esta y sin embargo descargo tu archivo y alli si aparece el bloque en el menu.

    Reply
  • Avatar

    Oliver

    Hola que tal tengo un pequeño problema utilice el programa para controlar la intensidad de un led y funciona bien, pero si dejo de mover el slider se apaga el led a que se debe?

    Reply
  • Avatar

    Juan

    buenas. quisiera saber como hago para usar el puerto usb de mi tablet como interface de control de mi arduino. sin tener que recurrir a un modulo bluetooth

    Reply
  • Avatar

    Ricard

    Hola que tal, estoy creando una aplicación (soy nuevo en esto) para controlar una tira de leds de un solo color (blanco) de 12V y quiero poder subir y bajar la intensidad de la tira de leds con un slider con el modulo bluetooth H05.
    Me surgen unas dudas al respecto que agradeceria si me pueden ayudar.
    La primera duda es si yo quiero tener 1 solo SLIDER que lineas debería tener en el programa, porque por lo que veo aquí cada slider esta comprobando el estado de los otros tres y estoy un poco confundido..
    Mi otra pregunta es si la tira es de 12V y calculo unos 3A la puedo conectar directamente al arduino?
    Gracias de antemano

    Reply
  • Avatar

    Bruno Garcia

    Hola, hice una aplicacion pero con varias pantallas, y al cambiar de pantalla falla la comunicacion con el bluetooth. Sabes como corregir esto?

    Reply
  • Avatar

    César

    Hola DIYMakers, fantástico post. Solo indicarte que entiendo que no debe haber problemas con la comunicación serie por cable USB (no hace falta desconectar), puesto que por ello precisamente has empleado softwareserial, para emular el puerto serie sin «pisar» al puerto HW en los pines 0 y 1 que utiliza la comunicación con el ordenador por USB.
    Saludos

    Reply
  • Avatar

    zuriel

    todo funciona perfecto a exepcion del led rojo siempre esta encendido un poco y no sube ni se apaga, ya probé todos los pines pwm con ese color y es lo mismo, por que sera?

    Reply
  • Avatar

    Maty

    Hola, como hago para invertir el segnal de salida con arduino xk tengo conectado una tira de leds con anodo comun y no entiendo como se hace 🙁
    Podes esceibir el codigo pero para anodo comun?

    Reply

Deja un comentario