Sensor Ultrasónico para Arduino (HC-SR04 y
similares)
1. ¿Qué es un
Sensor Ultrasónico?
Un sensor ultrasónico
es un dispositivo electrónico que mide la distancia a un objeto utilizando
ondas sonoras de alta frecuencia (ultrasonidos), inaudibles para el oído humano
(generalmente por encima de 20 kHz). Funciona de manera similar a un sonar o al
sistema de ecolocalización de los murciélagos y delfines: emite un pulso de
sonido y mide el tiempo que tarda en regresar el eco después de rebotar en un
objeto.
2. Principio de
Funcionamiento (Tiempo de Vuelo - Time of Flight, ToF):
El funcionamiento se
basa en medir el "tiempo de vuelo" del ultrasonido:
- Emisión: El sensor emite un corto pulso de ultrasonido a través de un
transductor (emisor).
- Propagación: La onda sonora viaja por el aire a
una velocidad conocida (aproximadamente 343 metros por segundo a
temperatura ambiente).
- Reflexión: Cuando la onda encuentra un objeto,
parte de ella se refleja y regresa hacia el sensor.
- Recepción: Otro transductor (receptor) en el
sensor detecta el eco reflejado.
- Cálculo: El microcontrolador (como el de Arduino) mide el tiempo
transcurrido (Δt) entre la emisión del pulso y la recepción del eco.
- Distancia: Sabiendo el tiempo y la velocidad
del sonido (v), se calcula la distancia (d) al objeto. Como el sonido
recorre la distancia de ida y vuelta, la fórmula es:
Distancia = (Tiempo * VelocidadDelSonido) / 2
3. El Modelo
HC-SR04 (El más común con Arduino):
Es el sensor
ultrasónico más popular y económico para proyectos con Arduino.
- Características Principales:
- Voltaje de Operación: 5V DC
- Corriente de Operación: < 15mA
- Frecuencia de Operación: 40 kHz
- Rango de Medición: Típicamente de 2 cm a
400 cm (4 metros). La precisión disminuye con la distancia.
- Ángulo de Detección: Aproximadamente
15-30 grados (es un cono de detección).
- Interfaz: Digital (pines Trigger y Echo).
- Pines del HC-SR04:
1.
VCC: Alimentación (+5V). Conectar al pin 5V de
Arduino.
2.
Trig
(Trigger/Disparador): Pin
de entrada para el sensor. Arduino envía un pulso corto (10 microsegundos) a
este pin para iniciar la medición. Conectar a un pin digital de Arduino
(configurado como OUTPUT).
3.
Echo
(Eco): Pin de salida del
sensor. Este pin se pone en ALTO (HIGH) durante el tiempo que tarda el eco en
regresar. Arduino mide la duración de este pulso HIGH. Conectar a un pin
digital de Arduino (configurado como INPUT).
4.
GND: Tierra (0V). Conectar al pin GND de
Arduino.
4. Conexión a
Arduino:
La conexión es
sencilla:
HC-SR04 Arduino
-----------------------
VCC
-------> 5V
Trig
-------> Pin Digital (ej. Pin
9)
Echo
-------> Pin Digital (ej. Pin
10)
GND
-------> GND
5. Programación con
Arduino (Ejemplo Básico):
El proceso básico en
el código de Arduino es:
- Configurar los pines Trig (OUTPUT) y Echo
(INPUT).
- Asegurarse de que el pin Trig esté bajo
(LOW).
- Enviar un pulso HIGH de al menos 10
microsegundos al pin Trig.
- Poner el pin Trig en LOW nuevamente.
- Medir la duración del pulso HIGH en el pin
Echo usando la función pulseIn(). Esta función espera a que el pin
pase a HIGH, mide el tiempo que permanece en HIGH, y luego espera a que
vuelva a LOW, devolviendo la duración en microsegundos.
- Calcular la distancia usando la fórmula
mencionada.
Código de Ejemplo
(Sin Librerías):
// Pines para el
sensor HC-SR04
const int trigPin = 9;
const int echoPin = 10;
// Variables para
almacenar la duración y la distancia
long duracion;
int distanciaCm;
// float
distanciaPulgadas; // Si quieres en pulgadas
// Velocidad del
sonido en cm/microsegundo (aproximado a 20°C)
// 343 m/s = 34300
cm/s = 0.0343 cm/microsegundo
const float
velocidadSonido = 0.0343;
void setup() {
// Inicializar comunicación serial para ver
los resultados
Serial.begin(9600);
Serial.println("Test Sensor Ultrasonico
HC-SR04");
// Configurar los pines
pinMode(trigPin, OUTPUT); // Trig como salida
pinMode(echoPin, INPUT); // Echo como entrada
}
void loop() {
// 1. Asegurar que Trig esté bajo
inicialmente
digitalWrite(trigPin, LOW);
delayMicroseconds(2); // Pequeña pausa
// 2. Enviar pulso de disparo (10
microsegundos)
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// 3. Medir la duración del pulso de eco en
microsegundos
// pulseIn espera a que el pin se ponga HIGH,
mide el tiempo, y espera a que baje a LOW
duracion = pulseIn(echoPin, HIGH);
// 4. Calcular la distancia
// Distancia = (Tiempo * Velocidad) / 2 (ida y vuelta)
distanciaCm = (duracion * velocidadSonido) / 2;
// Opcional: Convertir a pulgadas (1 pulgada
= 2.54 cm)
// distanciaPulgadas = distanciaCm / 2.54;
// 5. Mostrar la distancia en el Monitor
Serie
Serial.print("Distancia: ");
Serial.print(distanciaCm);
Serial.println(" cm");
// Esperar un poco antes de la siguiente
medición para evitar ecos cruzados
delay(100); // Espera 100 milisegundos
}
6. Uso de Librerías
(Ej. NewPing):
Existen librerías que
simplifican el uso del sensor, manejan timeouts (si no se recibe eco) y pueden
ofrecer funciones más avanzadas (como promediar lecturas o manejar múltiples
sensores). La librería NewPing es muy popular.
- Ventajas de NewPing:
- Más fácil de usar.
- Manejo de timeouts incorporado.
- Funciones para convertir directamente a
cm o pulgadas.
- Optimización para no bloquear el código (ping_timer()).
- Mejor manejo de múltiples sensores.
- Instalación: Ve a Herramientas >
Administrar Bibliotecas... en el IDE de Arduino, busca
"NewPing" e instálala.
7. Aplicaciones
Comunes:
- Robótica: Detección de obstáculos para robots
móviles (evitar colisiones).
- Medición de Nivel: Medir el nivel de líquidos en
tanques (apuntando desde arriba).
- Sistemas de Aparcamiento: Similar a los sensores de reversa en
los coches.
- Seguridad: Detección de presencia en una zona
determinada.
- Proyectos Interactivos: Detectar la proximidad de una
persona para activar luces, sonido, etc.
- Automatización: Medir la altura de objetos en una
cinta transportadora.
8. Ventajas:
- Bajo Costo: Son muy económicos.
- Fácil de Usar: Interfaz simple con Arduino.
- Sin Contacto: Mide la distancia sin necesidad de
tocar el objeto.
- Buena Precisión para muchas aplicaciones: Suficiente para robótica básica,
medición de nivel, etc.
- Funciona en Oscuridad: No depende de la luz ambiental.
9. Limitaciones y
Desventajas:
- Superficies Absorbentes/Irregulares: Materiales blandos (telas, espuma) o
superficies muy anguladas pueden absorber o desviar el sonido,
dificultando la detección o dando lecturas erróneas.
- Distancia Mínima: Tienen una distancia mínima de
detección (generalmente 2 cm) porque el emisor necesita tiempo para
apagarse antes de que el receptor pueda escuchar el eco de objetos muy
cercanos.
- Rango Limitado: El rango máximo (ej. 4m para
HC-SR04) puede no ser suficiente para todas las aplicaciones.
- Ángulo de Detección (Cono): No detectan un punto exacto, sino
dentro de un cono. Objetos pequeños o fuera del centro del cono pueden no
ser detectados correctamente.
- Factores Ambientales: La velocidad del sonido varía con la
temperatura, humedad y presión atmosférica. Para alta precisión, se
debería compensar la temperatura.
- Interferencia: Múltiples sensores ultrasónicos
operando cerca pueden interferir entre sí si sus pulsos se cruzan. Se
requieren técnicas de secuenciación o librerías como NewPing para
manejarlos.
- Objetos Muy Pequeños o Delgados: Pueden ser difíciles de detectar si
no reflejan suficiente sonido hacia el sensor.
10. Consejos y
Consideraciones:
- Alimentación Estable: Asegúrate de que el sensor reciba 5V
estables. Problemas de alimentación pueden causar lecturas erráticas.
- Entorno Libre: El área entre el sensor y el
objetivo debe estar despejada.
- Superficie del Objetivo: Los mejores resultados se obtienen
con superficies planas, duras y perpendiculares al sensor.
- Compensación de Temperatura: Para mayor precisión, mide la
temperatura ambiente y ajusta el valor de la velocidad del sonido en tus
cálculos. Velocidad (m/s) ≈ 331.4 + 0.6 * Temperatura (°C).
- Filtrado/Promediado: Si las lecturas son ruidosas, toma
varias medidas y calcula la media o la mediana para obtener un valor más
estable.
- Manejo de Múltiples Sensores: Si usas varios, dispáralos secuencialmente (uno después del otro) para evitar interferencias, o usa librerías como NewPing que ayudan a gestionarlo.
No hay comentarios:
Publicar un comentario