#include <LiquidCrystal.h>
#include <Servo.h>
// Inicializar LCD sin I2C con los pines correspondientes
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
// Configuración de los servomotores
Servo puertaEntrada;
Servo puertaSalida;
// Pines de los sensores ultrasónicos
const int trigPinEntrada = 9;
const int echoPinEntrada = 8;
const int trigPinSalida = 11;
const int echoPinSalida = 10;
// Pines de los LEDs y buzzer
const int ledRojo = 12;
const int ledVerde = 13;
const int buzzer = 14;
void setup() {
// Inicializar LCD
lcd.begin(16, 2);
// Configurar pines de los sensores
pinMode(trigPinEntrada, OUTPUT);
pinMode(echoPinEntrada, INPUT);
pinMode(trigPinSalida, OUTPUT);
pinMode(echoPinSalida, INPUT);
// Configurar pines de los LEDs y buzzer
pinMode(ledRojo, OUTPUT);
pinMode(ledVerde, OUTPUT);
pinMode(buzzer, OUTPUT);
// Inicializar servomotores en posición cerrada
puertaEntrada.attach(3);
puertaSalida.attach(4);
puertaEntrada.write(0);
puertaSalida.write(0);
}
void loop() {
long durationEntrada, durationSalida;
int distanceEntrada, distanceSalida;
// Emitir y leer pulso ultrasónico para la entrada
digitalWrite(trigPinEntrada, LOW);
delayMicroseconds(2);
digitalWrite(trigPinEntrada, HIGH);
delayMicroseconds(10);
digitalWrite(trigPinEntrada, LOW);
durationEntrada = pulseIn(echoPinEntrada, HIGH);
distanceEntrada = durationEntrada * 0.034 / 2;
// Emitir y leer pulso ultrasónico para la salida
digitalWrite(trigPinSalida, LOW);
delayMicroseconds(2);
digitalWrite(trigPinSalida, HIGH);
delayMicroseconds(10);
digitalWrite(trigPinSalida, LOW);
durationSalida = pulseIn(echoPinSalida, HIGH);
distanceSalida = durationSalida * 0.034 / 2;
// Lógica de control para la entrada
if (distanceEntrada < 10) {
lcd.clear();
lcd.print("Entrada: Abierta");
digitalWrite(ledVerde, HIGH);
digitalWrite(ledRojo, LOW);
puertaEntrada.write(90); // Abrir la puerta de entrada completamente
tone(buzzer, 1000);
delay(2000);
noTone(buzzer);
} else if (distanceEntrada >= 10 && distanceEntrada < 30) {
lcd.clear();
lcd.print("Entrada: Ingresando");
digitalWrite(ledVerde, HIGH);
digitalWrite(ledRojo, LOW);
puertaEntrada.write(45); // La puerta de entrada se abre parcialmente
} else if (distanceEntrada >= 30 && distanceEntrada < 50) {
lcd.clear();
lcd.print("Entrada: Cerrada");
digitalWrite(ledVerde, LOW);
digitalWrite(ledRojo, HIGH);
puertaEntrada.write(0); // Cerrar la puerta de entrada
}
// Lógica de control para la salida
if (distanceSalida < 10) {
lcd.clear();
lcd.print("Salida: Abierta");
digitalWrite(ledVerde, HIGH);
digitalWrite(ledRojo, LOW);
puertaSalida.write(90); // Abrir la puerta de salida completamente
tone(buzzer, 1000);
delay(2000);
noTone(buzzer);
} else if (distanceSalida >= 10 && distanceSalida < 30) {
lcd.clear();
lcd.print("Salida: Saliendo");
digitalWrite(ledVerde, HIGH);
digitalWrite(ledRojo, LOW);
puertaSalida.write(45); // La puerta de salida se abre parcialmente
} else if (distanceSalida >= 30 && distanceSalida < 50) {
lcd.clear();
lcd.print("Salida: Cerrada");
digitalWrite(ledVerde, LOW);
digitalWrite(ledRojo, HIGH);
puertaSalida.write(0); // Cerrar la puerta de salida
}
delay(500);
}