#include <DHT.h>
#include <Ultrasonic.h>
#include <ESP32Servo.h>
#define DHTPIN 14 // Pin donde está conectado el DHT11
#define DHTTYPE DHT22 // Tipo de sensor DHT11
#define TRIGPIN 26 // Pin TRIG del sensor ultrasónico
#define ECHOPIN 2 // Pin ECHO del sensor ultrasónico
#define LDR_PIN 34 // Pin de la fotoresistencia
#define POT_PIN 35 // Pin del potenciómetro
#define LED_PIN 33 // Pin del LED
#define BUZZER_PIN 27 // Pin del buzzer
#define buttonPin 32 // Pin del pushbutton
#define SERVO_PIN 25 // Pin del servo
DHT dht(DHTPIN, DHTTYPE);
Ultrasonic ultrasonic(TRIGPIN, ECHOPIN);
Servo myservo;
bool BuzzerOn = false;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;
void setup() {
Serial.begin(9600);
dht.begin();
myservo.attach(SERVO_PIN);
pinMode(LED_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(buttonPin, INPUT);
digitalWrite(LED_PIN, LOW);
}
void loop() {
// Leer datos del sensor DHT11
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
} else {
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.println(" *C ");
}
// Detectar distancia con el sensor ultrasónico
long distance = ultrasonic.read();
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
// Activar alarma si la distancia es menor a 10 cm
if (distance < 10) {
tone(BUZZER_PIN, 1000); // Tono de 1000 Hz
} else {
noTone(BUZZER_PIN);
}
// Ajustar la intensidad del LED
int ldrValue = analogRead(LDR_PIN);
int potValue = analogRead(POT_PIN);
int ledIntensity = map(potValue, 0, 4095, 0, ldrValue);
analogWrite(LED_PIN, ledIntensity);
// Activar buzzer y LED cuando se presione el pushbutton
if (digitalRead(buttonPin) == HIGH) {
BuzzerOn = !BuzzerOn;
if (BuzzerOn) {
tone(BUZZER_PIN, 1000); // Tono de 2000 Hz
digitalWrite(LED_PIN, HIGH);
} else {
noTone(BUZZER_PIN);
digitalWrite(LED_PIN, LOW);
}
delay(100);
}
// Controlar el servo para abrir/cerrar la compuerta
if (distance < 10) {
myservo.write(90); // Abrir compuerta
} else {
myservo.write(0); // Cerrar compuerta
}
delay(2000); // Esperar 2 segundos entre lecturas
}