ENLACES
http://elcajondeardu.blogspot.com.co/2014/03/tutorial-sensor-ultrasonidos-hc-sr04.html
http://blog.ars-electronica.com.ar/2014/07/distancia-ultrasonido-hc-sr04-arduino.html
http://www.arduinocolombia.com/aprende/ultrasonido-hc-sr04/
http://www.3dsmart.es/blog/medir-distancias-con-arduino-uno-y-el-modulo-hc-sr04/
http://pastebin.com/6abhnwJT
---------------------------------------------------------------------------------------------------------
Tutorial: sensor ultrasonidos HC-SR04
El sensor de ultrasonidos se enmarca dentro de los sensores para medir
distancias o superar obstáculos, entre otras posibles funciones.
En este caso vamos a utilizarlo para la medición de distancias. Esto lo
consigue enviando un ultrasonido (inaudible para el oído humano por su
alta frecuencia) a través de uno de la pareja de cilindros que compone
el sensor (un transductor) y espera a que dicho sonido rebote sobre un
objeto y vuelva, retorno captado por el otro cilindro.
Este sensor en concreto tiene un rango de distancias sensible entre 3cm y 3m con una precisión de 3mm.
¿Qué recibimos en el sensor?
El tiempo que transcurre entre el envío y la recepción del ultrasonido.
¿Cómo vamos a traducir dicho tiempo en distancia?
Aprovechando que la velocidad de dicho ultrasonido en el aire es de
valor 340 m/s, o 0,034 cm/microseg (ya que trabajaremos con centímetros y
microsegundos). Para calcular la distancia, recordaremos que v=d/t
(definición de velocidad: distancia recorrida en un determinado tiempo).
De la fórmula anterior despejamos d, obteniendo d=v·t, siendo v la
constante anteriormente citada y t el valor devuelto por el sensor a la
placa Arduino.
También habrá que dividir el resultado entre 2 dado que el tiempo recibido es el tiempo de ida y vuelta.
Material
Sensor ultrasonidos HC-SR04 de Electrohobby
Placa Arduino UNO
Cables
Cable USB
Protoboard
Conexiones
El sensor consta de 4 pines: "VCC" conectado a la salida de 5V de la
placa, "Trig" conectado al pin digital de la placa encargado de enviar
el pulso ultrasónico, "Echo" al pin de entrada digital que recibirá el
eco de dicho pulso y "GND" a tierra.
Programa
long distancia; long tiempo; void setup(){ Serial.begin(9600); pinMode(9, OUTPUT); /*activación del pin 9 como salida: para el pulso ultrasónico*/ pinMode(8, INPUT); /*activación del pin 8 como entrada: tiempo del rebote del ultrasonido*/ } void loop(){ digitalWrite(9,LOW); /* Por cuestión de estabilización del sensor*/ delayMicroseconds(5); digitalWrite(9, HIGH); /* envío del pulso ultrasónico*/ delayMicroseconds(10); tiempo=pulseIn(8, HIGH); /* Función para medir la longitud del pulso entrante. Mide el tiempo que transcurrido entre el envío del pulso ultrasónico y cuando el sensor recibe el rebote, es decir: desde que el pin 12 empieza a recibir el rebote, HIGH, hasta que deja de hacerlo, LOW, la longitud del pulso entrante*/ distancia= int(0.017*tiempo); /*fórmula para calcular la distancia obteniendo un valor entero*/ /*Monitorización en centímetros por el monitor serial*/ Serial.println("Distancia "); Serial.println(distancia); Serial.println(" cm"); delay(1000); }
---------------------------------------------------------------------------------
Como medir distancias por ultra-sonido, sensor HC-SR04 y Arduino
Si deseamos conocer la distancia entre dos puntos, una opción
fácil es utilizar una cinta métrica, pero no siempre podemos recurrir a
esta, o no queremos. Por ejemplo supongamos una aplicación de robótica donde se necesita detectar obstáculos, la misma debe ser suficientemente inteligente y automática como
para poder detectarlos.
Otra opción es recurrir al sonido, de la misma forma que se usa en barcos(Sonar) y en algunos animales(Ecolocación).
Sonar activo, imagen de Wikimedia |
La forma de funcionamiento es emitir un sonido, este se refleje en el
objetivo y luego recibir el eco. Entonces conociendo la velocidad de
propagación del sonido(340m/s) y la duración entre la emisión y
recepción, es decir el tiempo entra ida y vuelta, podemos conocer la
distancia.
Esta es una excelente forma de detección sin contacto, a diferencia de
métodos lumínicos no se presenta alteraciones en el funcionamiento por
la luz del sol o materiales negros, sin embargo se puede dificultar con
materiales acústicos y la forma en que esta orientado el objeto también
supone una dificultad, ya que al rebotar la onda sonora lo puede hacer
en una dirección no deseada.
Formula para obtener la distancia(en cm), conociendo la velocidad y el tiempo |
HC-SR04 |
El HC-SR04 es un sensor ultrasonico, que opera básicamente
como lo detallado anteriormente, para tal fin tiene un transmisor y un
receptor. Con el mismo, se pueden obtener medidas desde 2cm hasta los
400cm, con una resolución de 0.3cm.
El sensor tiene 4 pines, dos los necesarios para la alimentación(trabaja
con 5V) y dos mas que son necesarios para iniciar el proceso de
medición y obtener los datos para el calculo de la distancia.
Para comenzar con la medición el sensor debe recibir un pulso en alto en
el pin de disparo(trigger), con una duración de al menos 10us, esto
inicia una transmisión de 8 ciclos de una ráfaga de ultrasonido a 40khz.
Cuando el receptor detecta el eco, pone el pin Echo en alto(5V) por un
tiempo igual al que tardo el sonido en salir y volver(se encuentra en el
orden de los us). En el diagrama temporal se observa el modo de
operación.
A través de un display LCD de 16x2 se indica la distancia. El conexionado completo es:
Y el código a cargar en el Arduino es el siguiente:
/*
Codigo para Arduino, para medir distancias con el sensor ultrasonico
HC-SR04 y visualizarla en un display LCD 16x2
Circuito:
* LCD RS pin- D12
* LCD Enable pin - D11
* LCD D4 pin - D5
* LCD D5 pin - D4
* LCD D6 pin - D3
* LCD D7 pin - D2
* Potenciometro de 10K :
* El pin del medio a LCD Vo(pin3)
* Los demas entre 5V y GND
* Trigger HC-SR04 - D8
* Echo HC-SR04 - D9
*/
// include the library code:
#include <LiquidCrystal.h>
//Inicializo la libreria del LCD con los pines correspondientes a la conexion realizada
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
long distancia;
long tiempo;
void setup() {
// Configuracion del LCD 16x2
lcd.begin(16, 2);
pinMode(9, OUTPUT); //Pin D9 como salida
pinMode(8, INPUT); //Pind D8 como entrada
}
void loop() {
lcd.clear(); //Limpio el LCD
lcd.setCursor(0, 0); //Ubico el cursor
digitalWrite(9,LOW);
delayMicroseconds(5);
digitalWrite(9, HIGH); //Inicio el proceso de medicion
delayMicroseconds(10); //El pulso de disparo debe estar en alto por 10us
tiempo=pulseIn(8, HIGH); //Funcion para medir el tiempo en alto del pin echo
distancia= int(0.01653*tiempo); //Convierto los us en cm, el tiempo es proporcional a la distancia
lcd.print("Distancia: ");
lcd.print(distancia);
lcd.print("cm");
delay(500);Diagrama temporal |
Prueba con Arduino.
La conexión con Arduino o cualquier microcontrolador es sencilla. Necesitamos solamente 2 pines, uno como entrada y otro como salida.A través de un display LCD de 16x2 se indica la distancia. El conexionado completo es:
Y el código a cargar en el Arduino es el siguiente:
----------------------------------------------------------------------------------------------------------
.....