Detector de presencia con Ultrasonidos y buzzer
Introducción
En este tutorial vamos a medir la distancia de objetos mediante ultrasonido. Además dicha distancia se mostrará en una pantalla LCD de un Nokia 5110 y cuando sea menor de 10 cm se activará un buzzer como alarma que nos indicará que se ha vulnerado la distancia mínima.
¿Qué necesitamos?
- LCD de Nokia 5110
- Buzzer
- Un Módulo sensor ultrasonidos HC-RS04, se puede encontrar en Dealextreme por unos pocos dólares.
- Arduino UNO o similar
Librerías necesarias
- HC-SR04, esta librería ya nos proporciona todo lo necesario para medir distancias y hasta incluso el tiempo que tarda el sonido en ir y volver.
- Adafruit para LCD de Nokia 5110 y Adafruit GFX, es posible que si utilizáis el IDE 1.0.5 de Arduino la carga de la librería os de problemas. Para solucionarlo simplemente tenemos que borrar la librería de Robot_Control, si tenéis algún tipo de problemas no dudéis en comentarlo en el post.
Montaje
El montaje de la parte de la pantalla LCD lo podemos encontrar en esta entrada del blog: Empezando con Nokia 5110 y Arduino, recordad que la pantalla se alimenta con 3,3V NO con 5V.
El sensor de ultrasonidos solo tiene 4 pines:
- VCC: colocado directamente a 5V
- Trig: colocado directamente al pin 10 de Arduino.
- Echo: colocado directamente en el pin 13.
- GND: directamente a GND proporcionado por Arduino.
El buzzer:
- GND: directamente a GND de Arduino.
- Pin positivo: colocado en el pin 9 con una resistencia de 330 ohm.
Código
Cabecera:
Se incluyen las librerías a utilizar y se definen tanto el display LCD como el sensor de ultra sonido.
1 2 3 4 5 6 7 8 9 10 11 | #include #include #include // pin 7 - Serial clock out (SCLK) // pin 6 - Serial data out (DIN) // pin 5 - Data/Command select (D/C) // pin 3 - LCD reset (RST) // pin 4 - LCD chip select (CS) Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 3, 4); Ultrasonic ultrasonic(10,13); // (Trig PIN,Echo PIN) int BUZZER = 9; |
Setup:
Se establece la comunicación, inicialización y se establece el contraste del LCD.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | void setup() { Serial.begin(9600); display.begin(); // Inicializacion completada // Cambia el contraste para una mejor visualizacion display.setContrast(50); display.display(); // Muestra el splashscreen de Adafruit delay(2000); display.clearDisplay(); // Limpia la pantalla y el buffer de comunicaci´n pinMode(BUZZER, OUTPUT); // Se establece como salida el pin 9 para el buzzer //Sonidos de configuracion del buzzer beep(20); delay(1000); } |
Funciones de escritura y emisión de sonidos:
- La función beep(int frec) recibe como parámetro la frecuencia del sonido y simplemente lo escribe en el pin 9 que está conectado al pin positivo del buzzer.
- La función write(int value) recibe como parámetro el valor en cm que se mostrará por el LCD.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | void beep(int frec){ analogWrite(BUZZER, frec); // Permite cualquier valor entre 0 y 255, donde 0 indica la ausencia de sonido } void write(int value) { display.clearDisplay(); String valueString = String(value); display.setTextSize(1); display.setTextColor(BLACK); display.setCursor(0,0); if(value < 10) { display.println("Dist.: " + valueString + " cm"); display.println("Peligro!"); display.display(); beep(20); } else { display.println("Dist.: " + valueString + " cm"); display.display(); beep(0); } |