Inicio » Electronica » Arduino » [:es]Sensor de distancia HC-SR04[:en]Ultrasound sensor HC-SR04[:]

[:es]Sensor de distancia HC-SR04[:en]Ultrasound sensor HC-SR04[:]

[:es]Aprende a utilizar el sensor de ultrasonidos HC-SR04. El robot DYOR utiliza este sensor para detectar objetos y medir distancias. Principio de funcionamiento, diagramas de conexión y ejemplo de programación con Facilino y Arduino.

¿Cómo funciona?

El sensor de ultrasonidos HC-SR04 emite un tren de ondas ultrasónicas por una de las membranas y recibe el eco de dichas ondas, cuando rebotan sobre los objetos, con la otra membrana. El principio de funcionamiento es con el tiempo de vuelo (TOF) que corresponde al tiempo que emplea la onda ultrasónica en viajar por el aire desde que es emitida hasta que es recibida. En realidad la distancia recorrida por la onda es el doble de la distancia del ultrasonido al objeto.

Sabiendo que la velocidad del sonido en el aire es aproximadamente 343.59m/s esto implica cada 29uS la onda recorre un centímetro (58uS/cm al objeto si consideramos el tiempo de la onda entre la ida y la vuelta).

El sensor HC-SR04 tiene (además de los pines de alimentación VCC a +5V y masa 0V o GND) dos pines que controlan el disparo (TRIG) y el echo recibido por la onda (ECHO). Para generar una secuencia de disparo debemos activar la señal TRIG durante al menos 10uS (poner a +5V) y volverla a desactivar (poner a 0V). Después debemos esperar a que la señal ECHO se active y medir el tiempo transcurrido entre que generamos el disparo y el echo ha sido recibido.

Para calcular la distancia del objeto en centímetros, debemos dividir al tiempo transcurrido en uS por 58.

El sensor de ultrasonido es un sensor susceptible de varias fuentes de error en la medición. Aún así, en robótica se utiliza con mucha frecuencia por tratarse de un sensor barato y que proporciona distancias de un rango medio (entre 0cm y 400cm) en el aire.

Propiedades más importantes del sensor:

Ancho de haz: La onda ultrasónica tiene un ángulo detección en el cual es teóricamente sensible y por tanto todo objeto que esté dentro de este ángulo, es susceptible de ser detectado. En el caso del sensor HC-SR04 este ángulo es aproximadamente de 30 grados.

Distancia máxima: 400cm. Todo objeto más allá de esta distancia no podrá ser detectado.

Cross-talking: Los sensores pueden verse afectados por el fenómeno cross-talking, que consisten en el hecho de que la onda de un sensor es recibida por otro sensor o incluso un mismo sensor puede recibir su propia onda de un disparo si los tiempos de espera entre disparo y disparo no son adecuados (recomendable entre 50ms o 60ms). Importante: Cuando tenemos varios robots en un mismo entorno, todos emitiendo señales ultrasónicas, aumentaremos muchísimo las probabilidades de que esto acurra, así que puede que el comportamiento sea distinto en un entorno despejado que en un entorno repleto de otros robots.

 

 

Conexión:

Para poder utilizar un sensor de ultrasonidos debemos conectar los pines de VCC y GND a los pines correspondientes de la placa de expansión I/O de Arduino. Las señales TRIG y ECHO podemos conectarlas a cualquier entrada o salida digital de Arduino. A continuación se muestra un ejemplo de conexión en el que la señal ECHO se conecta al pin 7 de Arduino y la señal TRIG se conecta al pin 13 de Arduino:

Aquí podéis descargar el fichero Fritzing:

Programación

Empezaremos con la parte más sencilla de la programación con objeto de entender el funcionamiento del sensor. A continuación se muestra un ejemplo de lectura del sensor que se muestra por el puerto serie USB:

Aquí podéis descargar el fichero Facilino:

Si cargamos el programa en Arduino y lo tenemos todo conectado tal y como se especifica, podemos observar que a través del puerto USB nos está devolviendo la distancia en cm. Si pulsáis al icono «Monitor» del programa Visualino y deberíais obtener un resultado como el que se muestra:

 

Un robot muy amable…

En el siguiente ejemplo vamos a utilizar una instrucción de detección de colisión con el sensor de distancia. Lógicamente, el propósito de esta función es permitir al alumno ejecutar una parte de código en caso de detectar una posible colisión (u objeto cercano) y otra parte de código en caso de tener el área libre de colisiones. En este ejemplo el robot saludará diciendo «Good Morning» cuando nos acercamos a él (por ejemplo poniendo la mano delante a menos de 40cm) y cuando nos alejemos entonces dirá «Goodbye». Para ello utilizaremos instrucciones del módulo de Sonido, con el propósito de pronunciar las frases y conectaremos el zumbador al pin 3 de Arduino (es el pin el único pin en el que funciona las instrucciones de voz). El diagrama de conexión es como el que se muestra:

Aquí podéis descargar el fichero Fritzing:

El código a probar es el que se muestra a continuación:

Aquí podéis descargar el fichero Facilino:

 [:en]Learn how to use the ultrasound (sonar) sensor HC-SR04. DYOR robot uses this sensor to detect obstacles and measure distances. Working principle, connection diagrama and programming example with Facilino.

How it works?

The ultrasonic sensor HC-SR04 generates a set of ultrasonic waves using one of the membranes (capsules) and receives the ultrasonid wave with the other membrane (capsule). When a ultrasonic waves impacts on an object rebound on the contrary direction and thus the emitted wave is detected back. The working principle to messure distance is indeed very simple, it uses Time-of-Flight (ToF) which meassures the time elapsed from the wave generation to the wave reception. Actually, the object distance is the half of the wave travelled distance.

Since the ultrasonic wave velocity, on air, is approximately 343.59m/s, this implies that every 29uS the wave travels 1 centimetre (58uS/cm os the actual value if we consider the time from the emitter to the obstance and the time from the obstacle to the receiver).

The HC-SR04 has (apart from Power (VCC) to +5V and ground (GND) to 0V) two additional pins to control the wave triggering (TRIG) and echo (ECHO). In order to generate a trigger, we must activate the TRIG signal for at least 10uS (set to HIGH or 5V) and then deactivate it (set to LOW or 0V). Then, we must wait to the ECHO signal gets activated. The time between the triggering and the echo signal reception is proportional to the object distance.

Thus, in order to messure the distance in cm, we must divide the elapsed time in uS by 58.

The ultrasonic sensor is sensitive to different error sources while messuring that should be taken into account. Despite of that, in low-cost robots is a very common sensor, due to its low price, able to provide relatively good distance meassurements in a medium range (from 0cm to 400cm) in the air.

Important properties

Angle beam: The ultrasonic wave has an angle beam which is not neglectible and any wave received within the angle beam can be potentially detected. In particular for the HC-SR04 the angle beam is approximately 30 degrees.

Maximum distance: 400cm. Any object beyond that distance will not be detected.

Cross-talking: This is a phenomenom of wave interferences between different ultrasonic sensors, which is very common in in-door environments with several robots emitting with the same frequency. Actually, this happens not only because of the reception of an ultrasonic wave comming from a different sensor, but also with the sensor itself if it does not wait the appropriate time, for that reason triggering should be done every 50ms or 60ms at most.

 

 

Connection:

In order to use an ultrasonic sensor, we must connect VCC and GND pins to available pins with +5V and 0V and TRIG and ECHO pins to any available digital input/output pinof Arduino. Here we show an example of connection of the ultrasonic sensor where the ECHO pin is connected to pin 7 of Arduino and TRIG is connected to pin 13:

Here you can download the Fritzing file:

Programming

The easiest way to start playing with the ultrasound sensor is by monitoring the measured distance on the USB serial console as follows:

Here you can download the Facilino code:

If we open the serial monitor in Facilino, you should be able to see the following result if we point the sensor to the ceiling and eventually put the hand in front of it:

 

A very kind robot…

In this example, we are going to use a collision detection instruction with the ultrasonic sensor. This instruction executes a set of instructions in case a collision is detected or a different set of instructions if no collision is detected. In this particular case, we say «Good Morning» when we are close to it (closer than 40cm) and when we are far from it, it says «Goodbye». This collision detection instruction is combined with a set of instructios to reproduce voice that requires that the buzzer module is connected to pin 3 of Arduino. The connection diagram is as follows:

Here you can download the Fritzing connection diagram:

With the following code to test:

Here’s the actual Facilino code:

 [:]