Geek Electrónica

Explicaciones, tutoriales y noticias sobre electrónica y tecnología en general

ArduinoMicrocontroladores

MEDICIÓN DE DISTANCIA CON SENSOR ULTRASÓNICO Y ARDUINO

Las señales ultrasónicas, son señales que superan el rango de frecuencias que pueden oír las personas, por lo tanto no pueden ser escuchadas por el humano, este tipo de señales son utilizadas por algunos animales como por ejemplo los murciélagos como método de ubicación espacial, por medio del ultrasonido detectan los obstáculos que tienen en su entorno.

En el campo de la ingeniería se utilizan técnicas similares en aplicaciones como los radares o los sonares, en el caso especifico de los sonares, se utiliza un dispositivo electrónico para generar y emitir una señal ultrasónica que se dispersa en el entorno hasta chocar con un objeto (obstáculo), luego de ese choque la señal es reflejada de nuevo al punto de origen y es recibida por un sensor, el tiempo que se demora la señal en ir, chocar con el objeto y volver al punto de origen es el dato utilizado para calcular la distancia a la que se encuentra el objeto que se ha detectado.

Existen diferentes referencias de sensores que pueden realizar este tipo de trabajo, sin embargo el más utilizado tanto por sus prestaciones como por su bajo costo es el sensor hc-sr04, este sensor cuenta con las siguientes características:

  • Voltaje de alimentación 5 voltios
  • Frecuencia de trabajo 40 KHz
  • Rango efectivo de medición de 2 – 400 Cm
  • Dimensiones 45 * 20 * 15 mm
  • 4 terminales de conexión
  • Pulso de disparo de 10 us
( Imagen sensor ultrasonico hc-sr04 )
 

Como ya se pudo observar en las características, este sensor cuenta tan solo con cuatro pines de conexión de los cuales dos son utilizados para la alimentación de voltaje del dispositivo, los otros dos son utilizados para recibir las ordenes del dispositivo que controla al sensor y entregarle al mismo dispositivo la información del tiempo que se tardo la señal ultrasónica en ir y regresar.

Los cuatro pines del hc-sr04 son los siguientes:

  • Vcc y Gnd (Pines de alimentación del sensor – 5 Voltios)
  • Trigger (Pin de disparo o activación del sensor)
  • Output o Echo (Pin entrega pulso de tiempo)
Trigger:
Este pin se encarga de activar el sensor para generar una señal de 40 KHz, para activar el sensor es necesario que el pin trigger reciba desde el dispositivo que va a controlar el sensor (Arduino) un pulso de al menos 10 microsegundos.
Output o Echo:
Luego que el pin trigger recibe el pulso de 10 us, se activa el sensor generando y emitiendo 8 pulsos de una señal de 40 KHz, en cuanto la señal es emitida el pin Echo del sensor se pone en estado alto (1 lógico) el cual se mantiene hasta el momento que la señal ultrasónica vuelve al sensor y el pin Echo vuelve a un estado bajo (0 lógico).
Por lo tanto lo que hace el pin Echo del sensor es generar un pulso que es recibido por el arduino y que dependiendo de la duración de tiempo de este pulso se determina la distancia a la cual se encuentra el objeto detectado.
(Diagrama de funcionamiento del sensor – Imagen tomada de la hoja de datos)
Cálculo de distancia:
Para realizar el cálculo de distancia a la cual se encuentra el objeto detectado por el sensor, es necesario tener en cuenta dos aspectos:
  • Tiempo que dura el pulso entregado por el pin echo del sensor
  • Velocidad del sonido
Como el hc-sr04 es un sensor ultrasónico, las señales emitidas son señales acústicas, por esta razón es necesario tener en cuenta cual es la velocidad del sonido para así poder saber cuál es la velocidad a la cual está viajando la señal generada por el sensor.

La velocidad del sonido puede variar dependiendo del medio de propagación de la onda, para este caso vamos a utilizar como medio de propagación el aire por lo que la velocidad del sonido es de 343 m/s. Si se quiere expresar en términos de centímetros sobre segundo entonces quedaría como 34300 cm/s.

Para el caso del trabajo con arduino se va a hacer una conversión más y es pasar dicha velocidad a centímetros sobre microsegundo, la razón de esto es que la función de arduino que se va a utilizar más adelante para leer el pulso entregado por el echo entrega como resultado el tiempo de duración expresado en microsegundos.

Por lo tanto la velocidad del sonido es de 0.0343 cm/µs y esta es la velocidad con la que se va a trabajar posteriormente en el programa de arduino.

El siguiente dato a tener en cuenta es el tiempo que se demora la señal en ir y volver al sensor, este tiempo determinado por el pulso generado por el pin echo se va a medir con el arduino con una función que ya explicaremos más adelante.

Por lo tanto teniendo estos dos datos ya se puede determinar la distancia como:
 
 

Sin embargo como esa distancia está calculada con base en el tiempo que demoró la señal en salir y volver al sensor, este cálculo entregaría el doble de la distancia que se requiere, ya que lo que se necesita es la distancia entre sensor y el objeto.

Esto se logra teniendo en cuenta solo el tiempo que se demora la señal entre ser emitida por el sensor y chocar con el objeto lo cual es igual a decir que solo se tiene en cuenta la mitad del tiempo del pulso generado por el pin echo ó también es válido decir que solo se tiene en cuenta la mitad del recorrido. Por lo tanto la formula final para determinar la distancia es:
Programación en Arduino

El programa en arduino es realmente sencillo, lo único que se tiene que hacer es configurar los pines que se van a utilizar para generar el pulso necesario para el trigger y con el que se va a recibir el pulso generado por el pin del echo, luego de esto se mide la duración del pulso y se calcula la distancia con la formula presentada anteriormente.

Para medir la duración del pulso generado por el pin echo, se puede utilizar la función pulseIn de arduino.
Función pulseIn de Arduino:
La función pulseIn lee un pulso que ingresa por un pin determinado y entrega como resultado el tiempo en microsegundos que duro dicho pulso, esta función puede medir tanto un pulso alto como un pulso bajo.

La sintaxis de pulseIn es la siguiente:
pulseIn(pin,valor);

donde:

Pin= pin del arduino en el que se va a medir el pulso.
Valor= puede ser HIGH o LOW dependiendo del tipo de pulso que se quiera medir.

Por ejemplo si se escribe de la siguiente forma:

pulseIn(7,HIGH);

Se monitorea el pin 7 de arduino, en el momento que ingrese un nivel alto comienza a realizar el conteo de tiempo el cual se detiene hasta que por el pin 7 ingrese un nivel bajo lo cual significa que ha terminado el pulso.
Ejemplo:
Para terminar, como ejemplo se va a realizar una medición de distancia con el sensor ultrasónico y se va a presentar el resultado en una pantalla LCD, si tiene dudas sobre el uso de la pantalla LCD con arduino o como simular el sensor ultrasonico con proteus, puede consultarlo las siguientes publicaciones donde se explica cómo hacerlo:
 
 
A continuación se presenta el programa divido por partes explicando cada una de ellas, al final pueden encontrar un link en donde pueden descargar el archivo de arduino completo.
 
En esta primera parte se importa la librería del LCD y se configuran los pines que se van a utilizar del arduino para conectar el LCD en modo de 4 bits, luego de esto se declaran las variables que se van a utilizar en el programa, las variables tiempo y distancia es en donde se van a guardar los valores de los cálculos realizados, mientras que las otras dos variables son utilizadas para guardar los números de los pines que se van a utilizar para echo y trigger con esto luego, cuando se vayan a utilizar no es necesario colocar el numero del pin sino que se llaman por el nombre de la variable lo cual puede ayudar a recordarlas más fácil y simplificar el proceso de programación.

En la función void setup () se inicializa el lcd y luego se configuran los pines del arduino que se van a conectar al sensor como entrada y como salida.
 
 

En la función void loop () se lleva a cabo el desarrollo del programa como tal y se podría dividir en tres etapas:

  • Generar el pulso de 10 microsegundos (mínimo) para el trigger del sensor, necesario para iniciar la actividad del sensor.
  • Lectura del pulso generado por el pin echo del sensor y calculo de distancia con la formula antes presentada.
  • Visualización en pantalla LCD de la distancia entre sensor y objeto.
 
A continuación se muestra la conexión de los elementos que componen el circuito.

Iván Cuadros Acosta

Licenciado en Electrónica y Master en desarrollo de aplicaciones móviles con experiencia en docencia universitaria. Apasionado por la electrónica y la programación.