Sensor ultrasonico HC-SR04 con Arduino

Sensor ultrasónico HC-SR04 con Arduino.

El HC-SR04 es uno de los sensores mas populares para medir distancia con Arduino porque es económico, fácil de conectar y muy util en proyectos educativos, robots y sistemas de detección. Su funcionamiento se basa en el envío de ultrasonidos y en la medida del tiempo que tarda el eco en volver al modulo.

En este articulo veremos que es el sensor HC-SR04, como funciona, cuales son sus pines, como conectarlo a una placa Arduino y como mostrar la distancia medida en el monitor serie con un programa sencillo.

Que es el HC-SR04

El HC-SR04 es un sensor de distancia por ultrasonidos. Esto significa que no necesita tocar el objeto para medir la separación entre el sensor y la superficie situada delante de el. Para hacerlo utiliza un emisor y un receptor acústico que trabajan con una frecuencia de 40 kHz, muy por encima del rango audible para las personas.

Este tipo de sensor se utiliza a menudo para:

  • detectar obstáculos en pequeños robots
  • medir el nivel aproximado de líquidos o materiales
  • activar alarmas o automatismos por proximidad
  • realizar practicas de distancia y tiempo de vuelo con Arduino

Su salida no es analógica. El modulo trabaja con dos pines digitales llamados Trig y Echo, por lo que puede manejarse sin librerías externas en un ejemplo introductorio.

Pines del sensor HC-SR04.

Como funciona el sensor ultrasonico HC-SR04

El funcionamiento del HC-SR04 es simple. Primero, Arduino envía al pin Trigger un pulso en alto de 10 us. Cuando recibe ese disparo, el sensor emite una ráfaga de ultrasonidos. Si esas ondas chocan con un objeto situado frente al modulo, una parte de la energía rebota y vuelve al receptor.

El pin Echo permanece en alto durante el tiempo que tarda el sonido en ir hasta el objeto y regresar. Midiendo ese tiempo en microsegundos es posible calcular la distancia con la formula:

distancia_cm = tiempo_us * 0.0343 / 2

El factor 0.0343 representa la velocidad aproximada del sonido en cm/us, y se divide entre dos porque el tiempo medido corresponde al recorrido de ida y vuelta.

Funcionamiento del sensor ultrasónico HC-SR04.

Pines del HC-SR04

El modulo HC-SR04 suele tener cuatro pines claramente identificados:

  • VCC: alimentación del sensor
  • Trig: entrada de disparo del pulso ultrasónico
  • Echo: salida digital con la duración del eco
  • GND: tierra común
Pines del sensor HC-SR04.

La conexión de referencia en este tutorial se hará con una placa Arduino Uno o Arduino Nano de 5 V. En ese caso, la distribución usada sera:

  • VCC del HC-SR04 a 5V de Arduino
  • GND del HC-SR04 a GND de Arduino
  • Trig del HC-SR04 a D9 de Arduino
  • Echo del HC-SR04 a D10 de Arduino

Si utilizas una placa de 3.3 V, recuerda que la salida Echo puede requerir adaptación de nivel antes de conectarla directamente al microcontrolador.

Especificaciones básicas del HC-SR04

Estas son algunas especificaciones típicas del modulo HC-SR04 que conviene tener presentes antes de usarlo en un proyecto.

Característica Valor
Tension de alimentación 5 V
Corriente típica 15 mA
Rango de medida aproximado 2 cm a 400 cm
Frecuencia ultrasónica 40 kHz
Angulo de apertura aproximado 15 grados
Precision orientativa alrededor de 3 mm

Aunque estas cifras son muy comunes en las fichas técnicas del sensor, el resultado real depende bastante de la superficie medida, de su orientación y del entorno.

Conexión del HC-SR04 con Arduino

Para una prueba básica no hace falta ningún componente adicional. Basta con alimentar el sensor y conectar sus pines de control a dos entradas/salidas digitales de Arduino.

La conexión usada en este tutorial es la siguiente:

  • VCC a 5V
  • GND a GND
  • Trig a D9
  • Echo a D10

Si montas el circuito en protoboard, procura que el modulo quede bien sujeto y que los cables sean cortos y firmes para evitar falsos contactos durante las mediciones.

Conexion del sensor HC-SR04 con Arduino en protoboard.

Código para medir distancia con Arduino

El siguiente programa dispara el sensor, mide la duración del pulso de Echo, calcula la distancia en centímetros y la muestra por el monitor serie una vez por segundo. Si no se recibe eco dentro del tiempo de espera, el programa muestra un mensaje indicando que el objeto esta fuera de rango o que no hubo retorno.

 1// Ejemplo de Arduino para utilizar el sensor HC-SR04
 2// Mas información: https://www.3dpellet.com
 3
 4const int trigPin = 9;
 5const int echoPin = 10;
 6
 7void setup() {
 8  pinMode(trigPin, OUTPUT);
 9  pinMode(echoPin, INPUT);
10  Serial.begin(9600);
11}
12
13void loop() {
14  unsigned long tiempo_us;
15  float distancia_cm;
16
17  digitalWrite(trigPin, LOW);
18  delayMicroseconds(2);
19
20  digitalWrite(trigPin, HIGH);
21  delayMicroseconds(10);
22  digitalWrite(trigPin, LOW);
23
24  tiempo_us = pulseIn(echoPin, HIGH, 30000);
25
26  if (tiempo_us == 0) {
27    Serial.println("Fuera de rango o sin eco");
28  } else {
29    distancia_cm = tiempo_us * 0.0343 / 2.0;
30    Serial.print("Distancia: ");
31    Serial.print(distancia_cm);
32    Serial.println(" cm");
33  }
34
35  delay(1000);
36}

En este ejemplo se usa pulseIn() con un tiempo máximo de espera de 30000 us, suficiente para una demostración sencilla sin bloquear demasiado el programa. Si colocas un objeto estable delante del sensor, veras que la distancia cambia en el monitor serie a medida que lo acercas o alejas.

Lectura de distancia del HC-SR04 en el monitor serie de Arduino.

Consideraciones de medición

Aunque el HC-SR04 es muy fácil de usar, hay varios detalles prácticos que influyen en la calidad de la medida.

La primera limitación importante es la zona ciega. A distancias muy cortas, normalmente por debajo de unos 2 cm, el sensor deja de medir correctamente porque el eco regresa demasiado pronto.

También debes tener en cuenta el tipo de superficie. Los materiales blandos, irregulares o inclinados pueden absorber o desviar parte del sonido, lo que provoca lecturas inestables o incluso ausencia de eco.

En entornos con paredes cercanas o varios objetos, pueden aparecer rebotes no deseados que alteren la medida. Por eso conviene orientar bien el sensor y dejar un pequeño intervalo entre mediciones, como el segundo de espera usado en este ejemplo.

Por ultimo, la velocidad del sonido cambia ligeramente con la temperatura ambiente. En la mayoría de proyectos de iniciación esta variación no suele ser critica, pero conviene recordarla si mas adelante buscas una medida mas afinada.

Conclusion

El HC-SR04 es un sensor muy práctico para comenzar a medir distancia con Arduino porque su conexión es sencilla, su coste es bajo y permite obtener resultados rápidos sin librerías especiales. Con solo cuatro cables y unas pocas lineas de código puedes visualizar distancias en tiempo real y utilizar esa información en robots, alarmas de proximidad, medidores de nivel o proyectos educativos.