Dispositivo Medidor De Temperatura y Humedad



Dispositivo medidor de temperatura y humedad




Proyecto realizado por Ariana González Garzón,  Alejandro Ramírez Prieto y Carlos Rodrigo Rivero.
/*——————————————————————————————————————*


Índice:

1 –  Introducción.

2 –  Materiales usados.

3 –  Funcionamiento.

4 –  Montaje del hardware.

5 –  Software.

6 –  Problemas encontrados.

7 –  Posibles mejoras.



*———————————————————————————————————————-*

1 –  Introducción.


Nuestra práctica consiste en un dispositivo que medirá la temperatura y  humedad y las notificará mediante una pantalla LCD.
Con el fin de llevar a cabo un recopilatorio con los diferentes pares temperatura-humedad los guardaremos en una especie de ‘base de datos online’. Posteriormente este recopilatorio nos servirá para realizar una comparativa entre los diferentes valores a lo largo del año.
2 –  Materiales usados. 
– Placa Arduino Uno (proporcionado por el profesor).
– Modulo pantalla LCD 16×2 + interfaz I2C = 7,19 €
– Soldadura pantalla LCD = 5 
– Ethernet Shield w5100 = 12,09 
– Placa board ZY = 6,85 
– DHT22 sensor = 7,44 
– Cable 10 metros = 2,5 
– Cables hembra = 1 

Presupuesto total : 42,07  

3 –  Funcionamiento.

Al comenzar el programa el sensor de temperatura y humedad DHT22 envía la temperatura y humedad que detecta en el ambiente  y la guarda en las variables ‘temp‘ y ‘hum‘ respectivamente.
Estos valores serán enseñados por pantalla y se actualizarán cada cierto tiempo (dado por la instrucción ‘delay‘).
                             

Por otro lado, hemos querido añadir a nuestro proyecto la funcionalidad de poder visualizar la temperatura y humedad con independencia de la pantalla LCD. Para ello hemos usado el ethernet shield w5100 para poder conectarnos a Internet y conectarnos a una API donde recopilar nuestros datos: la API de ThingSpeak.
API de ThingSpeak:

Su especialidad es trabajar con datos. Es una API abierta para el Internet de las Cosas que permite recopilar, almacenar, analizar, visualizar y actuar sobre la información recogida en sensores (en nuestro caso DHT22) y dispositivos como aplicaciones web y móviles, redes sociales como Twitter… etc.

Funciona con canales por lo que hemos creado un canal en el cual iremos recopilando la información de nuestro sensor a partir de la cual visualizaremos gráficos.








4 –  Montaje del hardware.









5 –  Software.


//LIBRERIAS

//Librerias Sensor
#include <Adafruit_Sensor.h>
#include <DHT.h>;
#include <DHT_U.h>

//Librerias I2C LCD:
#include <LiquidCrystal_I2C.h>
#include <Wire.h>

//Librerias Ethernet 
#include <Ethernet.h>
#include <SPI.h>


LiquidCrystal_I2C lcd(0x27,16,2); // Establecemos la direccion de la LCD en 0x27 (es de 16×2 -> 16 chars por 2 lineas)

//CONSTANTES

#define DHTPIN 5     // Estamos conectados al pin 6(entrada de datos), inicialmente en el 4 pero nos dimos cuenta que lo necesita la placa ethernet » SS for SD CARD»
#define DHTTYPE DHT22   // Seleccionamos el sensor DHT 22  (AM2302)
DHT dht(DHTPIN, DHTTYPE); //// Inicializamos DHT sensor


// Parámetros para la conexión Ethernet local

byte mac[]= { 0xD4, 0x28, 0xB2, 0xFF, 0xA0, 0xA1 }; // Mac address, tiene que ser única en la red local

// Configuracion de ThingSpeak

char thingSpeakAddress[] = «api.thingspeak.com»; // Esta es la dirección del servidor al cual vamos a postear los datos.
String writeAPIKey = «513N7TSBXOCE4N2D»; // Una vez creado un canal necesitamos saber la Key de ese canal y copiarla aquí.
const int updateThingSpeakInterval = 16 * 1000; // Intervalo de tiempo, cada cuanto posteamos en el servidor.

//VARIABLES

float hum;  //Almacena los valores de humedad
float temp; //Almacena los valores de temperatura

long lastConnectionTime = 0;
boolean lastConnected = false;
int failedCounter = 0;

// Iniciamos el Ethernet Shield

EthernetClient client;


void setup()
{
  Serial.begin(9600);
  dht.begin();
  lcd.begin(); //Inicializamos el lcd
  lcd.backlight(); //Abrimos el backlight
  startEthernet(); //Llamamos a la funcion starEthernet
}


void loop()

{
   // Read value from Analog Input Pin 0
  String analogValue0 = String(analogRead(A0), DEC);
  
// Imprimimos por serial lo que nos haya devuelto el servidor.

  if (client.available()){
  char c = client.read();
  Serial.print(c);
  }

// Nos desconectamos de Thingspeak

  if (!client.connected() && lastConnected){
    Serial.println(«… desconectado»);
    Serial.println();
    client.stop();
    }

// Si estamos desconectados del servidor y paso suficiente tiempo, tenemos que volver a subir los nuevos datos.

  if(!client.connected() && (millis() – lastConnectionTime > updateThingSpeakInterval)){
    Leersensores();
    Serial.println();
    updateThingSpeak(«1=»+String(temp, DEC)+»&2=»+String(hum, DEC));
    }
  
  if (failedCounter > 3 ) {
    startEthernet();
    }
    lastConnected = client.connected();
    }


// Función para enviar los datos a el servidor.

void updateThingSpeak(String tsData){
  if (client.connect(thingSpeakAddress, 80)){
    client.print(«POST /update HTTP/1.1n»);
    client.print(«Host: api.thingspeak.comn»);
    client.print(«Connection: closen»);
    client.print(«X-THINGSPEAKAPIKEY: «+writeAPIKey+»n»);
    client.print(«Content-Type: application/x-www-form-urlencodedn»);
    client.print(«Content-Length: «);
    client.print(tsData.length());
    client.print(«nn»);
    client.print(tsData);
    lastConnectionTime = millis();

    if (client.connected()){
      Serial.println(«Conectando a ThingSpeak…»);
      Serial.println();
      failedCounter = 0;
    }
    else
    {
      failedCounter++;
      Serial.println(«Conexion a ThingSpeak fallida («+String(failedCounter, DEC)+»)»);
      Serial.println();
    }
  }

  else{
    failedCounter++;
    Serial.println(«Conexion a ThingSpeak fallida  («+String(failedCounter, DEC)+»)»);
    Serial.println();
    lastConnectionTime = millis();
  }
}

 void startEthernet() {

  client.stop();

  Serial.println(«Conectando Arduino a la red..»);

  Serial.println();

  delay(1000);

// Intenta conectarse por DHCP y si no funciona usa la configuración por default.

   if (Ethernet.begin(mac) == 0)
  {
    Serial.println(«DHCP fallido, resetear Arduino para intentarlo otra vez»);
    Serial.println();
  }
  else
  {
    Serial.println(«Arduino conectado a la red usando DHCP»);
    Serial.println();
  }
  
  delay(1000);
}



// Función para leer los sensores y almacenarlos en las variables globales.

void Leersensores() {


  temp = dht.readTemperature();
  hum = dht.readHumidity();
  Serial.print(» Temp = «);
  Serial.print(temp);
  Serial.print(» C, «);
  Serial.print(» Hum = «);
  Serial.print(hum);
  Serial.println(» %»);
  lcd.setCursor(0,0);
  lcd.print(«Temp: «);
  lcd.print(temp);
  lcd.print(» C»);
  lcd.setCursor(0, 1);
  lcd.print(«Humedad: «);
  lcd.print(hum);
  lcd.print(» %»);
  delay(3000);
}


  
Esto es lo que nos mostrará el serial monitor al subir el código a la placa.





6 – Problemas e inconvenientes que hemos tenido.

Durante el montaje del proyecto nos encontramos con algunos problemas. 

Uno de ellos lo tuvimos con la pantalla LCD que venía con un módulo de interfaz I2C que, en principio, ayuda a regular la potencia de la pantalla y facilita el montaje. Nuestro error fue no darnos cuenta de que teníamos que ajustar el potenciómetro ajustando así el contraste de la LCD y poder ver lo que se imprimía.

Por otro lado, tuvimos la idea de reproducir la salida del DHT22 mediante un altavoz. Para ello compramos un módulo MP3 llamado DF Player Mini Mp3. En principio todo iba bien pero tuvimos problemas con la corriente y se nos fundió. Al haberse dado este problema cerca de la presentación de nuestro proyecto fue imposible conseguir otro módulo por lo que descartamos la idea para este presente proyecto. No descartamos la idea de implementarlo en un futuro.


Añadir también que nos encontramos con ligeros errores a la hora de conectarnos con la base de ThingSpeak, aunque no fueron difíciles de resolver.

Y por último, y no por ello menos importante, tenemos presente el problema de la portabilidad de nuestro proyecto pues somos conscientes de que un dispositivo que mide la temperatura y humedad debe ser más pequeño. 

7 – Mejoras y complementos futuros del proyecto.
Las mejoras que proponemos son las siguientes:

– Reducir el tamaño del cableado y de la placa base con el fin de conseguir que el dispositivo sea portable.
– Sustituir la ethernet shield por una WiFi, pues es más incomodo encontrar un puerto Ethernet al que enchufarlo que conectarlo a una red inalámbrica.
– Encontrar un diseño visual atractivo y eficiente.
– Implementar una voz que lea la temperatura y humedad (similar a SparkFun VoiceBox SHield).



8 – Enlaces de interés.

– Enlace al vídeo de la práctica (hardware): 


https://drive.google.com/open?id=1SzKDf97cDZw3R8NMLXitBUkFs9EEsdUZ



– Enlace al vídeo demostración de la base de datos:


https://drive.google.com/open?id=1K45IgEUYT69d5MhC76-v-kFvdU3s72Zj


– Enlace a la memoria de la práctica: 

https://drive.google.com/open?id=1umZaWUQhtgbnCwlaw6arBmpqFPEq2BYd

– Enlace a presentación:


https://drive.google.com/open?id=1-4bBaUCu5PJEOJy0FCJ4VWs9zC2e7Y8y


También te podría gustar...

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *