jueves, 17 de abril de 2014

Proyecto Arduino-Android: Temperatura y Humedad

En este proyecto, el objetivo es medir la temperatura y la humedad relatica utilizando arduino y mostrar los resultados en un dispositivo android. 

Para medir la temperatura y la humedad relativa utilizo el módulo DHT-11 y para la conexión con el dispositivo Android utilizo el módulo HC-06

Para la programación de mi placa Arduino UNO utilizaré el IDE de Arduino y para programar el dispositivo android utilizaré App Inventor 2.

El esquema que voy a utilizar es el siguiente:


Nota: el módulo DHT11 que utilizo dispone únicamente de 3 pins, VCC-Data-GND.
Las conexiones son sencillas: Los pines de alimentación (VCC) de los módulos HC-06 y DHT-11 se conectan a los pines 3 y 7 de Arduino respectivamente. Los pines TxD y RxD del HC-06 se conectan a los pines 0 y 1 (RxD y TxT) de Arduino. El pin OUT del DHT-11 se conecta al pin 6 de Arduino

El código de Arduino es el siguiente:

//Añadimos la libreria con la cual trabaja nuestro sensor de temperatura/humedad
#include "DHT.h" 
//Definimos el pin 3 de arduino para alimentar el módulo Bluetooth HC-06
#define PinVccHC06 3 
//Definimos el pin 7 de arduino para alimentar el módulo de Temperatura DHT-11
#define PinVccDHT11 7 
//Definimos el pin 6 de ardunino para conectar el pin OUT del módulo DHT
#define PinOutDHT 6
#define TypeDHT DHT11 //Definimos el tipo de sensor de temperatura
//Configura el pin con el que trabajamos y el tipo de sensor
DHT dht(PinOutDHT, TypeDHT); 

float h,t; //variables de humedad y temperatura
char dato;
String readString;

void setup(){
  //por defecto, el módulo HC-06 viene configurado 9600 N 8 1
  Serial.begin(9600); 
  pinMode(13,OUTPUT);
  pinMode(PinVccHC06,OUTPUT);
  pinMode(PinVccDHT11,OUTPUT);
  //Alimentamos el módulo HC-06 a 0v
  digitalWrite(PinVccHC06,LOW); 
  //Alimentamos el módulo DHT-11 a 0v
  digitalWrite(PinVccDHT11,LOW); 
  digitalWrite(13,HIGH);
  delay(1000);
  //Activa los sensores
  digitalWrite(13,LOW);
  //Alimentamos el módulo HC-06 a 5v
  digitalWrite(PinVccHC06,HIGH);
  //Alimentamos el módulo DHT-11 a 5v 
  digitalWrite(PinVccDHT11,HIGH); 
  delay(1000);
  dht.begin(); //Inicializamos el módulo DHT
}
//Antes de ejecutar el programa, hay que vincular el dispositivo android con el módulo de bluetooth HC-06
//La clave por defecto del módulo HC-06 es 1234

void loop(){
  //Comprobamos que los valores de t y h son´números. Si es un error enviamos un código de error
  LeerDato();
  if (readString.length() > 0){
    if (readString == "Temp"){
      EnviarTemperatura();}
    if (readString == "Hum"){
      EnviarHumedad();}     
  }
}

void LeerDato(){
  readString ="";
  while(Serial.available()) {
    delay(10);
    if (Serial.available() > 0) { //¿Hay datos en el buffer?
      dato = Serial.read(); //Lee el dato
      readString += dato; //Lo almacena en readString
    }
  }
}

void EnviarTemperatura(){
  t = dht.readTemperature(); //Lee la temperatura
  if (isnan(t)){ //Comprueba que el dato es un número
    Serial.print("Error");
  } else {
    Serial.print(t); //Envía el dato por el puerto serie
  }
}

void EnviarHumedad()
{
  h = dht.readHumidity(); //Lee la humedad
  if (isnan(h)){ //Comprueba que el dato es un número
    Serial.print("Error");
  } else {
    Serial.print(h); //Envía el dato por el puerto serie
  }
}

De forma resumida, el programa realiza las siguientes tareas:
  1. Carga la librería para programar el sensor de temperatura.
  2. Define en que pins y que modelo de sensor de temperatura vamos a utilizar
  3. En setup inicializamos tanto el puerto serie que se comunicará con el sensor bluetooth como el sensor de temperatura. Además, alimentamos ambos módulos.
  4. En loop básicamente llamamos al procedimiento de leer un dato por el puerto serie. Si la lectura es correcta comprobamos si nos solicitan la temperatura o la humedad, realizamos la medición  y enviamos el dato por el puerto serie.
El diseño de la aplicación es el siguiente:


El código utilizado es el siguiente:

Variables utilizadas:

Nota: MAC es la dirección de mi módulo bluetooth

Inicializamos:

Conexión Bluettooth:


Lectura de los datos (TimeInterval clock 1 : 1000):


La parte más complicada de entender es seguramente la lectura de los datos. Utilizo la variable Enviar para saber cuando debo enviar la orden de lectura de la temperatura o la humedad y cuando debo esperar a recibir la lectura de dichos datos enviada por la placa arduino. Por otra parte, la variable T la utilizo para alternar la lectura de la temperatura y de la humedad.

Recepción del Texto enviado por Arduino:


Desconexión del módulo Bluetooth:


Salir y cerrar el programa:


Para más información sobre programación en app inventor puedes consultar mi blog appinventoramuete. En la entrada Cliente Bluetooth podrás aprender a utilizar este componente.

Descargas:

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.