Sensor proximidad

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
}

Last updated