ArduPlanta calculando humedad suelo, temperatura y humedad ambiente

Bueno un de nuestras instalciones permanente en vitrina es nuestra ArduPlanta, mas que nada es una plantita monitoreada con un sensor de humedad suelo FC-28 y un sensor de humedad y temperatura ambiente DTH-11 mas un lcd 16×2 con un controlador i2c

 

La idea es mostrar un poco un proyecto simple de realizar con un Arduino en la vida real, en este caso un Arduino Nano

Componentes Necesarios

Arduino Nano
Sensor temperatura y humedad ambiente DHT11
Sensor Humedad Suelo
Display 16×2
Controlador display i2c
Cables jumper
Protoboard
Resistencia 10k

 

Esquema del proyecto.

dht11+fc-28+lcd16x2-i2c_bb

Codigo

dht11+fc-28+lcd16x2-i2c.fzz

dht11+fc-28+lcd16x2-i2c_bb.ino


#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#include "DHT.h"

//                     Addr, En, Rw, Rs, d4, d5, d6, d7, backlighpin, polarity
LiquidCrystal_I2C lcd( 0x27, 2,   1,  0,  4,  5,  6,  7, 3, POSITIVE );

#define DHTPIN 2     // Pin del Arduino al cual esta conectado el pin 2 del sensor

// Descomentar segun el tipo de sensor DHT usado
#define DHTTYPE DHT11   // DHT 11

unsigned long tAntes = 0;
unsigned long tAhora = 0;
unsigned long tEjecucion = 1000;


int Valor;

int porcentaje;

DHT dht(DHTPIN, DHTTYPE);


void setup()
{
Serial.begin(9600);

//Serial.println("Failed to configure Ethernet using DHCP");
//Valor = analogRead(1);
//Serial.print(Valor);

lcd.begin(16,2);
lcd.backlight();

//lcd.setCursor(0,0);
//lcd.print("Tiempo");

dht.begin();

}


void loop()
{

Valor = analogRead(1);
//  Serial.print(Valor);
// tAhora = millis();

//  if( tAhora - tAntes >= tEjecucion )
//  {
//   tAntes = tAhora;

//  lcd.setCursor(0,1);
//  lcd.print(tAhora/1000);
// }
porcentaje =map(Valor-1023, 0, 1023, 0, 100);  // convertir a porcentaje
porcentaje= porcentaje*-1;
if (Valor <= 300) {
Serial.println(" Encharcado");
lcd.setCursor(0,0);
lcd.print("Humedad :");
lcd.print(porcentaje);
lcd.print("%     ");

lcd.setCursor(0,1);
lcd.print("Encharcado");
}

if ((Valor > 300) and (Valor <= 700)) {
Serial.println(" Humedo, no regar");

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

lcd.setCursor(0,1);
lcd.print("Humedo, no regar");
}
if (Valor > 700) {
Serial.println(" Seco, necesitas regar");
lcd.setCursor(0,0);
lcd.print("Humedad :");
lcd.print(porcentaje);
lcd.print("%     ");

lcd.setCursor(0,1);
lcd.print("Seco, necesitas regar");
}
delay(4000);

float h = dht.readHumidity();
// Obtiene la Temperatura en Celsius
float t = dht.readTemperature();

// Control de errores, valida que se obtuvieron valores para los datos medidos
if (isnan(h) || isnan(t)) {
Serial.println("Falla al leer el sensor DHT!");
return;
}

Serial.print("Humedad: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperatura: ");
Serial.print(t);
Serial.println("*C ");

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

lcd.setCursor(0,1);
lcd.print("Temp : ");
lcd.print(t);
lcd.print(" C ");
delay(4000);

lcd.setCursor(0,0);
lcd.print("SomosMakers.cl   ");
lcd.setCursor(0,1);
lcd.print("                  ");
delay(4000);
}

 

Otro Ejemplo

 

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Constructor de la librería de LCD 16×2
// Aqui se configuran los pines asignados a la pantalla del PCF8574
LiquidCrystal_I2C lcd(0x3F , 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

void setup()
{
// Indicar a la libreria que tenemos conectada una pantalla de 16×2
lcd.begin(16, 2);
// Mover el cursor a la primera posición de la pantalla (0, 0)
lcd.home ();
// Imprimir “Hola Mundo” en la primera linea
lcd.print(“Hola Mundo”);
// Mover el cursor a la segunda linea (1) primera columna
lcd.setCursor ( 0, 1 );
// Imprimir otra cadena en esta posicion
lcd.print(“SomosMakers.cl”);
// Esperar un segundo
delay(1000);
}

void loop()
{
// EN EL CICLO PRINCIPAL SOLAMENTE RECORREMOS EL MENSAJE DE UN LADO A OTRO
// Variable para conteo de ciclos
int i;

// Desplazar la pantalla a la derecha 2 veces
for ( int i = 0; i < 5; i++ ) {
lcd.scrollDisplayRight();
delay (1000);
}

// Desplazar la pantalla a la izquierda 2 veces
for ( int i = 0; i < 5; i++ ) {
lcd.scrollDisplayLeft();
delay (1000);
}
}