/*Continuación del proyecto VI
Hemos añadido un sensor de temperatura y de humedad ambiental.
En el archivo funciones.h hemos añadido una nueva función, para el cálculo
de los valores medios de dicho sensor.Tanto para humedad ambiente como temperatura.
//Este proyecto aún está incompleto.
//Sólo he comentado lo que acabamos de añadir.
*/
//Librería para controlar la pantalla lcd_I2C.
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
#include "funciones.h"
//En esta simulación usamos un potenciómetro haciendo las veces de higrómetro.
#define pinHigro A0
//Añadimos el pin para controlar el sensor de luminosidad.
#define pinLuz A1
int contador = 500;
float referenciaH, referenciaL, referenciaT, referenciaHu;
LiquidCrystal_I2C lcd(0x27, 20, 4);
#define pinDHT 2
DHT sensorDHT(pinDHT, DHT22); //En mi caso el modelo de sensor es el DHT22.
#define r 3
#define g 5
#define b 6
void setup()
{
sensorDHT.begin();
Serial.begin(9600);
pinMode(pinHigro, INPUT);
pinMode(pinLuz, INPUT);
pinMode(r, OUTPUT);
pinMode(g, OUTPUT);
pinMode(b, OUTPUT);
referenciaH = media(pinHigro, contador);
referenciaL = media(pinLuz, contador);
//Nuevos valores de referencia para los valores de temperatura/humedad ambientes.
referenciaT = DHT11MediaT(sensorDHT, contador);
referenciaHu = DHT11MediaHu(sensorDHT, contador);
lcd.init();
lcd.backlight();
}
void loop()
{
//Variables que almacenarán las lecturas en tiempo real.
int h, l, hu, t;
h = map(analogRead(pinHigro),1023,0, 0, 100);
l = map(analogRead(pinLuz), 1023,0,0,100);
//Humedad ambiental.
hu = sensorDHT.readHumidity();
//Temperatura ambiental.
t = sensorDHT.readTemperature();
//Mostramos la información sobre los valores de humedad a través de la pantalla.
lcd.clear();
lcd.setCursor(0,0);
lcd.print("H:");
lcd.print(h);
lcd.print("[%]");
//lcd.setCursor(0,1);
if(h < referenciaH)
{
lcd.print(" < ref.");
analogWrite(r,255);
analogWrite(g,0);
analogWrite(b,0);
}
else if(h > referenciaH)
{
lcd.print(" > ref.");
analogWrite(r,0);
analogWrite(g,255);
analogWrite(b,0);
}
else
{
lcd.print(" = ref.");
analogWrite(r,0);
analogWrite(g,0);
analogWrite(b,255);
}
//Mostramos información sobre los valores de luminosidad también en la pantalla.
lcd.setCursor(0,1);
lcd.print("L:");
lcd.print(l);
lcd.print("[%]");
if(l < referenciaL)
{
lcd.print(" < ref.");
analogWrite(r,255);
analogWrite(g,0);
analogWrite(b,0);
}
else if(l > referenciaL)
{
lcd.print(" > ref.");
analogWrite(r,0);
analogWrite(g,255);
analogWrite(b,0);
}
else
{
lcd.print(" = ref.");
analogWrite(r,0);
analogWrite(g,0);
analogWrite(b,255);
}
lcd.setCursor(0,2);
lcd.print("Hu:");
lcd.print(hu);
lcd.print("[%]");
if(hu < referenciaHu)
{
lcd.print(" < ref.");
analogWrite(r,255);
analogWrite(g,0);
analogWrite(b,0);
}
else if(hu > referenciaHu)
{
lcd.print(" > ref.");
analogWrite(r,0);
analogWrite(g,255);
analogWrite(b,0);
}
else
{
lcd.print(" = ref.");
analogWrite(r,0);
analogWrite(g,0);
analogWrite(b,255);
}
lcd.setCursor(0,3);
lcd.print("T:");
lcd.print(t);
lcd.print("[C]");
if(t < referenciaT)
{
lcd.print(" < ref.");
analogWrite(r,255);
analogWrite(g,0);
analogWrite(b,0);
}
else if(t > referenciaT)
{
lcd.print(" > ref.");
analogWrite(r,0);
analogWrite(g,255);
analogWrite(b,0);
}
else
{
lcd.print(" = ref.");
analogWrite(r,0);
analogWrite(g,0);
analogWrite(b,255);
}
delay(1000);
}