Proyecto 13: Sensor Ultrasónico

Descripción

El sensor ultrasónico HC-SR04 es un sensor de medición de distancia comúnmente utilizado, que mide la distancia entre el objeto y el sensor. El sensor es pequeño, de bajo costo y fácil de usar, por lo que ha sido ampliamente utilizado en robótica, hogares inteligentes y control industrial.

En este proyecto, construimos un sistema de medición de distancia con la placa de desarrollo UNO R3 (ch340) y el sensor ultrasónico HC-SR04. A través de este proyecto, aprenderás cómo medir la distancia entre un objeto y el sensor usando el sensor ultrasónico HC-SR04 y mostrar los resultados de la medición en un monitor serial.

Hardware

1. Placa de desarrollo UNO R3 (ch340) x1

2. Sensor ultrasónico HC-SR04 x1

3. Cables DuPont

Principio de Funcionamiento

Emite un ultrasonido a 40 000 Hz que viaja a través del aire y si hay un objeto u obstáculo en su camino, rebotará de vuelta al módulo. Considerando el tiempo de viaje y la velocidad del sonido, puedes calcular la distancia.

Para generar el ultrasonido necesitamos poner el pin Trig en estado Alto durante 10 µs. Eso enviará un pulso ultrasónico de 8 ciclos que viajará a la velocidad del sonido. El pin Echo se pone en alto justo después de que se envía ese pulso ultrasónico de 8 ciclos, y comienza a escuchar o esperar que esa onda sea reflejada por un objeto.

Si no hay objeto o pulso reflejado, el pin Echo se agotará después de 38 ms y volverá a estado bajo.

Si recibimos un pulso reflejado, el pin Echo bajará antes de esos 38 ms. Según el tiempo que el pin Echo estuvo en ALTO, podemos determinar la distancia que la onda sonora viajó, y por lo tanto la distancia desde el sensor hasta el objeto.

Para ello usamos la siguiente fórmula básica para calcular la distancia:

Distancia = Velocidad x Tiempo

En realidad conocemos tanto la velocidad como el tiempo. El tiempo es la cantidad de tiempo que el pin Echo estuvo en ALTO, y la velocidad es la velocidad del sonido que es 340 m/s. Hay un paso adicional que debemos hacer, y es dividir el resultado final por 2, porque estamos midiendo la duración que la onda sonora necesita para viajar hasta el objeto y rebotar de vuelta.

Supongamos que el pin Echo estuvo en ALTO durante 2 ms. Si queremos obtener el resultado de la distancia en cm, podemos convertir la velocidad del sonido de 340 m/s a 34 cm/ms.

Distancia = (Velocidad x Tiempo) / 2 = (34cm/ms x 1.5ms) / 2 = 25.5cm.

Entonces, si el pin Echo estuvo en ALTO durante 2 ms (lo que medimos usando la función pulseIn()), la distancia desde el sensor hasta el objeto es de 34 cm.

Especificaciones

Voltaje de trabajo DC 5V

Corriente de trabajo 15mA

Frecuencia de trabajo 40KHz

Rango máximo 4m

Rango mínimo 2cm

Ángulo de medición 15 grados

Señal de entrada Trigger Pulso TTL de 10µS

Señal de salida Echo Señal de nivel TTL proporcional a la distancia

Pinout

VCC suministra energía al sensor ultrasónico HC-SR04. Puedes conectarlo a la salida de 5V de tu Arduino.

El pin Trig (Trigger) se usa para disparar los pulsos ultrasónicos. Al poner este pin en ALTO durante 10 µs, el sensor inicia un pulso ultrasónico.

El pin Echo se pone en alto cuando se transmite el pulso ultrasónico y permanece en alto hasta que el sensor recibe un eco, después de lo cual vuelve a bajo. Midiendo el tiempo que el pin Echo permanece en alto, se puede calcular la distancia.

GND es el pin de tierra. Conéctalo a tierra del Arduino.

Diagrama de Conexiones

1. Conecta el VCC del sensor ultrasónico al 5V de la placa

2. Conecta el pin Trig del sensor ultrasónico al pin digital D6 de la placa

3. Conecta el pin Echo del sensor ultrasónico al pin digital D5 de la placa

4. Conecta el pin GND del sensor ultrasónico al GND de la placa

Img

Código de Ejemplo

/*

Electronics Learning Starter Kit for Arduino

Project 13

Ultrasonic Sensor

Edit By Keyes

*/

const int trigPin = 6; // Define trigger pin number

const int echoPin = 5; // Define echo pin number

long duration; // Declare a long integer variable for storing the round-trip time of the ultrasonic pulse

int distance; // Declare an integer variable for storing the calculated distance

void setup() {

pinMode(trigPin, OUTPUT); // Set trigPin as output

pinMode(echoPin, INPUT); // Set echoPin as input

Serial.begin(9600); // Initialize serial communication with a baud rate of 9600

}

void loop() {

digitalWrite(trigPin, LOW); // Ensure the trigger pin is low

delayMicroseconds(2); // Wait for 2 microseconds

digitalWrite(trigPin, HIGH); // Send a 10-microsecond pulse

delayMicroseconds(10); // Keep the pulse for 10 microseconds

digitalWrite(trigPin, LOW); // End the pulse

duration = pulseIn(echoPin, HIGH); // Read the length of the pulse from the echo pin

// Calculate distance: sound speed is 0.034 cm per microsecond, divide the round-trip distance by 2

distance = duration * 0.034 / 2;

Serial.print("Distance: "); // Print text "Distance: "

Serial.print(distance); // Print the measured distance

Serial.println(" cm"); // Print the unit " cm" and go to the next line

delay(500); // Wait for 0.5 seconds before measuring again

}

Explicación del Código

Definición de Pines y Variables

const int trigPin = 6;

const int echoPin = 5;

long duration;

int distance;

En esta sección, se definen dos constantes trigPin y echoPin, que representan los números de los pines digitales en la placa Arduino conectados a los pines trigger (Trig) y echo (Echo) del sensor HC-SR04. Además, se definen dos variables duration y distance para almacenar la duración de la señal de eco y la distancia calculada.

Función Setup

void setup() {

pinMode(trigPin, OUTPUT);

pinMode(echoPin, INPUT);

Serial.begin(9600);

}

La función setup() es una función estándar de inicialización en el código Arduino que configura los modos de los pines e inicializa la comunicación serial. pinMode(trigPin, OUTPUT) y pinMode(echoPin, INPUT) configuran el pin Trig como salida y el pin Echo como entrada, respectivamente. Serial.begin(9600) inicia el puerto serial y establece la velocidad de transmisión de datos a 9600 bits por segundo, permitiendo que los datos se envíen al monitor serial en la computadora.

Bucle Principal

void loop() {

digitalWrite(trigPin, LOW);

delayMicroseconds(2);

digitalWrite(trigPin, HIGH);

delayMicroseconds(10);

digitalWrite(trigPin, LOW);

duration = pulseIn(echoPin, HIGH);

distance = duration * 0.034 / 2;

Serial.print("Distance: ");

Serial.print(distance);

Serial.println(" cm");

delay(500);

}

La función loop() contiene la lógica principal del programa y se ejecuta repetidamente. Primero, el pin Trig se pone en nivel bajo y se mantiene durante 2 microsegundos para asegurar la estabilidad de la transmisión de la señal ultrasónica. Luego, el pin Trig se pone en nivel alto durante 10 microsegundos, lo que dispara al sensor para enviar un pulso ultrasónico. Después, el pin Trig vuelve a nivel bajo, esperando que el pin Echo reciba el eco.

duration = pulseIn(echoPin, HIGH); mide el tiempo que el pin Echo permanece en nivel alto (es decir, el tiempo que tarda la onda ultrasónica en viajar de ida y vuelta). distance = duration * 0.034 / 2; calcula la distancia basada en la velocidad del sonido (aproximadamente 340 metros/segundo o 0.034 centímetros/microsegundo). Como la onda sonora debe viajar de ida y vuelta, la distancia real es el tiempo multiplicado por la velocidad y luego dividido por 2.

Finalmente, la distancia calculada se envía por el puerto serial, y hay un retardo de 500 milisegundos después de cada medición.

Resultado del Proyecto

Después de subir el código, abre el monitor serial y configura la velocidad en 9600 baudios. El valor de la distancia se mostrará en el monitor en cm. Cuando el objeto se acerca o se aleja del sensor, el valor cambia.

P13