ESP8266 - Sensor ultrasónico

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

Hardware Requerido

1×ESP8266 NodeMCU
1×Cable USB Tipo-A a Tipo-C (para PC USB-A)
1×Cable USB Tipo-C a Tipo-C (para PC USB-C)
1×Sensor Ultrasoníco
1×Cables Puente
1×(Recomendado) Placa de Expansión de Terminales de Tornillo para ESP8266
1×(Recomendado) Divisor de Alimentación para ESP8266 Tipo-C

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 determinar la distancia a un objeto mediante ondas ultrasónicas.

Disposición de pines del sensor ultrasónico

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

  • Pin VCC: debe estar conectado a VCC (5V)
  • Pin GND: debe estar conectado a GND (0V)
  • Pin TRIG: este pin es donde se recibe la señal de control (pulso) desde el ESP8266.
  • Pin ECHO: este pin envía una señal (pulso) al ESP8266. El ESP8266 mide la duración 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.
  1. El microcontrolador genera un pulso de 10 microsegundos en el pin TRIG, lo que provoca que el sensor ultrasónico emita ondas ultrasónicas.
  2. La onda ultrasónica se refleja después de chocar con un obstáculo.
  3. Luego, el sensor ultrasónico detecta la onda ultrasónica reflejada y mide su tiempo de propagación.
  4. El sensor ultrasónico genera un pulso en el pin ECHO, cuya duración es igual al tiempo de propagación de la onda ultrasónica.
  5. El microcontrolador 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

  1. Para calcular la distancia desde el sensor ultrasónico, deben seguirse dos pasos (1 y 6 en la sección Cómo Funciona):
  2. Generar un pulso de 10 microsegundos en el pin TRIG.
  3. Medir la duración del pulso en el pin ECHO.
  4. Calcular 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

Así que:

  • 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

ESP8266 - Sensor ultrasónico

Podemos usar dos pines de un ESP8266 para medir la distancia de un sensor ultrasónico: un pin está conectado al pin TRIG para generar un pulso de 10 µs, y el otro pin está conectado al pin ECHO para medir el pulso del sensor.

Diagrama de Cableado

Diagrama de cableado del sensor ultrasónico ESP8266 NodeMCU

This image is created using Fritzing. Click to enlarge image

Para obtener m\u00e1s informaci\u00f3n, consulte Pines del ESP8266 y c\u00f3mo alimentar ESP8266 y otros componentes.

Cómo programar para un sensor ultrasónico

  • Genera un pulso de 10 microsegundos en el pin D5 del ESP8266 utilizando las funciones [digitalWrite()] y [delayMicroseconds()]. Por ejemplo:
  • Configura el pin en ALTO con digitalWrite(), luego espera 10 microsegundos con delayMicroseconds(), y luego configura el pin en BAJO con digitalWrite().
digitalWrite(D5, HIGH); delayMicroseconds(10); digitalWrite(D5, LOW);
  • Medir la duración del pulso (µs) en el pin D6 de Arduino utilizando la función pulseIn(). Por ejemplo:
duration_us = pulseIn(D6, HIGH);
  • Calcular la distancia (cm):
distance_cm = 0.017 * duration_us;

Código ESP8266

const int TRIG_PIN = D5; // The ESP8266 pin D5 connected to Ultrasonic Sensor's TRIG pin const int ECHO_PIN = D6; // The ESP8266 pin D6 connected to Ultrasonic Sensor's ECHO pin 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

Para empezar con ESP8266 en el IDE de Arduino, siga estos pasos:

  • Consulta el tutorial cómo configurar el entorno para ESP8266 en el IDE de Arduino si es la primera vez que usas ESP8266.
  • Conecta los componentes tal como se muestran en el diagrama.
  • Conecta la placa ESP8266 a tu computadora utilizando un cable USB.
  • Abre el IDE de Arduino en tu computadora.
  • Elige la placa ESP8266 correcta, por ejemplo (p. ej. NodeMCU 1.0 (ESP-12E Module)), y su puerto COM correspondiente.
  • Copia el código y ábrelo en Arduino IDE.
  • Haz clic en el botón Subir en el IDE de Arduino para compilar y subir el código al ESP8266.
Cómo subir código al ESP8266 NodeMCU usando el IDE de Arduino
  • Abre el Monitor Serial
  • Mueve tu mano cerca del sensor ultrasónico
  • Comprueba la distancia entre el sensor y 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 dar lugar a operaciones no deseadas en ciertas aplicaciones. Para eliminar el ruido, se puede utilizar el siguiente algoritmo:

  1. Toma varias mediciones y guárdalas en un arreglo
  2. Ordena el arreglo en orden ascendente
  3. Filtra el ruido
    • Algunas de las muestras más pequeñas se consideran ruido → ignóralas
    • Algunas de las muestras más grandes se consideran ruido → ignóralas
    • Calcula el promedio de las muestras centrales

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

    • Las cinco muestras más pequeñas deben descartarse.
    • Las cinco muestras más grandes deben descartarse.
    • Se debe tomar la media de las 10 muestras centrales (del quinto al decimocuarto).
    /* * Este código de ESP8266 NodeMCU fue desarrollado por es.newbiely.com * Este código de ESP8266 NodeMCU se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/esp8266/esp8266-ultrasonic-sensor */ #define TRIG_PIN D5 // The ESP8266 pin connected to Ultrasonic Sensor's TRIG pin #define ECHO_PIN D6 // The ESP8266 pin connected to Ultrasonic Sensor's 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() { // 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:

  • Construir un sistema de evitación de colisiones para un coche teledirigido.
  • Estimar el grado de llenado de un cubo de basura.
  • Monitorear el nivel de un cubo de basura.
  • Automatizar la apertura y el cierre de un cubo de basura. Consejo: Ver ESP8266 - Servo Motor.

Aplicaciones de sensores ultrasónicos

  • Prevención de colisiones
  • Estimación de la capacidad
  • Estimación de la altura
  • Identificación de objetos cercanos

※ 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!