#include <DHT.h>
// Defina os pinos
const int buttonOnPin = 14; // Pino do botão para ligar o LED
const int buttonOffPin = 13; // Pino do botão para desligar o LED
const int ledPin = 4; // Pino do LED
const int dhtPin = 36; // Pino de dados do DHT22
const int ldrpin = 10; // Pino do sensor LDR
const int relepin = 21; //Pino do rele
const int pinled = 11; //Pino do LED que indica o estado do relay
DHT dht(dhtPin, DHT22);
// Variáveis para o estado do LED e temperatura
bool ledState = false;
float lastTemperature = NAN; // Inicializa com NaN para garantir que a primeira leitura sempre será registrada
float lastUmidade = NAN;
int sensor19 = 0;
int _sensor19 = 0;
byte pwm=0;
int ledpot=0;
int ldrvalor=0;
const int limite_luminosidade = 406.3; //define o limite da luminosidade(10%)
int contadorRele = 0; // Contador de ativações do relé
void setup() {
Serial.begin(115200);
pinMode(19, INPUT);
pinMode(20, OUTPUT);
pinMode(buttonOnPin, INPUT_PULLUP); // Configura o pino do botão como entrada com pull-up
pinMode(buttonOffPin, INPUT_PULLUP); // Configura o pino do botão como entrada com pull-up
pinMode(ledPin, OUTPUT); // Configura o pino do LED como saída
pinMode(relepin, OUTPUT);
pinMode(pinled, OUTPUT);
dht.begin(); // Inicializa o sensor DHT22
digitalWrite(relepin, LOW);
digitalWrite(pinled, LOW);
}
void loop() {
// Leitura do estado dos botões
sensor19 = analogRead(19);
bool buttonOnState = digitalRead(buttonOnPin) == LOW; // LOW quando pressionado
bool buttonOffState = digitalRead(buttonOffPin) == LOW; // LOW quando pressionado
// Gerenciamento do LED
if (buttonOnState && !ledState) {
ledState = true;
digitalWrite(ledPin, HIGH); // Liga o LED
Serial.println("LED ON");
delay(200);
} else if (buttonOffState && ledState) {
ledState = false;
digitalWrite(ledPin, LOW); // Desliga o LED
Serial.println("LED OFF");
delay(200);
}
// Leitura do sensor DHT22
float humidity = dht.readHumidity();
float temperature = dht.readTemperature(); // Temperatura em Celsius
// Verifica se a leitura falhou
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Falha ao ler DHT22!");
return;
}
// Verifica se a temperatura mudou
if (isnan(lastTemperature) || abs(temperature - lastTemperature) > 0.5) {
lastTemperature = temperature;
Serial.print("Temperatura: ");
Serial.print(temperature);
Serial.println(" C");
}
if (isnan(lastUmidade) || abs(humidity - lastUmidade) > 0.5) {
lastUmidade = humidity;
Serial.print("Umidade: ");
Serial.print(humidity);
Serial.println(" %");
}
if(sensor19 != _sensor19){
_sensor19 = sensor19;
Serial.print("Conversor 19 = ");//mostrar na tela "conversor AD"
Serial.println(sensor19);//Pular linha
pwm=sensor19/16;
analogWrite(3, pwm); //escreve valor 127 PWM
Serial.print("Escrita pwm = ");
Serial.println(pwm);
int valorPotenciometro = analogRead(19);
// Mapeia o valor do potenciômetro para o intervalo de 0 a 255 (para PWM)
int brilhoLed = map(valorPotenciometro, 0, 4095, 0, 255);
// Ajusta o brilho do LED usando PWM
analogWrite(20, brilhoLed);
}
// Lê o valor do LDR (10 bits, faixa 0-4095 no ESP32)
ldrvalor = analogRead(ldrpin);
// Imprime o valor do LDR na porta serial
Serial.print("Luminosidade: ");
Serial.println(ldrvalor);
// Verifica se a luminosidade está abaixo do limiar
if (ldrvalor < limite_luminosidade) {
// Aciona o relé
digitalWrite(relepin, HIGH);
digitalWrite(pinled, HIGH);
// Incrementa o contador de ativações do relé
contadorRele++;
// Imprime o número de ativações na porta serial
Serial.print("Relé acionado. Contagem: ");
Serial.println(contadorRele);
// Mantém o relé acionado por um curto período de tempo
delay(1000); // 1 segundo
// Desliga o relé
digitalWrite(relepin, LOW);
digitalWrite(pinled, LOW);
}
// Aguarda um curto período antes da próxima leitura
delay(100);
}
Loading
esp32-s3-devkitc-1
esp32-s3-devkitc-1