dissabte, 22 de març del 2014

Control de Relés con Arduino y Android.

Arduino y Android enlazados por Bluetooth para controlar relés.


Un sencillo proyecto cuyo coste puede rondar los 20 € y nos permite control domótico de dispositivos conectados a relés.

Bluetooth permite enlaces por radiofrecuencia de dispositivos en la banda de 2,4 Ghz y teniendo en cuenta la facilidad de uso mediante smartphones, es una tecnologia adecuada para proyectos domóticos.

Proyecto en una protoboard.

El objetivo es controlar 4 relés conectados a un Arduino mediante tecnologia Bluetooth para poder realizar el control desde un teléfono con Bluetooth.

MATERIALES
Los materiales que necesitaremos son los siguientes:
  • Iteaduino o cualquier placa compatible con Arduino UNO
  • Módulo Bluetooth HC - 06

Módulo HC-06
  • Módulo de 4 relés funduino Keyes (podemos utilizar cualquier módulo de relés compatible con Arduino)

EL CIRCUITO:

Conexionado con Fritzing.

Esquema.

Para realizar el circuito, tenemos que tener una serie de consideraciones, en el caso del módulo Bluetooth hay que conectar el pin RXD al pin 2 de Arduino y el TXD del módulo HC-06 al pin 4 de Arduino.
En el esquema se han utilizado 4 relés independientes pero en la placa de relés sólo hay que conectar VCC y GND a los pines 5V y GND de Arduino respectivamente.Tambien los pines de control de la placa de reles IN1,IN2,IN3 y IN4 a los pines 8,9,10 y 11 de Arduino.

Tanto la alimentación de la placa de relés como el módulo HC-06 los conectamos a la alimentación de Arduino, ya que funcionan ambos a 5V DC.(pines 5V y GND).

Una vez realizado en conexionado pasamos a la programación.
Utilizamos la libreria SoftwareSerial.

PROGRAMA
-------------------------------------------------------------------------------------------------
/* Control reles mediante bluetooth
usamos libreria SoftwareSerial
*/
#include <SoftwareSerial.h>
SoftwareSerial Blue(4, 2); 
// RX, TX Blue nom de nuestra funcion y pines digitales donde conectar
// La variable state guarda los valores recibidos por el modulo HC-06
int state = 0;      
int flag = 0;      
void setup() {
    // configuramos pins de salida
    pinMode(8, OUTPUT);
    pinMode(9, OUTPUT);
    pinMode(10, OUTPUT);
    pinMode(11, OUTPUT);
    Blue.begin(9600);
    digitalWrite(8, LOW); // rele 8 off
    digitalWrite(9, LOW); // rele 9 off
    digitalWrite(10, LOW); // rele 10 off
    digitalWrite(11, LOW); // rele 11 off
}
void loop() {
//Leemos valor y guardamos en variable state
    if(Blue.available() > 0){
      state = Blue.read();
      flag=0; //ponemos bandera a 0
      Blue.println(" -------  ON / OFF -------");
    }
   // ----------------------------------------------------------
   // ------------- leds -------------------------------------
   //  si state = 0 rele off
    if (state == '1') {
        digitalWrite(8, LOW);
        if(flag == 0){
          Blue.println("LED 1: off");
          flag = 1;
        }
    }
   //  si state = 1 rele ON
    else if (state == '2') {
        digitalWrite(8, HIGH);
        if(flag == 0){
          Blue.println("LED 1: on");
          flag = 1;
        }
    }
    
 //----------------------------------
   if (state == '3') {
        digitalWrite(9, LOW);
        if(flag == 0){
          Blue.println("LED 2: off");
          flag = 1;
        }
    }
    // state = 4 rele 2 ON
    else if (state == '4') {
        digitalWrite(9, HIGH);
        if(flag == 0){
          Blue.println("LED 2: on");
          flag = 1;
        }
    }
    /// ------------------------
      if (state == '5') {
        digitalWrite(10, LOW);
        if(flag == 0){
          Blue.println("LED 3: off");
          flag = 1;
        }
    }
    //  si state = 6 rele 3 ON
    else if (state == '6') {
        digitalWrite(10, HIGH);
        if(flag == 0){
          Blue.println("LED 3: on");
          flag = 1;
        }
    }
 //--------------------- fi leds --------------------------------------------------------------
   if (state == '7') {
        digitalWrite(11, LOW);
        if(flag == 0){
          Blue.println("LED 4: off");
          flag = 1;
        }
    }
    // si state = 8 rele 4 ON
    else if (state == '8') {
        digitalWrite(11, HIGH);
        if(flag == 0){
          Blue.println("LED 4: on");
          flag = 1;
        }
    }
    //-----------------------------------------------------------------
    //-------------------- TODO OFF ----------------------------
      if (state == '0') {
        digitalWrite(11, LOW);
        digitalWrite(10, LOW);
        digitalWrite(9, LOW);
        digitalWrite(8, LOW);
        if(flag == 0){
          Blue.println("------LEDS : off--------");
          flag = 1;
        }
    }
}

------------------------------------------------------------------------------------
FIN DE PROGRAMA

El programa es una modificación del original publicado en 42bots.com
En el programa Blueterm de nuestro teléfono introduciremos valores numéricos con la siguiente función:

VALOR 1     RELE 1 OFF
VALOR 2     RELE 1 ON
VALOR 3     RELE 2 OFF
VALOR 4     RELE 2 ON
VALOR 5     RELE 3 OFF
VALOR 6     RELE 3 ON
VALOR 7     RELE 4 OFF
VALOR 8     RELE 4 ON
VALOR 0     RELE 1,2,3,4 OFF

Una vez transferido el programa desde Arduino IDE a nuestro Iteduino, pasaremos a instalar el programa Blueterm en nuestro terminal telefónico y lanzaremos la aplicación.
La primera vez tenemos que vincular nuestro terminal al módulo HC-06, este módulo tiene un LED que parpadea hasta que se realiza un vínculo, dejando de parpadear y activándose el LED.
Para vincular los dos dispositivos utilizaremos la clave '1234' que viene por defecto. En la hoja de características del fabricante nos indica mediante comandos AT cómo podemos cambiar el nombre, la velocidad, el passwd etc.del dispositivo.

El programa Blueterm en funcionamiento.

EL SISTEMA EN FUNCIONAMIENTO.
Video Youtube del sistema en marcha:


LINKS:
HC-06 Datasheet: http://www.exp-tech.de/service/datasheet/HC-Serial-Bluetooth-Products.pdf
Blueterm : https://play.google.com/store/apps/details?id=es.pymasde.blueterm&hl=esp
42bots: 42bots.com
Arduino : http://www.arduino.cc
Relés compatibles Arduino: http://www.goshield.es/es/arduino/211-modulo-4-reles-5v.html
ElecFreaks wiki bluetooth: http://www.elecfreaks.com/wiki/index.php?title=Bluetooth_Shield

HANDMATEK DOS1102 Primeras impresiones