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)