11-01-2014, 04:13 PM
El HC-SR04 es uno de los sensores de distancia más sencillos y baratos (Menos de 3€) que suelen usarse en multitud de proyectos de electrónica o robótica. Con el podremos medir la distancia hasta un objeto, en teoría, desde 2cm hasta 450cm con una resolución de +- 0.3cm. Se alimenta con una corriente de 5v y tiene un consumo muy bajo (alrededor de 2mA);
¿Cómo funciona?
El funcionamiento es muy simple, un 'disparador' emite un sonido (trigger) y el otro (echo) lo recoge contabilizando el tiempo transcurrido hasta recibir el 'rebote'. Al multiplicar este tiempo por la velocidad del sonido (340ms) y dividirlo entre 2 (ida y vuelta) obtendremos la distancia hasta el objeto.
Un código muy simple para ayudar a comprender el funcionamiento:
https://github.com/hectorri/Bioloid/tree...ing/HCSR04
En consola obtendréis una salida como (En el ejemplo he ido alejando progresivamente un objeto hasta superar el máximo establecido en el timeout del sketch):
El siguiente paso, para trabajar cómodamente e integrarlo en nuestros proyectos fácilmente sería extraer esta lógica a una librería externa.
¿Cómo funciona?
El funcionamiento es muy simple, un 'disparador' emite un sonido (trigger) y el otro (echo) lo recoge contabilizando el tiempo transcurrido hasta recibir el 'rebote'. Al multiplicar este tiempo por la velocidad del sonido (340ms) y dividirlo entre 2 (ida y vuelta) obtendremos la distancia hasta el objeto.
Un código muy simple para ayudar a comprender el funcionamiento:
https://github.com/hectorri/Bioloid/tree...ing/HCSR04
Código:
#define trigPin 13
#define echoPin 12
int timeOut = 3000; //50m Max.
void setup(){
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop(){
long time, distance;
// Inicio
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Disparo
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
// Fin de disparo
digitalWrite(trigPin, LOW);
// Capturamos retorno
time = pulseIn(echoPin, HIGH, timeOut);
// Calculamos distancia
distance = time/29/2;
if(time==0 || time==timeOut){
Serial.println("Fuera de rango");
}else{
Serial.print(distance);
Serial.println(" cm");
}
delay(500);
}
Código:
4 cm
5 cm
7 cm
11 cm
13 cm
16 cm
19 cm
22 cm
25 cm
32 cm
40 cm
44 cm
Fuera de rango