Menu mobile
HC-SR04 es un clásico de los módulos medidores distancia para Arduino. Su éxito debe a lo sencillo y fácil que es hacerlo funcionar en proyectos de Arduino, PIC o cualquier otro microcontrolador. En su pin de salida podemos medir el ancho de pulso PWM en función de la distancia del obstáculo.
Conexión
El módulo se alimenta directamente de Arduino, así que no necesitamos una fuente de alimentación externa.
Los pines están conectados según la tabla:
Pin Módulo
Pin de Arduino UNO
Vcc
5V
ECHO
D2
TRIG
D3
GND
El diagrama es es por tanto el siguiente:
Para generar el ultrasonido, necesitamos configurar el Pin de disparo (Trigger) en un estado alto durante 10 µs . Eso enviará una ráfaga sónica de 8 ciclos que viajará a la velocidad del sonido y se recibirá en el Pin de eco (Echo). El Pin de eco generará el tiempo en microsegundos que recorrió la onda de sonido.
Por ejemplo, si el objeto está a 20 cm del sensor y la velocidad del sonido es de 340 m / so 0.034 cm / µs, la onda de sonido necesitará viajar alrededor de 588 microsegundos. Pero lo que obtendrá del pin Echo será el doble de ese número porque la onda de sonido debe viajar hacia adelante y rebotar hacia atrás . Entonces, para obtener la distancia en cm, debemos multiplicar el valor del tiempo de viaje recibido desde el pin de eco por 0.034 y dividirlo por 2.
Código
Para el código de programación, primero debemos definir el Pin de disparo y el Pin de eco que se conectaron a la placa Arduino. En este proyecto, EchoPin se adjunta a D2 y TrigPin a D3. Luego defina variables para la distancia (int) y la duración (long).
Abre un sketch nuevo y pega el siguiente código:
const int EchoPin = 2;
const int TriggerPin = 3;
void setup() {
Serial.begin(9600);
pinMode(TriggerPin, OUTPUT);
pinMode(EchoPin, INPUT);
}
void loop() {
int cm = ping(TriggerPin, EchoPin);
Serial.print("Distancia medida: ");
Serial.println(cm);
delay(1000);
//Cálculos para la distancia
int ping(int TriggerPin, int EchoPin) {
long duration, distanceCm;
digitalWrite(TriggerPin, LOW); //para generar un pulso limpio ponemos a LOW 4us
delayMicroseconds(4);
digitalWrite(TriggerPin, HIGH); //generamos Trigger (disparo) de 10us
delayMicroseconds(10);
digitalWrite(TriggerPin, LOW);
duration = pulseIn(EchoPin, HIGH); //medimos el tiempo entre pulsos, en microsegundos
distanceCm = duration * 10 / 292/ 2; //convertimos a distancia, en cm
return distanceCm;
Ahora, una vez subido el código, si abrimos el Monitor Serial desde Herramientas, podremos ver la distancia a la que posicionamos los obejtos delante del sensor. Prueba a acercar y alejar la mano.
Por otra parte, una librería interesante que puedes usar con este módulo es NewPing.h