La idea principal es automatizar un invernadero con arduino, con el que vamos a controlar:
- Temperatura y humedad del ambiente (sensor DHT11)
- Humedad de la tierra (sensor casero)
- Iluminación (LDR)
- Riego (humidificador)
- Nivel del agua del riego (sensor de nivel del agua arduino)
- Visualización de los valores (pantalla lcd )
- Ventilación (ventilador)
- Alerta de riesgo (zumbador)
Primero tenemos que planificar nuestro tiempo y vamos a usar una herramienta llamada Gantt Project
Con este dispositivo vamos a visualizar los valores de los sensores en tiempo real, es una herramienta muy útil porque podemos ver los valores ya convertidos en grados, estados y porcentajes y trabaja con un voltaje muy bajo 5V.
Pero para optimizar mas el tiempo vamos a usar el interfaz I2C que se conecta en la parte trasera de la pantalla así nos evitamos de conectar todos los pines de la lcd es muy fácil de conectar ya que solo lleva 4 cables que se conectan así:
-rojo a VCC
-negro a GND
-SDA del arduino
-SCL del arduino
Lo importante a tener en cuenta es incluir la libreria del IDE de arduino Wire y descargar la LiquidCristal que lo puedes hacer aqui, debes de tener en cuenta las dimensiones de la pantalla para que funcione. Algo que intente hacer el probar el varias versiones de arduino, pero solo funciono con la 1.0.5
Un ejemplo que te puede ayudar para empezar a configurar tu pantalla es el sgt:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);
void setup() {
// Inicializar el LCD
lcd.init();
//Encender la luz de fondo.
lcd.backlight();
// Escribimos el Mensaje en el LCD.
lcd.print("Hola Mundo");
}
void loop() {
// Ubicamos el cursor en la primera posición(columna:0) de la segunda línea(fila:1)
lcd.setCursor(0, 1);
// Escribimos el número de segundos trascurridos
lcd.print(millis()/1000);
lcd.print(" Segundos");
delay(100);
}
Sensor de humedad y temperatura
El sensor DHT11 consigue medir la temperatura y humedad del ambiente recibiendo la información únicamente a través del pin digital 2. Es capaz de leer un porcentaje de humedad relativa de entre el 20 y el 90% con un error de +-5%. Ademas, lee las temperaturas entre los 0 y los 50ºC. Necesita una alimentación de entre 3.3 y 5V de continua
En cuanto a sus conexiones:
- + a VCC
- - a GND
- out salida del arduino
Para poder programar el sensor DHT11 en arduino necesitamos una libreria que implementa la comunicaion con el dispositivo. Esta libreria esta disponible en la pagina oficial de arduino o puedes pinchar aquí. Esta libreria esta disponible para incorporarla e nuestro IDE de arduino, descomprimimos el archivo descargandolo y la crapeta resultante la movemos al directorio libraries, dentro de la carpeta de instalacion de arduino. Abrimos el IDE y en el apartado de archivo - ejemplos - DHT11 tendremos un ejemplo de codigo como este.
#include "DHT.h"
// Creamos una variable del tipo DHT (definida en la librería que hemos incluído)
DHT dht;
void setup(){
Serial.begin(9600);
Serial.println();
Serial.println("Status\tHumidity (%)\tTemperature
(C)\t(F)");
dht.setup(2); // Sensor conectado al pin 2
}
void loop(){
// Esperamos el tiempo mínimo establecido por el sensor
delay(dht.getMinimumSamplingPeriod());
// Obtenemos la humedad y la temperatura (en grados)
float humidity = dht.getHumidity();
float temperature = dht.getTemperature();
Serial.print(dht.getStatusString());
Serial.print("\t");
Serial.print(humidity);
Serial.print("\t\t");
Serial.print(temperature);
Serial.print("\t\t");
// Convertimos la temperatura de Celsius a Fahrenheit
Serial.println(dht.toFahrenheit(temperature));
}
}
Ventilación con aviso de funcionamiento Cuando la temperatura del ambiente sea mayor de la que hemos configurado en mi caso 24ºC, sonara un zumbador que hemos configurado como salida digital y pasado un retardo enciende el ventilador que vamos a controlarlo con un mosfet irf540 para el que he diseñado una placa conjunta con la iluminación led que se alimentan a 12V |
#define PIN 2
DHT dht;
int Temp=24; //Parámetro de encendido de ventilador
void setup() {
Serial.begin(9600);
pinMode(8,OUTPUT);
void loop() {
float t = dht.getTemperature();//Serial.println("Temperatura: ");
if (t >=Temp){
digitalWrite(8,HIGH);
}
if(t < Temp){
digitalWrite(8,LOW);
}
delay(3000);
}
He creado una fotocelula con una resistencia LDR,conectado a una entrada analogica del arduino para que detecte la intensidad de luz que recae sobre el invernadero, encendera una tira de luces ledque sera controlada por medio de un transistor una vez detecte oscuridad y se pagara cuando insida sobre ella luz.
Sensor de humedad de la tierra
Hice una placa con dos cintas de cobre añadiendole a un lado una resistencia de 10K, y la salida de va conectada al arduino para crear una diferencia de resistividad al estar en contacto en la humedad de la tierra me dará unos valores que yo misma he configurado según los estados. Tambien hay un sensor muy util para arduino que puedes usar
Este ha sido el programa creado segun los valores puestos apruebaint Valor;
void setup() {
Serial.begin(9600);
}
void loop(){
Serial.print("Sensor de Humedad valor:");
Valor = analogRead(0);
Serial.print(Valor);
if (Valor <= 300)
Serial.println(" Encharcado");
if ((Valor > 300) and (Valor <= 700))
Serial.println(" Humedo, no regar");
if (Valor > 700)
Serial.println(" Seco, necesitas regar");
delay(1000);
}