#include <Wire.h>
#include <LiquidCrystal_I2C.h>
int sensorPIR = 2;
int buzzerPin = 4;
int trigPin = 32;
int echoPin = 33;
int umbralDeProximidad = 400; // Ajusta este umbral según tu entorno y necesidades
int distanciaEnMetros = 0.0;
LiquidCrystal_I2C lcd(0x27, 16, 2); // Dirección del I2C y tamaño del LCD
void setup() {
Serial.begin(9600);
// Inicializa el LCD con una pequeña demora
delay(500);
lcd.begin(16, 2); // Inicializa el LCD
lcd.backlight();
pinMode(sensorPIR, INPUT);
pinMode(buzzerPin, OUTPUT);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
int valorPIR = digitalRead(sensorPIR);
int distanciaEnCentimetros = medirDistancia();
if (valorPIR == HIGH && distanciaEnCentimetros < umbralDeProximidad) {
// Se detectó movimiento y proximidad
digitalWrite(buzzerPin, HIGH);
distanciaEnMetros = distanciaEnCentimetros / 100.0; // Convertir a metros
mostrarDistanciaEnLCD(distanciaEnMetros);
delay(500);
digitalWrite(buzzerPin, LOW);
}
Serial.println("PIR: " + String(valorPIR) + ", Distancia: " + String(distanciaEnMetros) + " m");
delay(250);
}
void mostrarDistanciaEnLCD(float distancia) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Proximidad:");
lcd.setCursor(0, 1);
lcd.print(distancia, 1); // Muestra la distancia con un decimal
lcd.print(" m");
}
int medirDistancia() {
// Mide la distancia utilizando el sensor ultrasónico
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duracion = pulseIn(echoPin, HIGH);
// La velocidad del sonido es de 343 metros/segundo o 0.0343 cm/microsegundo
int distancia = duracion * 0.0343 / 2;
return distancia;
}