Articles

cómo usar un Sensor de distancia ultrasónico HC-SR04 con Arduino

El HC-SR04 es un sensor de distancia ultrasónico económico y fácil de usar, con un rango de 2 a 400 cm. Se utiliza comúnmente en robots que evitan obstáculos y proyectos de automatización. En este tutorial, aprenderá cómo funciona el sensor y cómo usarlo con Arduino.

he incluido 5 ejemplos con un diagrama de cableado y código para que pueda comenzar a experimentar con su sensor., Primero veremos un ejemplo que no usa una biblioteca Arduino. A continuación, le mostraré cómo puede usar la biblioteca NewPing para crear un código más compacto.

Los sensores ultrasónicos baratos de distancia / proximidad son excelentes, pero en algunos proyectos, es posible que necesite un sensor impermeable como el JSN-SR04T o un sensor IR que no esté influenciado por los cambios de temperatura.,on

20×4 character I2C LCD (optional) × 1 Amazon
AliExpress DHT11 sensor (optional) × 1 Amazon

Software

Arduino IDE

Makerguides.,com es un participante en el programa de Asociados de Amazon Services LLC, un programa de publicidad de afiliados diseñado para proporcionar un medio para que los sitios ganen tarifas de publicidad mediante publicidad y enlaces a productos en Amazon.com.

¿cómo funciona un sensor de distancia ultrasónico?

Los sensores ultrasónicos funcionan emitiendo ondas de sonido con una frecuencia que es demasiado alta para que un humano pueda oír. Estas ondas sonoras viajan a través del aire con la velocidad del sonido, aproximadamente 343 m/s., Si hay un objeto delante del sensor, las ondas de sonido se reflejan hacia atrás y el receptor del sensor ultrasónico las detecta. Al medir el tiempo transcurrido entre el envío y la recepción de las ondas sonoras, se puede calcular la distancia entre el sensor y el objeto.

Ultrasónicos sensores de distancia principio de funcionamiento. Fuente: https://www.maxbotix.com/

A 20°C, la velocidad del sonido es de aproximadamente 343 m/s o 0.034 cm/µs., Digamos que el tiempo entre el envío y la recepción de las ondas de sonido es de 2000 microsegundos. Si multiplicas la velocidad del sonido por el tiempo que viajaron las ondas sonoras, obtienes la distancia que viajaron las ondas sonoras.

distancia = velocidad X tiempo

pero ese no es el resultado que estamos buscando. La distancia entre el sensor y el objeto es en realidad solo la mitad de esta distancia porque las ondas de sonido viajaron desde el sensor al objeto y de regreso desde el objeto al sensor. Así que tienes que dividir el resultado por dos.,

Distancia (cm) = Velocidad del sonido (cm/µs) × Tiempo (µs) / 2

Y así, por el ejemplo, esto se convierte en:

Distancia (cm) = 0.0343 (cm/µs) × 2000 (µs) / 2 = 34.3 cm

la dependencia de la Temperatura de la velocidad del sonido

La velocidad del sonido depende fuertemente de la temperatura, y en mucho menor grado en la humedad del aire. Wikipedia afirma que la velocidad del sonido aumenta con aproximadamente 0.6 m/s por grado Celsius., Para la mayoría de los casos a 20°C, solo puede usar 343 m/s, pero si desea obtener lecturas más precisas, puede calcular la velocidad del sonido con la siguiente fórmula:

V (m/s) = 331.3 + (0.606 × T)

V = Velocidad del sonido (m/s)
T = Temperatura del aire (°c)

esta fórmula no incluye la humedad ya que su efecto sobre la velocidad del sonido es muy pequeño.

a continuación puede encontrar un tutorial sobre cómo usar un sensor de temperatura y humedad DHT11 para calibrar la velocidad del sonido y obtener una lectura de distancia más precisa con el HC-SR04.,

cómo funciona el HC-SR04

en la parte delantera del sensor HC-SR04, puede encontrar dos cilindros de plata (transductores ultrasónicos), uno es el transmisor de las ondas de sonido y el otro es el receptor. Para que el sensor genere una ráfaga sónica, debe configurar el pin trigonométrico alto durante al menos 10 µs. El sensor crea una ráfaga de ultrasonido de 8 ciclos a 40 kHz.

esta explosión sónica viaja a la velocidad del sonido y rebota y es recibida por el receptor del sensor. El pin de Eco emite entonces el tiempo que las ondas de sonido viajaron en microsegundos.,

Puede usar la función pulseIn() en el código Arduino para leer la longitud del pulso desde el pin de Eco. Después de eso, puede usar la fórmula mencionada anteriormente para calcular la distancia entre el sensor y el objeto.,ncy

40 kHz rango de medición 2 – 400 cm resolución 3 mm ángulo de medición 15 grados señal de entrada de disparo 10 µs de pulso alto cost check price

para obtener más información, puede consultar la hoja de datos a continuación:

wiring – connecting hc-sr04 to arduino uno

El diagrama de cableado a continuación le muestra cómo conectar el sensor hc-sr04 al Arduino.,

HC-SR04 with Arduino wiring diagram

Los ejemplos de código a continuación utilizan el pin digital 2 y 3 para el disparador y el pin de eco respectivamente, pero por supuesto, puede cambiar esto a cualquier pin digital que desee.,C-SR04 Connections

HC-SR04 Arduino
VCC 5 V
Trig Pin 2
Echo Pin 3
GND GND

Example code for HC-SR04 with Arduino

Now that you have wired up the sensor it is time to connect the Arduino to the computer and upload some code., Puede cargar el siguiente código de ejemplo en su Arduino utilizando el IDE de Arduino. A continuación, te explicaré cómo funciona el código.

cómo funciona el código

primero, se definen el pin de disparo y el pin de eco. Yo los llamo trigPin y EchoPin. El pasador de gatillo está conectado al pasador digital 2 y el pasador de eco al pasador digital 3 en el Arduino.

La instrucción #define se utiliza para dar un nombre a un valor constante., El compilador reemplazará cualquier referencia a esta constante con el valor definido cuando se compile el programa. Así que dondequiera que mencione trigPin, el compilador lo reemplazará con el valor 2 cuando se compile el programa.

// Define Trig and Echo pin:#define trigPin 2#define echoPin 3

a continuación, he definido dos variables: duration y distance. Duration almacena el tiempo entre el envío y la recepción de las ondas sonoras. La variable distancia se utiliza para almacenar la distancia calculada.,

// Define variables:long duration;int distance;

en el setup(), comienza configurando el trigPin como salida y el echoPin como entrada. A continuación inicializa la comunicación en serie a una velocidad de baudios de 9600. Más tarde mostrará la distancia medida en el monitor serie, al que se puede acceder con Ctrl+Shift+M o Herramientas > Monitor Serie. Asegúrese de que la velocidad en baudios también esté establecida en 9600 en el monitor serie.

en el loop(), se activa el sensor configurando el trigPin alto para 10 µs., Tenga en cuenta que para obtener una señal limpia, comience limpiando el trigPin configurándolo BAJO durante 5 microsegundos.

a continuación, debe leer la longitud del pulso enviado por el echoPin. Utilizo la función pulseIn() para esto. Esta función espera a que el pin vaya de bajo a alto, comienza el tiempo, luego espera a que el pin vaya bajo y detiene el tiempo.

después de eso, puede calcular la distancia utilizando la fórmula mencionada en la introducción de este tutorial.

finalmente, la distancia calculada se imprime en el monitor serie.,

código de ejemplo HC-SR04 con Arduino y biblioteca NewPing

La biblioteca NewPing escrita por Tim Eckel se puede utilizar con muchos sensores de distancia ultrasónicos. La última versión de esta biblioteca se puede descargar aquí en bitbucket.org. puede notar que el código a continuación, que utiliza la biblioteca NewPing, es mucho más corto que el código que usamos antes. Además de eso, la biblioteca de NewPing incluye algunas otras características interesantes. Le permite establecer una distancia máxima para leer, no se retrasará por un segundo completo cuando no se recibe eco y tiene un filtro de mediana incorporado.,

Puede instalar la biblioteca yendo a Sketch >Include Library > Add .Biblioteca ZIP en el IDE de Arduino.

la biblioteca incluye algunos ejemplos que puede usar, pero tendrá que modificarlos para que coincidan con su configuración de hardware. He incluido un código de ejemplo modificado a continuación que se puede usar con la misma configuración de cableado que antes.

También puede usar distance = sonar.ping_cm()o distance = sonar.ping_in() que devuelve la distancia medida en centímetros o pulgadas enteras., Con esta función no es necesario tomar una medida de duración y calcular la distancia.

interfaz de sensores ultrasónicos en modo de 3 pines

La biblioteca NewPing también facilita la interfaz con sensores ultrasónicos mientras usa solo 1 pin de E / S. Esto puede ser útil si tiene muy pocos Pines de E/S disponibles o si desea usar un sensor ultrasónico de 3 pines como el Ping de paralaje.

para crear una configuración de 3 pines (GND, 5V y SIG) tienes que conectar tanto el pin de gatillo como el pin de eco al mismo pin digital en el Arduino., En el código, lo único que tienes que cambiar es la línea 6-7 y definir el mismo pin tanto para el trigPin como para el echoPin. Por ejemplo pin digital 2.

//Define Trig and Echo pin#define trigPin 2#define echoPin 2

cómo usar el filtro digital ping_median ()

Lo principal que me gusta de la biblioteca NewPing es que tiene un filtro de mediana incorporado. Este filtro puede mejorar en gran medida la precisión de sus lecturas HC-SR04. La función ping_median() toma muchas mediciones de duración en una fila, arroja las lecturas fuera de rango y luego promedia las restantes., De forma predeterminada, tomará 5 lecturas, pero puede especificar cuántas debe tomar. Sustitúyase la línea 19 por las líneas siguientes.

int iterations = 5;duration = sonar.ping_median(iterations);

código de ejemplo HC-SR04 con LCD I2C y Arduino

para mostrar la distancia medida en una LCD i2c 2004 o 1602, todo lo que tiene que hacer es hacer las siguientes conexiones y cargar el código a continuación. El sensor HC-SR04 está conectado de la misma manera que antes.

HC-SR04 con Arduino y diagrama de cableado de i2c LCD.,

I2C LCD Connections

I2C LCD Arduino
GND GND
VCC 5 V
SDA A4
SCL A5

If you are not using an Arduino Uno, the SDA and SCL pins can be at a different location., Un Arduino UNO con el diseño R3 (pinout 1.0), también tiene los encabezados de Pines SDA (línea de datos) y SCL (línea de reloj) cerca del pin AREF. Consulte la siguiente tabla para obtener más detalles.,f43445″>

Arduino Uno A4 A5 Arduino Nano A4 A5 Arduino Micro 2 3 Arduino Mega 2560 20 21 Arduino Leonardo 2 3 Arduino Due 20 21
I2C pin locations for different Arduino boards

The code uses the LiquidCrystal_I2C library, which you can download here on GitHub., Asegúrese de que usted tiene esta biblioteca exacta instalada! También incluye el Cable.biblioteca h, que le permite comunicarse con dispositivos I2C. Esta biblioteca debería venir preinstalada con el IDE de Arduino.

si desea obtener más información sobre cómo controlar una LCD I2C con Arduino, puede consultar el tutorial completo aquí.

  • Cómo controlar un carácter LCD i2c con Arduino

tenga en cuenta que utilicé una pantalla LCD de 20 x 4. Si tiene un LCD de tamaño diferente (16 x 2 también es común), debe cambiar la línea 20 a LiquidCrystal_I2C lcd(0x27,16,2);., Si su LCD no tiene la dirección I2C predeterminada, 0x27, consulte el tutorial completo de I2C donde explico cómo puede averiguar cuál es la dirección.

código de ejemplo HC-SR04 con sensor de temperatura DHT11 y Arduino

como se mencionó anteriormente, la velocidad del sonido depende en gran medida de la temperatura del aire. Si desea medir largas distancias (3-4 m), puede ser una buena idea agregar un sensor de temperatura y humedad DHT11 o DHT22 a su configuración. Esto le permitirá calibrar la velocidad del sonido en tiempo real y, por lo tanto, aumentar la precisión de sus mediciones.,

agregar un sensor DHT11 es realmente simple. El diagrama de cableado a continuación le muestra qué conexiones necesita hacer. Tenga en cuenta que estoy usando un DHT11 con una placa de desbloqueo, por lo que solo necesito conectar 3 pines. Asegúrese de comprobar la etiqueta del sensor, el orden de los pines puede ser diferente dependiendo del fabricante. El sensor HC-SR04 está conectado de la misma manera que antes.

HC-SR04 con Arduino y diagrama de cableado DHT11.,

DHT11 Connections

DHT11 Arduino
VCC (+) 5 V
Signal (s) Pin 4
GND (-) GND

The code below uses the Adafruit DHT Humidity & Temperature Sensor library which you can download here on GitHub., Esta biblioteca solo funciona si también tienes instalada la biblioteca Adafruit_Sensor, que también está disponible en GitHub. También puede descargar las dos bibliotecas haciendo clic en los botones a continuación:

Puede hacer clic en el botón en la esquina superior derecha del campo de código para copiar el código.

código de ejemplo HC-SR04 con DHT11 e I2C LCD

HC-SR04 con Arduino, DHT11 e I2C LCD diagrama de cableado.

el siguiente código se puede utilizar para combinar los 3 ejemplos anteriores., Muestra la temperatura, la velocidad del sonido y la distancia medida en la pantalla LCD.

HC-SR04 dimensiones

a continuación puede encontrar las dimensiones del sensor ultrasónico HC-SR04. He notado que hay algunas pequeñas diferencias entre los fabricantes, por lo que recomiendo doble comprobación en contra de su propio sensor.

HC-SR04 Dimensions

HC-SR04 CAD

he creado dibujos CAD básicos del sensor ultrasónico HC-SR04 que se puede descargar a continuación.,

conclusión

en este artículo, le he mostrado cómo funciona el sensor de distancia ultrasónico HC-SR04 y cómo puede usarlo con Arduino. Espero que lo haya encontrado útil e informativo. Si lo hiciste, por favor compartirlo con un amigo que también le gusta la electrónica!

proyecto Personal: hace un par de meses construí una instalación mural interactiva con unos amigos. Utilizamos alrededor de 30 sensores ultrasónicos de distancia para detectar a las personas que caminaban frente a la pared. La pared incluía luces y efectos de sonido que cambiaban dependiendo de cuán lejos estuvieran las personas de pie.,

foto: Guus Schoonewille

me encantaría saber qué proyectos planea construir (o ya ha construido) con el sensor de distancia HC-SR04. Si tienes alguna pregunta, sugerencia o si crees que faltan cosas en este tutorial, por favor deja un comentario abajo.