Select Page

Qué es el SR04

El sensor ultrasónico de distancia SR04 o HC-SR04 es un sensor que mide distancia a través de ondas ultrasónicas. Es muy fácil de usar, y programar despues de leer este tutorial. Tambien podrias usar el SRF05 siguiendo este post, dado que son idénticos.

Cómo funciona el SR04

El funcionamiento del sr04 es muy sencillo.

Está alimentado con 5V y se debe suministrar un pulso de 10µs (10 microsegundos) para activar el módulo a través del pin Trig.

En ese momento, el módulo lanzará (transmitirá) una ráfaga de 8 pulsos ultrasónicos a 40Khz y la salida Echo pasa a nivel alto hasta que el módulo recibe un eco, momento en el que volverá de nuevo a pasar a un nivel bajo. Por tanto, la salida Echo es un pulso cuyo ancho será proporcional a la distancia respecto a un objeto. Si no se detecta un objeto, la salida Echo pasará a nivel bajo después de 38ms.

HC-SR04-Ultrasonic-Sensor-Working-Echo-when-no-Obstacle

En el caso, si esos pulsos no se reflejan, entonces la señal de Eco expirará después de 38 mS (38 milisegundos) y volverá a baja. Por lo tanto, un pulso de 38 mS indica que no hay obstrucción dentro del rango del sensor.

Si esos pulsos se reflejan de nuevo, el pin Echo baja cuando se recibe la señal. Esto produce un pulso cuyo ancho varía entre 150 µS y 25 mS, dependiendo del tiempo que tardó en recibir la señal.

HC-SR04-Ultrasonic-Sensor-Working-Echo-reflected-from-Obstacle

El ancho del pulso recibido se usa para calcular la distancia al objeto reflejado. Esto se puede resolver usando una ecuación simple de distancia, velocidad y tiempo, aprendimos en la escuela secundaria.

Si el ancho del pulso se mide en µs, el resultado se debe dividir entre 58 para saber la distancia en centímetros, y entre 148 para saber la distancia en pulgadas. Estos valores son obtenidos de:

Si la velocidad del sonido es 340 metros por segundo o 29µs por centímetro, y como el sonido tiene que viajar dos veces la distancia hacia el objeto, una de ida y otra de vuelta, entonces cada 2×29=58µs recorrerá un centímetro.

El modulo debe activarse cada 50ms como mínimo, de esta manera se asegura que la ráfaga ultrasónica haya desaparecido completamente y no provocará un falso eco en la siguiente medición de distancia.

modulo ultrasonido 03

Un Ejemplo matemáctico

Tomemos un ejemplo para hacerlo más claro. Supongamos que tenemos un objeto frente al sensor a una distancia desconocida y recibimos un pulso de 500 µS de ancho en el pin Echo. Ahora calculemos qué tan lejos está el objeto del sensor. Usaremos la siguiente ecuación.

Distancia = Velocidad x Tiempo

Aquí, tenemos el valor del tiempo, es decir, 500 µs y sabemos la velocidad. ¿Qué velocidad tenemos? La velocidad del sonido, por supuesto! Sus 340 m / s. Tenemos que convertir la velocidad del sonido en cm / µs para calcular la distancia. Una búsqueda rápida en Google de “velocidad del sonido en centímetros por microsegundo” dirá que es 0.034 cm / µs. Podrías hacer los cálculos, pero buscarlos es más fácil. De todos modos, con esa información, ¡podemos calcular la distancia!

Distancia = 0.034 cm / µs x 500 µs

¡Pero esto no está hecho! Recordá que el pulso indica el tiempo que tardó en enviarse la señal y reflejarse para obtener la distancia, por lo que deberá dividir el resultado a la mitad.

Distancia = (0.034 cm / µs x 500 µs) / 2

Distancia = 8.5 cm

Entonces, ahora sabemos que el objeto está a 8.5 centímetros del sensor.

Ventajas y desventajas

Debido a sus características, podemos encontrar sensores de ultrasonidos en aplicaciones como:

  • Medición de nivel – en tanques que contienen diferentes productos en forma líquida o sólida (granos)-.
  • Control de colisiones en sistemas de aparcamiento.
  • Control de posición en campos como robótica, industria del plástico, etc.
  • Control de llenado de tanques.

Las principales ventajas de estos sensores son:

  • No necesitan contacto físico para poder detectar objetos.
  • Buena relación calidad-precio
  • En comparación con otras tecnologías, los dispositivos basados en ultrasonidos son compactos y livianos.
  • Son de bajo consumo, con lo que pueden ser utilizados en aplicaciones a bateria como robots.
  • ¡incluso se ve genial, como un par de ojos de robot Wall-E para tu último invento robótico!

Especificaciones Técnicas

HC-SR04-Ultrasonic-Distance-Sensor-Pinout
Operating VoltageDC 5V
Operating Current15mA
Operating Frequency40KHz
Max Range4m
Min Range2cm
Ranging Accuracy3mm
Measuring Angle15 degree
Trigger Input Signal10µS TTL pulse
Dimension45 x 20 x 15mm

sr04 vs srf05

En este post explicaremos el funcionamiento del módulo HC-SR04 con Arduino. También podemos usar el HY-SFR05 , la conexión es la misma sólo debemos obviar el pin OUT. El resto es igual para los dos módulos y el código es el mismo.

SRF05 Datasheet

At a quick glance there are only small differences between these two:

 HC-SR04HY-SRF05
Working Voltage5 VDC5 VDC
Static current< 2mA<2 mA
Output signal:Electric frequency signal, high level 5V, low level 0VElectric frequency signal, high level 5V, low level 0V
Sensor angle< 15 degrees< 15 degrees
Detection distance (claimed)2cm-450cm2cm-450cm
precision~3 mm~2 mm
Input trigger signal10us TTL impulse10us TTL impulse
Echo signaloutput TTL PWL signaloutput TTL PWL signal
PinsVCCtrig(T)echo(R)GNDVCCtrig(T)echo(R)OUTGND

Existe una pequeña diferencia y es que el SRF05 es más preciso y puede medir distancias más largas que su hermano menor el HC-SR04 realizando un pequeño hack, pero no abordaremos esto aquí.

Fijate que la única diferencia es la precisión y no es significativa.

Conexión SR04 con Arduino

El sr04 no requiere librería, aunque seria ideal que exista una para no tener al Arduino haciendo huevo (haciendo nada) por 10uS.

Tutorial sensor ultrasonico sr04
const int Trigger = 2;   //Pin digital 2 para el Trigger del sensor
const int Echo = 3;   //Pin digital 3 para el Echo del sensor

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

void loop()
{

  long t; //timepo que demora en llegar el eco
  long d; //distancia en centimetros

  digitalWrite(Trigger, HIGH);
  delayMicroseconds(10);          //Enviamos un pulso de 10us
  digitalWrite(Trigger, LOW);
  
  t = pulseIn(Echo, HIGH); //obtenemos el ancho del pulso
  d = t/59;             //escalamos el tiempo a una distancia en cm
  
  Serial.print("Distancia: ");
  Serial.print(d);      //Enviamos serialmente el valor de la distancia
  Serial.print("cm");
  Serial.println();
  delay(100);          //Hacemos una pausa de 100ms
}
A %d blogueros les gusta esto: