Programando-un-módulo-LCD

En esta lección vas a aprender a escribr en un módulo LCD.

Las pantallas de cristal líquido

Un LCD (liquid crystal display) 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. Gracias a ella se puede ofrecer al usuario información de lo que está sucediendo en el programa, lo cuál resulta muy útil y permite realizar proyectos más interactivos.

En esta lección vamos a usar un Modulo LCD I2C/SPI, con este modelo de LCD se necestian solo 2 señales para mostrar informacion (cuando se controla por I2C) o 3 señales en caso de controlarla por SPI. Esta LCD en concreto posee 20 columnas x 4 filas, por lo que se pueden escribir hasta 80 caracteres (con la biblioteca que usaremos solo se podrán escribir caracteres ASCII).

LCD_front

Preparando el proyecto

Para porgramar el módulo LCD necesitamos utilizar una biblioteca. ¿Qué es una biblioteca? Sencillamente una serie de funciones que alguien ha escrito por nosotros para simplificarnos el trabajo. Eso quiere decir, que en lugar de tener que escribir nosotros los valores en los pines tendremos funciones de alto nivel como lcd.print(“hola”) que harán todo el trabajo sucio por nosotros. La biblioteca que se utilizar para controlar las pantallas LCD se llama liquidCrystal. Sin embargo, esta librería de Arduino está pensada para LCDs que necesitan 6 señales para se controladas. Gracias al modulo IIC/SPI, la LCD de esta lección solo necesita 4, por lo que en bq hemos modificado la librería para que pueda funcionar correctamente.

Como en lecciones anteriores utilizaremos Codebender como entorno de desarrollo. Para poder utilizar esta biblioteca debemos crear un proyecto nuevo y añadir los archivos incluídos en la biblioteca que acabamos de descargar.

Te enseñamos cómo se hace

Una vez que tenemos nuestro proyecto con esos 4 archivos vamos a conectar el LCD y a programarlo.

Conectando el módulo LCD

El módulo LCD dispone de 4 pines para conectar (en modo IIC). Estos pines son:

  1. SCL: Señal de reloj
  2. SDA: Señal del LCD
  3. VCC, tensión de alimentación
  4. GND o masa

La conexión de este componente debe ser siempre la misma (para que sea compatible con la biblioteca bqLiquidCrystal, si usas otra biblioteca no tiene por qué ser así).

conexion_LCD

NOMBRE NÚMERO DEL PIN COLOR DEL PIN
SCL A5 Azul
SDA A4 Azul
VCC A5 Rojo
GND A5 Negro

Hola LCD

Ya tenemos la biblioteca necesaria y todo está conectado. Vamos a hacer el ¡Hola Mundo! mostrando por pantalla el texto Curso de Arduino. Aquí tienes el código

Vamos parte por parte

Declarando objeto LiquidCrystal

El tipo de variable LiquidCristal será el que nos permitirá manejar el módulo LCD. Por ello declaramos una variable global de este tipo, que en este caso hemos llamado lcd. Además la inicializamos con valor 0. A partir de ahora, todas las operaciones sobre el LCD serán del tipo lcd.xxx.

Inicializando el LCD

Como siempre, todas las inicializaciones las hacemos en la función setup(). Inicializamos el lcd, indicando el número de filas y columnas. El LCD que estamos usando nosotros es de 4 x 20, y por lo tanto indicamos esos valores. Posteriormente limpiamos cualquier “residuo” que podría quedar en la pantalla.

Escribimos

Igual que hemos hecho anteriormente utilizamos el recurso de una variable global para realizar una acción una sola vez, una vez hecho esto nos ponemos a escribir.

  • lcd.clear(). Limpiamos todo lo que haya en la pantalla, no sería necesario ya que lo hicimos en el setup()
  • lcd.setCursor(0,0). Indicamos en qué columna y fila deseamos escribir, en este caso en la fila 0 y columna 0, es decir, esquina superior izquierda.
  • lcd.print(“Curso de Arduino”). Finalmente escribimos el texto que deseamos a imprimir.

Si compilamos y subimos este programa a la placa tendremos el siguiente resultado.

curso_arduino_lcd

Moviendo texto por la pantalla

¿y si ahora quisiéramos que el texto “bq” apareciese recorriendo toda la pantalla? te dejamos aquí el código para que lo pruebes, lo analices, y si quieres, lo modifiques para hacer cosas distintas

10 comentarios

  1. Buenas tardes, ante todo agradecer estos tutoriales, ya que para personas con bajos conocimientos de programación son de mucha ayuda.
    He probado esta práctica y bien, pero me he permitido el leer por pantalla un valor analógico cada 200 ms y el resultado es de “parpadeo” de la pantalla, es como si la pantalla empieza a mostrar el valor por la izquierda, por mucho que reduzca el tiempo de refresco sigue mostrando el mismo síntoma.
    Existe alguna configuración de pantalla que permita evitar este efecto.

    Saludos cordiales.

    1. Alberto Valero

      Hola Jose Luis,

      El parpadeo de la pantalla es algo bastante habitual. Puedes minimizarlo refrescando con menos frecuencia (sólo cuando sea necesario), e incluso intentando refrescar sólo aquellos puntos que han cambiado, de modo que se refresque lo mínimo posible.

      Alberto.

  2. Hola Alberto,

    Tengo dos pantallas LCD, una de bq y otra de un kit de arduino que tenía (IIC/SPI LCD).
    He probado el código con la de bq y no he tenido problema pero con la otra no consigo que funcione. La pantalla se enciende pero no se muestra ningún mensaje.
    ¿Qué tengo que hacer o verificar de mi LCD para que funcione?

    Gracias,

    1. Alberto Valero

      Hola,

      Es difícil decirte, puede que la LCD que tengas necesite otra librería diferente ya que se controlan a bajo nivel y dependen en gran medida de la librería. Nosotros no usamos la librería estandard de Arduino, por lo que es posible que nuestra librería no sirva para tu LCD. Lo mejor sería que buscases ejemplos de código para tu modelo concreto.

      Siento no poder ayudarte

      Alberto.

  3. hola, quisiera replicar lo mismo pero en una beaglebone, por lo cual necesito crear la libreria en python, que consejos me puedes dar?

    gracias de antemano

    1. Alberto Valero

      Hola, lo siento, no hemos trabajado esa tecnología.

  4. Buenos dias Alberto,

    tengo la pantalla BQ de 16×2 en lugar de 20×4.A pesar de hacer las correcciones pertinentes en el codigo, solo soy capaz de que muestre la primera letra (c). Si quiere que inicialice el texto en otro elemento de la matriz ( 2,0 en lugar del 0,0) lo hace sin problemas, pero siempre muestra la primera letra unicamente.

    puede ser que la libreria de 20×4 no sea compatible con 16×2?

    muchas gracias por todo. Un saludo

    mi codigo es el siguiente :

     

     

    1. Enrique Heredia

      Hola Alfonso,

      Hemos detectado ese problema al cargar el código utilizando las nuevas versiones del IDE de Arduino (1.6.X), puesto que modificaron las librerías que usábamos. Estamos trabajando en actualizar la librería y adaptarla para que funcione con las nuevas versiones del IDE de Arduino, en breve estará el problema resuelto. Muchas gracias por el aviso y perdona las molestias.

      Enrique

        1. Enrique Heredia

          Hola Rubén,

          Como dices una vez se compruebe el buen funcionamiento de la nueva librería se actualizará el botón de descarga de este mismo post para que descargue la nueva versión. Igualmente puedes consultar la librería para el LCD y el resto utilizadas en el curso en la página de GitHub: https://github.com/bq/bitbloqLibs

          Enrique

Los comentarios están cerrados.