Arduino - sensor ultrasónico

En este tutorial, vamos a aprender:

Hardware Requerido

1×Arduino Uno R3
1×Cable USB 2.0 tipo A/B (para PC USB-A)
1×Cable USB 2.0 tipo C/B (para PC USB-C)
1×Sensor Ultrasoníco
1×Cables Puente
1×(Recomendado) Shield de Bloque de Terminales de Tornillo para Arduino Uno
1×(Recomendado) Shield de Protoboard para Arduino Uno
1×(Recomendado) Carcasa para Arduino Uno
1×(Recomendado) Placa Base de Prototipado y Kit de Protoboard para Arduino Uno

Or you can buy the following kits:

1×DIYables STEM V3 Starter Kit (Arduino included)
1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)
Divulgación: Algunos de los enlaces proporcionados en esta sección son enlaces de afiliado de Amazon. Podemos recibir una comisión por las compras realizadas a través de estos enlaces sin costo adicional para usted. Apreciamos su apoyo.

Acerca del Sensor Ultrasónico

El sensor ultrasónico HC-SR04 se utiliza para medir la distancia a un objeto mediante el uso de ondas ultrasónicas.

Esquema de pines

El sensor ultrasónico HC-SR04 incluye cuatro pines:

  • Pin VCC: debe estar conectado a VCC (5 V)
  • Pin GND: debe estar conectado a GND (0 V)
  • Pin TRIG: este pin recibe la señal de control (pulso) desde Arduino.
  • Pin ECHO: este pin envía una señal (pulso) al Arduino. Arduino mide la duración del pulso para calcular la distancia.
Esquema de pines del sensor ultrasónico
image source: diyables.io

Cómo funciona

Esta sección se dedica al conocimiento profundo. NO se preocupe si no lo entiende. Omita esta sección si lo abruma y vuelva otro día. Continúe leyendo con las siguientes secciones.
  1. Microcontrolador: genera un pulso de 10 microsegundos en el pin TRIG.
  2. El sensor ultrasónico emite automáticamente las ondas ultrasónicas.
  3. La onda ultrasónica se refleja tras chocar con un obstáculo.
  4. El sensor ultrasónico:
    • Detecta la onda ultrasónica reflejada.
    • Mide el tiempo de viaje de la onda ultrasónica.
  • El sensor ultrasónico genera un pulso al pin ECHO. La duración del pulso es igual al tiempo de viaje de la onda ultrasónica.
  • El microcontrolador mide la duración del pulso en el pin ECHO y, a continuación, calcula la distancia entre el sensor y el obstáculo.
  • Cómo obtener la distancia desde un sensor ultrasónico

    Para obtener la distancia desde el sensor ultrasónico, solo necesitamos realizar dos pasos (1 y 6 en la parte de Cómo funciona)

    • Genera un pulso de 10 microsegundos en el pin TRIG
    • Mide la duración del pulso en el pin ECHO y luego calcula la distancia entre el sensor y el obstáculo

    Cálculo de la distancia

    Tenemos:

    • El tiempo de viaje de la onda ultrasónica (µs): travel_time = pulse_duration
    • La velocidad de la onda ultrasónica: speed = SPEED_OF_SOUND = 340 m/s = 0.034 cm/µs

    Entonces:

    • La distancia de propagación de la onda ultrasónica (cm): travel_distance = speed × travel_time = 0.034 × pulse_duration
    • La distancia entre el sensor y el obstáculo (cm): distance = travel_distance / 2 = 0.034 × pulse_duration / 2 = 0.017 × pulse_duration

    Arduino - Sensor ultrasónico

    Los pines de Arduino pueden generar un pulso de 10 microsegundos y medir la duración del pulso. Por lo tanto, podemos obtener la distancia del sensor ultrasónico utilizando dos pines de Arduino:

    • Un pin está conectado al PIN TRIG para generar un pulso de 10 μs en el PIN TRIG del sensor
    • Otro pin está conectado al PIN ECHO para medir el pulso que emite el sensor

    Diagrama de Cableado

    Diagrama de cableado del sensor ultrasónico de Arduino

    This image is created using Fritzing. Click to enlarge image

    Cómo programar para un sensor ultrasónico

    digitalWrite(9, HIGH); delayMicroseconds(10); digitalWrite(9, LOW);
    • Mide la duración del pulso (μs) en el pin de Arduino utilizando la función pulseIn(). Por ejemplo, el pin 8:
    duration_us = pulseIn(8, HIGH);
    • Calcular la distancia (cm):
    distance_cm = 0.017 * duration_us;

    Código de Arduino

    /* * Created by ArduinoGetStarted, https://arduinogetstarted.com * * Arduino - Ultrasonic Sensor HC-SR04 * * Wiring: Ultrasonic Sensor -> Arduino: * - VCC -> 5VDC * - TRIG -> Pin 9 * - ECHO -> Pin 8 * - GND -> GND * * Tutorial is available here: https://arduinogetstarted.com/tutorials/arduino-ultrasonic-sensor */ int trigPin = 9; // TRIG pin int echoPin = 8; // ECHO pin float duration_us, distance_cm; void setup() { // begin serial port Serial.begin (9600); // configure the trigger pin to output mode pinMode(trigPin, OUTPUT); // configure the echo pin to input mode pinMode(echoPin, INPUT); } void loop() { // generate 10-microsecond pulse to TRIG pin digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); // measure duration of pulse from ECHO pin duration_us = pulseIn(echoPin, HIGH); // calculate the distance distance_cm = 0.017 * duration_us; // print the value to Serial Monitor Serial.print("distance: "); Serial.print(distance_cm); Serial.println(" cm"); delay(500); }

    Pasos R\u00e1pidos

    • Copia el código anterior y ábrelo con Arduino IDE
    • Haz clic en el botón Subir en Arduino IDE para cargar el código al Arduino
    Arduino IDE - Cómo subir código
    • Abrir el Monitor Serial
    • Mueve tu mano frente al sensor ultrasónico
    • Mira la distancia desde el sensor hasta tu mano en el Monitor Serial
    COM6
    Send
    distance: 29.4 cm distance: 27.6 cm distance: 26.9 cm distance: 17.4 cm distance: 16.9 cm distance: 14.3 cm distance: 15.6 cm distance: 13.1 cm
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

    Explicación del código

    Puede encontrar la explicación en las líneas de comentarios del código de Arduino anterior.

    Cómo filtrar ruido de las mediciones de distancia del sensor ultrasónico

    El resultado de la medición del sensor ultrasónico contiene ruido. En algunas aplicaciones, el resultado con ruido provoca una operación no deseada. Podemos eliminar el ruido usando el siguiente algoritmo:

    1. Tomando múltiples mediciones y almacenarlas en un arreglo
    2. Ordenando el arreglo en orden ascendente
    3. Filtrando el ruido
      • Algunas de las muestras más pequeñas se consideran ruido → ignorarlas
      • Algunas de las muestras más grandes se consideran ruido → ignorarlas
      • ⇒ obtener el promedio de las muestras centrales

      El código de ejemplo a continuación toma 20 mediciones.

      • Las cinco muestras más pequeñas se consideran ruido → ignóralas
      • Las cinco muestras más grandes se consideran ruido → ignóralas
      • ⇒ obtén el promedio de las 10 muestras centrales (desde la 5ª hasta la 14ª)
      /* * Este código de Arduino fue desarrollado por es.newbiely.com * Este código de Arduino se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino/arduino-ultrasonic-sensor */ #define TRIG_PIN 9 // TRIG pin #define ECHO_PIN 8 // ECHO pin float filterArray[20]; // array to store data samples from sensor float distance; // store the distance from sensor void setup() { // begin serial port Serial.begin (9600); // configure the trigger and echo pins to output mode pinMode(TRIG_PIN, OUTPUT); pinMode(ECHO_PIN, INPUT); } void loop() { // 1. TAKING MULTIPLE MEASUREMENTS AND STORE IN AN ARRAY for (int sample = 0; sample < 20; sample++) { filterArray[sample] = ultrasonicMeasure(); delay(30); // to avoid untrasonic interfering } // 2. SORTING THE ARRAY IN ASCENDING ORDER for (int i = 0; i < 19; i++) { for (int j = i + 1; j < 20; j++) { if (filterArray[i] > filterArray[j]) { float swap = filterArray[i]; filterArray[i] = filterArray[j]; filterArray[j] = swap; } } } // 3. FILTERING NOISE // + the five smallest samples are considered as noise -> ignore it // + the five biggest samples are considered as noise -> ignore it // ---------------------------------------------------------------- // => get average of the 10 middle samples (from 5th to 14th) double sum = 0; for (int sample = 5; sample < 15; sample++) { sum += filterArray[sample]; } distance = sum / 10; // print the value to Serial Monitor Serial.print("distance: "); Serial.print(distance); Serial.println(" cm"); } float ultrasonicMeasure() { // generate 10-microsecond pulse to TRIG pin digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN, LOW); // measure duration of pulse from ECHO pin float duration_us = pulseIn(ECHO_PIN, HIGH); // calculate the distance float distance_cm = 0.017 * duration_us; return distance_cm; }

    Video Tutorial

    Estamos considerando crear tutoriales en video. Si considera que los tutoriales en video son importantes, suscríbase a nuestro canal de YouTube para motivarnos a crear los videos.

    Desafíate a ti mismo

    Utiliza un sensor ultrasónico para realizar uno de los siguientes proyectos:

    • Evitación de colisiones para un coche RC.
    • Detección del nivel de llenado de la papelera.
    • Monitoreo del nivel de la papelera.
    • Abrir/cerrar automáticamente la papelera. Consejo: Consulte a Arduino - Servo Motor.

    Conocimiento Adicional

    Algunos fabricantes proporcionan sensores ultrasónicos que tienen 3 pines. La señal TRIG y la señal ECHO están en el mismo pin. En este caso, necesitamos usar solo un pin del Arduino para ambos fines: generar un pulso al sensor y medir el pulso que emite el sensor.

    Aplicaciones de sensores ultrasónicos

    • Evitación de colisiones
    • Detección de llenado
    • Medición de nivel
    • Detección de proximidad

    ※ NUESTROS MENSAJES

    • No dude en compartir el enlace de este tutorial. Sin embargo, por favor no use nuestro contenido en otros sitios web. Hemos invertido mucho esfuerzo y tiempo en crear el contenido, ¡por favor respete nuestro trabajo!