ARDUINO: Medir Distancia con el HC-SR04



EL dispositivo electrónico HC-SR04 es un sensor de ultrasonido que permite medir distancias. Podremos aprender el funcionamiento del sensor ultrasónico HC-SR04, así como la implementación con la tarjeta Arduino.

 
 

Materiales:

  • 1x Arduino

  • 1x Sensor de ultrasonido HC-SR04.

  • 1x Protoboard

  • Jumpers

¿Qué es el sensor ultrasónico HC-SR04?

Son sensores de baja precisión cuyo funcionamiento se basa en el envío de un pulso de alta frecuencia que equivale a un aproximado de 40 000 Hz, este pulso viaja por el aire y al presentarse un obstáculo en su camino rebota y es reflejado hacia el sensor que dispone de un micrófono adecuado para esa frecuencia. Dado que la precisión depende mucho de la superficie en que rebota el pulso, se pueden obtener falsas mediciones.

También debemos de considerar que no es adecuado si se presentan muchos objetos, dado que el sonido rebota en las superficies generando ecos y mediciones erróneas.

Para aplicaciones que requieran una precisión superior en la medición de distancia, se recomienda el uso de sensores infrarrojos o sensores ópticos.

¿Cómo funciona el sensor ultrasónico HC-SR04?

El sensor mide el tiempo entre pulsos, con una fórmula simple y conociendo la velocidad del sonido podemos estimar la distancia del objeto al que impactó el pulso y que se refleja hacia el sensor.

Considerando la velocidad del sonido como 343.2 m/s en condiciones de temperatura a 20°C, presión atmosférica a nivel del mar y 50% de humedad.

[Ecuación]

El sonido tarda 29,2 microsegundos en recorrer un centímetro de distancia. Empleando la siguiente ecuación podemos obtener la distancia a partir del tiempo que tarda en viajar el pulso entre el emisor y el receptor:

[Ecuación]

Otro de los puntos que debemos de tener en cuenta es que, únicamente se toma el tiempo que tarda en rebotar la señal emitida en el objeto, por lo tanto, se deben de tener las siguientes consideraciones para que se tome el tiempo del pulso cuando se completa el ciclo desde el emisor hasta el receptor.

{Ecuación]

Esquema del montaje

El circuito correspondiente para el montaje de este ejemplo se muestra en la Figura.

Clic en la imagen para ampliar.

Código

Ahora bien explicaremos cómo funciona el código junto al sensor para poder medir la distancia.

Primero definimos los dos pines del sensor TRIG y ECHO, después definimos dos variables, en una se almacenará el tiempo de regreso de la onda ultrasónica que viaja por el aire y en la otra almacenará la distancia. En el setup ponemos los pines tanto de entrada y salida respectivamente, además escribimos Serial.begin(9600), esto nos servirá para iniciar la comunicación serial para poder ver la distancia, más adelante se explicará la comunicación Serial con profundidad.

Como dice la hoja de datos del sensor, necesitamos enviar un pulso por 10 microsegundos por el TRIG, ahora lo que hacemos es usar digitalWrite y enviar un pulso alto por el pin del TRIG por 10us, esto se hace mediante el delayMicroseconds, después apagamos ese pulso con un LOW.

Después, como se dijo en la explicación del ultrasónico esa onda regresará y será leída por el ECHO, para esto usaremos la función pulseIn, esta función lo que hace es contar el tiempo en que hay un pulso, ya sea alto o bajo, este tiempo se divide entre 2 ya que lo dice la hoja de datos de nuestro sensor, esto es el tiempo que tarda el sonido en ir y volver.

Ahora calcularemos la distancia, sabiendo que el espacio es igual a la velocidad por el tiempo y que la velocidad del sonido es de 343m/s donde el tiempo lo tenemos en millonésimas de segundo, hacemos la operación matemática de multiplicar el tiempo por la velocidad del sonido y esto nuevamente viene en la hoja de datos del sensor, después simplemente ese valor se almacena en la variable Distancia.

Después con la función Serial.println, imprimimos el valor de la distancia, ahora solo queda abrir el monitor serial en Herramientas > Monitor Serie.

#define TRIG 2
#define ECHO 3

long Tiempo;
float Distancia;

void setup() {
  Serial.begin(9600);
  pinMode(TRIG, OUTPUT);
  pinMode(ECHO, INPUT);
}

void loop() {
  digitalWrite(TRIG, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG, LOW);

  Tiempo = (pulseIn(ECHO, HIGH)/2);
  Distancia = float(Tiempo * 0.0343);
  Serial.println(Distancia);
  delay(1000);
}
 
 






ArduinoErick Méndezsensor