Un sensor de ultrasonido tiene el mismo principio de funcionamiento que el mecanismo que utilizan los murciélagos para maniobrar y cazar mientras vuelan. El murciélago puede procesar la distancia relativa a un objeto al emitir una onda sonora la cual rebota a un objeto y de la que obtiene el tiempo en que demora viajar de ida y vuelta.
En nuestro caso vamos a usar un sensor de Ultrasonidos modelo HC-SR04, dispone de cuatro pin, alimentación, tierra, un pin de emisión de la onda sonora (Trigger) y uno de recepción (Echo).
El funcionamiento es el siguiente: El transmisor (pin trig) envía una señal: un sonido de alta frecuencia. Cuando la señal encuentra un objeto, se refleja y el receptor (pin de eco) lo recibe.
El tiempo entre la transmisión y la recepción de la señal nos permite calcular la distancia a un objeto. Esto es posible porque conocemos la velocidad del sonido en el aire. (V=343 m/s)
Veamos el sketch más fácil para medir la distancia de un objeto usando este sensor, las consideraciones que hemos de tener en cuenta son las siguientes, generalmente conectamos el pin de disparo (trigger) al pin 11 de Arduino, lo declaramos de salida y el pin Echo lo conectamos al pin 12 y lo declaramos de entrada. Leemos la duración del tiempo desde que se envia la señal hasta que se recibe, y por último calculamos la distancia con la fórmula de la cinemática: e=v.t
El tiempo medido está en microsegundos, por tanto teniendo en cuenta que la velocidad del sonido en el aire que es de 343 m/s=0,0343 cm/microsegundos=1/29,1 cm/μs, la fórmula del cálculo queda de la siguiente manera:
distancia = (tiempo/2) * 0,0343
también nos la solemos encontrar así:
distancia = (tiempo/2) / 29,1
Tenemos que dividir el tiempo de viaje por 2 porque tenemos que tener en cuenta que la onda fue enviada, golpeó el objeto, y luego regresó de nuevo al sensor. La distancia obtenida estará en cms.
Toda esta explicación en el sketch queda de la siguiente forma:
/*
* Guía para el Sensor de Ultrasonidos HC-SR04
* www.tecnosalva.com
*/
int trigPin = 11; // Trigger
int echoPin = 12; // Echo
long duration, cm;
void setup() {
Serial.begin (9600);
//Definir inputs and outputs
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
// Dar un corto pulso BAJO de antemano para asegurar un pulso ALTO limpio:
digitalWrite(trigPin, LOW);
delayMicroseconds(5);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// La duración es el tiempo (en microsegundos) desde el envío
// del ping a la recepción de su eco de un objeto.
pinMode(echoPin, INPUT);
duration = pulseIn(echoPin, HIGH);
// Convertimos el tiempo en distancia con la fórmula
cm = (duration/2) / 29.1; // Dividir por 29.1 o multiplicar por 0.0343
Serial.print(cm);
Serial.print("cm");
Serial.println();
delay(250);
}
A continuación mostraré otro ejemplo pero usando en este caso conocida librería NewPing.h que trae incorporada el IDE de Arduino
/*
* www.tecnosalva.com
*/
#include
#define TRIGGER_PIN 11
#define ECHO_PIN 12
#define MAX_DISTANCE 200
// NewPing setup of pins and maximum distance
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
void setup() {
Serial.begin(9600);
}
void loop() {
delay(50);
unsigned int distance = sonar.ping_cm();
Serial.print(distance);
Serial.println("cm");
}