Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Sensor ultrasónico HC-SR04 y Arduino – Guía completa

En este tutorial aprenderemos cómo funciona el sensor ultrasónico HC-SR04. funciona y cómo usarlo con Arduino . Este es el sensor más popular para medir distancias y hacer robots que eviten obstáculos con Arduino.

Ya he usado el sensor ultrasónico HC-SR04 para construir varios proyectos geniales de Arduino y puedes verlos aquí:

Puede ver el siguiente video o leer el tutorial escrito a continuación. Tiene información adicional y ejemplos para el sensor, incluidas especificaciones, pines, diagramas de cableado, códigos y más.

Descripción general del hardware HC-SR04

El HC-SR04 es un sensor de medición de distancia asequible y fácil de usar que tiene un rango de 2 cm a 400 cm (alrededor de una pulgada a 13 pies).

El sensor está compuesto por dos transductores ultrasónicos. Uno es el transmisor que emite pulsos de sonido ultrasónico y el otro es el receptor que escucha las ondas reflejadas. Es básicamente un SONAR que se usa en submarinos para detectar objetos bajo el agua.

Estas son sus principales especificaciones:

Voltaje de funcionamiento 5V CC
Corriente de funcionamiento 15mA
Frecuencia de funcionamiento 40KHz
Rango mínimo 2cm / 1 pulgada
Rango máximo 400 cm / 13 pies
Precisión 3mm
Ángulo de medición <15°
Dimensión 45 x 20 x 15 mm

Configuración de pines del sensor ultrasónico HC-SR04

Aquí está el pinout del sensor:

El sensor tiene 4 pines. CCV y TIERRA ir a 5V y TIERRA pines en el Arduino, y el Trig y Eco ir a cualquier pin Arduino digital. Uso de Trigonometría pin enviamos la onda de ultrasonido desde el transmisor, y con el Echo pin escuchamos la señal reflejada.

¿Cómo funciona el sensor de distancia ultrasónico HC-SR04?

Emite un ultrasonido a 40 000 Hz que viaja por el aire y si hay un objeto u obstáculo en su camino rebota de regreso al módulo. Teniendo en cuenta el tiempo de viaje y la velocidad del sonido puedes calcular la distancia.

Para generar el ultrasonido, debemos configurar el pin Trig en un estado alto durante 10 µs. Eso enviará una ráfaga ultrasónica de 8 ciclos que viajará a la velocidad del sonido. Los pines Echo se elevan inmediatamente después de que se envía la ráfaga ultrasónica de 8 ciclos, y comienza a escuchar o esperar a que esa onda se refleje en un objeto.

Si no hay ningún objeto o pulso reflejado, el pin Echo expirará después de 38 ms y volverá al estado bajo.

Si recibimos un pulso reflejado, el pin Echo bajará antes de esos 38ms. De acuerdo con la cantidad de tiempo que el pin Echo estuvo ALTO, podemos determinar la distancia que viajó la onda de sonido, por lo tanto, la distancia desde el sensor hasta el objeto.

Para ello estamos utilizando la siguiente fórmula básica para calcular la distancia:

Distancia =Velocidad x Tiempo

De hecho, conocemos tanto la velocidad como los valores de tiempo. El tiempo es la cantidad de tiempo que el pin Echo estuvo ALTO, y la velocidad es la velocidad del sonido, que es de 340 m/s. Hay un paso adicional que necesitamos hacer, y es dividir el resultado final por 2. y eso es porque estamos midiendo la duración que la onda de sonido necesita para viajar al objeto y recuperarse.

Digamos que el pin Echo estuvo ALTO durante 2 ms. Si queremos obtener el resultado de la distancia en cm, podemos convertir el valor de la velocidad del sonido de 340 m/s a 34 cm/ms.

Distancia =(Velocidad x Tiempo) / 2 =(34 cm/ms x 1,5 ms) / 2 =25,5 cm.

Entonces, si el pin Echo estuvo ALTO durante 2 ms (que medimos usando pulseIn() función), la distancia del sensor al objeto es de 34 cm.

Cómo conectar el sensor ultrasónico HC-SR04 a Arduino

Así es como necesitamos conectar el sensor HC-SR04 a una placa Arduino.

Los pines de tierra y VCC del módulo deben conectarse a los pines de tierra y de 5 voltios en la placa Arduino respectivamente y los pines de disparo y eco a cualquier pin de E/S digital en la placa Arduino.

Puede obtener los componentes necesarios para este tutorial en cualquiera de los siguientes sitios:

  • Sensor ultrasónico HC-SR04 ………… 
  • Placa Arduino ………………………………
  • Placa de prueba y cables de salto ……… 

HC-SR04 Sensor ultrasónico Arduino Código

Aquí hay un código para medir la distancia usando el sensor ultrasónico HC-SR04 y Arduino.



/*
  Ultrasonic Sensor HC-SR04 and Arduino Tutorial

  by Dejan Nedelkovski,
  www.HowToMechatronics.com

*/
// defines pins numbers
const int trigPin = 9;
const int echoPin = 10;
// defines variables
long duration;
int distance;
void setup() {
  pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
  pinMode(echoPin, INPUT); // Sets the echoPin as an Input
  Serial.begin(9600); // Starts the serial communication
}
void loop() {
  // Clears the trigPin
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  // Sets the trigPin on HIGH state for 10 micro seconds
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  // Reads the echoPin, returns the sound wave travel time in microseconds
  duration = pulseIn(echoPin, HIGH);
  // Calculating the distance
  distance = duration * 0.034 / 2;
  // Prints the distance on the Serial Monitor
  Serial.print("Distance: ");
  Serial.println(distance);
}Code language: Arduino (arduino)

Explicación del código

Primero tenemos que definir los pines Trig y Echo. En este caso son los pines número 9 y 10 de la placa Arduino y se denominan trigPin y echoPin. Luego necesitamos una variable larga, llamada "duración" para el tiempo de viaje que obtendremos del sensor y una variable entera para la distancia.

// defines pins numbers
const int trigPin = 9;
const int echoPin = 10;

// defines variables
long duration;
int distance;Code language: Arduino (arduino)

En la configuración, debemos definir trigPin como salida y echoPin como entrada y también iniciar la comunicación en serie para mostrar los resultados en el monitor en serie.

void setup() {
  pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
  pinMode(echoPin, INPUT); // Sets the echoPin as an Input
  Serial.begin(9600); // Starts the serial communication
}Code language: Arduino (arduino)

En el ciclo, primero tenemos que asegurarnos de que el pin trigPin esté limpio, por lo que debe configurar ese pin en un estado BAJO durante solo 2 µs. Ahora, para generar la onda ultrasónica, debemos configurar el pin de activación en estado ALTO durante 10 µs.

// Clears the trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);

// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);Code language: Arduino (arduino)

Uso de pulseIn() función leemos el tiempo de viaje y ponemos ese valor en la variable "duración". Esta función tiene 2 parámetros, el primero es el nombre del pin Echo y el segundo es el estado del pulso que estamos leyendo, ya sea Alto o Bajo.

// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);Code language: Arduino (arduino)

En este caso, necesitamos configurarlo en ALTO, ya que los sensores HC-SR04 configuran el pin Echo en Alto después de enviar la ráfaga ultrasónica de 8 ciclos desde el transmisor. Esto realmente inicia el tiempo y una vez que recibimos la onda de sonido reflejada, el pin Echo irá a Low, lo que detiene el tiempo. Al final, la función devolverá la duración del pulso en microsegundos.

Para obtener la distancia multiplicaremos la duración por 0.034 y la dividiremos por 2 como explicamos esta ecuación anteriormente.

// Calculating the distance
distance= duration*0.034/2;

// Prints the distance on the Serial Monitor
Serial.print("Distance: ");
Serial.println(distance);Code language: Arduino (arduino)

Al finalizar imprimiremos el valor de la distancia en el Monitor Serie.

Ejemplo de sensor ultrasónico Arduino y pantalla LCD

Aquí hay otro ejemplo de cómo usar el sensor ultrasónico con Arduino y mostrar los resultados en una pantalla LCD.

Puede conectar el sensor ultrasónico y el LDC de la siguiente manera:

El código que mide la distancia es más o menos el mismo que el ejemplo básico. Aquí, en lugar de imprimir los resultados en el monitor serie, los imprimimos en la pantalla LCD. Si necesita más detalles sobre cómo usar y conectar una pantalla LCD con Arduino, puede consultar mi tutorial particular.

/*
  Ultrasonic Sensor HC-SR04 and Arduino Tutorial

  by Dejan Nedelkovski,
  www.HowToMechatronics.com

*/
#include <LiquidCrystal.h> // includes the LiquidCrystal Library
LiquidCrystal lcd(1, 2, 4, 5, 6, 7); // Creates an LCD object. Parameters: (rs, enable, d4, d5, d6, d7)
const int trigPin = 9;
const int echoPin = 10;
long duration;
int distanceCm, distanceInch;
void setup() {
  lcd.begin(16, 2); // Initializes the interface to the LCD screen, and specifies the dimensions (width and height) of the display
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
}
void loop() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distanceCm = duration * 0.034 / 2;
  distanceInch = duration * 0.0133 / 2;
  lcd.setCursor(0, 0); // Sets the location at which subsequent text written to the LCD will be displayed
  lcd.print("Distance: "); // Prints string "Distance" on the LCD
  lcd.print(distanceCm); // Prints the distance value from the sensor
  lcd.print(" cm");
  delay(10);
  lcd.setCursor(0, 1);
  lcd.print("Distance: ");
  lcd.print(distanceInch);
  lcd.print(" inch");
  delay(10);
}Code language: Arduino (arduino)

Código de ejemplo usando la biblioteca NewPing

En realidad, hay una forma mejor y más simple de programar el Arduino para medir la distancia usando el sensor ultrasónico HC-SR04, y eso es usando la biblioteca NewPing.

En el código explicado anteriormente, activamos manualmente el sensor y medimos la duración del pulso de la señal recibida. Luego, de acuerdo con esos resultados, calculamos la distancia en función de ellos. Usando la biblioteca NewPing podemos obtener la distancia con solo una línea de código.

Aquí hay un código de ejemplo:

#include <NewPing.h>

#define TRIGGER_PIN  9
#define ECHO_PIN     10
#define MAX_DISTANCE 400 // Maximum distance we want to measure (in centimeters).


NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.

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

void loop() {
  delay(50);                    // Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings.

  int distance = sonar.ping_cm(); // Send ping, get distance in cm and print result (0 = outside set distance range)

  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.println("cm");
}Code language: Arduino (arduino)

Es mucho más sencillo que el ejemplo anterior. Simplemente usamos la llamada ping_cm() en el objeto de sonda NewPing y obtenemos la distancia en centímetros. Si queremos la distancia en pulgadas podemos usar ping_in() en su lugar.

La biblioteca también tiene algunas otras características útiles. Por ejemplo, con ping_median(iterations [, max_cm_distance]) método, podemos obtener resultados más precisos, ya que devuelve una mediana, o el valor medio de varias mediciones. Con las iteraciones parámetro establecemos el número de muestras que el programa tomará para calcular el valor medio. El valor predeterminado es 5 iteraciones. El ping_median() devuelve la duración del pulso recibido en microsegundos.

No obstante, para obtener más información y detalles, puede consultar la página wiki de NewPing.

Mejora de la precisión del sensor de distancia HC-SR04 con el sensor de temperatura DHT22

El sensor HC-SR04 es bastante preciso, pero como su funcionamiento depende de la velocidad del sonido, para obtener resultados más precisos también debemos tener en cuenta la temperatura del aire. La velocidad del sonido puede cambiar significativamente a medida que cambia la temperatura del aire. Por ejemplo, a 20 °C, la velocidad del sonido es de unos 340 m/s, pero a -20 °C la velocidad del sonido es de unos 315 m/s. La humedad relativa también afecta la velocidad.

Entonces, si usamos este sensor para medir distancias a varias temperaturas, deberíamos implementar una compensación de temperatura, y podemos hacerlo con la siguiente fórmula:

Velocidad =331,4 + 0,6 x Temperatura + 0,0124 x Humedad_relativa

He aquí un ejemplo:

Junto con el sensor ultrasónico HC-SR04, utilizaremos el sensor DHT11/DHT22 para medir la temperatura y la humedad del ambiente y ajustar la velocidad del valor del sonido en consecuencia.

Código Arduino

/*
  Example made by Dejan, How To Mechatronics,
  https://howtomechatronics.com/

*/

#include <NewPing.h>  // https://bitbucket.org/teckel12/arduino-new-ping/wiki/Home
#include "dht.h"      // https://github.com/RobTillaart/DHTlib

#define TRIGGER_PIN  9
#define ECHO_PIN     10
#define MAX_DISTANCE 400
#define dht22 5 // DHT22 temperature and humidity sensor

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
dht DHT; // Creats a DHT object

int readDHT, temp, hum;
float speedOfSound, distance, duration;

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

void loop() {
  delay(100);

  // Read temperature and humidity from DHT22 sensor
  readDHT = DHT.read22(dht22); // Reads the data from the sensor
  temp = DHT.temperature; // Gets the values of the temperature
  hum = DHT.humidity; // Gets the values of the humidity


  speedOfSound = 331.4 + (0.6 * temp) + (0.0124 * hum); // Calculate speed of sound in m/s

  duration = sonar.ping_median(10); // 10 interations - returns duration in microseconds
  duration = duration/1000000; // Convert mircroseconds to seconds
  distance = (speedOfSound * duration)/2;
  distance = distance * 100; // meters to centimeters

  Serial.print("Distance: ");
  Serial.print(distance);
  Serial.println("cm");

}Code language: Arduino (arduino)

Entonces, primero leemos los valores de temperatura y humedad del sensor DHT22 y luego usamos esos valores para calcular la velocidad del sonido. Luego obtenemos la duración del viaje de la onda de sonido en microsegundos, los convertimos a segundos y calculamos la distancia desde el sensor hasta los objetos en centímetros.

HC-SR04 Dimensiones y modelo 3D

Hice un modelo 3D del sensor ultrasónico HC-SR04 en caso de que necesite uno al realizar su próximo proyecto con él. Puede descargarlo desde el siguiente enlace.

Puede encontrar y descargar este modelo 3D en Thangs.

Estas son las dimensiones del sensor HC-SR04:

Tenga en cuenta que a veces pueden diferir un poco según el fabricante.

Conclusión

Entonces, hemos cubierto prácticamente todo lo que necesitamos saber sobre el uso del sensor ultrasónico HC-SR04 con Arduino. Es un gran sensor para muchos proyectos de electrónica de bricolaje en los que necesitamos una medición de distancia sin contacto, detección de presencia u objetos, nivelación o posición de algo, etc.

Ya mencioné los proyectos que he realizado con este sensor al principio del post. Aquí hay algunos otros proyectos geniales que usan el sensor HC-SR04 y Arduino:

  • Bote de basura con sensor de movimiento automático sin contacto
  • Control de luz inteligente mediante gestos con las manos
  • Mini levitación acústica
  • Robot que evita obstáculos

Espero que hayas disfrutado este tutorial y hayas aprendido algo nuevo. No dude en hacer cualquier pregunta en la sección de comentarios a continuación y no olvide consultar mi colección completa de más de 30 proyectos Arduino.


Proceso de manufactura

  1. Qué es el sensor ultrasónico HC-SR04:funcionamiento y sus aplicaciones
  2. Sensor Arduino - Tipos y aplicaciones
  3. Sensor ultrasónico (HC-SR04) + Raspberry Pi
  4. Sensor de rango ultrasónico HC-SR04 en Raspberry Pi
  5. Sensor DHT11 con LED y altavoz piezoeléctrico
  6. FlickMote
  7. IOT - Smart Jar usando ESP8266, Arduino y sensor ultrasónico
  8. Mini radar con Arduino
  9. Detector de rango ultrasónico con Arduino
  10. Sensor ultrasónico con alarma, LCD y temperatura
  11. Sensor de temperatura y humedad MKR1000