HC-SR04: Sensor Ultrasónico

HC-SR04: Sensor Ultrasónico

Introducción

El sensor HC-SR04 es un sensor de distancia de bajo costo, su uso es muy frecuente en la robótica, utiliza transductores de ultrasonido para detectar objetos.

Con esta guía, vamos a conocer de forma detallada sus características, como calibrarlo, como conectarlo y como utilizarlo con Arduino.

Para empezar a utilizar el sensor HC-SR04 solo necesitas una placa Arduino, en esta guía utilizaremos un Uno R3, pero puedes utilizar cualquier placa de Arduino, el procedimiento es el mismo.


¿Cómo funciona?

El sensor HC-SR04 incorpora un par de transductores de ultrasonido que se utilizan de manera conjunta para determinar la distancia del sensor con un objeto colocado enfrente de este. Un transductor emite una “ráfaga” de ultrasonido y el otro capta el rebote de dicha onda.

El tiempo que tarda la onda sonora en ir y regresar a un objeto puede utilizarse para conocer la distancia que existe entre el origen del sonido y el objeto.

Cómo funciona el sensor HC-SR04
Cómo funciona el sensor HC-SR04

¿Cómo se comunica con Arduino el sensor HC-SR04?

La interfaz del sensor HC-SR04 y Arduino se logra mediante 2 pines digitales: el pin de disparo (trigger) y eco (echo). La función de cada uno de estos pines es la siguiente:

  • El pin trigger recibe un pulso de habilitación de parte del microcontrolador, mediante el cual se le indica al módulo que comience a realizar la medición de distancia.
  • En el pin echo el sensor devuelve al microcontrolador un puso cuyo ancho es proporcional al tiempo que tarda el sonido en viajar del transductor al obstáculo y luego de vuelta al módulo.
Pulsos recibidos y enviados por el sensor
Pulsos recibidos y enviados por el sensor

Como se puede observar, el HC-SR04 genera un pulso en el pin marcado como “echo” cuya duración es proporcional a la distancia medida por el sensor.

Mediante una sencilla formula puede estimarse entonces la distancia entre el sensor y el obstáculo si se conoce el tiempo de viaje del sonido así como la velocidad de propagación de la onda sonora.

Partimos de la siguiente formula:

Distancia = Velocidad * Tiempo
  • Distancia (d) es la distancia lineal hacia el objeto.
  • Velocidad (v) es la velocidad del sonido al nivel del mar (343m/s o 0,034cm/ms.
  • Tiempo (t) es el tiempo que demora en llegar el ultrasonido al objeto. Por lo tanto necesitamos dividir ese valor a la mitad.

Remplazamos estos valores con las unidades en centímetros (cm) y microsegundos (ms):

d = v * t/2
d = 0.034 * t/2
d = t*0.034 / 2

Conexiones

Todas las conexiones se realizan con el Arduino Apagado (desconectado de la PC o de cualquier fuente externa).

La conexión del sensor con Arduino es muy sencilla. Podemos realizarla utilizando un protoboard, o directamente con alambres. Para lograr que el sensor funcione, son necesarias 4 señales:

  • Alimentación de 5V
  • Tierra o común del circuito
  • Señal de disparo (trigger)
  • Señal de eco (echo)
Pinouts del Sensor ultrasónico HC-SR04
Pinouts del Sensor ultrasónico HC-SR04
Conexiones Arduino - Sensor ultrasónico HC-SR04
Conexiones Arduino - Sensor ultrasónico HC-SR04

Código

Ahora abrimos el entorno de programación de Arduino, en Herramientas > Tarjeta, y seleccionamos el modelo de placa Arduino que estemos utilizando. Nosotros seleccionaremos Arduino Uno.

Entorno de programación de Arduino
Entorno de programación de Arduino

Una vez configurado el IDE, empezamos a programar nuestro sketch, explicaremos paso a paso el código para sea más comprensible:

  • Primero configuramos los pines y la comunicación serial a 9800 baudios.
  • Ahora en el bucle void loop() empezamos enviando un pulso de 500ms al trigger del sensor.
  • Seguidamente recibimos el pulso de respuesta del sensor por el pin Echo, para medir el pulso usamos la función pulseIn (pin, value).
  • Finalmente enviamos serialmente el valor de la distancia y terminamos poniendo una pausa de 100ms, que es superior a los 60ms recomendado por los datos técnicos del sensor.

Código completo del programa


const int Trigger = 2;          //Pin 2 donde conecto el TRIGGER del sensor
const int Echo = 3;             //Pin 3 donde conecto el ECHO del sensor
long t;                         //Tiempo que demora en llegar el eco
long d;                         //Distancia en centímetros

void setup() {
  Serial.begin(9600);           //Inicializamos la comunicación serial
  pinMode(Trigger, OUTPUT);     //Configuramos el pin como salida
  pinMode(Echo, INPUT);         //Configuramos el pin como entrada
  digitalWrite(Trigger, LOW);   //Inicializamos el pin con 0
}

void loop() {  
  digitalWrite(Trigger, HIGH);  //Enviamos un pulso de ultrasonido
  delay(500);                   //Tiempo de espera durante el envío del pulso
  digitalWrite(Trigger, LOW);   //Corto el pulso de ultrasonido
  
  t = pulseIn(Echo, HIGH);      //Asignamos la duración de escucha del pulso a t
  d = t*0.034/2;                //Calculamos la distancia según la formula d=v*t/2
  
  Serial.print("Distancia: ");
  Serial.print(d);              //Enviamos el valor a puerto serie para lectura
  Serial.print("cm");
  Serial.println();
  delay(100);                   //Hacemos una pausa de 100ms
}

Conecte el Arduino Uno y cargue el programa.

Checkeo de Funcionamiento

Después de esto el Arduino y sensor ya deben estar trabajando, para poder visualizar los datos vaya a Herramientas > Monitor Serial.

En el monitor serial le aparecerán los valores de la distancia que sensa el HC-SR04, ponga un objeto al frente y varíe su distancia respecto al sensor y verifique que la distancia mostrada en el monitor serial sea la correcta.