1. El Octavo Bit
  2. / Arduino
  3. / Proyectos para Arduino
  4. / Sensor ultrasónico HC-SR04 y Arduino

Sensor ultrasónico HC-SR04 y Arduino

| Actualizado:
Comentarios: 0

Sensor ultrasónico HC-SR04 y Arduino
Sensor ultrasónico HC-SR04 y Arduino

El sensor HC-SR04 es un sensor de distancia de baja precisión basado en ultrasonidos. Se puede utilizar en multitud de proyectos, como sistema de detección de obstáculos para vehiculos o robots, sensores de presencia, etc.

¿Cómo funciona el sensor HC-SR04?

El módulo HC-SR04 es un sensor de distancia de uso frecuente para proyectos de robótica que incorpora un emisor de ultrasonidos y un receptor. Se utiliza para determinar a qué distancia se encuentra un objeto colocado enfrente del sensor. El emisor emitirá ultrasonidos que rebotarán en un objeto y serán captados por el receptor. El tiempo que trascurre mientras la señal es emitida y devuelta al receptor es la distancia que existe entre el emisor y el objeto.

Funcionamien de un emisor de ultrasonidos cuando encuentra un objeto

¿Cómo se calcula la distancia hasta el obstáculo?

La fórmula de la velocidad es:

Velocidad = Superficie recorrida/Tiempo

Sabemos que la velocidad del sonido es de 343 m/s a 20 ºC, con un 50% de humedad y al nivel del mar. Si transformamos las unidades:

343 (m/s) x 100 (cm/m) x 1/1000000 (s/µs) = 0,0343 cm/µs

El sonido recorre 0,0343 cm cada microsegundo, y tarda 29,2 microsegundos en recorrer un centímetro. Por lo que podemos obtener la distancia existente a partir del tiempo que trascurre entre la emisión del pulso y la recepción de este. Hay que tener en cuenta que el pulso primero llega al objeto y tiene que volver, el recorrido es el doble de lo que se quiere medir.

Superficie recorrida = Velocida x Tiempo

Distancia al objeto = (Velocidad x Tiempo)/2

Supongamos que recibimos un pulso del sensor de 200 µs, si aplicamos la fórmula: (200 µs x 0,0343 cm/µs) /2, lo que nos daría como resultado 3,43 cm de distancia.

¿Cómo se conecta un sensor HC-SR04 con Arduino?

Material necesario:

  • Sensor HC-SR04.
  • Placa Arduino.
  • Cables.
  • Protoboard.

El sensor tiene 4 pines:

  • Alimentación de 5 volts.
  • Tierra o masa del circuito.
  • Emisor de señal (triger). Conectados al pin digital 12.
  • Receptor de señal (echo). Conectado al pin digital 11.

La siguiente imagen muestra cómo queda conectado el sensor a la placa Arduino:

Esquema de conexión del sensor HC-SR04 con Arduino

Programación para sensor ultrasónico HC-SR04 y Arduino utilizando la librería NewPing.

La NewPing es una librería externa que mejora el rendimiento y evita algunos problemas encontrados en algunos tipos de sensores de detección de distancias. Además, incluye algunas funciones que facilitan la obtención de las distancias. El primer paso es descargarla e instalarla.

Código:

// incluimos la librería NewPing
#include "NewPing.h"

/* Configuramos los pines donde debemos conectar el sensor */
#define PIN_TRIG 12   // Pin del Arduino conectado al pin Trigger del sensor de ultrasonidos
#define PIN_ECHO 11   // Pin del Arduino conectado al pin Echo del sensor de ultrasonidos
#define MAX_DISTANCIA 100  // Distancia máxima a detectar en cm.

/*Crear el objeto de la clase NewPing, indicamos el pin utilizado para el Trigger, el pin para la entrada
Echo y la máxima distancia, que es opcional */
NewPing sonar(PIN_TRIG, PIN_ECHO, MAX_DISTANCIA);

void setup() {
  Serial.begin(9600);
}

void loop() {
  // Esperar 1 segundo entre mediciones
  delay(1000);
  // Obtener medición de tiempo de viaje del sonido y guardar en la variable tiempo
  int tiempo = sonar.ping_median();
  // Imprimir el tiempo medido en la consola
  Serial.print("Tiempo: ");
  Serial.print(tiempo);
  Serial.println(" microsegundos");
  // Imprimir la distancia medida en la consola
  Serial.print("Distancia: ");
  // US_ROUNDTRIP_CM constante para determinar la distancia. Convertir el tiempo en distancia (0 = indica fuera de rango)
  Serial.print(tiempo / US_ROUNDTRIP_CM);
  Serial.println(" cm");
}

El código realizado con la librería NewPing es bastante sencillo y además de aceptar el sensor ultrasónico HC-SR04 permite utilizar la gran mayoría de los sensores que usan la interfaz del tipo Interfaz “con medición de pulsos” con 3 y 4 pines.

Programación para sensor ultrasónico sin usar librería.

Puede resultarnos útil saber utilizar el sensor HC-SR04 sin la necesidad de usar una librería. Para crear un disparo limpio primero programamos durante 4 µs la instrucción Low, y después, para la activación del sensor, generamos un pulso eléctrico de 10 µs.

Para obtener el intervalo de tiempo en el que el pulso vuelve de nuevo al sensor, hemos utilizado la función pulseIn y, por último, calculamos la distancia en cm.

Primero configuramos los pines, se crean dos constantes para recibir las señales. «EchoPin» se configura como pin de entrada y «TriggerPin» como salida.

const int EchoPin = 11;
const int TriggerPin = 12;
 
void setup() {
   Serial.begin(9600);
   // configurar los pines de salida y entrada
   pinMode(TriggerPin, OUTPUT);
   pinMode(EchoPin, INPUT);
}

Ahora creamos una función que nos retornará la distancia al objeto:

int ping(int TriggerPin, int EchoPin) {
   long duracion, distanciaCm;    // variables para cálculos
   // pulso para generar un disparo limpio
   digitalWrite(TriggerPin, LOW);  // generar un pulso en el pin trigger a LOW 4us
   delayMicroseconds(4);
   // pulso para activación del sensor
   digitalWrite(TriggerPin, HIGH);  //generar Trigger (disparo) de 10us
   delayMicroseconds(10);
   digitalWrite(TriggerPin, LOW);
   
   duracion = pulseIn(EchoPin, HIGH);  //medimos el tiempo entre pulsos, en microsegundos
   // La velocidad del sonido es de 343 m/s o 29,2 microsegundos por centímetro
   distanciaCm = duracion * 10 / 292/ 2;   //convertimos la distancia, en cm
   return distanciaCm;  // retornamos la distancia
}

En la línea 5 iniciamos el ciclo con el TriggerPin apagado (LOW), pasados 4 microsegundos, activamos el pin TriggerPin durante 10 microsegundos. En la línea 12 medimos el tiempo que el sonido tarda en llegar al receptor y lo almacenamos en la variable duracion. Por fin calculamos la distancia en cm y devolvemos la distancia con la orden return.

En la función loop() primero se hace una llamada a la función ping(), la cual le envía las variable TriggerPin y EchoPin. Esta función nos devuelve la distancia al objeto en cm, la cual se mostrará por el monitor serial.

void loop() {
   int cm = ping(TriggerPin, EchoPin);  // llamada la función ping
   Serial.print("Distancia: ");
   Serial.println(cm);
   delay(1000);
}

A continuación mostramos el código completo:

const int EchoPin = 11;
const int TriggerPin = 12;
 
void setup() {
   Serial.begin(9600);
   // configurar los pines de salida y entrada
   pinMode(TriggerPin, OUTPUT);
   pinMode(EchoPin, INPUT);
}
 
void loop() {
   int cm = ping(TriggerPin, EchoPin);  // llamada la función ping
   Serial.print("Distancia: ");
   Serial.println(cm);
   delay(1000);
}
 
int ping(int TriggerPin, int EchoPin) {
   long duracion, distanciaCm;    // variables para cálculos

   // pulso para generar un disparo limpio
   digitalWrite(TriggerPin, LOW);  // generar un pulso en el pin trigger a LOW 4us
   delayMicroseconds(4);
   // pulso para activación del sensor
   digitalWrite(TriggerPin, HIGH);  //generar Trigger (disparo) de 10us
   delayMicroseconds(10);
   digitalWrite(TriggerPin, LOW);
   
   duracion = pulseIn(EchoPin, HIGH);  //medimos el tiempo entre pulsos, en microsegundos

   // La velocidad del sonido es de 343 m/s o 29,2 microsegundos por centímetro
   distanciaCm = duracion * 10 / 292/ 2;   //convertimos la distancia, en cm
   return distanciaCm;  // retornamos la distancia
}

En el monitor serial aparecerán las medidas realizadas por el sensor HC-SR04, variando la distancia del objeto podremos ver como cambia la distancia y podremos verificar la distancia mostrada midiendo con una regla el espacio de separación.

Monitor serial mostrando los resultado

Artículos que te pueden interesar

Robot controlado por bluetooth con Arduino
¿Cómo hacer un coche controlado por bluetooth con Arduino?

¿Cómo hacer un coche controlado por bluetooth con Arduino?

| Actualizado:
Comentarios: 4

En este tutorial construiremos un robot móvil controlado por Bluetooth desde nuestro móvil a través de una aplicación de Android. El montaje y la puesta en funcionamiento de este pequeño coche es sencillo puesto que es el resultado de la…

Juego de la serpiente con Arduino

Juego de la serpiente con Arduino

| Actualizado:
Comentarios: 0

Aquellos que tuvieron un Nokia, recordarán el famoso juego de la serpiente. En este artículo desarrollaremos la programación necesaria para realizar el juego de la serpiente utilizando la placa Arduino y una matriz LED de 8×8. Material utilizado: Placa Arduino…

Display de 4 dígitos y 7 segmentos
Funcionamiento del display de 4 dígitos y 7 segmentos con Arduino

Funcionamiento del display de 4 dígitos y 7 segmentos con Arduino

| Actualizado:
Comentarios: 0

Para mostrar más información, como la hora o la temperatura, necesitamos un display de más dígitos o conectar varios display de un solo dígito. En este tutorial veremos cómo conectar un display de 4 dígitos a Arduino. Contenido 1 Esquema…

¿Cómo medir la temperatura y la humedad con el módulo DHT11 y Arduino?
Medir la temperatura y humedad con Arduino

Módulo DHT11, medir la temperatura y la humedad con Arduino.

| Actualizado:
Comentarios: 1

En este artículo veremos el funcionamiento del módulo DHT11 para medir la temperatura y la humedad, realizaremos la conexión con la placa Arduino y mostraremos las medidas obtenidas a través de una pantalla LCD. Contenido 1 Conectando el sensor DHT11…

Comentarios - 0

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *