Sensor de Ultrasonidos HC-SR04 - ¡Medir la Distancia con Arduino!
¡Bienvenido al sexto capítulo de este curso de Arduino desde cero! En el tutorial anterior aprendimos a utilizar el bucle FOR, posiblemente la estructura iterativa más utilizada. Hoy vas a ver como medir la distancia con Arduino utilizando el sensor de ultrasonidos HC-SR04.
Para qué sirve un sensor de ultrasonidos
Un sensor ultrasónico es un detector de proximidad capaz de medir la distancia que hay entre el propio sensor y el objeto que tiene en frente.
Funcionamiento de un sensor ultrasónico
Su funcionamiento es bastante sencillo. Básicamente, el sensor envía un pulso de alta frecuencia, este pulso rebota en los objetos y vuelve al sensor que lo recibe gracias a un micrófono que tiene incorporado.
Conociendo el tiempo que tarda el pulso en ir desde el sensor de ultrasonidos hasta el objeto y volver y la velocidad del sonido, que es 343 metros por segundo, se puede calcular fácilmente a que distancia se encuentra el objeto. Te enseñaré estos cálculos más adelante en la parte de programación.
Modelo HC-SR04
Es un sensor muy económico. Puedes encontrar uno por 0.50€ en AliExpress. Su precisión depende mucho de la superficie del objeto en la que rebote la onda, por lo que no es muy alta. Además, si hay muchos objetos se pueden producir ecos y falsas mediciones.
El rango del sensor de ultrasonidos HC-SR04 es de 2 centímetros a 4 metros, cuenta con un ángulo de apertura de 15 grados y tiene que ser alimentado con 5 Voltios. Puedes encontrar toda la información sobre este modelo en su hoja de características.
Esquema eléctrico del sensor de ultrasonidos
La conexión del sensor de ultrasonidos es muy sencilla. Simplemente necesitas 4 cables. El sensor tiene 4 pines. El primero se llama «Vcc» y es el pin de alimentación, así que lo tienes que conectar a los 5 Voltios de Arduino. El cuarto y último pin se llama GND, y como su propio nombre indica tienes que conectarlo a tierra.

Los dos pines que quedan se llaman «Trig» y «Echo». El primero sirve para indicarle al sensor que tiene que enviar el pulso. El segundo sirve justo para todo lo contrario, el detector ultrasónico nos avisa a nosotros de que ha recibido el pulso. Estos dos pines tienes que conectarlos a dos pines digitales de Arduino. En mi caso, como puedes ver en la imagen, utilizo los pines digitales 5 y 6.
Código del sensor de ultrasonidos
Variables e inicialización del programa
Ahora vamos a ver como programar este sensor. Lo primero que tienes que hacer es crear dos variables de tipo entero constantes que sirven para guardar los números de los pines a los que vas a conectar el «Trig» y el «Echo». En mi caso, los pines 5 y 6.
Después he creado dos variables de tipo double que sirven para guardar el tiempo que tarda el pulso en ir desde el sensor hasta el objeto y volver y la distancia a la que se encuentra el objeto.
En la función «void setup()», que es donde inicializamos el programa, lo primero que tienes que hacer es inicializar el puerto serie. Después tienes que configurar el pin digital al que hayas conectado el «Echo» como un pin de entrada, y el pin del «Trig» como salida.
Pulso de alta frecuencia y medir el tiempo
En la función «void loo()», lo primero que hacemos es poner a 0 el pin del «Trig», después a 1 y de nuevo a 0. Para ello utilizamos la función «digitalWrite()» que ya hemos visto muchas veces en capítulos anteriores. ¿De qué sirve hacer esto? Para que el sensor de ultrasonidos dispare el pulso de alta frecuencia y podamos medir la distancia.
A continuación utilizamos la funcion «pulseIN()», que sirve para medir el tiempo. ¿Cómo funciona? Lo primero que le tenemos que indicar es el pin que le avisa cuando tiene que dejar de contar el tiempo. Además, le tenemos que decir si el pin le va a avisar con un 0 o con un 1. En este caso el pin «Echo» del sensor devolverá un 1 cuando éste reciba el pulso de vuelta.
Si te fijas bien, dividimos el tiempo calculado con la función «pulseIN()» entre 2. ¿Por qué? Porque el tiempo medido es el tiempo que tarda el pulso en ir y volver, pero a nosotros para calcular la distancia solo nos interesa cuanto ha tardado el pulso en ir. Por ello lo dividimos entre 2.
const int EchoPin = 5; const int TriggerPin = 6; double duration, distance; void setup() { Serial.begin(9600); pinMode(TriggerPin, OUTPUT); pinMode(EchoPin, INPUT); } void loop() { //Enviamos onda de ultrasonidos digitalWrite(TriggerPin, LOW); delayMicroseconds(4); digitalWrite(TriggerPin, HIGH); delayMicroseconds(10); digitalWrite(TriggerPin, LOW); //Mide el tiempo entre pulsos (microsegundos) duration = pulseIn(EchoPin, HIGH)/2; //Pasamos de tiempo a distancia (cm) distance = duration /29.2; //Mostramos la distancia por el puerto serie Serial.print("Distancia: "); Serial.println(distance); delay(1000); }
Calcular y leer la distancia
La distancia se calcula multiplicado la velocidad por el tiempo. El tiempo lo hemos medido en microsegundos con la función «pulseIN()». Recuerda que la velocidad del sonido es de 343 m/s. Si haces las conversiones necesarias, dicha velocidad es equivalente a 1cm/29.2µs. Si multiplicas el tiempo medido por la velocidad es estas unidades, obtienes la distancia en cm.
Por último hacemos que Arduino nos envíe la distancia obtenida a través del puerto serie para poder leerla en el monitor serie.