Arduino Nano - Sensor ultrasónico

Este tutorial te enseña a usar Arduino Nano y un sensor ultrasónico para medir la distancia a obstáculos u objetos. En detalle, aprenderemos:

Hardware Requerido

1×Official Arduino Nano
1×Alternatively, DIYables ATMEGA328P Nano Development Board
1×Cable USB A a Mini-B
1×Sensor Ultrasoníco
1×Cables Puente
1×(Recomendado) Placa de Expansión de Terminales de Tornillo para Arduino Nano
1×(Recomendado) Placa de Expansión Breakout para Arduino Nano
1×(Recomendado) Divisor de Alimentación para Arduino Nano

Or you can buy the following kits:

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 ondas ultrasónicas.

El diagrama de pines del sensor ultrasónico

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

  • Pin VCC: debe conectarse a VCC (5V)
  • Pin GND: debe conectarse a GND (0V)
  • Pin TRIG: recibe una señal de control (pulso) desde Arduino Nano
  • Pin ECHO: envía una señal (pulso) al Arduino Nano. Arduino Nano mide la longitud del pulso para calcular la distancia.
Pinout del sensor ultrasónico

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.
  • El Arduino Nano genera un pulso de 10 microsegundos en el pin TRIG, lo que provoca que el sensor ultrasónico emita ondas ultrasónicas.
  • Cuando las ondas golpean un obstáculo, se reflejan.
  • El sensor ultrasónico es capaz de detectar la onda reflejada y medir su tiempo de viaje.
  • Después, el sensor genera un pulso en el pin ECHO, con una duración igual al tiempo de viaje de la onda ultrasónica.
  • El Arduino Nano mide la duración del pulso en el pin ECHO y calcula la distancia entre el sensor y el obstáculo.

Cómo obtener la distancia desde un sensor ultrasónico

Para calcular la distancia desde el sensor ultrasónico, solo hay que escribir código de Arduino para realizar dos pasos (1 y 6 en Cómo funciona):

  • Arduino Nano genera un pulso de diez microsegundos en el pin TRIG.
  • Arduino Nano mide la duración del pulso en el pin ECHO.
  • Luego, Arduino Nano utiliza la duración del pulso medida para calcular la distancia entre el sensor y el obstáculo.

Cálculo de distancias

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): distancia_de_viaje = velocidad × tiempo_de_viaje = 0.034 × duración_de_pulso
  • La distancia entre el sensor y el obstáculo (cm): distancia = distancia_de_viaje / 2 = 0.034 × duración_de_pulso / 2 = 0.017 × duración_de_pulso

Arduino Nano - Sensor ultrasónico

Los pines del Arduino Nano pueden generar un pulso de 10 microsegundos y medir la duración del pulso. Esto nos permite utilizar dos de los pines del Arduino Nano para determinar la distancia desde el sensor ultrasónico hasta un objeto. Solo necesitamos:

  • Conecta un pin de Arduino Nano al pin TRIG del sensor ultrasónico. Este pin del Arduino Nano se usa para generar un pulso de 10 μs al pin TRIG del sensor.
  • Conecta otro pin de Arduino Nano al pin ECHO del sensor ultrasónico. Este pin del Arduino Nano se usa para medir el pulso que devuelve el sensor.

Diagrama de Cableado

Diagrama de cableado del sensor ultrasónico Arduino Nano

This image is created using Fritzing. Click to enlarge image

Ver La mejor forma de alimentar Arduino Nano y otros componentes.

Cómo programar para el sensor ultrasónico

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

Código de Arduino Nano

/* * Este código de Arduino Nano fue desarrollado por es.newbiely.com * Este código de Arduino Nano se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino-nano/arduino-nano-ultrasonic-sensor */ #define TRIG_PIN 3 // The Arduino Nano pin connected to TRIG pin of ultrasonic sensor #define ECHO_PIN 2 // The Arduino Nano pin connected to ECHO pin of ultrasonic sensor float duration_us, distance_cm; void setup() { // begin serial port Serial.begin (9600); // Configure the trigger pin to output mode pinMode(TRIG_PIN, OUTPUT); // Configure the echo pin to input mode pinMode(ECHO_PIN, INPUT); } void loop() { // Produce a 10-microsecond pulse to the TRIG pin. digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN, LOW); // Measure the pulse duration from the ECHO pin duration_us = pulseIn(ECHO_PIN, 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 y ábrelo con el IDE de Arduino.
  • Luego, haz clic en el Subir botón en el IDE de Arduino para compilar y subir el código al Arduino Nano.
Cómo subir código al Arduino Nano
  • Abre el Monitor Serial
  • Coloca tu mano frente al sensor ultrasónico
  • Consulta la distancia desde el sensor hasta tu mano que se muestra 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

Consulta la explicación línea por línea contenida en los comentarios del código fuente.

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

El resultado de la medición de un sensor ultrasónico puede contener ruido, lo que puede provocar operaciones no deseadas en algunas aplicaciones. Para eliminar el ruido, podemos usar el siguiente algoritmo:

  1. Tomar varias mediciones y almacenarlas en un arreglo
  2. Ordena el arreglo en orden ascendente
  3. Filtra el ruido de la siguiente manera:
    • Las muestras más pequeñas se consideran ruido y deben ser ignoradas
    • Las muestras más grandes se consideran ruido y deben ser ignoradas
    • Se debe tomar el promedio de las muestras centrales

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

    • Ignora las cinco muestras más pequeñas.
    • Ignora las cinco muestras más grandes.
    • Obtén el promedio de las diez muestras centrales, de la quinta a la decimocuarta.
    /* * Este código de Arduino Nano fue desarrollado por es.newbiely.com * Este código de Arduino Nano se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino-nano/arduino-nano-ultrasonic-sensor */ #define TRIG_PIN 3 // The Arduino Nano pin connected to TRIG pin of ultrasonic sensor #define ECHO_PIN 2 // The Arduino Nano pin connected to ECHO pin of ultrasonic sensor 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() { // Produce a 10-microsecond pulse to the TRIG pin. digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN, LOW); // Measure the pulse duration from the 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

Utilice un sensor ultrasónico para cualquiera de los siguientes proyectos:

  • Construyendo un sistema de evitación de colisiones para un coche controlado a distancia.
  • Estableciendo el nivel de llenado de un cubo de basura.
  • Monitoreando el nivel de llenado de un cubo de basura.
  • Abriendo y cerrando automáticamente un cubo de basura. Consejo: Ver Arduino Nano - Servo Motor.

Aplicaciones de sensores ultrasónicos

  • Prevenció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!