Uno de los sensores mas usados en robótica y en IoT es el sensor de ultrasonidos. Normalmente se usa para detectar la proximidad a obstaculos para no colisionar o hacerlo disminuyendo la velocidad como es el caso de un robot aspirador, también son usados prevenir inundaciones (MB7360) o para encender las luces de casa a nuestro paso.
Los sensores de ultrasonidos están basados en sistemas naturales como los que ayudan a las ballenas a detectar bancos de peces o a los murcielagos a cazar en la oscuridad, estos emiten un sonido que al colisionar producen un eco. El sensor mide el tiempo entre que emite el sonido y recibe el eco por lo que conociendo este tiempo y la velocidad del sonido podemos obtener la distancia a la que se encuentra un objeto.
Trabajar con un sensor de ultrasonidos es realmente sencillo, el montaje es el siguiente, necesitamos conectar dos pines para enviar y recibir los pulsos y calcular el tiempo y necesitamos conectar los pines de VCC y Gnd a los mismos en el Arduino:
En el código lo que haremos será definir los pines que manejaran el emisor y el receptor de los ultrasonidos. En el setup indicamos que pin actua como salida y cual como entrada.
La funcion «loop» dejar pasar la tensión durante un instante con la instrucción digitalWrite y esperamos 20 microsegundos, cortamos el voltaje en el pin del trigger
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
digitalWrite(triggerPin, HIGH);
delayMicroseconds(20);
digitalWrite(triggerPin, LOW);
y para leer el pin de echo y calcular el tiempo de respuesta usamos la funcion pulseIn que devuelve el tiempo que tarda el pin en cambiar de estado:
microseconds = pulseIn(echoPin, HIGH);
Por último ya solo queda calcular la distancia usando la velocidad del sonido y el tiempo de respuesta, eso si, tenemos que hacerlo cambiando las unidades a microsegundos.
Aquí está el código completo:
#define triggerPin 12 // Trigger Pin
#define echoPin 11 // Echo Pin
void setup() {
pinMode(triggerPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600);
}
void loop() {
long microseconds, distance;
digitalWrite(triggerPin, LOW);
delayMicroseconds(2);
digitalWrite(triggerPin, HIGH);
delayMicroseconds(20);
digitalWrite(triggerPin, LOW);
//return the lenght of the pulse when it´s changing from LOW to HIGH in microseconds
microseconds = pulseIn(echoPin, HIGH);
//0,0342 centimetre/microsecond (speed of sound) to work with HC-SR04
distance = microseconds * 0.0342 / 2;
Serial.print(distance);
Serial.print("cm");
Serial.println();
delay(100);
}
Como se puede ver es muy facil usar este sensor y ya estaría listo para usarse en nuestros montajes.
Deja una respuesta