¿Qué es un Sensor Ultrasónico?
Un sensor ultrasónico es un dispositivo que mide la distancia entre él y un objeto usando sonido, pero no cualquier sonido, sino uno tan agudo que el oído humano no puede escucharlo: el ultrasonido. Funciona como un murciélago o un delfín, enviando un «grito» en forma de pulso sonoro. Cuando este pulso choca con algo, rebota y regresa al sensor. Midiendo cuánto tarda en volver ese eco, el sensor calcula qué tan lejos está el objeto.
El HC-SR04 es uno de los sensores ultrasónicos más populares y accesibles para proyectos con Arduino. Es sencillo de usar y tiene dos partes clave:
Trigger (Trig): Es como el «grito» del sensor, el encargado de enviar el pulso ultrasónico.
Echo: Es quien escucha el eco del pulso que regresa, ayudando al sensor a hacer los cálculos necesarios para determinar la distancia.
Especificaciones del Sensor HC-SR04
- Voltaje de operación: 5V
- Rango de medición: 2 cm a 400 cm
- Ángulo efectivo: Menos de 15 grados
- Precisión: ±3 mm
Casos de Uso del Sensor Ultrasónico
- Robótica:
- Evitar colisiones en robots móviles.
- Navegación autónoma para mapeo y detección de obstáculos.
- Automatización:
- Detectar el nivel de líquidos en tanques.
- Control automático de puertas o barreras.
- Seguridad:
- Alarmas de proximidad.
- Sistemas antirrobo basados en la detección de movimiento.
Limitaciones
- Dependencia del medio: Las ondas ultrasónicas no funcionan correctamente en medios como agua o aire de muy baja densidad.
- Ángulo de detección limitado: Tiene un campo de visión estrecho, lo que puede limitar su eficacia en áreas amplias.
- Superficies absorbentes: Superficies blandas o irregulares pueden dificultar el retorno del eco.
Ejemplo Práctico con Arduino
La conexión básica de un HC-SR04 con Arduino incluye:
- VCC: Conecta a 5V del Arduino.
- GND: Conecta a GND del Arduino.
- Trig: Conecta a un pin digital (por ejemplo, pin 9).
- Echo: Conecta a otro pin digital (por ejemplo, pin 10).
Código de Ejemplo
- Definición de pines:
- Se asignan los pines digitales del Arduino donde estarán conectados los pines Trig y Echo del sensor HC-SR04.
- TRIG_PIN (pin 9): Controla el envío del pulso ultrasónico.
- ECHO_PIN (pin 10): Recibe el eco del pulso reflejado.
#define TRIG_PIN 9
#define ECHO_PIN 10
- Configuración inicial (setup):
- Serial.begin(9600): Inicializa la comunicación serial con el ordenador a una velocidad de 9600 baudios, permitiendo imprimir valores en el monitor serie.
- pinMode(TRIG_PIN, OUTPUT): Configura el pin TRIG_PIN como salida, ya que enviará señales al sensor.
- pinMode(ECHO_PIN, INPUT): Configura el pin ECHO_PIN como entrada, ya que recibirá señales del sensor.
void setup() {
Serial.begin(9600);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
}
- Envío del pulso ultrasónico:
- Se realiza un ciclo de emisión del pulso:
- digitalWrite(TRIG_PIN, LOW): Asegura que el pin TRIG_PIN esté en bajo antes de comenzar.
- delayMicroseconds(2): Pausa breve para estabilizar el sensor.
- digitalWrite(TRIG_PIN, HIGH): Activa el pulso ultrasónico enviándolo por el pin TRIG_PIN.
- delayMicroseconds(10): Mantiene el pulso activo durante 10 microsegundos, lo que genera la onda ultrasónica.
- digitalWrite(TRIG_PIN, LOW): Desactiva el pulso, dejando al sensor en espera del eco.
- Se realiza un ciclo de emisión del pulso:
void loop() {
long duration, distance;
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
- Recepción del eco:
- pulseIn(ECHO_PIN, HIGH): Esta función mide el tiempo (en microsegundos) que el pin ECHO_PIN permanece en estado alto (HIGH). Este tiempo corresponde al lapso que tarda el pulso en viajar hasta el objeto y regresar.
duration = pulseIn(ECHO_PIN, HIGH);
- Cálculo de la distancia:
- duration * 0.034: Convierte el tiempo medido en una distancia en centímetros. Esto se basa en la velocidad del sonido en el aire (340 m/s o 0.034 cm/μs).
- / 2: Divide entre 2 porque el tiempo medido incluye el trayecto de ida y vuelta del pulso.
distance = duration * 0.034 / 2;
- Impresión del resultado:
- La distancia calculada se imprime en el monitor serie con el formato:
- Distancia: X cm, donde X es el valor calculado en centímetros.
Serial.print("Distancia: ");
Serial.print(distance);
Serial.println(" cm");
- Pausa en el bucle:
- Se introduce un retraso de 500 milisegundos para no saturar el puerto serie con demasiados datos y permitir que el sensor realice nuevas mediciones.
delay(500); // Para no saturar el puerto serie
/*
---------------------Nullius Tutoriales---------------------
Creado por Nestor Duran <https://nulliuscloud.com/>
Este código de ejemplo es de dominio público.
*/
#define TRIG_PIN 9
#define ECHO_PIN 10
void setup() {
Serial.begin(9600);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
}
void loop() {
long duration, distance;
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
duration = pulseIn(ECHO_PIN, HIGH);
distance = duration * 0.034 / 2; // Conversión a centímetros
Serial.print("Distancia: ");
Serial.print(distance);
Serial.println(" cm");
delay(500); // Para no saturar el puerto serie
}
Conclusión
Los sensores ultrasónicos como el HC-SR04 son herramientas esenciales en proyectos de electrónica, robótica y automatización gracias a su simplicidad, precisión y versatilidad. Aprender a utilizarlos es un paso clave para desarrollar soluciones innovadoras en el ámbito tecnológico.