7

Cómo controlar una pantalla LCD con Arduino

Publicado por el .

LCD mostrando "comohacer.eu"

Pasamos muchas horas sentados frente a pantallas, pero pocos comprenden como funcionan en realidad. En este post os enseñaremos a programar una pantalla LCD con una placa Arduino, así podrás mostrar mensajes en pantalla e incluso utilizando las funciones de la biblioteca LiquidCrystal, crear efectos y mostrar imágenes.

Esto te será muy útil sobre todo si tienes en mente realizar un proyecto más complejo en el que necesites mostrar datos en pantalla, como por ejemplo, la información obtenida por distintos sensores conectados a Arduino. Así podrás monitorizar toda esa información y mucho más.

Materiales

  • Arduino UNO Rev3. (Cómpralo en nuestra tienda)
  • Una pantalla LCD (Liquid Crystal Display). En nuestro caso usaremos una pantalla LCD 16×2 (Columnas x Filas), que son de las más comunes. Yo usaré una LCM1602C.
  • Hilos de conexión unifilares.
  • Un potenciómetro 10KΩ.
  • Una breadboard o protoboard para realizar las conexiones más cómodamente.
  • Arduino IDE instalado en nuestra Raspberry Pi, PC o Mac, para poder realizar el sketch.

Procedimiento

La pantalla LCD conectada a Arduino nos permitirá mostrar texto de una manera sencilla. La plataforma Arduino cuenta con bibliotecas como “LiquidCrystal” (escrita por Limor Fried) que permite controlar displays LCDs compatibles con el driver Hitachi HD44780 (muy común en el mercado). Lo que haremos será mostrar el mensaje ComoHacer.eu en pantalla, pero tú puedes modificarlo a gusto para mostrar lo que desees.

Si os fijáis en la pantalla LCD que tenéis, suele tener unas inscripciones por la parte delantera o trasera en las que indica qué es cada pin de conexión. En mi caso viene por la parte trasera, como podéis apreciar en la siguiente ilustración:

Pines de la LCM1602C

Nota: si no estáis seguros, podéis mirar el modelo de pantalla LCD que tenéis y buscar en Google para acceder o descargar el datasheet (pdf) de vuestra pantalla. En éste documento, el fabricante os detalla todos los datos necesarios para hacerla funcionar.

Se puede apreciar que en el caso de la LCM1602C la numeración de los pines de conexión comienza desde derecha a izquierda, ¡Ojo, visto desde atrás! (16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1). Si seguimos observando vemos que nos indica que el pin 1 corresponde a GND, el dos a la entrada de tensión Vdd, el 3 a Vo, el 4 a RS, el 5 a RW, 6 a E, 7-14 a Dbx, 15 a BL1 y 16 a BL2. A priori, si no habéis manejado pantallas LCD os sonará a chino, pero ahora explico que es cada cosa:

  • RS (Register Select): es el pin que controla la memoria del LCD, e indica que registro de la memoria será el que se lee o escribe. Desde esta memoria se obtienen los datos para mostrar en pantalla, pero también se obtienen instrucciones que el controlador del LCD necesita para actuar.
  • RW (Read/Write): es el pin de lectura y escritura, que dirá si se escribe en memoria o si se lee en cada momento.
  • E (Enable): pin que habilita los registros.
  • DB0-DB7: son los pines de datos, de los que se sacan los bits que llegan al registro. En el caso de la pantalla que tengo los designa como DB0-DB7 y corresponden a la numeración 7-14, pero esto puede variar en función del fabricante o modelo de la LCD. Por ejemplo, en algunas he visto que lo designan como DO0-D07.
  • Vo: es el pin de contraste del display, con el podremos modificar el contraste de la pantalla.
  • Vdd: es el pin de alimentación, por el que entra la tensión que hará funcionar al LCD. Normalmente es de +5v.
  • GND: complementa al anterior pin, siendo el otro pin de alimentación que se conectará a tierra.
  • BL1 y BL2: son los pines de retro iluminación. Controlan la luminosidad del LCD. En algunas pantallas puede aparecer con los símbolos Bklt+ y Bklt-. Las siglas provienen de “Back Light”.

En principio parece todo un poco tedioso, pero es sencillo. Tan solo es que hay demasiada información que dar para tener claro como va la pantalla, una vez sabido es pan comido.

Ahora que ya deberías tener claro para que sirve cada pin, vamos a explicar como se debe hacer la conexión para nuestro ejemplo (no es la única, puedes añadir miles de elementos más o incluso hacer la conexión de otras formas posibles). Lo que haremos será pinchar la pantalla LCD a un protoboard para que sea más sencillo el conexionado. Luego uniremos con los hilos unifilares el pin RS a la E/S digital 12 de Arduino, el pin E a la E/S digital número 11 de Arduino. Pasamos a conectar los pines de datos DB4-DB7 a las E/S digitales desde la 5 hasta la 2 (es decir 4-5 / 5-4 / 6-3 / 7-2, el resto de pines de datos DB0-DB3 no se conectarán puesto que trabajaremos solo con 4 bits, en vez de 8). Seguimos conectando, respectivamente, los pines de Vdd y GND a las salidas +5V y GND de la placa Arduino. Luego conectaremos el pin Vo al pin central de un potenciómetro (que a su vez tendrá los pines de los extremos conectados a +5V y GND), ignorando las BL1 y BL2 que no utilizaremos. Como una imagen vale más que mil palabras…

Esquema de conexionado

Ya lo tenemos todo, el circuito está creado y todo está preparado para hacer el sketch que programe su funcionamiento. Es el momento de utilizar nuestro ordenador o Raspberry Pi para escribir el código necesario en el Arduino IDE:


//Control de pantalla LCD

#include <LiquidCrystal.h> //Biblioteca necesaria para LCDs

//Iniciamos los pines a utilizar
LiquidCrystal lcd(12,11,5,4,3,2);

void setup() {
 //Expresamos el numero de columnas y filas de nuestro LCD
 lcd.begin(16, 2);
 //Imprimimos el mensaje deseado en el LCD
 lcd.print("Comohacer.eu");
}

void loop() {
 //Preparamos el cursor en la columna 0 de la linea 1
 //Esto indica donde comenzara a imprimirse el texto
 lcd.setCursor(0,1);
}

Y finalizo explicando algo que no he explicando anteriormente, que es la funcionalidad del potenciómetro. Él te servirá para ajustar el contraste, puede que la pantalla no tenga un buen contraste si no lo ajustas y el texto no se vea bien. Prueba a moverlo hasta que estés contento con el resultado. Suerte y feliz disproyecto!

Comprar – Arduino UNO rev. 3

Más información – Control de Arduino mediante Raspberry Pi


7 comentarios

  1.   Hector Etura Hilario dijo

    se podria usar de igual manera una pantalla de 7 pulgadas que tiene unas conexiones diferentes a los pines de la que muestras?

    1.    Isaac P.E. dijo

      Hola Hector. Venden módulos de pantallas TFT/LCD de 7 pulgadas para Arduino. Así que es posible que Arduino maneje ese tipo de pantallas, incluso pantallas táctiles, pero el código y la configuración de conexiones de este artículo habría que adaptarlas a la nueva pantalla. Además, ese tipo de pantallas es más complejo y necesitan chip controladores más sofisticados (que en el caso de los módulos para Arduino ya vienen integrados y no hace falta comprarlos aparte).

      Si estás interesado en ese tipo de pantallas, te recomiendo que busques el modelo concreto y el fabricante de la pantalla para acceder a un datasheet del producto y así conocer a fondo las características y conexionado de dicha pantalla.

      Espero haber resuelto tu duda. Saludos y no dudes en consultar si te surge otra incógnita.

  2.   Arturo Tellez dijo

    hola y para poder usar la otra columna q se podria hacer?
    gracias

  3.   Arturo Tellez dijo

    perdon no era la columna es la otra fila!!!!
    gracias

    1.    Isaac PE dijo

      Hola, pues fíjate en la línea de código:

      lcd.setCursor(0,1);

      EL primer número indica donde se inicia el cursor, es decir, en que columna va la primera letra. En este caso es 0 y por tanto comienza al inicio. El segundo número, en este caso 1, indica la fila en la que aparece el texto. Si quieres usar la fila 2, pues sustituyes el 1 por un 2.

      Saludos.

  4.   Alejandro villavicencio tuesta dijo

    como puedo hacer que lea letra por letra una palabra

  5.   Maximiliano dijo

    Buenas! Muchas gracias por la guía. Estoy teniendo un problema, al conectar todo tal y cual está en el diagrama, solo obtengo unos cuadros en la pantalla y no muestra ningún tipo de texto. Por más que varie el contraste con el potenciómetro, solo cambia la intensidad de los cuadros. Alguna sugerencia?
    Gracias!

A inventar!