Páginas

viernes, 1 de febrero de 2013

Sensor Ultrasonico HC-SR04 Arduino


 

  

 

 

 

 

Sensor Ultrasonico HC-SR04

Vamos a ver un sensor muy curioso y muy sencillo de utilizar. Es el sensor de baja frecuencia o ultrasónica HC-SR04. Que nos permite medir la distancia hasta un obstáculo. 


La idea es muy sencilla enviar una señal sonora casi inaudible (para la mayoría totalmente inaudible), que rebote en el obstáculo y al regresar de nuevo al sensor medir cuanto ha tardado en hacer el trayecto. De esta forma se puede medir la distancia.


Velocidad del Sonido a 20ºC 340 metros por segundo. 340 m/s
El eco tiene que ir y volver.
Sabemos que el eco ha tardado t segundos.
Entonces tenemos que la distancia en metros d es igual:

2d = 340 * t de donde obtenemos d = (340 * t) / 2


Esto es la teoría y no nos va a hacer falta para utilizar este sensor ya que hay una librería que nos devuelve la distancia en centímetros o en pulgadas. La cual se puede bajar de este enlace. Librería Ultrasonic (URL Alternativa Librería Ultrasonic)


Hay que bajarla y descomprimirla en el directorio libreries del compilador IDE. Este sensor dispone de 4 patillas de entrada VCC a 5V, GND a GND, TRING y ECHO estas 2 van a 2 entradas digitales a nuestras elección. Para el ejemplo que os pongo yo las he conectado el TRING a la 7 y el ECHO a la 8.




Podemos ver un sencillo ejemplo:


// Sensor ultrasonico HR-SC04  
  
// Conectamos el sensor de la siguiente forma:  
// GND    -> GND  
// VCC    -> 5V  
// TRING  -> D7
// ECHO   -> D8
// Por ejemplo conectamos a las entradas Digitales 7 y 8  
// http://arubia45.blogspot.com.es/  
  
// Librerias necesarias  
#include "Ultrasonic.h"

// Declaramos el sensor ultrasonico
// En los Pins Digitales elegidos
Ultrasonic ultrasonico(7,8);  

void setup() {
  Serial.begin(9600);
  Serial.println("arubia45.blogspot.com.es");  
}

void loop()
{
  Serial.print("Distancia: ");
  Serial.print(ultrasonico.Ranging(CM)); 
  Serial.println(" cm");
  Serial.print("Distancia: ");
  Serial.print(ultrasonico.Ranging(INC)); 
  Serial.println(" inc");
  delay(1000);
}


Bajar Ejemplo (URL alternativa Bajar Ejemplo



Esta librería tal cual viene tiene un timeout o tiempo de espera de 3ms por lo que la distancia máxima que medirá será de 51cm algo escaso para mi gusto. La ventaja de tener un timeout tan bajo es que se pueden hacer muchas mediciones en poco tiempo. Si como yo os parece poco podéis cambiarlo en el fichero:  Ultrasonic.cpp


Buscamos Time_out= que estará a 3000 y ponemos por ejemplo 30000 para 5 metros y grabamos.





Os dejo otro ejemplo sacando la medición de distancia por LCD.

Ejemplo con LCD:


// Sensor ultrasonico HR-SC04  
  
// Conectamos el sensor de la siguiente forma:  
// GND    -> GND  
// VCC    -> 5V  
// TRING  -> D7
// ECHO   -> D8
// Por ejemplo conectamos a las entradas Digitales 7 y 8  
// http://arubia45.blogspot.com.es/  
  
// Librerias necesarias  
#include "Ultrasonic.h"
#include "Wire.h"  
#include "LiquidCrystal_I2C.h"  

// Declaramos el sensor ultrasonico
// En los Pins Digitales elegidos
LiquidCrystal_I2C lcd(0x27,20,4);  

Ultrasonic ultrasonico(7,8); 

void setup() {
//Initializar el lcd  
  lcd.init();                        
  lcd.backlight();  
  lcd.home();  
  lcd.setCursor (0,1);
  lcd.print("arubia45.");  
  lcd.setCursor (5,2);
  lcd.print("blogspot.com.es");
  delay (3000);  
}

void loop()
{
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Distancia: ");
  lcd.print(ultrasonico.Ranging(CM));  
  lcd.print(" cm");
  lcd.setCursor(0,2);
  lcd.print("Distancia: ");
  lcd.print(ultrasonico.Ranging(INC)); 
  lcd.print(" inc");
  delay(1000);
}


Tal como he comentado este sensor se puede comprar por menos de 1,5€. Por ejemplo en eBay. Comprar eBay. (URL alternativa Comprar eBay)


 
 

¿Te gusta mi blog?
Comprame una cerveza…

30 comentarios:

  1. sI UTILIZO dos sensores ultrasonicos cuando ocupo la funcion:

    ultrasonic.Ranging(CM)

    como se a q sensor se esta refiriendo ??

    ResponderEliminar
    Respuestas
    1. amigo necesito tu ayuda es que ya cargue el programa y todo pero me manda error en esta parte Ultrasonic ultrasonico(7,8); y en estos lcd.print(ultrasonico.Ranging(CM));
      lcd.print(" cm"); por que amigo ya lo conecte bien y todo peror no lo corre

      Eliminar
    2. Hola, ¿Has descargado la librería Ultrasonic.h y la tienes descomprimida en Libreries?

      Un saludo.

      Eliminar
    3. soy nuevo en esto pero creo que tendrias q hacer dos objetos diferentes del tipo Ultrasonic osea asi:

      Ultrasonic ultrasonico1(7,8);
      Ultrasonic ultrasonico2(9,10);

      Saludos.

      Eliminar
    4. Soy nuevo en estoy y estoy aprendiendo pero creo que tendrias que crear dos objetos diferentes del tipo Ultrasonic, es decir uno para cada sensor. Te quedaria asi:

      Ultrasonic ultrasonico1(7,8);
      Ultrasonic ultrasonico(9,10);

      Eliminar
    5. Hola, sí es como comentas.

      Un saludo.

      Eliminar
  2. Hola, si conectas 2 sensores tendrás que conectarlos a entradas digitales distintas cada uno. En el ejemplo el sensor se conecta a las entradas 7 y 8. Si conectas otros tendrás que conectarlo a otras entradas, por ejemplo la 5 y 6.

    Un saludo.

    ResponderEliminar
  3. Hola amigo

    Acabo de bajar la librería del sensor y ya la instalé en la carpeta de librerias del software de Arduino. Al tratar de correr un ejémplo no me reconoce el Objeto de la libreria:

    ultrasonic ultrasonic(9,8); // (Trig PIN,Echo PIN)

    La targeta que estoy utilizando es de tipo Arduino uno, no se si la librería es compatible para este arduino.

    Saludos

    ResponderEliminar
    Respuestas
    1. Hola, tienes que descargar la librería y reiniciar el compilador IDE.

      Un saludo.

      Eliminar
  4. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
    Respuestas
    1. Sí, cerra y volver a abrir el compilador.

      Eliminar
  5. Bueno amigo a intenté lo que me dijiste, reiniciar el compilador y me sigue apareciendo el mismo error, reinicié la computadora también y me sigue apareciendo.

    Me dí cuenta de algo, al agregar la libreria de la pantalla LCD por medio de la opcion sketch + agregar libreria esta si se agrego automáticamente con solo darle click a la libreria, pero cuando intento agregar la del sensor ultrasonico esta no se agrega aún cuando le doy click.

    Y si escribo manualmente la libreria de LCD y la del sensor ultrasonico

    #include
    #include

    Las letras de la libreria de la pantalla son de color naranja y las del sensor se quedan negras como si el programa no las reconociera.

    Crees que el IDE no me esté reconociendo la librería, aún cuando ya haya reiniciado el programa y haya descargado la libreria en la carpeta de librerias del IDE?

    ResponderEliminar
    Respuestas
    1. Hola, prueba a descomprimir en el directorio de librerias el fichero directamente con el compilador cerrado.

      Eliminar
  6. Amigo ya intenté lo que me dijiste y nada.
    Intenté con la laptop de otro compañero y a él si le reconoció el software la librería.

    Que crees que tenga mi computadora que no acepte la libreria?

    ResponderEliminar
    Respuestas
    1. No, se comprueba que tienen los 2 PCs la misma versión de Compilador IDE.

      Saludos

      Eliminar
    2. Si era eso, tenemos diferentes softwares, el tenía 1.0.1 y yo la version 1.0.5.

      Gracias

      Eliminar
  7. Hola al cargar el codigo, en la ventana del serial solo me manda una distancia de 51 cm, es esto correcto???

    ResponderEliminar
  8. Al cargar el codigo y visualizar la pantalla del Serial sol obtengo como resultado una distancia de 51 cm, ya cambie varias veces las entradas digitales de pine sy aun sigue sin funcionar, esta distancia emitida es correcta??

    ResponderEliminar
  9. porque siempre me sensa la disancia de 51 cm??

    ResponderEliminar
    Respuestas
    1. Esa es la distancia máxima o el sensor está mal o las conexiones de forma que no recibe la señal de rebote del eco.

      Un saludo.

      Eliminar
  10. hola te consulto, se podria usar dos sensores ultrasonicos enfrentados entre si, en un tronco de madera con el proposito de ver el estado interno del mismo? desde ya muchas gracias

    ResponderEliminar
    Respuestas
    1. Hola, si los enfrentas entre ellos seguramente tendrás interferencias y te darán lecturas muy extrañas.

      Un saludo.

      Eliminar
    2. Osea que ni la distancia me daria? no hay forma de configurarlos la idea es usar el trasmisor de un HC SR04 y el receptor del otro HC SR04 gracias y saludos

      Eliminar
    3. Para eso ya tendrías que modificar la librería, es posible que funcionara.

      Saludos

      Eliminar
  11. Hola, lo probe y funciona bien, ahora me pregunto si tendras un diagrama para la conexion de la pantalla LCD y que modelo se necesita.

    ResponderEliminar
    Respuestas
    1. Gracias y me alegro que te guste. En el blog tengo varias entradas dedicadas a las pantallas LCD, mira esta por ejemplo:

      http://arubia45.blogspot.com.es/2013/01/pantallas-lcd-arduino.html

      Un saludo.

      Eliminar
  12. Hola, antes que nada, gracias por el post, muy ilustrativo, solamente tengo una duda, porque utilizan los pines con salidas PWM, ¿acaso no puedo utilizar cualquier otra salida digital? Gracias

    ResponderEliminar
    Respuestas
    1. Hola, espero que sea de utilidad. Puedes utilizar las salidas digitales que quieras. Un saludo.

      Eliminar
  13. Gracias me ayudo eso de cambiar el codigo en c++ para que me midiera mayor rango lo unico es que aveces me mide bien y luego me mide la distancia mayor (517cm) lo pongo firme y se compone

    ResponderEliminar
  14. Muchas Gracias por tu aporte excelente me funciono perfectamente

    ResponderEliminar