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 () 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:
Componentes
Cantidad
Observaciones
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:
ESP32
HC-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
Configurar en Platformio la plataforma a emplear eligiendo como dispositivo el ESP32 tal y como se resume en la siguiente tabla:
Parametro
Valor
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)
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
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
Referencias
Para comprender el funcionamiento del programa, puede seguir el siguiente cuyo montaje se muestra a continuaci贸n: