Video : Automatizar acciones en el invernadero

Hay varias tareas repetitivas que realizar en el invernadero y en el mantenimiento del sistema acuaponico. Por eso me decidí a realizar un pequeño proyecto en arduino. Con el podre controlar la temperatura y otras cosas.

Yo no soy experto en el tema, pero hasta el momento e podido realizar todo sin grandes problemas.

objetivos del proyecto

– Medir la temperatura y la humedad
– Mostrar la información en una pantalla de LCD de 16×2
– Controlar interruptores (reles)

Materiales necesarios

– Placa arduino uno
– Sensor humedad y temperatura DHT11
– LCD 16×2
– Modulo 4 reles

Conexiones



Código fuente


// Incluimos librería
#include <DHT.h> // para sensor temperatura
#include <LiquidCrystal.h> // para LCD 16x2
//#include  <LiquidCrystal_I2C.h>
 
// Definimos el pin digital donde se conecta el sensor temperatura
#define DHTPIN 2
// Dependiendo del tipo de sensor
#define DHTTYPE DHT11
 
// Inicializamos el sensor DHT11
DHT dht(DHTPIN, DHTTYPE);

//Crear el objeto LCD con los números correspondientes (rs, en, d4, d5, d6, d7)
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
//LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

//Dibujo caracter grado
byte grado[8] =
 {
 0b00001100,
 0b00010010,
 0b00010010,
 0b00001100,
 0b00000000,
 0b00000000,
 0b00000000,
 0b00000000
 };

//iniciamos los relay y asignamos pines
int relay1 = 10;
int relay2 = 11;
int relay3 = 12;
int relay4 = 3;

void setup() {
 
  // Comenzamos el sensor DHT
  dht.begin();
  
   // Inicializar el LCD con el número de  columnas y filas del LCD
  lcd.begin(16, 2);
  lcd.createChar(1, grado);// agregamos el caracter grado 
  
  // Escribimos el Mensaje en el LCD.
  lcd.setCursor(0, 0);
  lcd.print("Iniciando...");
  lcd.setCursor(0, 1);
  lcd.print("Acuaponico.cl");

  // Inicializar el pin digital relays, como salidas
  pinMode(relay1, OUTPUT);   
  pinMode(relay2, OUTPUT);   
  pinMode(relay3, OUTPUT);   
  pinMode(relay4, OUTPUT);

  // Apagamos todos los relays
  digitalWrite(relay1, HIGH); //apagamos el relay
  digitalWrite(relay2, HIGH); //apagamos el relay
  digitalWrite(relay3, HIGH); //apagamos el relay
  digitalWrite(relay4, HIGH); //apagamos el relay
}
 
void loop() {
    // Esperamos 5 segundos entre medidas
  delay(5000);
 
  // Leemos la humedad relativa
  int h = dht.readHumidity();
  // Leemos la temperatura en grados centígrados (por defecto)
  int t = dht.readTemperature();
  // Leemos la temperatura en grados Fahreheit
  float f = dht.readTemperature(true);
 
  // Comprobamos si ha habido algún error en la lectura
  if (isnan(h) || isnan(t) || isnan(f)) {
    //Serial.println("Error obteniendo los datos del sensor DHT11");
    lcd.setCursor(0, 1);
    lcd.print("Error DHT11");
    return;
  }

  // Escribir en LCD humedad y temperatura

  lcd.setCursor(0, 0);
  lcd.print("Humedad: ");
  lcd.print(h);
  lcd.print(" %");

  lcd.setCursor(0, 1);
  lcd.print("Grados : ");
  lcd.print(t);
  lcd.write(1); //Imprimimos nuestro caracter Grados
  lcd.print("C");

  //Relay : 1
  if(t<17){
    digitalWrite(relay1, LOW); //encendemos el relay
  }else{
    digitalWrite(relay1, HIGH); //apagamos el relay
  }
}