Medir distancias con el sensor HC-SR04 y arduino

Sensor de ultrasonidos HC-SR04

Sensor de ultrasonidos HC-SR04

El sensor HC-SR04 es un modulo que mediante ultrasonidos nos permite medir distancias. Lo que hace el sensor es enviar un sonido, este rebota en un objeto y es recogido de nuevo por el sensor, sabiendo cuanto tiempo ha tardado en volver la señal, podemos calcular la distancia que hay desde el sensor hasta el objeto. Con el HC-SR04 podemos obtener medidas desde 1 ó 2 cm hasta los 5 metros.

Materiales usados

Arduino UNO Arduino UNO
 Sensor HC-SR04 HC-SR04
protoboard Protoboard
cables_union Cables de conexión

Medir distancias con el sensor HC-SR04

La conexión con el arduino es muy sencilla, el sensor HC-SR04 (niceeshop(TM) HC SR04 distancia por ultrasonidos módulo de medición del sensor para Arduino) viene con 4 patillas, las normales de vcc, que la conectaremos al pin de arduino de 5 vol.,  y de GND, que lo conectaremos a uno de los pines de masa del arduino, y 2 pines más que son los que nos permitirán obtener los valores para hacer los cálculos para obtener la medición. Estos pines son TRIGGER, indica cuando se ha enviado la señal, y ECHO, cuando se ha detectado el retorno del sonido.

[singlepic id=39 w=400 h=400 float=center]

En el tema de la programación, tampoco tenemos demasiadas complicaciones, activamos los pines donde hemos conectado los pines de datos del HC-SR04 el TRIGGER como OUTPUT y el ECHO como INPUT. Ponemos en HIGH el pin del TRIGGER, y lo volvemos ha poner en LOW, esperamos a que el pin del ECHO detecte la señal. Calculamos cuanto a tardado, y sabiendo el tiempo que ha tardado calculamos la distancia.

// Código original en ingles en
// http://www.swanrobotics.com/HC-SR04_Project
// Este ejemplo es de dominio publico

const int TriggerPin = 10; // pin del TRIGGER
const int EchoPin = 11; // pin del ECHO

long Duracion = 0;

void setup(){
pinMode(TriggerPin,OUTPUT); // Pin del TRIGGER lo ponemos en output
pinMode(EchoPin,INPUT); // Pin del ECHO lo ponemos en input

Serial.begin(9600); // activamos el puerto serie para ver los resultados
}

void loop(){
digitalWrite(TriggerPin, LOW); // ponemos el pin TRIGGER en LOW
delayMicroseconds(2); // esperamos 2 milisegundos
digitalWrite(TriggerPin, HIGH); // ponemos el pin TRIGGER en HIGH
delayMicroseconds(10); // lo temos activado durante 10 milisegundos
digitalWrite(TriggerPin, LOW); // ponemos el pin del TRIGGER en LOW

Duracion = pulseIn(EchoPin,HIGH); // Esperamos a que el pin del ECHO devuelva HIGH, y guardamos el tiempo
// Devuelve el tiempo en milisegundos
long Distancia_mm = fDistancia(Duration); // Función para calcular la distancia

Serial.print("Distancia = "); // Y la mostramos por el puerto serie
Serial.print(Distancia_mm);
Serial.println(" mm");

delay(1000); // Esperamos 1 segundo para hace de nuevo la medición
}

// Función para calcular la distancia
long fDistancia(long tiempo)
{
// Calculamos la distancia en mm
// ((tiempo)*(Velocidad del sonido)/ el camino se hace dos veces) 

long DistanceCalc; // Variable para los cálculos
DistanceCalc = (tiempo /2.9) / 2; // Cálculos en milímetros
// DistanceCalc = (tiempo /29) / 2; // Cálculos en centímetros
// DistanceCalc = (tiempo / 74) / 2; // Cálculos en pulgadas
return DistanceCalc; // Devolvemos el calculo
}

Seguro que alguno le parecerá difícil, pero lo único que hacemos es mediante el sensor HC-SR04 enviar un señal, esperar a que vuelva, calcular cuanto a tardo, y por la formula de la velocidad del sonido calcular la distancia.

Pero aun así es mas fácil todavía, por internet se puede encontrar una librería para el sendor HC-SR04 para el ide del arduino que facilita enormemente el calculo.

El código quedaría de la siguiente manera

// Ultrasonic - Library for HR-SC04 Ultrasonic Ranging Module.
// Rev.4 (06/2012)
// J.Rodrigo ( www.jra.so )
// more info at www.ardublog.com

#include <Ultrasonic.h>

Ultrasonic ultrasonic(10,11); // (Trig PIN,Echo PIN)

void setup() {
  Serial.begin(9600); 
}

void loop()
{
  Serial.print(ultrasonic.Ranging(CM)); // CM or INC
  Serial.println(" cm" );
  delay(100);
}

El programa nos devuelve la distancia en centímetros (CM), si lo queremos en pulgadas (INC), tendremos que cambiar esto

ultrasonic.Ranging(CM)

por esto

ultrasonic.Ranging(INC)

Aun así, según esta codificado el programa, solo obtendremos mediciones de hasta 50 centímetros, para poder obtener mediciones mas largas tendremos que modificar la siguiente linea

Ultrasonic ultrasonic(10,11); // (Trig PIN,Echo PIN)

Por esta otra

Ultrasonic ultrasonic(10, 11, 30000); // (Trig PIN,Echo PIN, Timeout)

Lo único que hemos hecho es cambiar el timeout, que esta establecido por defecto en 3.000 ms, que es igual a 50 cm, por 30.000 ms, que son 5 metros.

Con este parámetro podremos configurar la distancia máxima que queremos medir con el sensor HC-SR04.  Para calcular el timeout correspondiente a la distancia que queremos, los podemos hacer con la siguiente formula

Timeout = Distancia máxima en centímetros * 58

 Con estos ya podemos calcular distancias con nuestro arduino (Arduino Uno R3).

Como conseguirlo

niceeshop(TM) HC SR04 distancia por ultrasonidos módulo de medición del sensor para Arduino

Arduino Uno R3