Medir distancias con Arduino y sensor ultrasónico HC-SR04

Medir distancias con Arduino y sensor ultrasónico HC-SR04

En muchos de nuestros proyectos, tenemos la necesidad de sensar nuestro entorno, saber si en frente hay un obstáculo y a que distancia se encuentra, el sensor HC-SR04 nos permite hacer eso.
En este tutorial, vamos a conocer de forma detallada las características del sensor HC-SR04, como calibrar el sensor, como conectarlo y como utilizarlo con Arduino.
El sensor HC-SR04 es un sensor de distancia de bajo costo, su uso es muy frecuente en la robótica, utiliza transductores de ultrasonido para detectar objetos.

Su funcionamiento consiste en emitir un sonido ultrasónico por uno de sus transductores, y esperar que el sonido rebote de algún objeto presente, el eco es captador por el segundo transductor. La distancia es proporcional al tiempo que demora en llegar el eco.

Para empezar a utilizar el sensor HC-SR04 solo necesitas una placa Arduino, en este tutorial utilizaremos un Arduino Uno R3, pero puedes utilizar cualquier placa de Arduino, el procedimiento es el mismo.

Empezamos insertando el sensor ultrasónico en un protoboard y con cables hacemos las siguientes conexiones:

  • Trigger del sensor al pin 2 del arduino
  • Echo del sensor al pin 3 del arduino

Desconecta el arduino de toda corriente y cablea de la siguiente manera

 

Ahora escribamos el siguiente Código:

const int Trigger = 2;   //Pin digital 2 para el Trigger del sensor
const int Echo = 3;   //Pin digital 3 para el Echo del sensor

void setup() {
  Serial.begin(9600);//iniciailzamos la comunicación
  pinMode(Trigger, OUTPUT); //pin como salida
  pinMode(Echo, INPUT);  //pin como entrada
  digitalWrite(Trigger, LOW);//Inicializamos el pin con 0
}

void loop()
{

  long t; //timepo que demora en llegar el eco
  long d; //distancia en centimetros

  digitalWrite(Trigger, HIGH);
  delayMicroseconds(10);          //Enviamos un pulso de 10us
  digitalWrite(Trigger, LOW);
  
  t = pulseIn(Echo, HIGH); //obtenemos el ancho del pulso
  d = t/59;             //escalamos el tiempo a una distancia en cm
  
  Serial.print("Distancia: ");
  Serial.print(d);      //Enviamos serialmente el valor de la distancia
  Serial.print("cm");
  Serial.println();
  delay(100);          //Hacemos una pausa de 100ms
}

 

ANALISIS DEL PROGRAMA:

1) Configuración de los pines y variables.

const int Trigger = 2;   //Pin digital 2 para el Trigger del sensor
const int Echo = 3;   //Pin digital 3 para el echo del sensor

void setup() {
  Serial.begin(9600);//iniciailzamos la comunicación
  pinMode(Trigger, OUTPUT); //pin como salida
  pinMode(Echo, INPUT);  //pin como entrada
  digitalWrite(Trigger, LOW);//Inicializamos el pin con 0
}

2) Ahora en el bucle void loop() empezamos enviando un pulso de 10us de duración al Trigger del sensor.

  digitalWrite(Trigger, HIGH);
  delayMicroseconds(10);          //Enviamos un pulso de 10us
  digitalWrite(Trigger, LOW);

3) Seguidamente recibimos el pulso de respuesta del sensor por el pin Echo, para medir el pulso usamos la función pulseIn(pinvalue)

t = pulseIn(Echo, HIGH); //obtenemos el ancho del pulso

En éste punto es cuando recibimos la lectura del sensor de distancia y la guardamos en la variable “t” que tiene el tiempo que dura en llegar el eco del ultrasonido, el siguiente paso  es calcular la distancia entre el sensor ultrasónico y el objeto.

El tema es que ese valor no está en una medida facilmente reconocible, sino que está en MILISEGUNDOS .. y como queremos conocer la distancia en centímetros, debemos hacer una conversión usando la conocida fórmula ….

 

 

4) Finalmente enviamos serialmente (a la computadora) el valor de la distancia y terminamos poniendo una pausa de 100ms, que es superior a los 60ms  recomendado por los datos técnicos del sensor

  Serial.print("Distancia: ");
  Serial.print(d);      //Enviamos serialmente el valor de la distancia
  Serial.print("cm");
  Serial.println();
  delay(100);          //Hacemos una pausa de 100ms

 

En el monitor serial le aparecerán los valores de la distancia que sensa el HC-SR04, ponga un objeto al frente y varíe su distancia respecto al sensor y verifique que la distancia mostrada en el monitor serial sea la correcta.