¿Qué es un LCD?
Una pantalla de cristal líquido o LCD (sigla del inglés liquid crystal display) 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. A menudo se utiliza en dispositivos electrónicos de pilas, ya que utiliza cantidades muy pequeñas de energía eléctrica.
Estas pantallas nos sirven para mostrar caracteres y números, y en los modelos gráficos podremos mostrar gráficos o dibujos. Usarlas en nuestros proyectos nos permite por tanto mostrar información. Unas de las más comunes son las de caracteres, las cuales vienen de diferentes tamaños, denotados por el número de columnas y filas, son populares las de 16×2, las cuales tienen 16 columnas y 2 filas. A continuación veremos cómo conectarlas a Arduino y como mostrar información en ellas.
Conexión de un LCD 16×2 a Arduino
La conexión se muestra a continuación (gráfico y esquemático):
Como podemos ver requerimos de un mínimo de 6 pines digitales para conectar la pantalla. Y debemos también incorporar una resistencia de 220 ohms para conectar el led de luz de fondo (background) y un potenciómetro para ajustar el contraste. Una vez conectado el circuito ya podemos hacer algunas pruebas. Para ello nos serviremos de una librería.
Como usar la librería LiquidCrystal
Esta librería pertenece a las librerías estándar de Arduino ( incluidas en el IDE) y permite controlar las pantallas LCD basadas en el controlador Hitachi HD44780 (o un chipset compatible), que se encuentra en la mayoría de las pantallas LCD basadas caracteres alfanumericos. La librería funciona bien con una interface de 4 o 8 bits. (por ejemplo usando 4 o 8 líneas de datos más el rs y el enable, y, opcionalmente la línea de control rw.
Las funciones de la librería son las siguientes (incluyen los enlaces a su descripción en el sitio web de arduino):
- LiquidCrystal()
- begin()
- clear()
- home()
- setCursor()
- write()
- print()
- cursor()
- noCursor()
- blink()
- noBlink()
- display()
- noDisplay()
- scrollDisplayLeft()
- scrollDisplayRight()
- autoscroll()
- noAutoscroll()
- leftToRight()
- rightToLeft()
- createChar()
A continuación vamos a explicar las de uso común,
LiquidCrystal()
Descripción
Crea una variable de tipo LiquidCrystal. La pantalla puede ser controlada usando 4 o 8 líneas de datos. Si se omiten los números de pin para d0 hasta d3, se pueden dejar esos pines desconectados, o conectados a tierra, el pin RW también puede ser conectado a tierra también en vez de conectarlo al Arduino.
Sintaxis
LiquidCrystal lcd(rs, enable, d4, d5, d6, d7)
LiquidCrystal lcd(rs, rw, enable, d4, d5, d6, d7)
LiquidCrystal lcd(rs, enable, d0, d1, d2, d3, d4, d5, d6, d7)
LiquidCrystal lcd(rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7)
Parámetros
lcd: una variable de tipo LiquidCrystal (el nombre que le das a tu LCD)
rs: el numero del pin de Arduino que es conectado a el pin RS del LCD
rw: el numero del pin de Arduino que es conectado a el pin RW del LCD (opcional)
enable: el numero del pin de Arduino que es conectado a el pin enable del LCD
d0, d1, d2, d3, d4, d5, d6, d7: los números de pines de Arduino que son conectados a los pines de datos correspondientes del LCD. d0, d1, d2, y d3 son opcionales; si son omitidos, el LCD será controlado usando solo cuatro líneas de datos (d4, d5, d6, d7).
begin()
Descripción
Inicializa la interface de la pantalla LCD, y especifica las dimensiones de la pantalla (ancho y alto). begin() debe ser llamada antes que cualquier otra función de la librería.
Sintaxis
lcd.begin(columnas, filas)
Parámetros
lcd: una variable de tipo LiquidCrystal
columnas: el numero de columnas que tiene la pantalla
filas: el numero de filas que tiene la pantalla
clear()
Descripción
Limpia la pantalla LCD y coloca el cursor en la esquina superior izquierda.
Sintaxis
lcd.clear()
Parámetros
lcd: una variable de tipo LiquidCrystal
setCursor()
Descripción
Posiciona el cursor de la pantalla LCD; esto es, define la ubicacion donde el texto escrito en la pantalla sera mostrado.
Sintaxis
lcd.setCursor(columna, fila)
Parámetros
lcd: una variable de tipo LiquidCrystal
columnas: la columna en la cual se posicionara el cursor (se comienza a contar en 0)
filas: la fila en la cual se posicionara el cursor (se comienza a contar en 0)
print()
Descripción
Imprime texto en el LCD.
Sintaxis
lcd.print(data)
lcd.print(data, BASE)
Parámetros
lcd: una variable de tipo LiquidCrystal
data: la información a imprimir (char, byte, int, long, or string)
BASE (optional): el formato en el cual imprimir los numeros: BIN para binario (base 2), DEC para decimal (base 10), OCT para octal (base 8), HEX para hexadecimal (base 16).
La librería LiquidCristal trae números ejemplos los cuales podemos ver en el IDE. Veamos algunos de ellos.
Ejemplo 1 – Hola mundo
#include <LiquidCrystal.h> //debemos incluir la libreria // Indicamos los pines a los cuales tenemos conectada la LCD LiquidCrystal milcd(12, 11, 5, 4, 3, 2); void setup() { // Indicamos el numero de columnas y filas, he inicializamos la LCD milcd.begin(16, 2); // Imprimimos un mensaje en primera fila milcd.print("Hola mundo!"); } void loop() { // colocamos el cursor en la columna 0 y fila 1 // notemos que la fila 1, es la segunda fila, ya que comenzamos a contarlas desde 0 milcd.setCursor(0, 1); // Imprimimos el numero de segundos desde que se reinicio la placa milcd.print(millis() / 1000); }
Ejemplo 2 – Activar y desactivar el cursor
#include <LiquidCrystal.h> //debemos incluir la libreria // Indicamos los pines a los cuales tenemos conectada la LCD LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { // Indicamos el numero de columnas y filas, he inicializamos la LCD lcd.begin(16, 2); // Imprimimos un mensaje en primera fila lcd.print("hello, world!"); } void loop() { // desactiva el cursor lcd.noCursor(); delay(500); // activa el cursor lcd.cursor(); delay(500); }
Algo que complementa los caracteres alfanuméricos en las pantallas LCDs es la posibilidad de imprimir caracteres especiales. Para ello usaremos la función createChar() la cual explicaremos a continuación.
createChar()
Descripción
Crea un carácter personalizado para su uso en la pantalla LCD. Se admiten hasta ocho caracteres de 5×8 píxeles (numerados de 0 a 7). El aspecto de cada carácter personalizado se especifica mediante una matriz de ocho bytes, uno para cada fila. Los cinco bits menos significativos de cada byte determinan los píxeles de esa fila. Para mostrar un carácter personalizado en la pantalla, se usa la función write() con su número.
Importante! Cuando se hace referencia al carácter personalizado «0», si no está en una variable, se debe convertir (cast) como byte, de lo contrario el compilador arroja un error.
Sintaxis
Lcd.createChar (num, datos)
Parámetros
Lcd: una variable del tipo LiquidCrystal
Num: qué carácter crear (0 a 7)
Datos: los datos de píxeles del personaje
Ejemplo 3 – Imprimir caracteres especiales
#include <LiquidCrystal.h> //debemos incluir la librería // Indicamos los pines a los cuales tenemos conectada la LCD LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Declaramos una matriz e incializamos los elementos con // los pixeles que queremos activar marcados con unos byte feliz[8] = { B00000, B10001, B00000, B00000, B10001, B01110, B00000, }; void setup() { lcd.createChar(0, feliz); // Creamos el caracter especial 0 lcd.begin(16, 2); // Indicamos el numero de columnas y filas, he inicializamos la LCD lcd.write(byte(0)); //Imprimimos el caracter especial 0 } void loop() {}
Ejercicios
Ejercicio 1 – Imprimir dos valores
Imprimir el valor de dos variables en la LCD, una en cada linea, identificandolas como variable 1 y variable 2, la variable 1 es un contador que cambia de valor cada segundo y la variable 2 es un contador que cambia cada 3 segundos.
Ejercicio 2 – Caracteres especiales
Partiendo del ejercicio 1, hacer un carácter especial que identifique a cada variable, y sustituir la identificación de la variable por el carácter especial.
Ejercicio 3 – Termometro
Usando un sensor de temperatura, visualizar la temperatura medida en la pantalla LCD.
Y con los ejercicios hemos culminado la lección, espero te allá sido de provecho.
Aún no te has suscrito a nuestro boletín? hazlo ahora y te mantendré informado de la ultimas publicaciones y entregas especiales. Y si tienes alguna pregunta o comentario acerca del post no dudes en hacerla.