Este documento describe un proyecto para diseñar un temporizador utilizando un Arduino y una pantalla LCD (display de cristal líquido). El temporizador se utilizaría para indicar los horarios en una institución educativa. El documento explica el proceso de diseño del circuito, la programación del Arduino para controlar el temporizador y la pantalla LCD, y concluye que el proyecto permitió aprender sobre electrónica y satisfacer la necesidad de un timbre en la institución.
1. TEMPORIZADOR: ARDUINO + LCD.
TIMBRE INCAF.
PRESENTADOR POR:
YULY ANDREA CUBIDES MÀRQUEZ.
PRESENTADO A:
YENNY BLANCO.
INSTITUCION DE CAPACITACIÒN FUTURO INCAF, TOCANCIPÀ.
GRADO ONCE.
ELECTRONICA.
NOVIEMBRE 2014.
2. INTRODUCCIÒN.
El presente proyecto se redacta con carácter estudiantil para fin de semestre.
En este quiero dar a conocer el proceso que junto con la profesora Yenny Blanco realizamos
en clase de electrónica los días sábados, un temporizador: lcd + arduino , en otras palabras un
timbre, ya que no hay uno en nuestra institución, este sería una herramienta demasiado útil
tanto para profesores y alumnos, todos estarían beneficiados, este funcionaria a la hora de
entrada, al cambio de hora, al comenzar y finalizar el descanso y a la hora de salida, con este
tendríamos los tiempos exactos para cada una de las materias.
A lo largo de este proyecto daré a conocer detalladamente el proceso.
3. OBJETIVOS.
GENERAL.
Diseñar un temporizador: lcd + arduino para el cumplimientos de los horarios en la
istuticiòn.
ESPECÌFICOS.
Diseñar el circuito que necesitamos para el temporizador y este conectarlo al arduino.
Identificar la función e importancia de cada uno de los componentes en nuestro
circuito.
Aprovechar los laboratorios con la tutora de mi proyecto la profesora Yenny Blanco,
como instrumento y herramienta para la terminación de mi proyecto.
4. JUSTIFICACIÒN.
Este proyecto fue elaborado con el fin que en nuestra institución tengamos un timbre, ya que
este nos indique la hora de entrada , al cambio de hora, al comenzar y finalizar el descanso y a
la hora de salida, con este tendríamos los tiempos exactos para cada una de las materias y
espacios, más que eso es traer algo nuevo, este ayuda a la innovación en nuestra institución.
5. CONOCIMIENTOS PREVIOS.
Temporizador: Arduino + LCD
Hoy quiero hablar de los displays LCD y su control y uso mediante una placa Arduino.
El proceso de control de un LCD con Arduino nos abre un frente de interacción visual de la
electrónica de un modo rápido, sencillo y eficaz.
¿Qué es un display LCD?
De un modo muy resumido, las siglas LCD significan “Liquid Cristal Display” o en español
“Pantalla de cristal líquido“, y es una pantalla delgada y plana, formada por un número de
píxeles en color o monocromos colocados delante de una fuente de luz o reflectora
El uso de estas pantallas, está tan extendido hoy en día, que prácticamente todos los aparatos
electrónicos suelen llevarlas, para mejor uso y facilidad de interacción.
Existen muchos tipos de LCD, variando en forma y tamaño, número de píxeles, color, y la
gran mayoría tienen un coste de unos pocos €uros en cualquier tienda de electrónica.
El que voy a utilizar yo, es del tipo más sencillo de controlar, y son los displays LCD
diseñados para interactuar con circuitos integrados, de entrada de 4/8 bits en paralelo, basados
en el controlador Hitachi HD44780.
Estos se caracterizan principalmente por el número de caracteres que son capaces de
representar, que viene dado en su datasheet generalmente por unos números del tipo “8×1″,
“16×2″, “20×4″, que significan “Número de caracteres x Número de filas“, así pues, un
display LCD 16×2, es capaz de representar 2 filas de 16 caracteres.
Estos displays se controlan muy facilmente con una placa Arduino o un PIC y muy pocas
lineas de código. Para ello veamos sus pines para saber como se conectan:
6. - Pin 1 – Vss: GND o tierra.
- Pin 2 – Vdd: Alimentación Vcc o +5V.
(Algunos pueden alimentarse a 3 Vcc)
- Pin 3 – V0: Control del contraste del display, conectamos este pin al terminal variable de un
potenciómetro conectado a Vcc y Masa en sus terminales extremos.
- Pin 4 – RS: Selección de Registro.
0 lógico: Registro de comandos (escritura),
1 lógico: Registro de datos (escritura, lectura)
- Pin 5 – R/W:
0 lógico: Escritura del LCD.
1 Lógico: Lectura del LCD.
- Pin 6 – Enable: El famoso Enable de casi todos los componentes de la electrónica digital.
Un 1 lógico señala el inicio de escritura o lectura del LCD, un 0 lógico, desactiva todas las
funciones.
7. - Pin 7-10 – D0/D3: Pines correspondientes al bus de datos.
D0 corresponde al bit menos significativo.
Estos pines no se utilizan si realizamos operaciones sobre el LCD de 4 bits.
- Pin 11-14 – D4/D7: Pines correspondientes al bus de datos.
D7 corresponde al bit más significativo y puede utilizarse como “Busy Flag”,
si leemos sobre este pin, un 1 lógico nos indicará que el LCD se encuentra ocupado,
no permitiendonos realizar ninguna operación hasta que se deshabilite.
En la tabla no aparecen, ya que no todos los displays disponen de los pines 15 y 16, yo he
modificado la imagen para añadirlos, y son simplemente:
- Pin 15 – Ánodo de la retroiluminación : R + 5V.
- Pin 16 – Cátodo de la retroiluminación: GND.
Ahora si, podemos meternos de lleno en el control del LCD.
En la web de Arduino, vienen muchos ejemplos con sus correspondientes imágenes de
conexión del LCD con la placa en cuestión, además del código para ponerlo en
funcionamiento en pocos clicks.
El código para poner en funcionamiento un LCD es muy sencillo, y se trata simplemente de
declarar los pines a utilizar por el LCD, situar el cursor en el caracter que deseemos escribir
(Nº caracter, Fila) y escribir sobre el LCD.
Arduino simplifica el trabajo de escribir sobre un LCD hasta un punto que resulta muy fácil.
Aqui un ejemplo de código para escribir una frase sobre un LCD.
8. PROCEDIMIENTOS.
Ya conectados todos los alambres en el proto board , y en el arduino, necesitamos la
programación, esta se hace por medio de un programa llamado Arduino, que es el que nos
indica, como será el conteo de nuestro temporizador, ya sea basado en horas, minutos y
segundos.
Aquí mostrare dicha programación.
#include <LiquidCrystal.h> //Libreria del display LCD
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Inicializamos la libreria con el numero de los pines a
utilizar
int buzzer = 13; //Alarma
int ahoras = 0; //Variable a mostrar por LCD de las horas
int aminutos = 0; //Variable a mostrar por LCD de los minutos
int asegundos = 0; //Variable a mostrar por LCD de los segundos
int segundostotal = 0; //Tiempo total
int msg= 0; //Barrera para el mensaje de bienvenida
int start = A2; //Pulsador de arranque
int empieza = 1024; // Variable para almacenaje del pulsador de arranque
int buth = A5; //Pulsador de Horas
int butm = A4; //Pulsador de Minutos
int buts = A3; //Pulsador de segundos
int varbuth = 0; //Variable para almacenar el valor del pulsador de horas
int varbutm = 0; //Variable para almacenar el valor del pulsador de minutos
int varbuts = 0; //Variable para almacenar el valor del pulsador de segundos
void setup()
{
lcd.begin(16, 2); // Configuramos el número de columnas y filas del LCD.
pinMode(buzzer, OUTPUT); //Pin de alarma --> Salida
pinMode(buth, INPUT); //Pin de pulsador de horas --> Entrada
pinMode(butm, INPUT); //Pin de pulsador de minutos --> Entrada
pinMode(buts, INPUT); //Pin de pulsador de segundos --> Entrada
9. pinMode(start, INPUT); //Pin de pulsador de arranque --> Entrada
msg = 0; //Barrera del mensaje de bienvenida
empieza = 1024; //Barrera de arranque
varbuth = 1; //Barrera de horas
varbutm = 1; //Barrera de minutos
varbuts = 1; //Barrera de segundos
}
void loop()
{
if(msg==0) //Mostramos el mensaje de bienvenida solo una vez
{
lcd.setCursor(0,0);
lcd.print("Temporizador con");
lcd.setCursor(1,1);
lcd.print("Arduino + LCD");
delay(2500);
msg = 1;
lcd.clear();
}
//-------------------------------------------------------------------------------------------------
// LECTURA DE LOS BOTONES Y ELECCIÓN DEL TIEMPO, NO SALE DEL
BUCLE HASTA PULSAR
// EL BOTON DE ARRANQUE
//-------------------------------------------------------------------------------------------------
do
{
varbuth = analogRead(buth); //Leemos boton de horas
varbutm = analogRead(butm); //Leemos boton de minutos
varbuts = analogRead(buts); //Leemos boton de segundos
if(varbuth == 0) //Si el boton ha sido pulsado, aumentamos las horas en una
unidad
{
ahoras = ahoras + 1 ;
delay(250);
}
if(varbutm == 0) //Si el boton ha sido pulsado, aumentamos los minutos en una
unidad
{
aminutos = aminutos + 1;
10. delay(250);
}
if(varbuts == 0) //Si el boton ha sido pulsado, aumentamos los segundos en una
unidad
{
asegundos = asegundos + 1;
delay(250);
}
lcd.setCursor(0,0);
lcd.print("Elige el tiempo"); //Muestra mensaje y las HH:MM:SS que vayamos
aumentando
lcd.setCursor(4,1);
if (ahoras < 10) lcd.print("0"); // Si las horas son menor que 10, pone un "0" delante.
lcd.print(ahoras); // Sin este codigo, se muestra asi: H:M:S (1:M:S)
lcd.print(":");
if (aminutos < 10) lcd.print("0"); // Si los minutos son menor que 10, pone un "0" delante.
lcd.print(aminutos); // Sin este codigo, se muestra asi: H:M:S (H:1:S)
lcd.print(":");
if (asegundos < 10) lcd.print("0"); // Si los segundos son menor que 10, pone un "0"
delante.
lcd.print(asegundos); // Sin este codigo, se muestra asi: H:M:S (H:M:1)
empieza = analogRead(start); //Lee el boton de arranque
if (empieza == 0) //Si el boton de arranque, fue pulsado...
{
segundostotal = asegundos + (aminutos * 60) + (ahoras * 60 * 60); //Convierte el tiempo
elegido en segundos!!
}
} while(empieza != 0); // Se repite el menu de elegir tiempo hasta que pulsemos el boton
de arranque.
//------------------------------------------------------------------------------------ -------------
// UNA VEZ PULSADO EL BOTON DE ARRANQUE Y ACUMULADO EL TIEMPO,
ENTRA EN EL SIGUIENTE WHILE
// Y NO FINALIZA HASTA TERMINAR LA CUENTA.
//-------------------------------------------------------------------------------------------------
while (segundostotal > 0)
{
11. delay (1000); //Descontamos en periodos de 1 segundo
segundostotal--;
ahoras = ((segundostotal / 60)/ 60); //Convertimos los segundos totales en horas
aminutos = (segundostotal / 60) % 60; //Convertimos los segundos totales en minutos
asegundos = segundostotal % 60; //Convertimos los segundos totales en periodos de
60 segundos
lcd.setCursor(0,0);
lcd.print("Tiempo restante"); //Mostramos mensaje de tiempo restante
lcd.setCursor(4,1);
if (ahoras < 10) lcd.print("0"); // Si las horas son menor que 10, pone un "0" delante.
lcd.print(ahoras); // Sin este codigo, se muestra asi: H:M:S (1:M:S)
lcd.print(":");
if (aminutos < 10) lcd.print("0"); // Si los minutos son menor que 10, pone un "0"
delante.
lcd.print(aminutos); // Sin este codigo, se muestra asi: H:M:S (H:1:S)
lcd.print(":");
if (asegundos < 10) lcd.print("0"); // si el valor de segundo esta por debajo de 9 (unidad)
antepone un cero
lcd.print(asegundos); // Sin este codigo, se muestra asi: H:M:S (H:M:1)
if (segundostotal == 0) //Si finaliza el tiempo
{
while(1) //Bucle infinito mostrando mensaje y haciendo parpadear un
led
{
lcd.clear();
lcd.setCursor(5,0);
lcd.print("Tiempo");
lcd.setCursor(3,1);
lcd.print("Finalizado");
digitalWrite(buzzer, HIGH);
delay(200);
digitalWrite(buzzer, LOW);
delay(200);
}
}
}
}
12. Otro
#include <LiquidCrystal.h> //Incluimos la libreria de control del LCD
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Inicializamos la libreria con los pines a utilizar
void setup() {
lcd.begin(16, 2); //Configuramos el numero de caracteres y filas a utilizar
}
void loop() {
lcd.setCursor(0, 0); //Situamos el cursor en el caracter 0, fila 0
lcd.print("Hello World") //Escribimos sobre el LCD
}
13. CONCLUSIONES.
Con este proyecto aprendí principios de electrónica, como saber que
herramientas utilizamos, que materiales, montar un circuito, programar un
arduino.
Vi la necesidad que tenía nuestra institución de un timbre.