#include <DHT.h>;
#include <LiquidCrystal_I2C.h>;
#include <Wire.h>;
// Temperatura e umidade - DHT11
DHT dht(A0, DHT22);
//Display LCD
LiquidCrystal_I2C lcd(0x27, 16, 2);
// LDR para medir luminosidade
#define sensor_ldr A2
const float GAMMA = 0.7;
const float RL10 = 50;
// Umidade do solo
#define umidadeSolo_PIN A1
float umidade_solo = 0;
//Irrigação
#define rele_bomba 6
void setup() {
Serial.begin(9600);
pinMode(umidadeSolo_PIN, INPUT);
pinMode(rele_bomba, OUTPUT);
dht.begin();
lcd.init();
lcd.backlight();
}
void loop() {
//Temperatura e Umidade
float umidade = dht.readHumidity();
float temperatura = dht.readTemperature();
if (isnan(umidade) || isnan(temperatura)) {
lcd.print("Erro!");
} else {
//Temperatura
delay(5000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Temp: ");
if (temperatura < 16){
lcd.print("Baixa");
} else if (temperatura > 25 ){
lcd.print("Alta");
} else {
lcd.print("Ideal");
}
lcd.setCursor(0, 1);
lcd.print(temperatura);
lcd.print((char)223);
lcd.print("C");
//Umidade
delay(5000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Umidade: ");
if (umidade < 60){
lcd.print("Baixa");
} else if (umidade > 80){
lcd.print("Alta");
} else {
lcd.print("Ideal");
}
lcd.setCursor(0, 1);
lcd.print(umidade);
lcd.print("%");
}
//Luminosidade
int leitura_luz = analogRead(sensor_ldr);
float voltage = leitura_luz / 1024. * 5;
float resistance = 2000 * voltage / (1 - voltage / 5);
float lux = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA));
delay(5000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Luz: ");
if (lux <= 10) {
lcd.print("Ausencia");
} else if (lux <= 50) {
lcd.print("Fraca");
} else if (lux <= 400) {
lcd.print("Media");
} else if (lux <= 1000) {
lcd.print("Forte");
} else if (lux <= 10000 ) {
lcd.print("Intensa");
} else {
lcd.print("Invalido!!");
}
//Irrigação
umidade_solo = analogRead(umidadeSolo_PIN);
umidade_solo = map(umidade_solo, 0, 4095, 0, 100);
delay(5000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Solo:");
lcd.print(umidade_solo);
lcd.print("%");
if (umidade_solo < 60 ){
lcd.setCursor(0,1);
if (temperatura < 16){
digitalWrite(rele_bomba, HIGH);
lcd.print("Baixa irrigacao");
delay(1000);
}else if (temperatura > 25){
lcd.setCursor(0,1);
digitalWrite(rele_bomba, HIGH);
lcd.print("Alta irrigacao");
delay(4000);
}else {
digitalWrite(rele_bomba, HIGH);
lcd.print("Irrigando");
delay(2000);
}
} else if (umidade_solo > 80){
digitalWrite(rele_bomba, LOW);
lcd.setCursor(0,1);
lcd.print("Sem irrigar");
delay(5000);
}
delay(5000);
}