Usaremos el sensor de ultrasonidos para que nos calcule los micro segundos, estos los traduciremos a cm y configuraremos el buzzer para que emita pitidos según distancia, a nuestra elección.
Hardware utilizado
Placa arduino Mega
Protoboard
Sensor ultrasonidos
Passive buzzer
Cableado
Tabla de conexiones
Placa Arduino Mega
Componentes / Protoboard
GND
GND (Sensor)
5V
VCC (Sensor)
Pin 12
Trig (Sensor)
Pin 13
Echo (Sensor)
GND
Negativo (Buzzer)
Pin 9
Positivo (Buzzer)
Código
El código es muy sencillo e intuitivo.
Además de la función de todo el sistema, si lo conectamos con un cable serial nos mostrará la conversión de los valores Microsegundos -> Centímetros.
// Configuración de pines para el sensor de ultrasonido y el buzzer
int ecoPin = 12; // Pin conectado al eco (recibe el pulso reflejado)
int trigPin = 13; // Pin conectado al trigger (emite el pulso de ultrasonido)
int buzzerPin = 9; // Pin conectado al buzzer para generar sonidos
long duracion, distancia; // Variables para almacenar la duración del pulso y la distancia calculada
int frecuenciaBase = 1000; // Frecuencia base para el buzzer (1000 Hz, sonido agudo constante)
void setup(){
Serial.begin(9600); // Inicia la comunicación con el monitor serial a 9600 baudios
pinMode(trigPin, OUTPUT); // Configura el pin del trigger como salida (emisión del pulso)
pinMode(ecoPin, INPUT); // Configura el pin del eco como entrada (recepción del pulso reflejado)
pinMode(buzzerPin, OUTPUT); // Configura el pin del buzzer como salida
}
void loop(){
// Generación del pulso de ultrasonido
digitalWrite(trigPin, LOW); // Asegura que el pin del trigger comienza en LOW
delayMicroseconds(2); // Breve pausa antes de emitir el pulso
digitalWrite(trigPin, HIGH); // Envía un pulso de 5 microsegundos
delayMicroseconds(5);
digitalWrite(trigPin, LOW); // Finaliza el pulso
// Captura la duración del pulso reflejado en microsegundos
duracion = pulseIn(ecoPin, HIGH);
// Convierte la duración del pulso en distancia en centímetros
distancia = microsecondsToCentimeters(duracion);
// Imprime la duración del pulso y la distancia calculada en el monitor serial
Serial.print("Temps en microsegons: ");
Serial.print(duracion);
Serial.print(" Distancia en cm: ");
Serial.print(distancia);
Serial.println(" cm");
// Acciones en función de la distancia medida
if(distancia < 5) {
// Si la distancia es menor a 5 cm, el buzzer suena continuamente
tone(buzzerPin, frecuenciaBase);
}
else if(distancia < 30) {
// Si la distancia está entre 5 y 30 cm, ajusta la frecuencia del pitido
int intervalo = map(distancia, 1, 22, 5, 100);
// Mapea la distancia (1 a 22 cm) a intervalos (5 a 100 ms)
tone(buzzerPin, frecuenciaBase); // Activa el buzzer con un tono constante
delay(intervalo); // Espera el intervalo calculado
noTone(buzzerPin); // Apaga el buzzer momentáneamente
delay(50); // Pausa antes del siguiente pitido
}
else {
// Si la distancia es mayor o igual a 30 cm, el buzzer se apaga
noTone(buzzerPin);
}
delay(100); // Espera 100 ms antes de repetir el proceso
}
// Función para convertir microsegundos a centímetros
long microsecondsToCentimeters(long microseconds){
// Calcula la distancia según la velocidad del sonido a 20°C (340 m/s)
// 29 microsegundos corresponden a 1 cm (ida y vuelta del pulso)
return microseconds / 29 / 2; // Divide entre 2 para obtener solo la distancia de ida
}