#define TRIGGER_PIN 13 // Pin del trigger del sensor ultrasónico
#define ECHO_PIN 12 // Pin del echo del sensor ultrasónico
#define BUZZER_PIN 18 // Pin donde está conectado el buzzer pasivo
#define MAX_DISTANCE 400 // Máxima distancia en centímetros a medir
void setup() {
pinMode(TRIGGER_PIN, OUTPUT); // Configurar el pin del trigger como salida
pinMode(ECHO_PIN, INPUT); // Configurar el pin del echo como entrada
pinMode(BUZZER_PIN, OUTPUT); // Configurar el pin del buzzer como salida
Serial.begin(115200); // Inicializar la comunicación serial para mostrar datos
}
void loop() {
long duration, distance;
// Enviar un pulso de trigger para comenzar la medición de distancia
digitalWrite(TRIGGER_PIN, LOW); // Asegurar que el pin del trigger esté en LOW (apagado)
delayMicroseconds(2); // Esperar 2 microsegundos para estabilizar el pin
digitalWrite(TRIGGER_PIN, HIGH); // Enviar un pulso en HIGH (encendido) de 10 microsegundos
delayMicroseconds(10); // Mantener el pulso en HIGH durante 10 microsegundos
digitalWrite(TRIGGER_PIN, LOW); // Apagar el pin del trigger
// Leer el tiempo que tarda el pulso en regresar desde el objeto al sensor (en microsegundos)
duration = pulseIn(ECHO_PIN, HIGH);
// Convertir el tiempo medido (duration) en una distancia en centímetros
// La fórmula es: distance = (duration * velocidad del sonido) / 2
// Usamos 0.034 porque es la constante para convertir microsegundos a distancia en cm
distance = duration * 0.034 / 2;
if (distance > 0 && distance <= MAX_DISTANCE) {
// Si la distancia está dentro del rango medible, ajustar la velocidad de los pitidos
// Usamos la función map() para convertir la distancia en un intervalo de tiempo.
int delayTime = map(distance, 0, MAX_DISTANCE, 50, 1000);
// Generar un tono en el buzzer
// El tono se genera con una frecuencia de 1000 Hz durante 10 milisegundos
tone(BUZZER_PIN, 1000); // Emitir un tono de 1000 Hz
delay(10); // Mantener el tono activo por 10 ms
noTone(BUZZER_PIN); // Apagar el tono
// Esperar antes de emitir el siguiente pitido
// El tiempo de espera (delayTime) dependerá de qué tan lejos esté el objeto
delay(delayTime);
// Mostrar la distancia medida en el monitor serial
Serial.print("Distancia: ");
Serial.print(distance);
Serial.println(" cm");
} else {
// Si no hay objeto dentro del rango medible, apagar el buzzer
noTone(BUZZER_PIN);
}
// Pequeña pausa antes de realizar la próxima medición (50 ms)
delay(50);
}