Proyecto 32 – Sensor de ultrasonido HC-SR04

Continuando con los sensores utilizaremos nuestro Arduino con el sensor de ultrasonido HC-SR04, que nos permite medir distancias entre los 2 cm y los 400 cm (4m), muy útil en robótica para detectar obstáculos, ya que utiliza señales ultrasónicas para detectar un objeto frente a él y nos puede determinar con algo de precisión la distancia a la que se encuentra.

Al igual que los últimos proyectos este es otro de esos proyectos muy fáciles de implementar y de código muy sencillo.

Módulo sensor de distancia HC-SR04

Módulo sensor de ultrasonido HC-SR04
Módulo sensor de ultrasonido HC-SR04

El módulo HC-SR04 nos permite medir distancias sin necesidad de contacto, con una precisión de unos 3 mm. Este módulo viene con los transductores tanto de transmisión como de recepción (altavoz y micrófono), emitiendo una señal de 40KHZ. Este sensor emite señales de alta frecuencia, las cuales llegan al objeto y son reflejadas por el mismo y regresa de nuevo al sensor, permitiéndonos calcular la distancia al objeto que se interpone en su camino .

Su funcionamiento es sencillo, el pin Trigger se comunica con el transductor izquierdo (T) para que envíe pulsos de ultrasonido, mientras que el pin Echo está comunicado al transductor de la derecha (R), el cual se encarga de recibir el eco del ultrasonido enviado previamente.

Duración mínima del pulso de disparo (TTL) 10 μS
Duración del pulso de eco de salida (TTL) 100-25000 μS
Tiempo mínimo de espera entre mediciones 20 mS

Este sensor es utilizado con frecuencia para la detección de obstáculos.

Especificaciones:

  • Voltaje de operación: 5V
  • Corriente de trabajo: 15mA
  • Frecuencia de trabajo 40KHz
  • Ángulo de detección: 15°
  • Rango de detección: 2 a 400cm

Componentes

  • Arduino UNO o placa compatible
  • Protoboard o placa de pruebas
  • Módulo sensor de de distancia HC-SR04
  • Cables o Jumpers
Diagrama de conexiones del módulo HC-SR04 con el Arduino
Diagrama de conexiones del módulo HC-SR04 con el Arduino

Las conexiones de este proyecto son muy sencillas, lo primero que hacemos es hacer las conexiones de alimentación del sensor, el GND del sensor al GND del Arduino y el VCC del sensor, a los 5 voltios del Arduino. Luego procedemos a conectar el pin Trig del sensor, al pin puerto 12 del Arduino y el pin Echo del sensor, al pin 11 del Arduino.

Código

El código de este proyecto es muy sencillo y lo vamos a ir explicando paso a paso.

#define echoPin 11
#define trigPin 12

long duracion, distancia;

void setup()
{
    Serial.begin(9600);
    pinMode(trigPin, OUTPUT);
    pinMode(echoPin, INPUT);
    digitalWrite(trigPin, LOW);
    delayMicroseconds(2);   
}

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

    duracion = pulseIn(echoPin, HIGH);
    //Calcula la distancia (en cm) basado a velocidad del sonido
    //58.2 cm/microseg valor especificado por el fabricante del sensor
    // como la velocidad del sonido
    distancia = duracion / 58.2; 

    Serial.print("Distancia: ");
    Serial.print(distancia);
    Serial.println("cm");
    delay(70); //El fabricante recomienda mínimo 60 milisegundos entre lecturas
}

Comenzaremos a revisar el código, primero vamos a ver las declaraciones de las variables.

#define echoPin 11
#define trigPin 12

long duracion, distancia;

Como vimos anteriormente el #define es la declaración de una constante, entonces podemos ver que declaramos dos constantes, echoPin a la cual le asignamos el 11 y trigPin a la que le asignamos 12, que serían los pines en los cuales conectamos el triger y el echo del módulo. Seguidamente vemos la creación de dos variables tipo long, la variable duracion y la variable distancia, que utilizaremos en el loop.

En la función setup:

Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
digitalWrite(trigPin, LOW);
delayMicroseconds(2);

Como hemos visto anteriormente todo lo que está en el setup se ejecuta solo una vez al prender o reiniciar el Arduino. Lo primero que vemos es la inicialización del puerto serial y lo hacemos con a una velocidad de 9600 baudios, en la segunda línea establecemos que el pin del triger, es un pin de salida y establecemos en la tercera línea que el pin echo es un pin de entrada, en la siguiente línea inicializamos el pin del triger en LOW, es decir en 0 y finalizamos el setup con una pausa de 2 microsegundos.

Y en la función loop:

digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);

duracion = pulseIn(echoPin, HIGH);
distancia = duracion / 58.2; 

Serial.print("Distancia: ");
Serial.print(distancia);
Serial.println("cm");
delay(70); 

Para una mejor compresión vamos a dividir en tres partes el la función loop y así tendremos una mejor visión del código.

digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);

En esta porción del loop vemos como enviamos un pulso de 10 microsegundos, primero encendemos el triger, hacemos una pausa de 10 microsegundos y luego lo apagamos.

duracion = pulseIn(echoPin, HIGH);
distancia = duracion / 58.2;

En la segunda parte del loop tenemos las dos asignaciones de nuestras variables duración y distancia, la primera asignación es la de duración, a la que le asignamos el resultado de la función pulseIn(), que mide la longitud del pulso en microsegundos, luego a distancia le asignamos la operación de el valor duración dividido en 58.2, el cual es el valor recomendado por el fabricante, teniendo en cuenta si la velocidad del sonido es de 340m/seg.

Cabe anotar que el valor de la velocidad del sonido varía dependiendo de muchos factores, por ejemplo la altura sobre el nivel del mar.

Serial.print("Distancia: ");
Serial.print(distancia);
Serial.println("cm");
delay(70); 

Por último tenemos la visualización de los resultados en nuestro monitor de serie, primero mostramos el texto «Distancia: «, seguido de el valor del cálculo de distancia, al cual le siguen las letras «cm» y por último hacemos una pausa de 70 milisegundos antes de volver a comenzar el loop.

Resumen

En este proyecto nuestro Arduino usando el sensor de ultrasonido HC-SR04 nos mostrará la distancia en cm del objeto que se encuentre frente a él y lo visualizaremos a través del monitor de serie.


Deja un comentario

Este sitio está protegido por reCAPTCHA y se aplican la política de privacidad y los términos de servicio de Google.