Los sensores ultrasónicos HC-SR04 son una herramienta clave en el mundo de la electrónica y la robótica. Estos sensores emiten ondas sonoras de alta frecuencia para medir distancias con precisión, y son muy utilizados en proyectos con Arduino. En este artículo, te explicaremos detalladamente cómo funciona el sensor ultrasónico HC-SR04 y cómo puedes conectarlo a tu placa Arduino para sacarle el máximo provecho. ¡Sigue leyendo para descubrir todo lo que necesitas saber sobre este fascinante dispositivo!
Agregue potencia de murciélago a su próximo proyecto Arduino con el sensor de distancia ultrasónico HC-SR04, que puede informar la distancia de objetos hasta 13 pies de distancia. Es bueno saberlo si estás intentando evitar que tu robot golpee una pared.
Son de bajo consumo de energía (adecuados para dispositivos que funcionan con baterías), asequibles, fáciles de conectar y extremadamente populares entre los aficionados.
¿Qué es el ultrasonido?
El ultrasonido es una onda sonora de tono alto cuya frecuencia excede el rango audible del oído humano.
Los humanos pueden escuchar ondas sonoras que vibran en un rango de aproximadamente 20 veces por segundo (un estruendo profundo) a 20.000 veces por segundo (un silbido agudo). Sin embargo, los ultrasonidos tienen una frecuencia de más de 20.000 Hz y, por tanto, son inaudibles para los humanos.
Descripción general del hardware HC-SR04
Un sensor de distancia ultrasónico HC-SR04 en realidad consta de dos transductor ultrasónico.
Uno actúa como transmisor, convirtiendo la señal eléctrica en pulsos ultrasónicos a 40 kHz. El otro actúa como receptor y escucha los impulsos enviados.
Cuando el receptor recibe estos pulsos, produce un pulso de salida cuyo ancho es proporcional a la distancia del objeto que tiene delante.
Este sensor proporciona una excelente detección de áreas sin contacto entre 2 cm y 400 cm (~13 pies) con una precisión de 3 mm.
Dado que funciona con 5 voltios, se puede conectar directamente a un Arduino u otro microcontrolador lógico de 5 V.
Especificaciones técnicas
Aquí están las especificaciones:
Tensión de funcionamiento | CC 5 V |
Corriente de funcionamiento | 15mA |
Frecuencia de trabajo | 40 kHz |
Rango maximo | 4m |
Rango mínimo | 2cm |
Precisión de distancia | 3mm |
medir ángulos | 15 grados |
Señal de entrada del disparador | Pulso TTL de 10 µS |
Dimensiones | 45x20x15mm |
Asignación de pines del sensor ultrasónico HC-SR04
Echemos un vistazo al pinout.
VCC Suministra energía al sensor ultrasónico HC-SR04. Puedes conectarlo a la salida de 5V de tu Arduino.
Trigonometría El pasador se utiliza para activar pulsos ultrasónicos. Al configurar este pin en ALTO durante 10 µs, el sensor activa una ráfaga ultrasónica.
eco El pin sube cuando se envía la ráfaga ultrasónica y permanece alto hasta que el sensor recibe un eco. Luego baja. Midiendo el tiempo que el pin de eco permanece alto, se puede calcular la distancia.
Tierra es el pin de tierra. Conéctalo a tierra del Arduino.
¿Cómo funciona el sensor de distancia ultrasónico HC-SR04?
Todo comienza cuando el pasador del gatillo se establece en ALTO durante 10 µs. En respuesta, el sensor envía una ráfaga ultrasónica de ocho pulsos a 40 kHz. Este patrón de 8 pulsos está diseñado específicamente para permitir que el receptor distinga los pulsos transmitidos del ruido ultrasónico ambiental.
Estos ocho pulsos de ultrasonido viajan por el aire alejándose del transmisor. Mientras tanto, el pin de eco se pone ALTO para activar la señal de retorno de eco.
Si estos pulsos no se reflejan, la señal de eco expira y baja después de 38 ms (38 milisegundos). Un pulso de 38 ms indica que no hay ningún obstáculo en la zona del sensor.
Cuando estos pulsos se reflejan, el pin de eco baja tan pronto como se recibe la señal. Esto genera un pulso en el pin de eco, cuyo ancho varía entre 150 µs y 25 ms dependiendo del tiempo de recepción de la señal.
Calculando la distancia
La distancia al objeto reflejado se calcula a partir del ancho del pulso recibido. Esto se puede calcular utilizando la sencilla ecuación distancia-velocidad-tiempo que aprendimos en la escuela secundaria. Una manera fácil de recordar la ecuación es ordenar las letras en un triángulo.
Pongamos un ejemplo para que quede más claro. Supongamos que tenemos un objeto a una distancia desconocida frente al sensor y recibimos un pulso con un ancho de 500 µs en el pin de eco. Ahora calculemos qué tan lejos está el objeto del sensor. Para ello utilizamos la siguiente ecuación.
Distancia = velocidad x tiempo
Aquí tenemos el valor del tiempo, es decir, 500 µs, y conocemos la velocidad. ¡Por supuesto que es la velocidad del sonido! es 340m/s. Para calcular la distancia, tenemos que convertir la velocidad del sonido a cm/μs. Es 0,034 cm/μs. ¡Con esta información ahora podemos calcular la distancia!
Distancia = 0,034 cm/μs x 500 μs
¡Pero aún no hemos terminado! Recuerde que el pulso de eco indica el tiempo que tarda la señal en transmitirse y reflejarse. Para encontrar la distancia, debes dividir tu respuesta por dos.
Distancia = (0,034 cm/μs x 500 μs) / 2
Distancia = 8,5 cm
Ahora sabemos que el objeto es 8,5 cm lejos del sensor.
Cableado de un sensor HC-SR04 a un Arduino
Ahora que entendemos completamente cómo funciona el sensor ultrasónico HC-SR04, ¡podemos comenzar a conectarlo a nuestro Arduino!
Conectar el HC-SR04 a Arduino es muy sencillo. Primero, coloque el sensor en su placa. Conecte el pin VCC al pin 5V del Arduino y el pin GND al pin de tierra. Ahora conecte los pines del disparador y del eco a los pines digitales n.° 9 y n.° 10 respectivamente.
La siguiente tabla enumera las conexiones de pines:
Sensor HC-SR04 | arduino | |
VCC | 5V | |
Trigonometría | 9 | |
eco | 10 | |
Tierra | Tierra |
Cuando haya terminado, debería tener algo similar a la imagen que se muestra a continuación.
Instalación de biblioteca
Activar el sensor ultrasónico y medir manualmente el ancho del pulso de la señal recibida es mucho trabajo, pero afortunadamente hay muchas bibliotecas a nuestra disposición. Una de las bibliotecas más populares es la Nuevo ping Biblioteca. Esta es la biblioteca que usaremos en nuestros ejemplos.
La biblioteca NewPing es bastante avanzada. Admite hasta 15 sensores ultrasónicos al mismo tiempo y puede emitir directamente en centímetros, pulgadas o períodos de tiempo.
Esta biblioteca no está incluida en el IDE de Arduino, por lo que primero debes instalarla.
Para instalar la biblioteca, navegue hasta Sketch > Incluir bibliotecas > Administrar bibliotecas… Espere a que el Administrador de bibliotecas descargue el índice de la biblioteca y actualice la lista de bibliotecas instaladas.
Filtre su búsqueda escribiendo «newping». Haga clic en la primera entrada y luego seleccione Instalar.
código de ejemplo de arduino
A continuación se muestra un boceto sencillo que utiliza el monitor de serie para mostrar una distancia medida en centímetros. Antes de comenzar el análisis detallado, pruebe este boceto.
// Include NewPing Library
#include "NewPing.h"
// Hook up HC-SR04 with Trig to Arduino Pin 9, Echo to Arduino pin 10
#define TRIGGER_PIN 9
#define ECHO_PIN 10
// Maximum distance we want to ping for (in centimeters).
#define MAX_DISTANCE 400
// NewPing setup of pins and maximum distance.
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.print("Distance = ");
Serial.print(sonar.ping_cm());
Serial.println(" cm");
delay(500);
}
Una vez cargado el boceto, abra su monitor serie y establezca la velocidad en baudios en 9600 bps. Intente apuntar el sensor a los objetos que lo rodean. Deberías ver que la distancia medida comienza a pasar.
Explicación del código:
El boceto comienza integrando la biblioteca NewPing recién instalada.
#include "NewPing.h"
Primero, se definen los pines Arduino a los que se conectan los pines disparador y eco del HC-SR04. También hemos definido una constante llamada MAX_DISTANCE
. Se establece una distancia máxima a la cual los pings que van más allá de esta distancia se consideran «sin ping claro». MAX_DISTANCE
actualmente está fijado en 400 [default = 500cm].
#define TRIGGER_PIN 9
#define ECHO_PIN 10
#define MAX_DISTANCE 400
Luego se nombra una instancia de la biblioteca NewPing. sonar
creado.
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
En la configuración inicializamos la comunicación serie con el PC.
void setup() {
Serial.begin(9600);
}
En el bucle simplemente llamamos al ping_cm()
Ejecute la función e imprima el resultado en el monitor serie. Esta función envía un ping y devuelve la distancia en centímetros.
void loop() {
Serial.print("Distance = ");
Serial.print(sonar.ping_cm());
Serial.println(" cm");
delay(500);
}
Funciones más útiles en la biblioteca NewPing
Hay algunas funciones útiles que puede utilizar con el objeto NewPing.
-
El dibujo de arriba muestra la distancia en centímetros. Si desea que el resultado esté en pulgadas, utilice
sonar.ping_in()
Función.Serial.print(sonar.ping_in());
-
El boceto de arriba sólo tiene una resolución de un centímetro. Si desea obtener el resultado en forma decimal, puede utilizar NewPing en modo continuo en lugar del modo a distancia. Necesitas cambiar esta línea:
Serial.print(sonar.ping_cm());
con la siguiente linea
Serial.print((sonar.ping() / 2) * 0.0343);
-
Hay un método llamado
ping_median(iterations)
en la biblioteca NewPing para mejorar la precisión de su HC-SR04. Este método implica tomar varias mediciones en lugar de solo una, descartar las lecturas fuera de rango y luego promediar las lecturas restantes. De forma predeterminada, solo se necesitan 5 métricas, pero puedes especificar tantas como quieras.int iterations = 5; Serial.print((sonar.ping_median(iterations) / 2) * 0.0343);
Proyecto Arduino – Telémetro sin contacto
Creemos un proyecto rápido para demostrar cómo un simple sensor ultrasónico se puede convertir en un sofisticado telémetro sin contacto. En este proyecto utilizamos una pantalla LCD de 16 × 2 caracteres que muestra una barra horizontal que representa la distancia al objeto.
Si no está familiarizado con las pantallas LCD de 16×2 caracteres, debería leer el siguiente tutorial.
LECTURAS SUGERIDAS
alambrado
A continuación, debemos realizar la conexión a la pantalla LCD como se muestra a continuación.
Instalación de biblioteca
Antes de cargar el código y jugar con el sensor, necesitamos instalar una biblioteca llamada Gráfico de barras LCD. Esta biblioteca ayuda a dibujar una barra horizontal en la pantalla LCD, donde la longitud de la barra representa la distancia al objeto.
Para instalar la biblioteca, navegue hasta Sketch > Incluir bibliotecas > Administrar bibliotecas… Espere a que el Administrador de bibliotecas descargue el índice de la biblioteca y actualice la lista de bibliotecas instaladas. Filtra tu búsqueda escribiendo “lcdbargraph”. Haga clic en la primera entrada y luego seleccione Instalar.
código arduino
Después de instalar la biblioteca, pruebe el siguiente boceto.
// includes the LiquidCrystal Library
#include <LiquidCrystal.h>
// includes the LcdBarGraph Library
#include <LcdBarGraph.h>
// Maximum distance we want to ping for (in centimeters).
#define max_distance 200
// Creates an LCD object. Parameters: (rs, enable, d4, d5, d6, d7)
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
LcdBarGraph lbg(&lcd, 16, 0, 1); // Creates an LCD Bargraph object.
const int trigPin = 9;
const int echoPin = 10;
long duration;
int distance;
void setup()
{
lcd.begin(16,2); // Initializes the interface to the LCD screen
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop()
{
// Write a pulse to the HC-SR04 Trigger Pin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Measure the response from the HC-SR04 Echo Pin
duration = pulseIn(echoPin, HIGH);
// Determine distance from duration
// Use 343 metres per second as speed of sound
distance= duration*0.034/2;
// Prints "Distance: <value>" on the first line of the LCD
lcd.setCursor(0,0);
lcd.print("Distance: ");
lcd.print(distance);
lcd.print(" cm");
// Draws bargraph on the second line of the LCD
lcd.setCursor(0,1);
lbg.drawValue(distance, max_distance);
delay(500);
}
La salida se ve así.
Explicación del código:
Primero, necesitas configurar la Biblioteca de Cristal Líquido como de costumbre. A continuación, cree una instancia de LcdBarGraph utilizando la instancia de LiquidCrystal que acaba de crear. Debes apuntar LiquidCrystal al constructor de LcdBarGraph.
El constructor de LcdBarGraph requiere tres parámetros más. El segundo es el número de la columna de caracteres en la pantalla LCD (en nuestro caso 16). Los dos últimos parámetros son opcionales y permiten el posicionamiento individual de la barra.
// creating bargraph instance
LcdBarGraph lbg(&lcd, 16, 0, 1);
Después de calcular la distancia desde el sensor utilizamos drawValue(value, maxValue)
Función de visualización de gráfico de barras. Se dibuja un gráfico de barras con un valor intermedio 0
Y maxValue
.
//display bargraph
lbg.drawValue(distance, max_distance);
Conexión de HC-SR04 con modo de 3 cables
Si tu Arduino solo tiene un número limitado de pines de E/S digitales, puedes usar el modo de 3 pines. Al conectar el sensor HC-SR04 a Arduino, normalmente necesitarás dos pines de E/S. Sin embargo, en el modo de 3 cables solo necesitas un pin de E/S en lugar de dos.
En este modo, se utiliza un único pin de E/S como entrada y salida. Esto es posible porque Trig y Echo no se utilizan al mismo tiempo.
La siguiente tabla enumera las conexiones de pines:
Sensor HC-SR04 | arduino | |
VCC | 5V | |
Disparo + Eco | 9 | |
Tierra | Tierra |
Así es como puedes conectar el sensor HC-SR04 a Arduino en modo de 3 cables.
Todo lo que necesita hacer es conectar los pines TRIG y ECHO al pin digital n.° 9 y definir el pin 9 para ambos valores de pin en el código. El resto del código es el mismo.
#define TRIGGER_PIN 9 // Trigger and Echo both on pin 9
#define ECHO_PIN 9
¿Qué restricciones hay?
El sensor ultrasónico HC-SR04 es realmente bueno en términos de precisión y facilidad de uso general, especialmente en comparación con otros sensores ultrasónicos de bajo costo. Esto no significa que el sensor HC-SR04 funcione todo el tiempo. Las siguientes imágenes muestran algunas limitaciones del HC-SR04:
-
La distancia entre el sensor y el objeto/obstáculo es de más de 13 pies.
-
La superficie reflectante del objeto está en un ángulo poco profundo para que el sonido no se refleje hacia el sensor.
-
El objeto es demasiado pequeño para reflejar suficiente sonido al sensor. Además, si su sensor HC-SR04 está montado en una parte baja de su dispositivo, es probable que el sonido se refleje en el suelo.
-
Algunos objetos con superficies blandas e irregulares (por ejemplo, animales de peluche) absorben el sonido en lugar de reflejarlo. Por lo tanto, puede resultar difícil para el sensor HC-SR04 detectar dichos objetos.
Cómo funciona el sensor ultrasónico HC-SR04 y cómo conectarlo a Arduino
El sensor de distancia ultrasónico HC-SR04 es una herramienta fundamental para muchos proyectos de Arduino. Este sensor puede reportar la distancia de objetos de hasta 13 pies de distancia, lo que es sumamente útil para evitar que tu robot choque contra una pared. A continuación, te explicaremos detalladamente cómo funciona este sensor y cómo puedes conectarlo a tu Arduino.
¿Qué es el ultrasonido?
El ultrasonido es una onda de sonido de alta frecuencia cuya frecuencia supera el rango audible para el oído humano. Mientras que los humanos pueden escuchar sonidos que vibran aproximadamente entre 20 veces por segundo (un ruido profundo) y 20,000 veces por segundo (un silbido agudo), el ultrasonido tiene una frecuencia mayor a 20,000 Hz y por lo tanto es inaudible para los humanos.
Visión general del Hardware HC-SR04
El sensor de distancia ultrasónico HC-SR04 consiste en dos transductores ultrasónicos. Uno actúa como transmisor, convirtiendo la señal eléctrica en pulsos de sonido ultrasónico de 40 KHz. El otro actúa como receptor y escucha los pulsos transmitidos. Cuando el receptor recibe estos pulsos, produce un pulso de salida cuyo ancho es proporcional a la distancia del objeto frente al sensor.
Este sensor proporciona una detección de rango excelente sin contacto entre 2 cm y 400 cm (~13 pies) con una precisión de 3 mm. Dado que opera a 5 voltios, se puede conectar directamente a un Arduino u otro microcontrolador de lógica de 5V.
Especificaciones técnicas
Algunas de las especificaciones técnicas del sensor HC-SR04 incluyen un voltaje de operación de 5V, una corriente de operación de 15mA, una frecuencia de operación de 40KHz, un rango máximo de 4m, un rango mínimo de 2cm, una precisión de detección de 3mm, un ángulo de medición de 15 grados y una señal de entrada de disparo de 10µS. Su dimensión es de 45 x 20 x 15 mm.
Conexión del sensor ultrasónico HC-SR04 a Arduino
Conectar el sensor HC-SR04 a Arduino es muy sencillo. Comienza colocando el sensor en tu protoboard. Conecta el pin VCC al pin 5V del Arduino, el pin GND al pin de tierra. Luego, conecta los pines Trig y Echo a los pines digitales #9 y #10 respectivamente.
Las conexiones son las siguientes:
- VCC -> 5V
- Trig -> 9
- Echo -> 10
- GND -> GND
Cómo funciona el sensor ultrasónico HC-SR04
Todo comienza cuando el pin de disparo se establece en ALTO durante 10 µs. En respuesta, el sensor transmite una ráfaga ultrasónica de ocho pulsos a 40 kHz. Estos ocho pulsos ultrasónicos viajan a través del aire lejos del transmisor. Mientras tanto, el pin de eco se vuelve ALTO para iniciar la señal de eco de retorno.
Si esos pulsos no son reflejados, la señal de eco expira y se vuelve baja después de 38 ms (38 milisegundos). De esta manera, un pulso de 38 ms indica que no hay obstrucción dentro del rango del sensor.
Si esos pulsos son reflejados, el pin de eco se vuelve bajo tan pronto como se recibe la señal. Esto genera un pulso en el pin de eco cuyo ancho varía de 150 µs a 25 ms dependiendo del tiempo tomado para recibir la señal.
Para más información detallada, puedes consultar el artículo aquí.
Continúa leyendo este artículo para obtener más información sobre cómo conectar y utilizar el sensor HC-SR04 con tu Arduino en diferentes modos y proyectos emocionantes.
Interesante, justo lo que necesitaba para entender este sensor. Gracias por la explicación fácil de seguir.
Este artículo me salvó la vida, gracias por explicar de manera sencilla cómo funciona y cómo conectar el sensor ultrasónico a Arduino. ¡Ahora me siento como un experto! ¡Excelente tutorial!
Gracias por la ayuda, ahora entiendo mejor cómo funciona este sensor y cómo conectarlo a Arduino. ¡Muy útil el artículo! 👌🏼
Gracias por explicar de forma sencilla y práctica cómo funciona el sensor ultrasónico HC-SR04. ¡Ahora ya puedo conectarlo a mi Arduino sin problemas! ¡Gran tutorial!
Muy buena información, me ha quedado todo claro ahora. ¡Gracias por el tutorial!