Como funciona el sensor ultrasonico hc-sr04

Como vimos en artículos anteriores (Sensor US-100), los sensores de ultrasonido son muy útiles para medir distancias y detectar obstáculos.

El funcionamiento es simple, envía una señal ultrasónica inaudible y nos entrega el tiempo que demoro en ir y venir hasta el obstáculo mas cercano que detecto.

Generalmente están conformados por dos cilindros puestos uno al lado del otro, uno de ellos es quien emite la señal ultrasónica, mientras que el otro es quien la recibe, es un sistema muy simple pero no por eso deja de ser efectivo.

El sensor hc-sr04 en particular tiene una sensibilidad muy buena del orden de los 3mm, teniendo en cuenta que la mayoría de las aplicaciones donde este sensor es utilizado es para medir o detectar obstáculos o distancias mayores a varios centímetros, podemos decir que su sensibilidad es muy buena.

dasdObviamente el sensor por si solo no sirve de mucho, necesitamos algún micro controlador para leer los datos que nos entrega, si lo que queremos desarrollar es de carácter personal y no tiene que cumplir estrictos requisitos comerciales, sin duda que la mejor opción que podemos elegir es arduino.

Su infinidad de librerías y contenido disponible en la web nos facilita muchísimo el trabajo y nos acorta los tiempos de desarrollo.

Dicho esto podemos comentar que es lo que el sensor nos entrega y que tenemos que hacer para interpretarlo correctamente con nuestra placa arduino.

Índice
  1. ¿Que nos entrega el sensor hc-sr04?
  2. Diagrama de conexión
  3. Código arduino

¿Que nos entrega el sensor hc-sr04?

Nos entrega tiempo, como dijimos al comienzo el sensor hc-sr04 cuenta el tiempo que transcurre entre la emisión y la recepción de la señal ultrasónica, claramente podemos deducir que el tiempo es dependiente de la distancia, la señal tardará más en ir y volver si el objeto esta lejos que si está cerca.

Recordando algunas ecuaciones básicas de física sabemos que d = v.t (la distancia recorrida es igual a la velocidad del objeto en movimiento por el tiempo que transcurre en llegar).

Tenemos el tiempo, pero ¿cual es la velocidad de la señal? Para responder esa pregunta tenemos que tener en claro que el sensor emite una señal ultrasónica y esta viaja a la velocidad del sonido, aproximadamente a 340 m/s.

Ya tenemos todo listo, si el sensor hc-sr04 nos entrega una lectura de 1,47 mili segundos y aplicamos la fórmula anterior nos queda d = 340 x 1,47ms = 499 milímetros, pero como este tiempo es el de ida y vuelta, la distancia real al objeto sera la mitad, por eso es que dividimos el resultado por dos, lo que nos da un resultado final de 249,9 milímetros (24,9 centímetros).

[anuncio_b30 id=3][anuncio_b30 id=4]

Diagrama de conexión

El sensor tiene 4 pines, uno es VCC otro GND un pin de triger donde enviamos un pulso al sensor para inicializarlo y de alguna manera decirle (comenzar a enviar información) y otro pin mas Echo donde nos viene el resultado final a la placa de arduino.

Diagrama de conexion sensor ultrasonido hc-sr04
Diagrama de conexión sensor ultrasonido hc-sr04

Se necesitan pocos materiales para implementar este ejemplo.

  1. Sensor hc-sr04
  2. Placa Arduino
  3. Algunos cables
  4. Protoboard

Ahora solo nos falta programar la placa arduino.

Código arduino

long distancia;
long tiempo;
void setup(){
  Serial.begin(9600);
  pinMode(9, OUTPUT); /*activación del pin 9 como salida: para el pulso ultrasónico*/
  pinMode(8, INPUT); /*activación del pin 8 como entrada: tiempo del rebote del ultrasonido*/
}

void loop(){
  digitalWrite(9,LOW); /* Por cuestión de estabilización del sensor*/
  delayMicroseconds(5);
  digitalWrite(9, HIGH); /* envío del pulso ultrasónico*/
  delayMicroseconds(10);
  tiempo=pulseIn(8, HIGH); /* Función para medir la longitud del pulso entrante. Mide el tiempo que transcurrido entre el envío
  del pulso ultrasónico y cuando el sensor recibe el rebote, es decir: desde que el pin 12 empieza a recibir el rebote, HIGH, hasta que
  deja de hacerlo, LOW, la longitud del pulso entrante*/
  distancia= int(0.017*tiempo); /*fórmula para calcular la distancia obteniendo un valor entero*/
  /*Monitorización en centímetros por el monitor serial*/
  Serial.println("Distancia ");
  Serial.println(distancia);
  Serial.println(" cm");
  delay(1000);
}
  

Eso es todo, los invito a dejar comentarios, cualquier duda o sugerencia ayuda a mejorar.

  1. lucas gael pablos dice:

    Me sirvió en robotica de mucho gracias

  2. Juan dice:

    Tebgo un proyecto escolar y la situación problema conciste en crear un vehiculo con forma de insecto que sea capaz de esquivar objetos de forma autonoma. Para esto hay unas condiciones.
    Tiene que tener dos antenas que detecten el obstaculo al tocarlo
    Y tiene que tener algun tipo de sensor

  3. Víctor dice:

    Tengo estas dudas:
    1. ¿La lectura que entrega el sensor ultrasónico es en milisegundos o microsegundos?
    2. Si la velocidad del sonido es aproximadamente a 340 m/s (metros / segundo) ¿cómo es que en tu ejemplo calculas la distancia así d = 340 x 1,47 = 341 milímetros ? veo que las unidades no coinciden, tendrías que convertir la velocidad a mm/milisegundo o mm/microsegundo ¿es correcto?
    3. ¿Porque multiplicas en tu código la lectura de tiempo por 0.017 para sacar la velocidad?

    1. Cristian Veloso dice:

      Hola Victor, te respondo una por una.

      1 - SI
      2 - Estaba con error (gracias por corregirme), ya lo solucione
      3 - Es la velocidad del sonido expresada en cm sobre milisegundos

  4. Esmeralda dice:

    Hola!
    He probado el código pero el único valor que obtengo es 0. Alguna idea de qué puede ser?
    Gracias 🙂

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Subir

Este sitio web utiliza cookies propias y de terceros para mejorar su experiencia. Puede optar por no participar si lo desea. Mas información