Ejemplo 5

Medici贸n distancia usando el sensor de ultrasonido HC-SR04 en el ESP32

Descripci贸n

Este ejemplo fue adaptado de SparkFun Inventor's Kit Experiment Guide - Project 3: Motion (link) para el ESP32. En este, se usa el sensor de ultrasonido para medir la distancia a la que este se encuentra de un objeto imprimiendo en el monitor serial el valor de la distancia en centimetros y pulgadas.

Componentes

La siguiente tabla muestra los componentes principales del circuito a montar:

ComponentesCantidadObservaciones

ESP32

1

Sensor de ultrasonido HC-SR04

1

Disponible en el modulo kit de Elegoo.

Conexi贸n

La conexi贸n entre el sensor de ultrasonido se muestra en la siguiente tabla:

ESP32HC-SR04

5V

VCC

5

Trig

18

Echo

GND

GND

Conexi贸n

A continuaci贸n se muestra la conexi贸n entre los componentes:

Archivo Fritzing

Pasos previos si se usa platformio

  1. Configurar en Platformio la plataforma a emplear eligiendo como dispositivo el ESP32 tal y como se resume en la siguiente tabla:

ParametroValor

Name

Nombre del proyecto (HC-SR04-ESP32 para este ejemplo)

Board

NodeMCU-32S (Board disponible en el laboratorio)

Framework

Arduino (Es el que hemos manejado)

  1. Agregue las librerias necesarias: En nuestro caso no fue necesario agregar ninguna libreria para este ejemplo.

Finalmente una vez hecho lo anterior, si todo esta bien, el archivo platform.ini se vera de la siguiente forma:

; PlatformIO Project Configuration File
;
;   Build options: build flags, source filter
;   Upload options: custom upload port, speed and extra flags
;   Library options: dependencies, extra library storages
;   Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html

platform = espressif32
board = nodemcu-32s
framework = arduino
  1. Configurar el monitor serial.

Programa (implementado en el IDE de Arduino)

A continuaci贸n se muestra el programa que se ejecuta en el ESP32, este el cual basicamente es el mismo programa implementado para el Arduino UNO pero empleando otros pines. Si este se hubiese implementado en platformio adicionalmente el main.cpp tendria incluida la libreria al principio:

#include <Arduino.h>

En nuestro ejemplo como la implementaci贸n se hizo en el IDE de Arduino no se incluye esta libreria de modo que queda como se muestra a continuaci贸n.

/**
   Hardware Connections:

    ESP32 | HC-SR04
    -------------------
      5V    |   VCC
      5     |   Trig
      18    |   Echo
      GND   |   GND
*/

// Pins
const int TRIG_PIN = 5;
const int ECHO_PIN = 18;

// Anything over 400 cm (23200 us pulse) is "out of range"
const unsigned int MAX_DIST = 23200;

void setup() {

  // The Trigger pin will tell the sensor to range find
  pinMode(TRIG_PIN, OUTPUT);
  digitalWrite(TRIG_PIN, LOW);

  //Set Echo pin as input to measure the duration of 
  //pulses coming back from the distance sensor
  pinMode(ECHO_PIN, INPUT);

  // We'll use the serial monitor to view the sensor output
  Serial.begin(9600);
}

void loop() {

  unsigned long t1;
  unsigned long t2;
  unsigned long pulse_width;
  float cm;
  float inches;

  // Hold the trigger pin high for at least 10 us
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);

  // Wait for pulse on echo pin
  while ( digitalRead(ECHO_PIN) == 0 );

  // Measure how long the echo pin was held high (pulse width)
  // Note: the micros() counter will overflow after ~70 min
  t1 = micros();
  while ( digitalRead(ECHO_PIN) == 1);
  t2 = micros();
  pulse_width = t2 - t1;

  // Calculate distance in centimeters and inches. The constants
  // are found in the datasheet, and calculated from the assumed speed
  //of sound in air at sea level (~340 m/s).
  cm = pulse_width / 58.0;
  inches = pulse_width / 148.0;

  // Print out results
  if ( pulse_width > MAX_DIST ) {
    Serial.println("Out of range");
  } else {
    Serial.print(cm);
    Serial.print(" cm \t");
    Serial.print(inches);
    Serial.println(" in");
  }

  // Wait at least 60ms before next measurement
  delay(60);
}

Prueba de funcionamiento

La siguiente figura muestra la salida en el monitor serial cuando el programa es ejecutado:

Simulaci贸n

Para comprender el funcionamiento del programa, puede seguir el siguiente link cuyo montaje se muestra a continuaci贸n:

Referencias

Last updated