----------------------------------------------------------------------------------------------------------
Plantilla de Implementación
---------------------------------------------------------------------------------------------------------
Vídeo Demostrativo
Prototipo el cual consiste en simular un ascensor. Este elevador al presionar un botón indica al usuario en que piso esta el ascensor y le indica a cual piso se dirigió, para ello muestra en la pantalla LCD la información en el piso que se encuentra y al piso que llego, además activa una alarma con una nota indicando un zumbido si esta en el piso uno y con dos zumbidos indicando si es el piso dos. El servomotor cumple la función de indicar que la puerta se abrió y cerro.
Código de la Programación:
#include <LiquidCrystal.h> //libreria para usar la pantalla LCD.
//Define permite dar un nombre o valor constante antes de compilar el programa.
#define COLS 16 // Columnas del LCD
#define ROWS 2 // Filas del LCD
LiquidCrystal lcd(8,9,4,5,6,7); //Define los pines en la tarjeta de arduino que controlan la LCD.
#include <Servo.h>
Servo servoMotor; //Se declara una variable para usar el servomotor. Constructor de la sentencia servo.
int trig = 13; //declaración de variable que indica que el pin 13 envia una onda ultrasonica.
int echo = 12; //declara que la variable echo recibe las ondas que rebotan en el objeto.
int piezo =2; //variable del pin piezo.
//------------------------------------------------------
//varible para saber distancia ascensor
float lectUtrasonic;
int pinButton=10; //declara el pin del botón.
int boton; //declara una variable con el nombre botón.
long distancia; //declara la variable distancia.
long duracion; //declara la variable duración.
//------------------------------------------------------
void setup() {
// Inicia el servo para que empiece a trabajar con el pin 3
servoMotor.attach(3); //Indica en cual pin está conectado el servomotor
servoMotor.write(0); //posición inicial en grados al servomotor.
lcd.begin(COLS, ROWS);//Se llaman a las columnas y filas para que se active en el LCD.
Serial.begin (9600); // Activa el monitor serial en 9600 para ver los valores.
lcd.setCursor (4,0); //Define la posición de la linea en la pantalla. ubicandose en la posición 4 de la fila uno en la pantalla.
lcd.print ("EDIFICIO"); //muestra la palabra PRONIE en la posición anterior en la pantalla LCD.
delay(2000); //espera 2 segundos y el texto LCD no parpadee.
digitalWrite (pinLed, LOW);//apaga led
pinMode (trig, OUTPUT); //Pin 13 como un elemento de salida.
pinMode (echo, INPUT); //Pin 12 que actua como un elemento de entrada.
pinMode (piezo, OUTPUT); //El pin 2 donde está conectado el piezo se establece en modo de salida.
//-----------
}
//------------------------------------------------------
//------------------------------------------------------
void loop()
{
//pantalla();
lectUtrasonic = calcularDistancia ();
/*
lcd.clear(); //se utiliza para proyectar los datos numericos de la distancia detectada por el sensor ultrasónico.
// Situamos el cursor en la columna 0 fila 0
lcd.setCursor(0,0);
// Mensaje de ascensor
lcd.print(lectUtrasonic);
delay(200);
*/
if(boton=digitalRead(pinButton)) //condición, que indica cuando el botón está presionado realiza lo que esta dentro de las llaves.
{
///////////////////////////////////////////////////////////////////
if(lectUtrasonic<8)
{
LCDPiso_2(); //activa la función cuando lo anterior es cierto.
delay(2000);
}
///////////////////////////////////////////////////////////////////
if(lectUtrasonic>8)
{
LCDPiso_1();
delay (2000);
}
///////////////////////////////////////////////////////////////////
}
}
int calcularDistancia () //Función que calcula la distancia y devuelve un valor. (cuando se declara funciones no terminan con ";").
{
long distancia; //declara la variable distancia.
long duracion; //declara la variable duración.
digitalWrite (trig, LOW); //establece un valor del pin en apagado.
delayMicroseconds (4); //espera 4 microsegundos.
digitalWrite (trig, HIGH);// establece un valor del pin en encendido.
delayMicroseconds (10); //espera 10 microsegundos
digitalWrite (trig, LOW);// establece un valor del pin apagado.
duracion=pulseIn (echo, HIGH);//recibe el valor del pulso que recibe.
duracion = duracion/2; // y este lo divide
distancia = duracion/29; //
return distancia; // devuelve el valor obtendio de calcular la distancia
}
//------------------------------------------------------
//------------------------------------------------------
void LCDPiso_1()
{
// Limpia la pantalla
lcd.clear();
// Situamos el cursor en la columna 0 fila 0
lcd.setCursor(0,0);
// Mensaje de ascensor
lcd.print("El ascensor esta");
lcd.setCursor(0,1);
lcd.print("en piso 2 espere");
delay (5000);
// Limpiamos la pantalla
lcd.clear();
// Situamos el cursor en la columna 0 fila 0
lcd.setCursor(0,0);
// Mensaje de ascensor
lcd.print("El ascensor");
lcd.setCursor(0,1);
lcd.print("llego al piso 1");
tone(piezo,293.66,200);
servoPuertas();
}
//------------------------------------------------------
void LCDPiso_2()
{
// Limpia la pantalla
lcd.clear();
// Situamos el cursor en la columna 0 fila 0
lcd.setCursor(0,0);
// Mensaje de ascensor
lcd.print("El ascensor esta");
lcd.setCursor(0,1);
lcd.print("en piso 1 espere");
delay (5000);
// Limpiamos la pantalla
lcd.clear();
// Situamos el cursor en la columna 0 fila 0
lcd.setCursor(0,0);
// Mensaje de ascensor
lcd.print("El ascensor");
lcd.setCursor(0,1);
lcd.print("llego al piso 2");
tone(piezo,293.66,200);
delay (200);
tone(piezo,293.66,200);
servoPuertas();
}
//------------------------------------------------------
//------------------------------------------------------
void servoPuertas()
{
//programa el servomotor para simular de que abre y cierra la puerta del elevador.
// Desplazamos a la posición 0º
servoMotor.write(0);
// Esperamos 1 segundo
delay(1000);
// Desplazamos a la posición 90º
servoMotor.write(90);
// Esperamos 1 segundo
delay(1000);
// Desplazamos a la posición 0º
servoMotor.write(0);
}
//------------------------------------------------------
//------------------------------------------------------
void pantalla()
{
// Limpiamos la pantalla
lcd.clear();
// Sitúa el cursor en la columna 0, fila 0
lcd.setCursor(0,0);
// Mensaje de ascensor
lcd.print(lectUtrasonic);
delay (100);
}
-----------------------------------------------------------------------------------------------------
Problemas Técnicos
- La pantalla no mostraba el texto en diferentes líneas en la LCD.
Solución: Revisando la sintaxis las variables declaradas para las columnas y filas de la LCD no estaban inicializadas en el void setup lo cual no mostraba los textos editados. Al incluirlos y subir el programa esté realizo el procedimiento deseado.
2. Otro problema que se me presento fue que cuando se presionaba el botón no se activaba el valor detectado por el sensor ultrasónico.
Solución: Un error en la sintaxis no ejecutaba las funciones condicionadas el haber incluido un (;) y luego no tener la función dentro de una { provocaba error en el procedimiento.
No hay comentarios:
Publicar un comentario