Estou fazendo meu TCC e cheguei em um problema.
No tinkercad, o circuito funciona normalmente, mas quando faço na pratica, o sensor de umidade fica atualizando no monitor serial o valor 14, e não muda nem mesmo com terra umida e terra seca.
Deixarei o código e o link do projeto para quem conseguir me ajudar.
Obs: Estou utilizando o pino A0 e não o D0
"""""""Projeto no tinkercad"""""""""""
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
const int sensorUmidadeSoloPin = A0; // Pino analógico conectado ao sensor de umidade do solo
const int pinoLedVermelho = 5; // Pino digital conectado ao LED vermelho
const int pinoLedAmarelo = 6; // Pino digital conectado ao LED amarelo
const int pinoLedVerde = 7; // Pino digital conectado ao LED verde
const int pinoRele = 10; // Pino digital conectado ao módulo relé
const int botaoLigarPin = 2; // Pino digital conectado ao botão de ligar
const int botaoDesligarPin = 3; // Pino digital conectado ao botão de desligar
const int limiteUmidadeSeco = 250; // Solo seco (menor que 25%)
const int limiteUmidadeMedio = 500; // Solo estado médio (50%)
const int limiteUmidadeUmido = 750; // Solo úmido (75%)
bool sistemaLigado = false; // Variável para rastrear o estado do sistema
void setup() {
lcd.init();
lcd.begin(16, 2); // Inicializa o LCD
lcd.backlight(); // Habilita a iluminação do LCD (caso esteja disponível)
lcd.print("Umidade Atual:");
pinMode(pinoLedVermelho, OUTPUT);
pinMode(pinoLedAmarelo, OUTPUT);
pinMode(pinoLedVerde, OUTPUT);
pinMode(pinoRele, OUTPUT);
digitalWrite(pinoRele, LOW); // Certifique-se de que a bomba/irrigador esteja desligado inicialmente
pinMode(botaoLigarPin, INPUT_PULLUP); // Configura o botão de ligar como INPUT_PULLUP
pinMode(botaoDesligarPin, INPUT_PULLUP); // Configura o botão de desligar como INPUT_PULLUP
}
void loop() {
// Verificar o estado dos botões
bool botaoLigarPressionado = digitalRead(botaoLigarPin) == LOW;
bool botaoDesligarPressionado = digitalRead(botaoDesligarPin) == LOW;
// Verificar o estado do sistema (ligado ou desligado)
if (!sistemaLigado && botaoLigarPressionado) {
sistemaLigado = true;
} else if (sistemaLigado && botaoDesligarPressionado) {
sistemaLigado = false;
desligarIrrigacao(); // Desliga a irrigação manualmente ao desligar o sistema
}
if (sistemaLigado) {
int umidadeSolo = lerUmidadeSolo();
if (umidadeSolo < limiteUmidadeSeco) {
digitalWrite(pinoLedVermelho, HIGH);
digitalWrite(pinoLedAmarelo, LOW);
digitalWrite(pinoLedVerde, LOW);
acionarIrrigacao();
} else if (umidadeSolo < limiteUmidadeUmido) {
digitalWrite(pinoLedVermelho, LOW);
digitalWrite(pinoLedAmarelo, HIGH);
digitalWrite(pinoLedVerde, LOW);
acionarIrrigacao();
} else if (umidadeSolo >= limiteUmidadeUmido) {
digitalWrite(pinoLedVermelho, LOW);
digitalWrite(pinoLedAmarelo, LOW);
digitalWrite(pinoLedVerde, HIGH);
desligarIrrigacao();
}
// Mostrar a porcentagem de umidade ideal no LCD
int porcentagemUmidadeIdeal = map(umidadeSolo, 0, 1023, 0, 100);
lcd.setCursor(0, 1);
lcd.print(" "); // Limpar a linha antes de escrever a nova informação
lcd.setCursor(0, 1);
lcd.print(porcentagemUmidadeIdeal);
lcd.print("%");
} else {
// Se o sistema estiver desligado, desliga todos os LEDs e a irrigação
digitalWrite(pinoLedVermelho, LOW);
digitalWrite(pinoLedAmarelo, LOW);
digitalWrite(pinoLedVerde, LOW);
desligarIrrigacao();
}
delay(100); // Pequeno atraso para evitar o bounce dos botões
}
int lerUmidadeSolo() {
int valorAnalogico = analogRead(sensorUmidadeSoloPin);
Serial.print("Valor de Umidade do Solo: ");
Serial.println(valorAnalogico);
return valorAnalogico;
}
void acionarIrrigacao() {
digitalWrite(pinoRele, HIGH); // Ligar a bomba/irrigador
}
void desligarIrrigacao() {
digitalWrite(pinoRele, LOW); // Desligar a bomba/irrigador
}