El sensor ultrasonido es un dispositivo que nos permite medir obstáculos que puedan a estar a una distancia de hasta 4 metros. Esto nos puede servir para hacer que nuestros robots puedan recopilar información de su entorno para no chocarse a medida que circulan por el suelo.
Se basa en el envío de una onda sonora que rebota contra una superficie y ésta es devuelta.
Esta onda es emitida por un material piezoeléctrico que al ser sometido a una carga produce una vibración generando ondas de presión que se mueven en el aire. Esta onda está por encima del límite perceptible por el ser humano de 20Khz -40 Khz.
De manera que midiendo el tiempo que tarda en llegar dicha onda que recorre la distancia de ida y vuelta y conociendo cuál es la velocidad del sonido en el aire = 340m/s, podemos conocer el valor de proximidad con respecto a los objetos circundantes.
Se mide la distancia temporal entre un impulso de emisión y un impulso de eco.
El sensor que utilizamos nosotros se llama HC-SR04 y contiene 4 pines de salida, 2 de ellos son de alimentación, mientras que los otros dos son el pin de emisión (trigger), y el pin de echo, que informa de la llegada de la onda.
En el siguiente esquema de conexiones se puede observar cómo hemos de conectar los cables para hacer funcionar este elemento.
Aspectos importantes a tener en cuenta de los sensores ultrasonido. El fenómeno de medición se basa en que una porción de la onda es transmitida al objeto “sólido” y parte de la onda es reflejada. Hay materiales como las telas o caucho que son difíciles de detectar ya que no reflejan el sonido adecuadamente.
Para este ejemplo debemos tener en cuenta varias cosas.
- Hay que tener claro que el pin de activación del impulso (trigger) ha de estar en bajo desde el principio. Hay que inicializar este pin para evitar el caso de que estuviera activado con anterioridad y hacer un delay muy pequeño (2 ms) para limpiar ondas remanentes.
- Se crea un impulso, activando el pin del trigger, esperar muy poco tiempo para mantener la onda (10ms) y desactivarla. En este momento se procede a la medida.
- Con la función PulseIn podemos medir el tiempo que tarda un pin de entrada (porque con pines de salida no se podría hacer) desde que se llama a la función hasta que este es activado o desactivado (según la respuesta esperada).
- Determinamos este tiempo de duración y con un cálculo simple, determinamos la distancia obtenida.
distance = duration/29.1/2;
//29.1 es la inversa de 0.34 = 340/1000
long US(int echoPIN, int trigPIN){ long duration; digitalWrite(trigPIN, LOW); //Limpiamos la onda de salida (TRIGGER) delayMicroseconds(2); digitalWrite(trigPIN, HIGH); //Activamos el impulso de salida (TRIGGER) delayMicroseconds(10); digitalWrite(trigPIN, LOW); //Desactivamos el impulso de salida (TRIGGER) de duracion 10ms duration = pulseIn(echoPIN, HIGH, 58000); //Medimos la duracion de la onda hasta que rebota y llega a la entrada ECHO //Calculate the distance (in cm) based on the speed of sound. return duration/29.1/2; //29.1 es la inversa de 0.34 = 340/10000 } void setup() { Serial.begin(9600); pinMode(7,INPUT); pinMode(8,OUTPUT); } void loop() { Serial.println((US(7,8))); }
Es más útil hacer la medición en cm, por lo que habría que dividir este valor por 10.
Por otra parte vamos a estudiar la función pulseIn.
PulseIn es una función que proporciona un valor de tiempo en microsegundosy que tiene 2 parámetros de entrada (+1 opcional). Esta función mide la duración que tarda un pin de salida para ponerse a un estado determinado LOW o HIGH. El primer parámetro es el pin que queremos medir (echo), y el segundo parámetro es el estado en el que parará de medir la duración hasta que llegue a ese estado.
Recordamos que el pin echo lleva a un material piezoeléctrico que se activa cuando recibe la onda de rebote, por lo que utilizaremos de esa manera la función para hallar la duración.
*Para valores mayores de 1m puede dar algunos errores residuales. Es decir, si hay en algún momento en el que el sensor de un número muy pequeño o muy grande en un corto periodo de tiempo, este se ha de desechar. Para solucionar este problema se puede crear un modo de control de fallos.
Ahora podremos proceder a montar el sensor ultrasonido sobre un servomotor y hacer funcionar nuestro coche para que mire a la izquierda y a la derecha y así determinar en que dirección le resulta más propicio dirigirse.
- Lectura de la distancia del sensor de ultrasonidos.
- Establecer un rango mínimo y un rango máximo de actuación del sensor y que informe un mensaje de fuera de rango.
Más información aquí