#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
// Configuración del sensor ultrasónico
const int trigPin = 9;
const int echoPin = 10;
// Configuración del buzzer
const int buzzerPin = 8;
// Configuración de la pantalla LCD I2C
LiquidCrystal_I2C lcd(0x27, 16, 2); // Dirección I2C 0x27, pantalla de 16x2
// Configuración del servo
Servo myServo;
const int servoPin = 3;
void setup() {
// Inicialización del sensor ultrasónico
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
// Inicialización del buzzer
pinMode(buzzerPin, OUTPUT);
// Inicialización de la pantalla LCD con dimensiones 16x2
lcd.begin(16, 2);
lcd.backlight();
// Inicialización del servo
myServo.attach(servoPin);
myServo.write(90); // Posición inicial del servo (neutral)
// Mensaje inicial en la pantalla LCD
lcd.setCursor(0, 0);
lcd.print("Iniciando...");
delay(1000);
lcd.clear();
}
void loop() {
// Medición de la distancia
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration / 2) / 29.1;
// Mostrar la distancia en la pantalla LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Distancia: ");
lcd.print(distance);
lcd.print(" cm");
// Alarma de proximidad y movimiento del servo
if (distance <= 1) {
digitalWrite(buzzerPin, HIGH); // Activa el buzzer
myServo.write(0); // Mueve el servo a 0 grados
} else {
digitalWrite(buzzerPin, LOW); // Desactiva el buzzer
myServo.write(90); // Posición neutral del servo
}
delay(500); // Pequeño retraso para estabilidad
}