Tutorial de sensores ultrasónicos para Arduino, ESP8266 y ESP32

Aprende a utilizar el sensor de distancia ultrasónico HC-SR04 con diferentes placas Arduino, ESP8266 y ESP32 para medir la distancia entre el sensor y un objeto.

En este tutorial, aprenderá a utilizar el sensor de distancia ultrasónico HC-SR04 para medir la distancia entre el sensor y un objeto.

Aprenderá cómo funciona el ultrasonido en general, el cableado entre el módulo HC-SR04 y varias placas de microcontroladores Arduino, ESP8266 y ESP32, y cómo programar el código para medir la distancia.

En el último ejemplo, mejoramos la medición al incluir la temperatura y la humedad en el cálculo.

Tutorial de sensores ultrasónicos para Arduino y ESP8266

Funcionalidad de un sensor de distancia ultrasónico

El sensor de distancia ultrasónico se utiliza para medir la distancia entre el sensor y un objeto. Hay muchos proyectos robóticos que utilizan el sensor para identificar una pared en un laberinto y rotar el robot en un esfuerzo por encontrar una salida del laberinto.

El sensor más utilizado es el sensor de distancia ultrasónico HC-SR04 que se muestra en la siguiente imagen.

Sensor de distancia ultrasónico HC-SR04

Este sensor puede medir una distancia entre 2 cm y 4 m. La medición se realiza por el tiempo necesario para recibir el eco de una onda de sonido ultrasónico de 40 kHz que es emitido por el sensor, reflejado por el objeto y recibido por el receptor del sensor de distancia ultrasónico.

Para obtener mediciones confiables, el sensor de distancia ultrasónico debe estar perpendicular a la superficie escaneada en las direcciones horizontal y vertical. Para mejorar aún más la precisión de la medición, la superficie escaneada debe ser plana.

Hoja de datos del sensor de distancia ultrasónico HC-SR04

El sensor de distancia ultrasónico HC-SR04 tiene las siguientes especificaciones técnicas:

Fuente de alimentación1. Gen 4,8V…5V DC
2. Gen 3V…5V DC
Corriente de reposo<2mA
Corriente de trabajo15mA
Ángulo de incidencia<15°
Distancia de alcance2cm…400cm
1″…13ft
Resolución0,3 cm
Ángulo de medición30°
Ancho de pulso de la entrada de disparo10uS
Dimensión45mm x 20mm x 15mm

La siguiente tabla le brinda una descripción general de todos los componentes y partes que utilicé para este tutorial. Recibo comisiones por compras realizadas a través de los enlaces de esta tabla.

Arduino NanoAmazonAliExpress
Arduino Pro MiniAmazonAliExpress
Arduino UnoAmazonAliExpress
Arduino MegaAmazonAliExpress
ESP32 ESP-WROOM-32AmazonAliExpress
ESP8266 NodeMCUAmazonAliExpress
ESP8266 WeMos D1 MiniAmazonAliExpress
HC-SR04 Sensor de distancia ultrasónico y sensor de temperatura en kit de sensoresAmazonAliExpress

Medición de distancia básica con sensor ultrasónico

El siguiente ejemplo le dará una descripción general rápida de las ecuaciones para medir la distancia con un sensor de distancia ultrasónico. El sensor envía una señal de ocho ciclos a 40 kHz. Después del tiempo_1, la señal se reflejará desde el objeto y después del tiempo_2, la señal volverá al sensor y se medirá. Por lo tanto, la distancia entre el sensor y el objeto es la velocidad del sonido multiplicada por la mitad de la suma del tiempo que la señal fue enviada, reflejada y recibida.

Con el tiempo total, la señal ultrasónica necesaria para volver al sensor y el conocimiento de que la velocidad del sonido es 343 m / s, podemos calcular la distancia entre el módulo del sensor ultrasónico y el objeto. Consejo: usaremos una biblioteca que hará este trabajo por nosotros 🙂

Cableado entre el sensor de distancia ultrasónico HC-SR04 y el microcontrolador

Si tiene la primera generación del HC-SR04 y usa el ESP8266 o ESP32, necesita alimentar el sensor de distancia ultrasónico desde la fuente de alimentación de 5V de la conexión USB (VIN, VV, V5). Pero si tiene la segunda generación, también puede usar la salida estándar del microcontrolador de 3.3V.

Las siguientes imágenes muestran el cableado entre el sensor de distancia ultrasónico HC-SR04 y diferentes microcontroladores Arduino, ESP8266 y ESP32.

Arduino Nano

Cableado del sensor de distancia ultrasónico Arduino Nano HC-SR04

Para obtener más información sobre Arduino Nano, visite el tutorial de Arduino Nano.

Arduino Pro Mini

Cableado del sensor de distancia ultrasónico Mini Arduino Pro HC-SR04

Arduino Uno

Cableado del sensor de distancia ultrasónico Arduino Uno HC-SR04

Para obtener más información sobre Arduino Uno, visite el tutorial de Arduino Uno.

Arduino Mega

Cableado del sensor de distancia ultrasónico Mega Arduino HC-SR04

Para obtener más información sobre Arduino Mega, visite el tutorial de Arduino Mega.

ESP32 ESP-WROOM-32

Cableado del sensor de distancia ultrasónico HC-SR04 EPS32 ESP-WROOM-32

ESP8266 NodeMCU

Cableado del sensor de distancia ultrasónico HC-SR04 ESP8266 NodeMCU

ESP8266 WeMos D1 Mini

Cableado del sensor de distancia ultrasónico Mini HC-SR04 ESP8266 WeMos D1

Código para medir la distancia con el módulo HC-SR04

Después de conectar nuestros dispositivos, ingresaremos el código. Nuestro objetivo es medir la distancia entre el sensor y nuestra mano e imprimir la distancia a la salida del monitor en serie. Si la distancia está fuera de rango (<2 cm ou> 4m), mostraremos un error.

Para la implementación, utilizamos la biblioteca de sensores de distancia ultrasónicos HC-SR04 llamada Biblioteca NewPing de Tim Eckel. Si no sabe cómo instalar una nueva biblioteca en su IDE de Arduino, escribí un tutorial paso a paso sobre la instalación de bibliotecas.

La biblioteca NewPing tiene algunas funciones muy interesantes. Aquí están los 3 primeros:

  • sonar.ping_cm (): devuelve la distancia entre el sensor y el objetivo, pero no hay dígitos después
    el punto decimal.
  • sonar.convert_cm (echotime): devuelve la distancia basada en el tiempo del eco, pero se pueden observar valores atípicos.
    Es más robusto calcular la distancia entre el sensor y el punto directamente a partir del tiempo de eco.
  • sonar.ping_median (número de observaciones): devuelve el tiempo de eco medio para el número de observaciones, con un mínimo de cinco observaciones, después de excluir los valores fuera de rango.
#include "NewPing.h"      // include NewPing library

// for Arduino microcontroller
int trigPin = 6;      // trigger pin
int echoPin = 7;      // echo pin

// for ESP8266 microcontroller
//int trigPin = D0;      // trigger pin
//int echoPin = D1;      // echo pin

// for ESP32 microcontroller
//int trigPin = 4;      // trigger pin
//int echoPin = 0;      // echo pin

NewPing sonar(trigPin, echoPin);

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

void loop(){
  float distance = sonar.ping_median(5);

  if(distance>400 || distance<2) Serial.println("Out of range");
  else
  {
    Serial.print("Distance: ");
    Serial.print(distance, 1); Serial.println(" cm");
  }
 
  delay(50);
}

El primer conjunto es incluir la biblioteca NewPing que queremos usar. A continuación, debemos configurar los pines de conexión entre nuestro microcontrolador y el sensor de distancia ultrasónico HC-SR04. Debido a que creé este script para los microcontroladores Arduino, ESP8266 y ESP32, solo necesita usar una sección de los siguientes tres que se crea para su microcontrolador. Puede eliminar o comentar las secciones que no necesita.

Después de incluir la biblioteca y definir los pines de conexión, creamos un objeto NewPing, llamado sonar, que tiene dos argumentos: el disparador y el pin de eco.

En la función de configuración, establecemos la velocidad en baudios en 9600, que debe coincidir con la velocidad en baudios de su monitor en serie o trazador en serie en el IDE de Arduino.

En la función de bucle, usamos la función ping_median de nuestro objeto sirena creado para obtener la distancia del objeto detectado en cm y registrar la distancia en un nuevo variable. También puede utilizar la función ping_cm en este punto.

En cuanto a nuestro objetivo, por ejemplo, si la distancia es superior a 4 mo menos de 2 cm, queremos imprimir en el monitor de serie que el objeto está fuera de alcance. De lo contrario, queremos imprimir la distancia al monitor de serie. Esto se hace en el script del programa a través de una instrucción if-else.

Al final de la función de bucle, esperamos 50ms y volvemos a iniciar la función de bucle.

La siguiente imagen muestra el monitor serial Arduino IDE con la distancia medida y también ve el mensaje cuando la distancia está fuera de rango.

Salida de distancia ultrasónica 1

Medición de distancia mejorada con sensor ultrasónico con temperatura y humedad

En el primer ejemplo la distancia se calcula con una velocidad de sonido de 343 m / s lo que nos da una buena precisión de la distancia. Pero la velocidad del sonido depende de la temperatura y la humedad por donde viaja la onda ultrasónica. Por lo tanto, podemos mejorar la precisión utilizando la siguiente ecuación que calcula la velocidad del sonido en función de la temperatura y la humedad: v_sonido = 331,3 + (0,606 * temp ° C) + (0,0124 * humedad) m / s.

En el siguiente ejemplo utilizaremos diferentes microcontroladores Arduino, ESP8266 y ESP32 así como un sensor de temperatura y humedad para optimizar la medición de distancia.

Cableado entre HC-SR04, DHT22 y microcontrolador

Si tiene la primera generación del HC-SR04 y usa el ESP8266 o ESP32, necesita alimentar el sensor de distancia ultrasónico desde la fuente de alimentación de 5V de la conexión USB (VIN, VV, V5). Pero si tiene la segunda generación, también puede usar la salida estándar del microcontrolador de 3.3V.

Las siguientes imágenes muestran el cableado entre el sensor de distancia ultrasónico HC-SR04, el sensor de temperatura y humedad DHT22 y diferentes microcontroladores Arduino, ESP8266 y ESP32.

Si desea saber más sobre los sensores de temperatura y humedad, hay un artículo completo sobre los diferentes sensores de temperatura y humedad, incluidos DHT11 y DHT22.

Arduino Nano

Cableado del sensor de distancia ultrasónico HC-SR04 DHT22 Arduino Nano

Para obtener más información sobre Arduino Nano, visite el tutorial de Arduino Nano.

Arduino Pro Mini

Cableado del sensor de distancia ultrasónico Mini HC-SR04 DHT22 Arduino Pro

Arduino Uno

Cableado del sensor de distancia ultrasónico HC-SR04 DHT22 Arduino Uno

Para obtener más información sobre Arduino Uno, visite el tutorial de Arduino Uno.

Arduino Mega

Cableado del sensor de distancia ultrasónico Mega HC-SR04 DHT22 Arduino

Para obtener más información sobre Arduino Mega, visite el tutorial de Arduino Mega.

ESP32 ESP-WROOM-32

Cableado del sensor de distancia ultrasónico HC-SR04 DHT22 EPS32 ESP-WROOM-32

ESP8266 NodeMCU

Cableado del sensor de distancia ultrasónico HC-SR04 DHT22 ESP8266 NodemMCU

ESP8266 WeMos D1 Mini

HC-SR04 DHT22 ESP8266 Cableado del sensor de distancia ultrasónico WeMos D1 Mini

Código para mejorar la medición de distancias con el módulo HC-SR04

En el código del programa, agregamos la lectura del sensor de temperatura y calculamos la velocidad del sonido como la ecuación. También agregamos algunas variables en la salida en serie:

  • echoTime: valor bruto del sensor de distancia ultrasónico HC-SR04 para calcular la distancia entre el sensor y el objeto.
  • distancia: la distancia entre el sensor y el objeto.
  • temperatura y humedad: la temperatura y la humedad del DHT22 para calcular la velocidad del sonido.
#include "NewPing.h"      // include NewPing library
#include "DHT.h"
#define DHT22TYPE DHT22   // DHT22 type

// for Arduino microcontroller
int DHT22PIN = 5;     // DHT22 pin
int trigPin = 6;      // trigger pin
int echoPin = 7;      // echo pin

// for ESP8266 microcontroller
//int DHT22PIN = D2;     // DHT22 pin
//int trigPin = D0;      // trigger pin
//int echoPin = D1;      // echo pin

// for ESP32 microcontroller
//int DHT22PIN = 2;     // DHT22 pin
//int trigPin = 4;      // trigger pin
//int echoPin = 0;      // echo pin

NewPing sonar(trigPin, echoPin);
DHT dht22(DHT22PIN, DHT22TYPE);

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

void loop(){
  int echoTime = sonar.ping();          // echo time (μs)
  float temperature = dht22.readTemperature();
  float humidity = dht22.readHumidity();
  float vsound = 331.3+(0.606*temperature)+(0.0124*humidity);
  float distance = (echoTime/2.0)*vsound/10000; // distance between sensor and target in cm
  
  Serial.print("echo time: ");    
  Serial.print(echoTime);         
  Serial.print(" microsecst"); 
  Serial.print("distance: ");    
  Serial.print(distance,2);      
  Serial.print(" cm");            
  Serial.print("t Temperature: ");
  Serial.print(temperature);
  Serial.print("t Humidity: ");
  Serial.println(humidity);
  delay(50);
}

La mayor parte del código del programa Arduino es el mismo en comparación con el primer ejemplo. Por lo tanto, solo me enfocaré en las líneas que son diferentes.

En la primera parte del código del programa, necesitamos agregar la biblioteca DHT para el sensor de temperatura y humedad. Como existen diferentes módulos DHT, debemos definir que nuestro sensor DHT utilizado es un sensor DHT22. Si está utilizando DHT11, debe cambiar esta línea.

A continuación, debemos agregar el pin que conecta el sensor DHT al microcontrolador. En cada uno de los tres apartados añadimos el pin de conexión que obtenemos del apartado de cableado anterior.

Al igual que el sensor ultrasónico, necesitamos crear un nuevo objeto DHT llamado dht22 que obtiene el pin de conexión del sensor DHT y el tipo DHT.

En la función de configuración, necesitamos inicializar el objeto dht22 con dht22.begin ().

La magia ocurre en la función de bucle. En lugar de recibir la distancia de la biblioteca NewPing, solo obtenemos el tiempo de eco en μs. A continuación, obtenemos la temperatura y la humedad del sensor DHT y calculamos la velocidad del sonido con la ecuación.

Ahora la distancia entre el HC-SR04 y el objeto es la mitad del tiempo de eco (HC-SR04 -> objeto -> HC-SR04) multiplicado por la velocidad del sonido y dividido por 10,000 para obtener la distancia en cm.

Al final, imprimimos el tiempo de eco, la distancia, la temperatura y la humedad en el monitor serial del Arduino IDE que ves en la siguiente imagen.

Salida de distancia ultrasónica 2

¿Tiene más preguntas sobre el sensor de distancia ultrasónico? Utilice la sección de comentarios a continuación para hacer sus preguntas.

¿Y para qué proyectos le gustaría utilizar el sensor de distancia? También hay un segundo sensor para detectar objetos dentro de un rango predefinido, el módulo de distancia por infrarrojos.


Deja un comentario