You are on page 1of 14

MATERIAL REQUERIDO.

Arduino Uno o similar. Esta sesin acepta cualquier otro modelo


de Arduino.

Una Protoboard.

Cables de protoboard

Un Potencimetro.

Un display LCD, de 162 o 164.

LOS DISPLAYS LCD

Los displays LEDs de 7 segmentos, que vimos en las sesiones anteriores, estn
muy bien, son baratos y prcticos, pero tienen el inconveniente de que no
pueden mostrar mensajes de texto, sino solo nmeros.
Se echa de menos algn sistema para mostrar mensajes de texto sencillos, y
por eso se comercializan los displays LCD. Son faciles de encontrar en diversos
formatos : 162 (16 caracteres x 2 lneas) o LCD 164 (16 caracteres x4
lunes).

LCD viene del ingls Liquid Crystal Display, o sea Pantalla de cristal liquido.
Son una opcin muy sencilla de usar, y adems, dan un toque muy pro a
vuestros proyectos, y por eso, en los ltimos aos los displays LCD han ganado
mucha aceptacin en productos comerciales de todo tipo.
Bsicamente porque:
-Son baratos.
-Estn disponibles en varios tamaos y configuraciones.
-Son de bajo consumo.
-Muy prcticos si te basta con mostrar solo texto (y algunos caracteres
especiales)..
Aunque, ltimamente, estos displays suelen venir con los pines soldados,
todava hay muchos sitios que cuando compras uno de estos, te lo envan en
kit, con los pines aparte para que los sueldes.
En algn momento tendremos que hablar de
cmo soldar componentes, pero ese da, an
no ha llegado.
Lo primero que tienes que saber, es
que tienes que soldarlos, y que no vale
sujetar los pines de algn modo ms o
menos extravagante. Los sueldas y punto.
Hazte a la idea. Cualquier otra solucin
acabara funcionando mal, o directoramente con el display quemado.
Cuando lo tengas listo, pincha el display en la protoboard, dejando sitio para el
resto de componentes y cables, recuerda que habr muchos, as que se
generoso con el espacio que dejas.

DIAGRAMA DE CONEXIN

Esquema para protoboard

>Conecta tensin y GND a la protoboard.

>conectar la alimentacin el panel LCD. Conecta el pin16 del LCD a Ground y


el 15 a 5V

>conecta ahora el cable USB a tu Duino, el LCD debera iluminarse, si no,


revisa tus cables antes de seguir.
>conecta ahora, el potencimetro de ajuste. Para ello conecta uno de los
extremos del pot a GND y el otro a 5V. El centro al pin 3 del LCD.

>Aprovechemos tambin para dar tensin al panel LCD, El pin 1 va a GND y el


2 a tensin:

>Si todo ha ido bien, ya podemos encender el dispay y probarlo. Conecta el


USB a tu Arduino y veamos. Si vas girando el potencimetro, en algn
momento tienes que ver unos cuadraditos en la pantalla, en caso contrario
revisa las conexiones. No sigas, si no ves esto.

>Si ya veis las matrices de puntos en la pantalla, podemos seguir.


>Vamos a conectar ya los pines de datos y control. Sin entrar en muchos
detallas, no vamos a usar todos los pines disponibles, porque no los
necesitamos. Solo usaremos dos pines de control, RS y EN y los 4 pines de
datos D7, D6, D5, y D4 . No necesitamos mas por ahora.

>Vamos con las conexiones de control del display:


RW, LCD pin 5

GND

RS, LCD pin 4

Arduino pin 7

EN, LCD pin 6

Arduino pin 8

>Y ya solo nos quedan los 4 cables de datos.


DB7, LCD pin 14

Arduino pin 12

DB6, LCD pin 13

Arduino pin 11

DB5, LCD pin 12

Arduino pin 10

DB4, LCD pin 11

Arduino pin

EL PROGRAMA DE CONTROL
>Vamos a usar una librera de control del panel LCD, que viene incluida en
nuestro Arduino. Pinchad en:
\\Programa\Importar Libreria\LiquidCrystal

>Y ahora podemos importar uno de los ejemplos o escribir el nuestro,


comentando el cdigo.Lo primero es que al importar la librera nos ha escrito
esto:
#include <LiquidCrystal.h>

>Despues, hay que inicializar la librera. Creamos una instancia llamada lcd, de
la clase LiquidCrystal y le pasamos como parmetros los pines que hemos
usado:
LiquidCrystal lcd(7, 8, 9, 10, 11, 12); //

( RS, EN, d4, d5, d6, d7)

cuidado porque los pines que hemos usado, no corresponden a los


ejemplos de Arduino, as que podis cargarlos, peroaseguraros de
cambiar la lnea de definicin de los pines, o no corrern.

El resto es sencillo
void setup()
{
lcd.begin(16, 2); // Fijar el numero de caracteres y de filas
lcd.print("Prometec.net"); // Enviar el mensaje
}

void loop()
{
lcd.setCursor(0, 8);

// set the cursor to column 0, line 1

lcd.print(millis() / 1000);

// print the number of seconds since

reset:
}

#Cuidado: Como siempre la primera linea, la superior, es la linea 0 y la


segunda la linea 1.
Estos display son muy pesados de cablear, pero muy sencillos de utilizar.
Vamos a probar sacando un reloj (muy sencillo de momento). Si recordis las
funciones que usamos en las ultimas sesiones, podemos recuperar alguna para
presentar el valor de millis() como un reloj
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

void setup()
{
lcd.begin(16, 2);

// Fijamos el numero de caracteres y

lcd.print("Prometec.net");

// Aqi va el mensaje

filas

void loop()
{
lcd.setCursor(6, 1);
String s = reloj() ;
lcd.print(s) ;

// Ponte en la line 1, posicion 6

}
String reloj()
{
int n = millis() / 1000 ;
int segundos = n % 60

int minutos =

n / 60

// Lo pasamos a segundos

String S = String(minutos) + ":" + String(segundos);


return (S);
}

Merece la pena, comentar algunas cosas de este cdigo. En primer lugar en la


funcin reloj, calculamos los minutos y segundos a partir del reloj interno de
Arduino en milisegundos, no hay nada nuevo en esto. Pero fijaros que hemos
definido reloj como String:
String reloj()

Eso significa que vamos a devolver un parmetro tipo String a quien nos haya
llamado. En algn punto de la funcin habr que hacer un return( String).
Fijaros que definimos dentro de la funcin un string llamado s:
String S = String(minutos) + ":" + String(segundos);

En esta lnea no hay que confundir (aunque se escriben exactamente igual), el


tipo String para definir S, con la funcin String(n) que convierte un numero n en
un string de texto para que pueda mezclar el nmero de los minutos y los
segundos separados por un smbolo de :.
Al final le aadimos un par de espacios en blanco, para evitar arrastrar
fantasmas en la pantalla
Quita los espacios y miro lo que pasa en el cambio de minuto. Cmo lo
arreglaras, sin el truco de poner esos espacios al final? Piensalo.
En la funcin loop, hemos usado

lcd.print(s) ;

Para sacar el mensaje de texto. Todo lo que ya sabis de Serial.print() se usa


exactamente igual con esta instruccin. Y por ltimo, tenemos una lnea como
esta:
lcd.setCursor(6, 1);

// Ponte en la line 1, posicion 6

Que lo que hace es posicionar el cursor del panel, en la posicin 6 de la


segunda lnea, para escribir la hora centrada. Aqu os dejo un mini video con el
resultado.
La librera LCD, viene con varios ejemplos muy interesantes, que os conviene
probar. Recordad, simplemente, que tenis que cambiar las definiciones de los
pines para que corran.
Un ejemplo particularmente interesante, es el de CustomCharacter, en el que
define una serie de smbolos especiales y los mueve por la pantalla en funcin
de los valores que lee de un potencimetro.
Sin llegar a tanta sofisticacin, es muy interesante que veamos cmo definir
algunos caracteres especiales, porque en la tabla base del LCD, no estn
incluidas , acentos, grados, o . As que dependiendo del uso que le deis pude
seros de inters saber cmo definir tus propios smbolos.

DEFINIENDO TUS PROPIOS CARACTERES


Vamos a definir un carcter propio, para digamos, el smbolo de grados
centgrados, por ejemplo.
Lo primero que tenis que saber, es que los caracteres se definen con un array
( si, de nuevo) de 88, como si los dibujarais en una cuadricula de ese tamao,
y rellenando el cuadradito completo.
As por ejemplo para el smbolo del grado seria:

byte grado[8] =
{
0b00001100,

// Los definimos como binarios 0bxxxxxxx

0b00010010,
0b00010010,
0b00001100,
0b00000000,
0b00000000,
0b00000000,
0b00000000
};

Para montar los caracteres definidos usamos:


lcd.createChar(0, euro);
lcd.createChar(1, grado);

Y ahora ya estan disponibles. Tened en cuenta que solo podemos definir 8 caracteres
especiales en un momento dado ( Aunque podemos definir 30 arrays, de caracteres y crearlos
y matarlos sobre la marcha).
Aqui tenemos un ejemplo del programa:
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

byte grado[8] =
{

0b00001100,
0b00010010,
0b00010010,
0b00001100,
0b00000000,
0b00000000,
0b00000000,
0b00000000
};

void setup()
{
lcd.begin(16, 2); // Hay que inicializar el LCD
lcd.createChar(1, grado);
lcd.setCursor(0, 0);
lcd.print("Estamos a 25");
lcd.write(1);
}
void loop()
{
}

Y aqui teneis una foto del resultado

You might also like