LCD

¿Qué es una pantalla LCD?

miniservo ¡Están por todas partes! En los tornos del tren. En tu despertador, en los telefonillos. Son pequeñas pantallas que muestran información sencilla, como letras o números. ¡Y son realmente útiles! ¿Quieres aprender a utilizar una con tus proyectos? ¡Vamos allá!

El LCD es una pantalla de cristal líquido (LCD: liquid crystal display) que nos permite mostrar información, como por ejemplo mensajes o variables.

Hay algo muy importante que tienes que tener en cuenta al usar la pantalla LCD, y es que a diferencia del resto de los componentes que hemos visto, ésta siempre se debe conectar en los mismos pines. Además tiene 4 cables para conectar en vez de 3 … ¡Calma! ¡Que no panda el cunico! Veras como una vez explicado es muy fácil:

Cómo conectar la pantalla LCD

A diferencia del resto de componentes de Mi Primer Kit de Robótica, el LCD dispone de 4 pines para conectar, en lugar de 3. 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 es, por tanto, algo más compleja y debe ser siempre la misma. Dale la vuelta al LCD, te será más sencillo leer cuál es cada pin. Deben conectarse GND, VCC y SCL a los pines A5 correspondientes. Además, conectaremos el SDA al pin de señal A4, tal y como se observa en el siguiente esquema:

SUM-LCD

IMPORTANTE: Asegurate de que el interruptor que se encuentra en la zona trasera de tu LCD está puesto en la posición IIC. De lo contrario, no funcionará correctamente.

Puedes usar esta tabla si no te queda claro:

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

Es importante fijarse bien en los nombres de los pines independientemente del color de los cables.

Lo bueno que tiene es que es siempre la misma conexión por lo que, una vez que hayas conectado el LCD un par de veces, seras ya todo un experto.

A continuación vamos a realizar un par de ejemplos para que aprendas a usar el LCD. Necesitarás:

  1. 1 x ZumBloq LCD
  2. 1 x ZumBloq Pulsador
  3. Una placa controladora ZUM BT 328 o compatible con Arduino UNO
  4. Un cable USB
lcdbitbloq

¿Tienes todo? Empecemos:

Ejemplo 1

Mostrar un mensaje por pantalla.

Durante este curso hemos hecho brillar luces de cientos de formas, movido motores de un lado a otro, emitido pitidos e incluso melodías… ¡Ya va siendo hora de decir algo! Para ello usaremos los bloques de bitbloq situados dentro de la pestaña bloques LCD.

Para imprimir nuestro primer mensaje al mundo, el programa deberá quedar de la siguiente manera:

Ejemplo 1 LCD

El programa muestra en la pantalla del LCD la frase “Dave, me temo que no puedo hacer eso” (¡glups!). Habrás notado que además se enciende la luz de la pantalla LCD. Vamos a explicar bloque a bloque su funcionamiento y utilidad.

El primer bloque sirve para decirle a bitbloq que vamos a usar la pantalla LCD. ¡Es importante que nunca se te olvide! A diferencia del resto de bloques de bitbloq, este bloque no tiene más opciones ni es necesario decirle dónde hemos conectado el LCD ya que siempre se conecta en el mismo sitio.

El segundo bloque: LCD: Ajustar retroiluminación nos permite encender y apagar la luz de la pantalla LCD. Si estás en un sitio bien iluminado no la vas a necesitar, pero si te falta luz o quieres hacer aún más espectaculares tus proyectos ¡enciéndela! Solo ten en cuenta una cosa: la retroiluminación de la pantalla consume más batería.

El bloque: LCD:Imprimir nos permite imprimir el mensaje o variable que queramos por la pantalla. Si seleccionas la opción ¿Fijar posición del texto? podrás decir donde empieza a escribirse tu mensaje, es decir, en qué posición, fila y columna del LCD se escribe su primer carácter.

¡Importante! La primera fila y columna del LCD NO es la fila 1 si no la fila 0. Esto se debe a que en programación es usual que cuando enumeremos un vector o una matriz se empiece por el número 0 en vez del 1.

El LCD no acepta la escritura de ciertos caracteres especiales tales como “¡”, “¿” o “ñ” o caracteres acentuados.

Ejemplo 2

Mostrar en el LCD el número de veces que pulsamos el botón.

En este ejercicio vamos a usar el pulsador y la pantalla LCD. Mostraremos el número de veces que presionamos el pulsador.

Para ello tendrás que conectar los componentes de la siguiente forma: El LCD en sus pines fijos y el pulsador en el pin digital 11.

El programa en bitbloq sería:

El programa siempre crea una frase con el número de veces que hemos presionado el pulsador. Como ves, el LCD no sirve solo para mostrar mensajes, si no que es también muy útil para mostrar valores de variables.

En este ejercicio hemos usado un nuevo bloque: LCD borrar . Este bloque es muy útil y nos permite borrar los mensajes previos que hubiera en la pantalla.

Ya sabes cómo utilizar la pantalla LCD. Aunque pueda parecerte un poco complicado al principio, pronto verás que es realmente sencillo usarla y, sobre todo, ¡divertido! Muy pronto estarás inventándote excusas para incorporarla en todos tus proyectos aunque no la necesiten.

Al menos nosotros lo hacemos…

9 comentarios

  1. Es posible adquirir un módulo ZumBloq LCD suelto?
    Podéis indicarme cómo adquirirlo?
    Funcionaría sobre una placa de Mi Primer Kit de Robótica?

    Gracias.
    Jordi

    1. Julián Caro

      Hola Jordi.

      Por supuesto que puedes adquirir un LCD. Tienes más información en la tienda de bq:

      http://store.bq.com/es/panel-lcd

      El LCD que nosotros vendemos funcionaría sin problemas con tu Primer Kit de Robótica. Otros LCD pueden ser más complicados de utilizar, ya que utilizan más pines y puede que no sean compatibles con la programación en bitbloq.

      Un saludo

  2. He probado varias veces la conexión y no me funciona.
    He revisado los pins y todo está como se indica.
    Se ilumina la pantalla, pero no responde.
    Se ve una linea con todos los puntos iluminados.

    1. Julián Caro

      Hola Sergio

      Lo más probable es que tu LCD no tenga el botón en el modo IIC.

      Para cambiarlo dale la vuelta a tu placa, verás un botón negro al lado de las conexiones. Ponlo en la posición baja, la que corresponde a IIC

      Tendrás que volver a cargar el programa en bitbloq para ver el cambio en la placa.

      Si necesitas cualquier otra cosa por favor no dudes en decírnoslo.

      1. Ok. Ya funciona.
        Pero quiero programarlo también desde el IDE de Arduino y el código no funciona. Creo que hay que cambiar la librería porque la librería estándar está pensada para conectar la placa a través de 6 pines digitales.
        El problema está en la instrucción:
        LiquidCrystal lcd(0);

        1. Julián Caro

          Hola Sergio. Me alegro de que ya te funcione.

          Efectivamente, debido a que nuestro LCD utiliza el protocolo de comunicación IIC ,y por tanto utiliza menos pines, es necesario adaptar la librería estandar para que se comunique sin problemas.

          En esta post encontrarás como programar el LCD con Arduino paso a paso:

          http://diwo.bq.com/programando-lcd/

          Allí encontrarás un enlace a la librería modificada para que te funcione sin problemas.

          Un saludo

  3. Hola…monté todo el programa del ejemplo 2 tal y como viene indicado y resulta que me había confundido de pin del botón y no me funcionaba bien, claro, lo que pasaba es que empezaba a contar solo sin hacer nada 1,2,3 …. sin parar…supongo que por la variable global “veces” ya que la del botón la tenía mal. Realmente mi duda es que no acabo de entender lo que es una variable global. Aquí en este ejemplo veo lo que representa, pero no entiendo el significado en general en cualquier proyecto (aunque he leido lo que es en la teoría) (yo nunca he programado). Cuando tenía mal el programa y contaba solo indefinidamente no sé por qué lo hacía, porque es un bucle??.
    Otra cosa, el bloque que “cambia el valor de la variable” también puede cambiar el valor de una variable local?? Me gustaría ver algún ejemplo más de uso de variable global y de cambiar valor de variables.
    Muchas gracias

  4. Otra cosa …. la vble global no se podría haber declarado a continuación de la local???..Por qué tiene que estar en el bloque de ejecutar??
    gracias

    1. Julián Caro

      Buenos días Candelas.

      La variable global podría haberse declarado despues de la variable local (yo te recomiendo el siguiente orden: variables globales, locales y luego variables conectadas a sensores).

      Para entender la diferencia entre variable local y global te recomiendo que le vuelvas a echar un vistazo a este post:

      http://diwo.bq.com/programando-con-variables-en-bitbloq/

      En el caso de que ya lo hayas hecho, vamos a plantearlo de otra manera. ¿Alguna vez te ha picado la curiosidad y has pinchado sobre la pestaña de código?

      Si haces el programa anterior en bitbloq y pinchas sobre código verás lo siguiente:

      #include
      #include

      /*** Global variables ***/
      LiquidCrystal lcd(0);
      int veces=1;

      /*** Function declaration ***/

      void setup()
      {
      pinMode(11,INPUT_PULLUP);

      lcd.begin(16, 2);
      lcd.clear();

      }

      void loop()
      {
      int boton=digitalRead(11);
      if (boton == 1) {
      lcd.clear();
      lcd.print(“Me has dado “);
      lcd.print(veces);
      lcd.print(” veces”);
      delay(1000);
      veces=veces + 1;
      }

      }

      /*** Function definition ***/

      No te preocupes si no entiendes todo a la primera piensa solo que es el mismo programa que has realizado previamente explicado en código Arduino. Hay dos cosas importantes, la función llamada “setup” y la función llamda “loop”. la función setup se ejecuta iuna sola vez y sirve para decir que PIN está conectado a que y como debe funcionar. La función loop es el programa que tu creas en bitbloq.. Un programa que se ejecuta y repite indefinidamente.

      Si observas las variables creadas, “veces” está al principio del código, fuera de la función “setup” y “loop”. Mientras que la variable “botón” está dentro de la función “loop”. Dicha diferencia es lo que conocemos como variable global (“veces”) o local (“boton”).

      Una variable global es accesible y modificable desde cualquier punto del programa. Mientras que una variable local solo es accesible desde la función donde es declarada. Es decir, solo existe en dicha función. En el caso de bitbloq tu variable “botón” está dentro de loop, y se declará con un nuevo valor (el estado del botón) cada vez que el bucle se repite. Si “veces” hubiera sido una variable local y la hubieramos declarado a 0, cada vez que el bucle se repitiera volvería a valer 0 por lo que no podriamos contar. Te invito a que cambies veces a una variable local y veas el efecto.

      El bloque de cambiar valor de variable es capaz de cambiar el valor tanto de variables locales como globales.

      Vamos a ver el ejemplo anterior modificado para ilustrar mejor estas diferencias:

      ejemplo_variables_globales_locales

      Hemos declarado dos variables “veces” para llevar la cuenta de las veces que pulsamos el botón. Una está declarada como variable local y otra como global.

      Construye el programa y ejecutalo. ¿Qué ocurre? La variable global se va actualizando con el tiempo, mientras que la local no. Esto se debe a que la local está dentro del bucle “loop”, por lo que cada vez que se repite el programa se vuelve a declarar como variable “veces_local=0″ no pudiendo realizar una cuenta de forma correcta. Sin embargo la variable global se declara fuera del bucle, una única vez, y solo se actualiza cada vez que pulsamos el botón.

      Espero que con esto entiendas poco a poco la diferencia.

      Un saludo

Los comentarios están cerrados.