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.
#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.
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.
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);
}