domingo, 13 de octubre de 2013

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.
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
#include <Ultrasonic.h> 
// 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);
  }

Vídeo



No hay comentarios:

Publicar un comentario