Inicio » Electronica » Arduino » Sensor de distancia HC-SR04

Sensor de distancia HC-SR04

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: