viernes, 18 de octubre de 2013

Arduino meets Android, primer ejemplo

¿Qué nos puede ofrecer Arduino junto con Android?



Una de las principales aportaciones que nos da la integración de Arduino con Android es que podemos conseguir proyectos de domótica muy llamativos a la vez que son de muy bajo coste. Android consigue proporcionar una interfaz gráfica para todas las operaciones que puede realizar Arduino. Por ejemplo, en este tutorial vamos a configurar el color de un led RGB desde una aplicación. Toda la comunicación se hará a través de Bluetooth utilizando una librería llamada Amarino. Nos ponemos manos a la obra.

¿Qué necesitamos?


  • Módulo de Bluettoth JY-MCU, utiliza una comunicación serie con Arduino y es por esto por lo que su pin TX se conecta al RX de Arduino y viceversa.
  • Led RGB, que nos servirá para poder representar los colores que se muestran en el seekbar de la aplicación de Android.
  • Resistencias de 330 Ohm para los pines del led RGB.

¿Cómo conectarlos?




El módulo de Bluetooth JY-MCU tiene que estar conectado de esta forma:
  • RX: conectado al pin 1 de Arduino (TX)
  • TX: conectado al pin 0 de Arduino (RX)
  • GND: conectado directamente a GND
  • VCC: conectado directamente a 5V

El Led RGB de esta forma:

  • Pin Red: conectado a una resistencia de 330 Ohm y luego al pin 11
  • Pin VCC: conectado directamente a 5V
  • Pin Blueconectado a una resistencia de 330 Ohm y luego al pin 10
  • Pin Greenconectado a una resistencia de 330 Ohm y luego al pin 9

Vídeo




¿Y nuestro código?


Android

Primero tendremos que agregar este jar (AmarinoLibrary_v0_55.jar) a la carpeta "libs" de nuestro proyecto, puede ser que esta carpeta no esté por lo que tendremos que crearla.

El código de Android se basa en el proyecto que podemos encontrar en este enlace. Ese ejemplo tiene un pequeño bug que se soluciona sustituyendo esta línea de código de la clase MultiColorLamp:
colorIndicator.setBackgroundColor(Color.rgb(redgreenblue));
Por esta otra:
colorIndicator.setBackgroundColor(Color.rgb(255 - red, 255 - green, 255 - blue));
Además para hacer que funcione correctamente hay que setear el DEVICE_ADDRESS con el de nuestro módulo.
private static final String DEVICE_ADDRESS = "XX:XX:XX:XX:XX:XX";
Por último también tendremos que instalar estas dos aplicaciones:

Arduino

Este tutorial se basa en el ejemplo que proporciona la librería de MeetAndroid, simplemente vamos a cambiar dos detalles para que funcione correctamente con nuestro módulo. El código es el siguiente:


#include <MeetAndroid.h>

// Declaramos el objeto de MeetAndroid para establecer la comunicación
MeetAndroid meetAndroid;

// Necesitamos 3 pines PWM para controlar los pines del led RGB
int redLed = 11;   
int greenLed = 10;
int blueLed = 9;

void setup()  
{
  // Para nuestro Bluetooth utilizaremos 9600 baudios 
  Serial.begin(9600); 
  
  // Registra las funciones de callback las cuales se llamarán cuando un evento asociado ocurra
  meetAndroid.registerFunction(red, 'o');
  meetAndroid.registerFunction(green, 'p');  
  meetAndroid.registerFunction(blue, 'q'); 

  // Seteamos todos los pines como salidas
  pinMode(redLed, OUTPUT);
  pinMode(greenLed, OUTPUT);
  pinMode(blueLed, OUTPUT);
  
  // Seteamos todos los pines en HIGH para ver si funcionan correctamente
  digitalWrite(redLed, HIGH);
  digitalWrite(greenLed, HIGH);
  digitalWrite(blueLed, HIGH);

}

void loop()
{
  meetAndroid.receive();  // Necesitamos mantenerlo en loop para recibir eventos
}

/*
 * Cuando se modifique el seekbar de color rojo cambiará el valor del pin rojo
 */
void red(byte flag, byte numOfValues)
{
  analogWrite(redLed, meetAndroid.getInt());
}

/*
 * Cuando se modifique el seekbar de color verde cambiará el valor del pin verde
 */
void green(byte flag, byte numOfValues)
{
  analogWrite(greenLed, meetAndroid.getInt());
}

/*
 * Cuando se modifique el seekbar de color azul cambiará el valor del pin azul
 */
void blue(byte flag, byte numOfValues)
{
  analogWrite(blueLed, meetAndroid.getInt());
}

No hay comentarios:

Publicar un comentario