Un sensor ultrasónico es un detector de proximidad, el cual va a permitir que podamos saber que se encuentra a nuestro alrededor, así como la distancia a la que se encuentra. El sensor HC-SR04 , es de los mas utilizados ya que es de bajo costo y es muy útil para detectar objetos.
Este sensor nos ayudara por ejemplo a crear una alarma cuando un objeto se aproxime a una distancia especifica de un lugar u objeto que deseamos vigilar.
Funcionamiento
Este sensor se basa en el envió de un pulso de alta frecuencia, este rebota en los objetos cercanos y regresa al micrófono que incluye el sensor. Un dato interesante es que el pulso que el sensor envía es inaudible para los humanos.
Su funcionamiento lo podemos comparar fácilmente con la Eco-localización que utilizan algunos animales como las ballenas o los murciélagos.
Al medir el tiempo que el pulso tarda en regresar al sensor podemos saber la distancia a la que se encuentra el objeto.
El rango real del sensor HC-SR04 es de 20 cm a 2 metros.Aunque no son de precisión alta y no se recomienda para exteriores, si nos útiles para proyectos pequeños o prototipos.
Especificaciones de HC-SR04
Conexión
*En la conexión física utilice un led por que no encontré mi buzzer
Programación
int Trigger=2; //PIN usado para trigger int Echo=3; //PIN usado para echo int alarma=7; //PIN usado para buzzer / led int t,d; //variables para valores del sensor void setup() { Serial.begin(9600); //Incializamos la comunicación pinMode(Trigger,OUTPUT); //Declaramos a trigger de tipo Salida (emisor) pinMode(Echo,INPUT); //Declaramos a echo de tipo Entrada (receptor) pinMode(alarma,OUTPUT) //Declaramos al buzzer de tipo salida digitalWrite(Trigger,LOW); //Inicializamos el sensor en cero (apagado) }
Después de realizar las configuraciones, en el bloque void loop() enviaremos un pulso al trigger del sensor y después recibiremos como respuesta el ancho del pulso (tiempo que dura en regresar el eco del ultrasonico).
void loop() { delay(1000); digitalWrite(Trigger, HIGH); //Encendemos sensor delayMicroseconds(10); //Enviamos un pulso de 10us digitalWrite(Trigger,LOW); //Apagamos sensor t= pulseIn(Echo,HIGH); //recibimos tiempo que tarda el echo en regresar }
En la variable t se guarda el tiempo que tarda en regresar el echo, el siguiente paso es calcular la distancia a la que se encuentra el objeto.
Para esto utilizamos la siguiente formula:
velocidad=velocidad del sonido 340 m/s Usaremos en cm/micro segundos lo cual es 34000 cm/micros
Por lo tanto para obtener la distancia la formula es:
distancia= velocidad * tiempo
distancia= 0.0343 * tiempo
Debido a que el tiempo medido es de ida y vuelta de la señal ultrasonica es necesario dividirlo entre dos.distancia= ( 0.0343 * tiempo)/2
o bien podemos utilizardistancia= 0.01715 * tiempo
Entonces nuestro código completo es :
int Trigger=2; //PIN usado para trigger int Echo=3; //PIN usado para echo int alarma=7; //PIN usado para buzzer / led int t,d; //variables para valores del sensor void setup() { Serial.begin(9600); //Incializamos la comunicación pinMode(Trigger,OUTPUT); //Declaramos a trigger de tipo Salida (emisor) pinMode(Echo,INPUT); //Declaramos a echo de tipo Entrada (receptor) pinMode(alarma,OUTPUT) //Declaramos al buzzer de tipo salida digitalWrite(Trigger,LOW); //Inicializamos el sensor en cero (apagado) } void loop() { delay(1000); digitalWrite(Trigger, HIGH); delayMicroseconds(10); digitalWrite(Trigger,LOW); t= pulseIn(Echo,HIGH); //es el tiempo que tarda el eco del ultrasonico d= 0.01715*t; // Agregamos la formula //Agregamos un IF para validar, si se detecta algo o alguien a una distancia menor a 10cm encendemos la alarma. if (d < 5){ digitalWrite(led,HIGH); } else { digitalWrite(led,LOW); } //Mostramos en el monitor la distancia que esta midiendo el sensor. Serial.print ("Distancia: "); Serial.print (d); Serial.print ("cm"); Serial.println(""); delay (100); }
Este código sencillo nos puede ayudar para comprender el funcionamiento del sensor ultrasónico y arduino.
Algunas de las aplicaciones que podemos darle a este sensor pueden ser:
- Detección de presencias.
- Detección de nivel de llenado.
- Cierre o apertura de puertas.
Espero que este post se ha de utilidad y si les gustaría ver mas entradas de Arduino o sensores pueden dejarnos sus ideas.