Si quieres diseñar una alarma, un robot que evite obstáculos o un medidor digital entonces te vendrá muy bien aprender a utilizar el popular sensor HC-SR04. Este popular sensor es uno de nuestros favoritos puesto que es un sensor que, en si mismo, parece otorgarle una cierta "personalidad" a nuestras creaciones de Arduino al tener un característico diseño que simula los ojos de un robot.
Con esto en mente, en el día de hoy vamos a construir una sencilla alarma que haga uso del popular sensor así como de un buzzer y un led que se encienda cuando el sensor detecte que hay un elemento cerca del mismo.
Cómo montar tu propia alarma usando un sensor HC-SR04, 1 LED y 1 buzzer
¿Qué vamos a necesitar?
- 1 Sensor HC-SR04
- 1 LED rojo
- 1 Buzzer
- 1 Placa Arduino uno u compatible (también puede ser una placa nano)
- Varios cables de conexión
- Breadboard
Para este proyecto nosotros hemos usado exclusivamente componentes de AZ-Delivery puesto que siempre hemos encontrado que este fabricante nos ofrece una buena calidad de productos a la par que un precio competitivo y un servicio de atención al cliente que raramente se observa al tratar con fabricantes de componentes.
Una vez tengamos todos los componentes, nosotros hemos impreso una pequeña "cara" para nuestro HC-SR04 que también sirve de base por si le quieres agregar un servomotor a tu proyecto. En esta ocasión hemos hecho uso de este modelo que puedes encontrar en Thingiverse imprimiendo con una Ender 3 y usando el filamento PLA seda cobre de Geeetech.
A su vez, con el círculo que tiene esta impresión entre "la boca" y "los ojos" pudimos colocar un led de color rojo para agregar dramatismo.
Una vez que tengamos todo es hora de comenzar a montar los componentes. Aquí os adjuntamos el diagrama de conexión:
A la hora de utilizar el sensor HC-SR04 podemos hacer el ping manualmente pero nosotros hemos optado por hacer uso de la librería SR04.h. Para instalar dicha librería lo único que tienes que hacer es escribir "HC-SR04" en el buscador de librerías del IDE y puedes instalar la librería que hemos instalado nosotros.
Una vez tengamos la librería instalada podemos copiar el código que os dejamos a continuación.
// Incluimos la librería para controlar el sensor HC-SR04 | |
#include "SR04.h" | |
//Indicamos donde está conectado el pin Trig y donde está conectado el pin ECHO | |
#define TRIG_PIN 11 | |
#define ECHO_PIN 10 | |
// Creamos un objeto de la clase SR04 y le pasamos como parámetros | |
// aquellos pines donde conectamos el pin ECHO y el pin Trig | |
SR04 sr04 = SR04(ECHO_PIN,TRIG_PIN); | |
// Creamos una variable donde almacenar la distancia que detecta el sensor | |
long distance; | |
// Indicamos el pin al que esté conectado el LED rojo | |
int rudolph=6; | |
void setup() { | |
// Inicializamos la comunicación serial | |
Serial.begin(9600); | |
delay(100); | |
// Definimos el LED rojo conectado al PIN 6 como un Output | |
pinMode(rudolph,OUTPUT); | |
// Apagamos el LED | |
digitalWrite(rudolph,LOW); | |
} | |
void loop() { | |
// Almacenamos la distancia recogida en la variable distance | |
distance=sr04.Distance(); // llamamos al método distance que devuelve un valor en cm | |
Serial.print(distance); // Imprimimos el valor en el monitor serial | |
Serial.println("cm"); | |
delay(200); | |
if (a<=10){ // Si la distancia detectada es de menos de 10 cm entonces: | |
digitalWrite(rudolph,HIGH); // Encendemos el LED | |
delay (50); // esperamos un poco | |
digitalWrite(rudolph,LOW); // apagamos el LED | |
tone(7,700); // Encendemos el buzzer pasándole al método tone el pin al que está conectado | |
// y la frencuencia que queremos que reproduzca | |
delay(100); | |
tone(7,200); | |
delay(100); | |
}else{ | |
digitalWrite(rudolph,LOW); // Apagamos el LED | |
noTone(7); // apagamos el buzzer | |
} | |
} |
El código está comentado para su fácil comprensión. Si quieres modificar la distancia a la cual se enciende el buzzer y la luz solo tienes que modificar el IF colocado en la función loop (). También puedes modificar la melodía que reproduce el buzzer.
¿Y tú cómo mejorarías este proyecto? ¿Qué agregarías o cambiarías? ¿Podrías modificarlo de modo que una vez que detecte un objeto cercano ya no se apague la alarma salvo que hagas algo concreto como presionar un botón o usar una llave RFID?