#include <LiquidCrystal.h>
const int trigPin = 9; // Pin del sensor de ultrasonido para enviar la señal de pulso
const int echoPin = 10; // Pin del sensor de ultrasonido para recibir el eco
int counter = 0; // Contador de personas
long duration;
int distance;
int prevDistance = 0; // Variable para almacenar la distancia previa
bool isMovingRightToLeft = false; // Variable para indicar el movimiento de derecha a izquierda
// Configuración del LCD
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
pinMode(trigPin, OUTPUT); // Configura el pin del sensor de ultrasonido como salida
pinMode(echoPin, INPUT); // Configura el pin del sensor de ultrasonido como entrada
Serial.begin(9600); // Inicia la comunicación serial a 9600 baudios
lcd.begin(16, 2); // Inicializa el LCD con 16 columnas y 2 filas
}
void loop() {
// Genera un pulso corto en el pin de disparo del sensor de ultrasonido
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Mide la duración del eco, que es proporcional a la distancia
duration = pulseIn(echoPin, HIGH);
// Calcula la distancia en centímetros
distance= duration*0.034/2;
// Si la distancia es menor que 100 cm y el objeto se está moviendo de derecha a izquierda (aumentando la distancia)
if (distance < 100 && distance > prevDistance && !isMovingRightToLeft) {
counter++; // Incrementa el contador
isMovingRightToLeft = true; // Establece la dirección del movimiento
Serial.print("Personas detectadas: ");
Serial.println(counter);
lcd.clear(); // Borra la pantalla LCD
lcd.setCursor(0, 0);
lcd.print("Personas:");
lcd.setCursor(11, 0);
lcd.print(counter);
delay(1000); // Evita contar varias veces la misma persona debido a rebotes del sensor
}
// Si la distancia es mayor que la distancia previa, actualiza la variable de dirección del movimiento
if (distance > prevDistance) {
isMovingRightToLeft = false;
}
// Actualiza la distancia previa con la distancia actual
prevDistance = distance;
}