#include <Servo.h> // Biblioteca para controlar o servo
#include <DHT.h> // Biblioteca para controlar o sensor DHT22
// Definindo os pinos
const int trigPin = 9; // Pino de Trigger do sensor ultrassônico
const int echoPin = 10; // Pino de Echo do sensor ultrassônico
const int servoPin = 6; // Pino de controle do Servo
const int dhtPin = 7; // Pino de dados do sensor DHT22
const int ledVerde = 8; // Pino do LED Verde
const int ledVermelho = 12; // Pino do LED Vermelho
// Definindo o tipo de sensor DHT (DHT22)
DHT dht(dhtPin, DHT22);
// Definindo os pinos de controle
Servo meuServo; // Objeto para controlar o servo motor
long duracao;
int distancia;
int anguloServoAberto = 90; // Ângulo do servo quando há um objeto próximo
int anguloServoFechado = 0; // Ângulo do servo quando não há objeto
void setup() {
Serial.begin(9600); // Inicializa a comunicação serial
// Configura os pinos
pinMode(trigPin, OUTPUT); // Definindo o pino Trigger como saída
pinMode(echoPin, INPUT); // Definindo o pino Echo como entrada
pinMode(ledVerde, OUTPUT); // LED verde como saída
pinMode(ledVermelho, OUTPUT); // LED vermelho como saída
meuServo.attach(servoPin); // Conectando o servo ao pino
meuServo.write(anguloServoFechado); // Inicializa o servo na posição fechada
dht.begin(); // Inicializa o sensor DHT
delay(1000); // Espera 1 segundo antes de começar
}
void loop() {
// Leitura da distância com o sensor ultrassônico
digitalWrite(trigPin, LOW); // Garante que o pino Trigger está baixo
delayMicroseconds(2); // Pequeno atraso para estabilizar
digitalWrite(trigPin, HIGH); // Envia o pulso de Trigger
delayMicroseconds(10); // Mantém o pulso por 10 microssegundos
digitalWrite(trigPin, LOW); // Desliga o Trigger
// Calculando a distância do objeto
duracao = pulseIn(echoPin, HIGH); // Mede a duração do pulso no pino Echo
distancia = duracao * 0.0344 / 2; // Converte a duração para distância em cm
// Imprime a distância no monitor serial
Serial.print("Distancia: ");
Serial.print(distancia);
Serial.println(" cm");
// Verifica a distância e move o servo
if (distancia < 20) { // Se a distância for menor que 20 cm
meuServo.write(anguloServoAberto); // Move o servo para 90 graus
} else {
meuServo.write(anguloServoFechado); // Caso contrário, o servo volta para 0 graus
delay(2000); // Delay de 2 segundos antes de mover o servo de volta
}
// Leitura da temperatura e umidade do DHT22
float temperatura = dht.readTemperature(); // Temperatura em Celsius
float umidade = dht.readHumidity(); // Umidade em %
// Verifica se as leituras falharam
if (isnan(temperatura) || isnan(umidade)) {
Serial.println("Falha na leitura do sensor DHT!");
return;
}
// Imprime as leituras no monitor serial
Serial.print("Temperatura: ");
Serial.print(temperatura);
Serial.print(" °C, Humidade: ");
Serial.print(umidade);
Serial.println(" %");
// Controle dos LEDs com base na temperatura
if (temperatura >= 23 && temperatura <= 40) {
digitalWrite(ledVerde, HIGH); // Acende o LED verde
digitalWrite(ledVermelho, LOW); // Apaga o LED vermelho
} else if (temperatura > 40) {
digitalWrite(ledVerde, LOW); // Apaga o LED verde
digitalWrite(ledVermelho, HIGH); // Acende o LED vermelho
} else {
digitalWrite(ledVerde, LOW); // Apaga o LED verde
digitalWrite(ledVermelho, LOW); // Apaga o LED vermelho
}
// Controle do LED verde com base na umidade
if (umidade >= 40 && umidade <= 50) {
digitalWrite(ledVerde, HIGH); // Acende o LED verde
digitalWrite(ledVermelho, LOW); // Apaga o LED vermelho
} else if (umidade > 50) {
digitalWrite(ledVerde, LOW); // Apaga o LED verde
digitalWrite(ledVermelho, HIGH); // Acende o LED vermelho
}
delay(500); // Atraso entre as medições para evitar leituras rápidas demais
}