Sensor HC-SR04

El emisor/receptor de ultrasonidos HC-SR04 es quizás uno de los complementos más utilizados en los proyectos de robótica. Este sensor se emplea en todo tipo de proyectos, siendo su principal uso el de reconocer obstáculos, aunque debido su buena resolución, también se emplea para medir la distancias a objetos.

Descripción

Lo más singular del sensor de ultrasonidos HC-SR04 es quizás su “par de ojos”, estos no son más que un emisor y un receptor de ultrasonidos que trabajan a una frecuencia de 40KHz (una frecuencia inaudible para las personas).

HC-SR04

Este sensor consta de 4 pines, alimentación (Vcc), un disparador (Trig), el receptor (Echo) y masa (GND). Para el correcto funcionamiento del sensor es necesario el conectar estos 4 pines.

Las características básicas de este sensor y que se deben de tener en cuenta al trabajar con él son:

caracteristicas

Como funciona

El principio en el que se basa su funcionamiento es muy sencillo, tan solo hay que generar una onda sónica en el emisor mediante un pulso en el pin que pone “trig” (trigger o disparador), esta onda al encontrarse con algún obstáculo rebotará, volviendo al sensor y siendo registrada por el receptor, traduciéndose esta en un pulso en el pin del “Echo”.

Esquema onda

Con esto podemos hacer dos cosas, detectar un obstáculo esperando simplemente que Arduino reciba un “Echo” o contar el tiempo que transcurre desde que se manda el pulso por el trigger hasta que se recibe, de esta forma, y conociendo cual es la velocidad del sonido, podemos determinar de forma muy simple la distancia exacta a la que se encuentra el objeto en el que esta rebotando la señal.

Para aclarar un poco el factor de multiplicación que vamos a introducir en Arduino, basta con decir que la velocidad es igual al espacio dividido por el tiempo que se tarda en recorrer dicho espacio. La velocidad del sonido es conocida (343m/s) y el tiempo lo vamos a determinar, como el tiempo que transcurre desde que efectuamos el disparo hasta que recibimos el eco.

Tener en cuenta que este tiempo será doble, ya que la onda hace el camino de ida y el de regreso.

El cálculo que hay que hacer es:

formula

Ejemplo para medir distancias

Veamos un ejemplo básico para utilizar el sensor de ultrasonidos como medidor de distancias.

Para esto vamos a necesitar:

Un Arduino

Un sensor de ultrasonidos HC-SR04

Un protoboard

Cables de conexión

La conexión es muy sencilla, tan solo hay que conectar la alimentación al modulo de ultrasonidos (conectar Vcc a +5 y GND a masa) y los pines de “echo” y “triger” conectarlos a los pines 8 y 9 respectivamente, estos pines se pueden cambiar según la necesidad y disponibilidad que tengamos en nuestro Arduino.

Esquema de conexión:

medir distancias bb

Una vez conectado todo, tan solo habrá que cargar el código de programa.

Código de programa

Como podemos ver a continuación, el código de programa no hace más que lo explicado anteriormente, emitirá un pulso por el pin 9 que esta asignada al “trigger” que previamente se habrá reseteado (puesta a LOW) para evitar problemas.


<pre>digitalWrite(pulso,LOW); //Por cuestión de estabilización del sensor
delayMicroseconds(5);
digitalWrite(pulso, HIGH) //envío del pulso ultrasónico
delayMicroseconds(10);</pre>

Y en las siguientes instrucciones se obtiene el tiempo (al recibir el “echo”) y se aplica la fórmula explicada anteriormente para obtener la distancia exacta al objeto


<pre>tiempo = pulseIn(rebote, HIGH); //función para medir el tiempo y guardarla en la variable "tiempo"
distancia = 0.01715*tiempo; //fórmula para calcular la distancia</pre>



int pulso=9;  
int rebote=8; 
 
int distancia;  //crea la variable "distancia" 
float tiempo;  //crea la variable tiempo (como float)
 
void setup()
{
  Serial.begin(9600);  //inicializa el puerto serie
  pinMode(pulso, OUTPUT); //Declaramos el pin 9 como salida (pulso ultrasonido)
  pinMode(rebote, INPUT); //Declaramos el pin 8 como entrada (recepción del pulso)
}
 
void loop()
{
  digitalWrite(pulso,LOW); //Por cuestión de estabilización del sensor
  delayMicroseconds(5);
  digitalWrite(pulso, HIGH); //envío del pulso ultrasónico
  delayMicroseconds(10);
  digitalWrite(pulso,LOW);
  tiempo = pulseIn(rebote, HIGH);  //funcion para medir el tiempo y guardarla en la variable "tiempo"
  distancia = 0.01715*tiempo; //fórmula para calcular la distancia 
  
  /*Monitorización en centímetros por el monitor serial*/
  Serial.print("Distancia: ");
  Serial.print(distancia);
  Serial.println(" cm");
  delay(3000);//esto es para que tome las mediciones cada 3 segundos 
}

Una vez  que tenemos el circuito armado y lo cargamos al Arduino el programa, solo debemos abrir la comunicación serie para poder visualizar la dista distancia a la que se encuentra el objeto más cercano en la pantalla. Para abrir el monitor serie en el entorno de programación de Arduino, debemos ir a la pestaña “herramientas” y seleccionar a la opción “Monitor Serial” o usar las teclas de acceso rápido Ctrl + Mayusculas + M.
Se abrirá una pestaña como esta que mostrará el valor de la distancia en “cm”.

monitor serie

Link de descarga ejemplorobot