// REQUIRES the following Arduino libraries:
// - DHT Sensor Library: https://github.com/adafruit/DHT-sensor-library
// - Adafruit Unified Sensor Lib: https://github.com/adafruit/Adafruit_Sensor
// Proyecto por Profesor Ramiro Lopera
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
#define DHTPIN A0 // Digital pin connected to the DHT sensor
// Feather HUZZAH ESP8266 note: use pins 3, 4, 5, 12, 13 or 14 --
// Pin 15 can work but DHT must be disconnected during program upload.
// Uncomment whatever type you're using!
//#define DHTTYPE DHT11 // DHT 11
#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
DHT dhtPlanta1(DHTPIN, DHTTYPE);
// declaro las variables de los LED a usar para el semáforo de Humedad
int H_bajo = 10;
int H_medio = 9;
int H_alto = 8;
// declaro las variables de los LED a usar para el semáforo de Temperatura
int T_bajo = 4;
int T_medio = 3;
int T_alto = 2;
#define I2C_ADDR 0x27
#define LCD_COLUMNS 16
#define LCD_LINES 2
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
byte gradosC[] = {B01110, B01010, B01010, B01110, B00000, B00000, B00000, B00000};
byte Temp[] = {B00100, B01010, B01010, B01010, B01010, B11111, B11111, B01110};
byte Hum[] = {B00100, B00100, B01010, B01010, B10001, B10001, B10001, B01110};
byte DatoBaja[]= {B00000, B00000, B00000, B00000, B00001, B00011, B00111, B01111};
byte DatoMedia[]={B00000, B00000, B00001, B00011, B00011, B00111, B01111, B11111};
byte DatoAlta[]= {B00001, B00001, B00011, B00011, B00111, B00111, B01111, B11111};
void setup() {
// inicializa la pantalla LCD de 16x2
lcd.init();
lcd.noBacklight();
lcd.createChar(0, gradosC);
lcd.createChar(1, Temp);
lcd.createChar(2, Hum);
lcd.createChar(3, DatoBaja);
lcd.createChar(4, DatoMedia);
lcd.createChar(5, DatoAlta);
// inicializa el puerto serial
Serial.begin(9600);
Serial.println(F(" PUERTO SERIAL INICIADO PARA DHT11"));
// inicializa el sensor DHT
dhtPlanta1.begin();
// genero la cabecera del archivo CSV
Serial.println("Máquina,Humedad,Temp_Celsius,TempF,Estado_Temp,Estado_Hum,");
// declaro los pines de los LED como tipo SALIDA
pinMode(H_bajo, OUTPUT);
pinMode(H_medio, OUTPUT);
pinMode(H_alto, OUTPUT);
pinMode(T_bajo, OUTPUT);
pinMode(T_medio, OUTPUT);
pinMode(T_alto, OUTPUT);
}
void loop() {
// activo la captura de el sensor DHT
int HumedadPlanta1 = dhtPlanta1.readHumidity();
float tempPlanta1 = dhtPlanta1.readTemperature();
float tempPlanta1F = dhtPlanta1.readTemperature(true);
// generamos una función aleatoria
HumedadPlanta1 = random(1, 100);
tempPlanta1 = random(15, 45);
tempPlanta1F = random(50, 150);
lcd.setCursor(0, 0);
lcd.write(1);
lcd.print(tempPlanta1);
lcd.setCursor(6, 0);
lcd.write(0);
lcd.print("C");
lcd.setCursor(10, 0);
// lcd.print("H:");
lcd.write(2);
lcd.print(HumedadPlanta1);
lcd.print("%");
Serial.print("'Mq 1',");
Serial.print(HumedadPlanta1); Serial.print("%,");
Serial.print(tempPlanta1); Serial.print(",");
Serial.print(tempPlanta1F); Serial.print(",");
// Activa el led de acuerdo al cambio de estado de la Temperatura
if (tempPlanta1 < 25)
{
// cuando temperatura esta en baja
digitalWrite(T_bajo, HIGH);
Serial.print("Bajo,");
lcd.setCursor(0, 1);
lcd.print("Baja ");
lcd.write(3);
}
else {
digitalWrite(T_bajo, LOW);
}
// Activa el led de acuerdo al cambio de estado de la Temperatura
if (tempPlanta1 >= 25 && tempPlanta1 <= 30)
{
digitalWrite(T_medio, HIGH);
Serial.print("Medio,");
lcd.setCursor(0, 1);
lcd.print("Media");
lcd.write(4);
}
else {
digitalWrite(T_medio, LOW);
}
// Activa el led de acuerdo al cambio de estado de la Temperatura
if (tempPlanta1 > 30)
{
// cuando temperatura esta en alto
digitalWrite(T_alto, HIGH);
Serial.print("Alto,");
lcd.setCursor(0, 1);
lcd.print("Alta ");
lcd.write(5);
}
else {
digitalWrite(T_alto, LOW);
}
// Activa el led de acuerdo al cambio de estado de la Humedad
if (HumedadPlanta1 < 60)
{
// cuando Humedad esta en baja
digitalWrite(H_bajo, HIGH);
Serial.print("Bajo,");
lcd.setCursor(10, 1);
lcd.print("Baja ");
lcd.write(3);
}
else {
digitalWrite(H_bajo, LOW);
}
// Activa el led de acuerdo al cambio de estado de la Humedad
if (HumedadPlanta1 >= 60 && HumedadPlanta1 <= 80)
{
digitalWrite(H_medio, HIGH);
Serial.print("Medio,");
lcd.setCursor(10, 1);
lcd.print("Media");
lcd.write(4);
}
else {
digitalWrite(H_medio, LOW);
}
// Activa el led de acuerdo al cambio de estado de la Humedad
if (HumedadPlanta1 > 80)
{
// cuando Humedad esta en alta
digitalWrite(H_alto, HIGH);
Serial.print("Alto,");
lcd.setCursor(10, 1);
lcd.print("Alta ");
lcd.write(5);
}
else {
digitalWrite(H_alto, LOW);
}
Serial.println("");
delay(1000);
lcd.clear();
}