/*
CENTRO UNIVERSITÁRIO DE VALENÇA - UNIFAA
CURSO DE ANÁLISE E DESENVOLVIMENTO DE SISTEMAS

LAÍS BRUM MENEZES

Projeto: Arduino-Plant-Environment-Control
Disciplina: Internet of Things - Cuidando de Nossas Vidas

 Sistema de controle de temperatura e umidade de uma planta
 Componentes:
  - Arduino UNO (ou similar)
  - Sensor de temperatura e umidade: DHT22
  - Display LCD 16x2 com módulo I2C
  - LEDs para indicação de controle de dispositivos
     Podem ser substituídos por relés para acionamento de equipamentos
*/

// Importação de bibliotecas:
#include <DHT.h>
#include <LiquidCrystal_I2C.h>

// Definições:
#define DHT_PIN 2      // Pino conectado ao DHT
#define DHT_TYPE DHT22 // Tipo do sensor
#define LED_TEMP 4     // Led para simulação de controle de temperatura
#define LED_HUM 5      // Led para simulação de controle de umidade

// Configurações:
LiquidCrystal_I2C lcd(0x27, 16, 2);
DHT dht(DHT_PIN, DHT_TYPE);

// Variáveis de limites:
/*
  CONSIDERAÇÕES DO PROCESSO DE EVAPOTRANSPIRAÇÃO
  - A temperatura mínima foi estipulada com base no cultivo da banana 
    (pertencente ao grupo de culturas: frutas e forrageiras) para o 
    planejamento de plantio em função de geadas, onde na região Sudeste a 
    ocorrência de geada concentra-se nos meses de junho a agosto.

  - As umidades relativas, mínima e máxima, foram definidas com base na curva
    característica de retenção de água no solo, onde os valores recomendados
    para o fator de segurança de disponibilidade de água no solo para a 
    manutenção encontra-se na tabela a seguir, sendo fator o mínimo o 
    Ponto de Murcha Permanente e o máximo o Ponto de Saturação.
    
    |  GRUPOS DE CULTURAS    |  FATOR f    |
    |------------------------|-------------|
    |  Olerícolas            |  0,2 a 0,4  |
    |  Frutas e Forrageiras  |  0,3 a 0,5  |
    |  Grãos e Algodão       |  0,4 a 0,6  |

*/
float tempMin = 10.0;  // Temperatura mínima (em graus Celsius)
float humMin = 30.0;   // Umidade relativa mínima (em %)
float humMax = 50.0;   // Umidade relativa máxima


void setup() {

  // Inicialização dos LEDs
  pinMode(LED_TEMP, OUTPUT);
  pinMode(LED_HUM, OUTPUT);
  digitalWrite(LED_TEMP, LOW);  // Led desligado
  digitalWrite(LED_HUM, LOW);   // Led desligado

  // Inicialização do sensor e LCD
  dht.begin();
  lcd.init();
  lcd.backlight();

  // Mensagem inicial no display
  lcd.setCursor(0, 0);
  lcd.print("Controle Planta");
  delay(3000);
  lcd.clear();

}

void loop() {

  // Leitura do sensor
  float temperatura = dht.readTemperature();
  float umidade = dht.readHumidity();

  // Exibição no LCD
  lcd.setCursor(0, 0);
  lcd.print("Temp: ");
  lcd.print(temperatura);
  lcd.print("C");

  lcd.setCursor(0, 1);
  lcd.print("Hum: ");
  lcd.print(umidade);
  lcd.print("%");

  // Controle de ocorrência de geada com relação à temperatura
  if (temperatura <= tempMin) {
    digitalWrite(LED_TEMP, HIGH);  // Aciona Alerta

    // Exibição do Alerta no LCD
    lcd.clear();
    lcd.setCursor(3, 0);
    lcd.print("Alerta de");

    lcd.setCursor(5, 1);
    lcd.print("Geada");
  }

  // Controle de irrigação com relação à umidade:
  if (umidade <= humMin) {
      digitalWrite(LED_HUM, HIGH); // Aciona Irrigação

      // Exibição do Alerta no LCD
      lcd.clear();
      lcd.setCursor(3, 0);
      lcd.print("Irrigacao");

      lcd.setCursor(3, 1);
      lcd.print("Acionada");

    } else if (umidade >= humMax) {
      digitalWrite(LED_HUM, LOW); // Desliga Irrigação
    }

  delay(2000);  // Espera 2 segundos antes da próxima leitura

}
$abcdeabcde151015202530fghijfghij