//Bibliotecas
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Configuração do display LCD 16x2 com endereço I2C 0x27
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Pinos
#define PIN_SENSOR_UMIDADE 34 // Pino analógico para o sensor de umidade
#define PIN_BOMBA 2 // Pino digital para a bomba (e LED azul)
// Variáveis
int umidadeSolo = 0; // Valor lido do sensor de umidade
int limiteUmidade = 70;
int umidadeLida = 0; // Valor do limite definido pelo potenciômetro
bool bombaLigada = false; // Estado da bomba
void setup() {
// Inicializa a comunicação serial
Serial.begin(115200);
// Inicializa o display LCD
lcd.init();
lcd.backlight();
// Mensagem inicial
lcd.setCursor(0, 0);
lcd.print("Limite: ");
lcd.setCursor(9, 0);
lcd.print(limiteUmidade);
lcd.print("% ");
// Configura os pinos
pinMode(PIN_BOMBA, OUTPUT);
digitalWrite(PIN_BOMBA, HIGH); // Inicia com a bomba desligada
// Pinos analógicos não precisam de modo, são inputs por padrão
Serial.println("Sistema de Irrigação Automática Iniciado");
}
void loop() {
// Lê os valores dos sensores
umidadeLida = analogRead(PIN_SENSOR_UMIDADE);
// Converte para porcentagem (0-100%) para melhor legibilidade
// Nota: O sensor pode precisar de calibração para valores reais
umidadeSolo = map(umidadeLida, 0, 4095, 100, 0);
lcd.setCursor(0, 1);
lcd.print("USolo: ");
lcd.setCursor(9, 1);
lcd.print(umidadeSolo);
lcd.print("% ");
// Verifica se precisa ligar a bomba
if (umidadeSolo < limiteUmidade && !bombaLigada) {
digitalWrite(PIN_BOMBA, LOW); // Liga a bomba
bombaLigada = true;
Serial.println("Bomba LIGADA - Solo muito seco");
}
// Verifica se precisa desligar a bomba
else if (umidadeSolo >= limiteUmidade && bombaLigada) {
digitalWrite(PIN_BOMBA, HIGH); // Desliga a bomba
bombaLigada = false;
Serial.println("Bomba DESLIGADA - Solo úmido o suficiente");
}
// Exibe os valores no monitor serial
Serial.print("Umidade do Solo: ");
Serial.print(umidadeSolo);
Serial.print("% | Padrão: ");
Serial.print(limiteUmidade);
Serial.print("% | Bomba: ");
Serial.println(bombaLigada ? "LIGADA" : "DESLIGADA");
// Pequena pausa para evitar leituras muito rápidas
delay(200);
}