Este artículo es una guía sobre el popular sensor ultrasónico HC-SR04. Te explicamos cómo funciona, te mostramos algunas de sus características y compartimos un ejemplo de proyecto de Arduino que puedes seguir para integrarlo en tus propios proyectos.
También te proporcionamos un diagrama esquemático sobre cómo conectar el sensor ultrasónico, y un diagrama de ejemplo para utilizarlo con el Arduino.
Materiales
Elementos y componentes
Arduino UNO
Tabla protoboard
Cable o jumpers
Sensor ultrasónico HC-SR04
Software, aplicaciones y servicios online
Arduino IDE
Conexión HC-SR04 Arduino
Sigue este diagrama esquemático para conectar el sensor ultrasónico HC-SR04 al Arduino.
La siguiente tabla muestra las conexiones que necesita hacer:
Sensor ultrasónico HC-SR04 | Arduino |
---|---|
VCC | 5V |
Trig | Pin 11 |
Echo | Pin 12 |
GND | GND |
Código
Sube el siguiente código a tu IDE de Arduino.
/*
Ultrasonic sensor Pins:
VCC: +5VDC
Trig : Trigger (INPUT) - Pin11
Echo: Echo (OUTPUT) - Pin 12
GND: GND
*/
int trigPin = 11; // Disparador (Trigger)
int echoPin = 12; // Eco (Echo)
long duration, cm, inches;
void setup() {
//Inicia el Serial Port
Serial.begin (9600);
//Define entradas y salidas
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
// El sensor se activa con un pulso ALTO de 10 microsegundos o más
// Emite un breve pulso BAJO antes para asegurar un pulso ALTO limpio:
digitalWrite(trigPin, LOW);
delayMicroseconds(5);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Lee la señal del sensor: un pulso ALTO cuya duración
// es el tiempo (en microsegundos) desde el envío del
// ping hasta la recepción de su eco de un objeto.
pinMode(echoPin, INPUT);
duration = pulseIn(echoPin, HIGH);
// Convierte el tiempo en distancia
cm = (duration/2) / 29.1; // Divide entre 29.1 o multiplica por 0.0343
inches = (duration/2) / 74; // Divide entre 74 o multiplica por 0.0135
Serial.print(inches);
Serial.print("in, ");
Serial.print(cm);
Serial.print("cm");
Serial.println();
delay(250);
}
Cómo funciona el Código
Primero, se crean variables para el disparador y el echo pin llamadas trigPin y echoPin, respectivamente. El pin de disparo se conecta al Pin 11 digital, y el pin echo se conecta al Pin 12 digital:
int trigPin = 11;
int echoPin = 12;
También se crean tres variables de tipo long: duración, cm y pulgadas. La variable de duración guarda el tiempo entre la emisión y la recepción de la señal. La variable cm guardará la distancia en centímetros, y la variable inch guardará la distancia en pulgadas.
long duration, cm, inches;
En el setup(), se inicializa el puerto serial a una velocidad en baudios de 9600, y se establece el pin de disparo como una salida y el pin de echo como una entrada.
//Inicia el Serial Port
Serial.begin (9600);
//Define entradas y salidas
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
En el loop(), se activa el sensor enviando un pulso ALTO de 10 microsegundos. Pero primero, da un breve pulso BAJO para garantizar que se tendrá un pulso ALTO limpio:
digitalWrite(trigPin, LOW);
delayMicroseconds(5);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
Luego, podrás leer la señal del sensor – un pulso ALTO cuya duración es el tiempo en microsegundos desde el envío de la señal hasta la recepción de su eco a un objeto.
duration = pulseIn(echoPin, HIGH);
Finalmente, sólo necesitas convertir la duración en una distancia. Esta distancia se puede calcular con la siguiente fórmula:
Tenemos que dividir el tiempo de viaje entre 2 porque debemos tener en cuenta que la onda fue enviada, golpeó el objeto, y luego regresó de nuevo al sensor.
cm = (duration/2) / 29.1;
inches = (duration/2) / 74;
Finalmente, imprimimos los resultados en el Serial Monitor:
Serial.print(inches);
Serial.print("in, ");
Serial.print(cm);
Serial.print("cm");
Serial.println();
Código con NewPing
También puedes usar la biblioteca de NewPing. Descarga la biblioteca aquí.
Después de instalar la biblioteca NewPin, carga el código que se proporciona a continuación:
#include <NewPing.h>
#define TRIGGER_PIN 11
#define ECHO_PIN 12
#define MAX_DISTANCE 200
// Configuración NewPing de los pines y la distancia máxima
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
void setup() {
Serial.begin(9600);
}
void loop() {
delay(50);
unsigned int distance = sonar.ping_cm();
Serial.print(distance);
Serial.println("cm");
}
Cómo funciona el Código
Obtener la distancia a un objeto usando la biblioteca de NewPing es mucho más simple.
Se comienza por incluir la biblioteca NewPing:
#include <NewPing.h>
Después, define el disparador y el pin de eco. El pin del gatillo está conectado al Pin 11 digital de Arduino, y el eco al Pin 12. También es necesario definir la variable MAX_DISTANCE para poder usar la biblioteca.
#define TRIGGER_PIN 11
#define ECHO_PIN 12
#define MAX_DISTANCE 200
Luego, se crea una instancia NewPing llamada sonar:
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
En el setup(), se inicia la comunicación en serie a una velocidad de 9600 baudios.
Serial.begin(9600);
Finalmente, en el loop(), para obtener la distancia sólo hay que usar el método ping_cm() en el objeto sonar. Esto te dará la distancia en centímetros.
unsigned int distance = sonar.ping_cm();
Si quieres obtener la distancia en pulgadas debes usar el comando sonar.ping_in() en su lugar.
Submit your review | |