Introducción

En este tutorial explicaremos como utilizar un sensor ultrasónico HC-SR04 para con ayuda de Arduino medir distancias y, de esta manera, conseguir que nuestros mecanismos sean capaces de detectar obstáculos. El sensor consta de un terminal emisor que emite un ultrasonido (inaudible para el oído humano por su alta frecuencia) y espera un determinado tiempo con el terminal receptor la vuelta de la onda sonora. Si no detecta nada es debido a que no hay ningún obstáculo en el rango de medidas del sensor (este sensor en concreto tiene un rango de distancias sensible entre 3cm y 3m con una precisión de 3mm) mientras que si recibe la respuesta usa el hecho de que el sonido lleva un movimiento rectilíneo uniforme para, a partir del tiempo que pasa desde que emite hasta que recibe la señal, realice de forma sencila el cálculo de la distancia a la que se encuentra el objeto.
sensor ultrasonico explicacionHCSR04

 

Explicación teorica

En este caso usaremos las siguientes características físicas de las ondas sonoras:
  1. Se propagan en el aire siguiendo una trayectoria rectilínea con velocidad constante (MRU) con lo que podemos usar las ecuaciones del movimiento rectilíneo para hallar el espacio que recorre la onda (y así deducir la distancia a la que se encuentra el objeto) a partir de la medida del tiempo que tarda la onda desde que es emitida hasta que es recibida (ya que la velocidad es constante).
  2. La velocidad del sonido en el aire podemos considerarla constante y de valor aproximado vSONIDO = 340 m/s. Como Arduino usa como sistema de medida del tiempo los microsegundos (µs) y teniendo en cuenta que 1  segundo = 1000000 µs = 106 µs,  debemos cambiar de unidades la velocidad para ajustarnos a las necesidades de cálculo de Arduino:

    vSONIDO = 340 m/s -> vSONIDO = 340 m/106 µs -> vSONIDO = 0,00034 m/µs -> vSONIDO = 3,4.10-4 m/µs

    Pero si usamos esta expresión con Arduino nos daría una medida de la distancia del obstáculo en metros y no tiene demasiado sentido ya que el rango máximo al que puede trabajar este sensor es apenas de 3 m. Por tanto, los centímetros resultan más adecuados. Dado que 1 m = 100 cm = 102 cm, con lo que obtendremos la expresión final que usamos en nuestro código:

    VSONIDO = 3,4.10-4 m/µs ->  vSONIDO = 3,4.10-4 .102 cm/µs -> vSONIDO = 3,4.10-2 cm/µs -> vSONIDO = 0,034 cm/µs

  3. Una vez que conocemos que se trata de un MRU podemos aplicar la expresión: e = v.t (donde e es el espacio recorrido por la onda, v su velocidad y t el tiempo desde que sale del emisor hasta que se recibe en el receptor). Para concluir esta rápida explicación hay que tener en cuenta que si usamos esta expresión estamos calculando la distancia que recorre la onda sonora. Pero en este caso esa distancia debe ser dividida entre 2 (para conocer la distancia a la que se encuentra el objeto) ya que el tiempo que se usa es el tiempo de ida más el tiempo de vuelta.

Circuito eléctrico (diagrama de conexiones)

En este caso realizaremos el sencillísimo diagrama del circuito usandoel software para diseño gráfico de circuitos Fritzing. En este caso sólo se necesita el sensor HC-SR04, la controladora Arduino y una serie de cables de conexión (aunque en el ejemplo que se muestra se usará la placa de pruebas, protoboard o breadboard). El diagrama eléctrico es muy sencillo ya que la primera patilla irá a 5 V (VCC) mientras que la última irá a tierra (GND), la patilla del emisor o trigger se conectará a un pin digital (en nuestro caso el pin 3) y el receptor o echo se se conectará a un pin digital (en nuestro caso el pin 2)

Arduino Mega 2560 and HC SR04 Diagram

Código programa Arduino

En este primer ejemplo usaremos un código muy sencillo que no usa librerías externas y que solo usa las funciones nativas de la IDE de Arduino y dejaremos el uso de programas más complejos para siguientes ocasiones.

Arduino Code
  1. // Este programa usará el sensor de ultrasonidos HCSR04 para medir la distancia
  2. // a diferentes obstáculos en centímetros y mostrarlo por el puerto serie.
  3. #define triggerEmisor 3
  4. #define echoReceptor 2
  5.  
  6. // Variable en la que se va a almacenar el valor correspondiente a la distancia
  7. int distancia;
  8.  
  9. // Variable en la que se va a almacenar el valor correspondiente al tiempo
  10. // Función que se ejecuta una única vez al principio del programa
  11. void setup()
  12. {
  13. pinMode(triggerEmisor,OUTPUT); // El emisor emite por lo que es configurado como salida
  14. pinMode(echoReceptor,INPUT); // El receptor recibe por lo que es configurado como entrada
  15. Serial.begin(9600); // Inicia el puerto de comunicaciones en serie
  16. }
  17.  
  18. //Este módulo calcula y devuelve la distancia en cm.
  19. void loop() {
  20.  
  21. //Para estabilizar el valor del pin Trig se establece a LOW
  22. digitalWrite (triggerEmisor, LOW);
  23. delayMicroseconds(10);
  24.  
  25. //Se lanzan los 8 pulsos del emisor
  26. digitalWrite (triggerEmisor, HIGH);
  27. delayMicroseconds(10);
  28. digitalWrite (triggerEmisor, LOW);
  29. distancia= pulseIn (echoReceptor, HIGH);
  30.  
  31. // Velocidad del sonido en el aire es de 0,034 cm/microsegundos
  32. // ida y vuelta nos interesa solo la mitad (0,034/2 = 0,017)
  33. distancia=distancia/52;
  34. Serial.println("El valor de la distancia es de ");
  35. Serial.println(distancia);
  36. Serial.println(" cm");
  37. delay(100);
  38. }
Spanish English French German Italian Portuguese Russian

Redes sociales

facebook iconotwitterGoogle plus iconpinterest

Artículos

TIC