Introducción


Explicación teorica
En este caso usaremos las siguientes características físicas de las ondas sonoras:- Se propagan en el aire siguiendo una trayectoria rectilínea con velocidad constante (MRU) con lo que podemos usar las ecuaciones del movimiento rectilíneo para hallar el espacio que recorre la onda (y así deducir la distancia a la que se encuentra el objeto) a partir de la medida del tiempo que tarda la onda desde que es emitida hasta que es recibida (ya que la velocidad es constante).
- La velocidad del sonido en el aire podemos considerarla constante y de valor aproximado vSONIDO = 340 m/s. Como Arduino usa como sistema de medida del tiempo los microsegundos (µs) y teniendo en cuenta que 1 segundo = 1000000 µs = 106 µs, debemos cambiar de unidades la velocidad para ajustarnos a las necesidades de cálculo de Arduino:
vSONIDO = 340 m/s -> vSONIDO = 340 m/106 µs -> vSONIDO = 0,00034 m/µs -> vSONIDO = 3,4.10-4 m/µs
Pero si usamos esta expresión con Arduino nos daría una medida de la distancia del obstáculo en metros y no tiene demasiado sentido ya que el rango máximo al que puede trabajar este sensor es apenas de 3 m. Por tanto, los centímetros resultan más adecuados. Dado que 1 m = 100 cm = 102 cm, con lo que obtendremos la expresión final que usamos en nuestro código:
VSONIDO = 3,4.10-4 m/µs -> vSONIDO = 3,4.10-4 .102 cm/µs -> vSONIDO = 3,4.10-2 cm/µs -> vSONIDO = 0,034 cm/µs
- Una vez que conocemos que se trata de un MRU podemos aplicar la expresión: e = v.t (donde e es el espacio recorrido por la onda, v su velocidad y t el tiempo desde que sale del emisor hasta que se recibe en el receptor). Para concluir esta rápida explicación hay que tener en cuenta que si usamos esta expresión estamos calculando la distancia que recorre la onda sonora. Pero en este caso esa distancia debe ser dividida entre 2 (para conocer la distancia a la que se encuentra el objeto) ya que el tiempo que se usa es el tiempo de ida más el tiempo de vuelta.
Circuito eléctrico (diagrama de conexiones)
En este caso realizaremos el sencillísimo diagrama del circuito usandoel software para diseño gráfico de circuitos Fritzing. En este caso sólo se necesita el sensor HC-SR04, la controladora Arduino y una serie de cables de conexión (aunque en el ejemplo que se muestra se usará la placa de pruebas, protoboard o breadboard). El diagrama eléctrico es muy sencillo ya que la primera patilla irá a 5 V (VCC) mientras que la última irá a tierra (GND), la patilla del emisor o trigger se conectará a un pin digital (en nuestro caso el pin 3) y el receptor o echo se se conectará a un pin digital (en nuestro caso el pin 2)
Código programa Arduino
En este primer ejemplo usaremos un código muy sencillo que no usa librerías externas y que solo usa las funciones nativas de la IDE de Arduino y dejaremos el uso de programas más complejos para siguientes ocasiones.
Arduino Code
// Este programa usará el sensor de ultrasonidos HCSR04 para medir la distancia // a diferentes obstáculos en centímetros y mostrarlo por el puerto serie. #define triggerEmisor 3 #define echoReceptor 2 // Variable en la que se va a almacenar el valor correspondiente a la distancia int distancia; // Variable en la que se va a almacenar el valor correspondiente al tiempo // Función que se ejecuta una única vez al principio del programa void setup() { pinMode(triggerEmisor,OUTPUT); // El emisor emite por lo que es configurado como salida pinMode(echoReceptor,INPUT); // El receptor recibe por lo que es configurado como entrada Serial.begin(9600); // Inicia el puerto de comunicaciones en serie } //Este módulo calcula y devuelve la distancia en cm. void loop() { //Para estabilizar el valor del pin Trig se establece a LOW digitalWrite (triggerEmisor, LOW); delayMicroseconds(10); //Se lanzan los 8 pulsos del emisor digitalWrite (triggerEmisor, HIGH); delayMicroseconds(10); digitalWrite (triggerEmisor, LOW); distancia= pulseIn (echoReceptor, HIGH); // Velocidad del sonido en el aire es de 0,034 cm/microsegundos // ida y vuelta nos interesa solo la mitad (0,034/2 = 0,017) distancia=distancia/52; Serial.println("El valor de la distancia es de "); Serial.println(distancia); Serial.println(" cm"); delay(100); }