Objetivos
Material requerido.
Kit inicio UNO | |
Kit Inicio Mega |
Los displays LCD
Los displays LEDs de 7 segmentos, que vimos en las sesiones anteriores, están muy bien, son baratos y prácticos, pero tienen el inconveniente de que no pueden mostrar mensajes de texto, sino solo números.
Se echa de menos algún sistema para mostrar mensajes de texto sencillos, y por eso se comercializan los displays LCD. Son faciles de encontrar en diversos formatos : 16×2 (16 caracteres x 2 líneas) o LCD 16×4 (16 caracteres x4 lunes).
Son una opción muy sencilla de usar, y además, dan un toque muy pro a vuestros proyectos, y por eso, en los últimos años los displays LCD han ganado mucha aceptación en productos comerciales de todo tipo.
Básicamente porque:
En esta sesión veremos cómo conectarlos a vuestros Duinos y cómo usarlos para sacar mensajes al exterior.
Antes de empezar
Aunque, últimamente, estos displays suelen venir con los pines soldados, todavía hay muchos sitios que cuando compras uno de estos, te lo envían en kit, con los pines aparte para que los sueldes
Lo primero que tienes que saber, es que tienes que soldarlos, y que no vale sujetar los pines de algún modo más o menos extravagante. Los sueldas y punto. Hazte a la idea. Cualquier otra solución 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 conexión
Aquí teneis el esquema de conexión:
Y este es el esquema para potoboard:
La conexión no es complicada, pero requiere ser cuidadoso. Asi que vamos a ir paso a paso con los diferentes cables. Empieza conectando tensión y GND a la protoboard.
Vamos ahora a a conectar la alimentación el panel LCD. Conecta el pin16 del LCD a Ground y el 15 a 5V
Si conectas ahora el cable USB a tu Duino, el LCD debería iluminarse, si no, revisa tus cables antes de seguir.
Vamos a conectar ahora, el potenciómetro 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 también para dar tensión al panel LCD, El pin 1 va a GND y el 2 a tensión:
Si todo ha ido bien, ya podemos encender el dispay y probarlo. Conecta el USB a tu Arduino y veamos. Si vas girando el potenciómetro, en algún 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 9
El programa de control
Vamos a usar una librería 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 código.Lo primero es que al importar la librería nos ha escrito esto:
#include <LiquidCrystal.h>
Despues, hay que inicializar la librería. Creamos una instancia llamada lcd, de la clase LiquidCrystal y le pasamos como parámetros los pines que hemos usado:
LiquidCrystal lcd(7, 8, 9, 10, 11, 12); // ( RS, EN, d4, d5, d6, d7)
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: }
Estos display son muy pesados de cablear, pero muy sencillos de utilizar.
Vamos a probar sacando un reloj (muy sencillo de momento). Si recordáis 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 filas lcd.print("Prometec.net"); // Aqi va el mensaje } void loop() { lcd.setCursor(6, 1); // Ponte en la line 1, posicion 6 String s = reloj() ; lcd.print(s) ; } String reloj() { int n = millis() / 1000 ; // Lo pasamos a segundos int segundos = n % 60 ; int minutos = n / 60 ; String S = String(minutos) + ":" + String(segundos); return (S); }
Merece la pena, comentar algunas cosas de este código. En primer lugar en la función 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 parámetro tipo String a quien nos haya llamado. En algún punto de la función habrá que hacer un return( String).
Fijaros que definimos dentro de la función un string llamado s:
String S = String(minutos) + ":" + String(segundos);
En esta línea no hay que confundir (aunque se escriben exactamente igual), el tipo String para definir S, con la función String(n) que convierte un numero n en un string de texto para que pueda mezclar el número de los minutos y los segundos separados por un símbolo de “:”.
Al final le añadimos un par de espacios en blanco, para evitar arrastrar fantasmas en la pantalla
En la función loop, hemos usado
lcd.print(s) ;
Para sacar el mensaje de texto. Todo lo que ya sabéis de Serial.print() se usa exactamente igual con esta instrucción. Y por último, tenemos una línea como esta:
Que lo que hace es posicionar el cursor del panel, en la posición 6 de la segunda línea, para escribir la hora centrada. Aquí os dejo un mini video con el resultado.
La librería LCD, viene con varios ejemplos muy interesantes, que os conviene probar. Recordad, simplemente, que tenéis 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 símbolos especiales y los mueve por la pantalla en función de los valores que lee de un potenciómetro.
Sin llegar a tanta sofisticación, es muy interesante que veamos cómo definir algunos caracteres especiales, porque en la tabla base del LCD, no están incluidas ñ, acentos, grados, o €. Así que dependiendo del uso que le deis pude seros de interés saber cómo definir tus propios símbolos.
Definiendo tus propios caracteres
Vamos a definir un carácter propio, para digamos, el símbolo de grados centígrados, por ejemplo.
Lo primero que tenéis que saber, es que los caracteres se definen con un array ( si, de nuevo) de 8×8, como si los dibujarais en una cuadricula de ese tamaño, y rellenando el cuadradito completo.
Así por ejemplo para el símbolo 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() { }
[/membership][membership level=»0″][box type=»info-box»]Contenido solo disponible para suscriptores.
Y aqui teneis una foto del resultado
Por último, y para cerrar ya la sesión (Todo llega en la vida), Deciros que de nuevo, hemos montado este display a la brava, conectando un buen número de cables.
Esto solo se puede justificar, porque en su día piqué y me compre un display de estos ( en realidad, dos. Tengo otro de 16×4), pero si vais a compraros un LCD, por Dios, compraros uno que sea I2C o algo así, vuestra salud mental mejorará mucho y solo usa 4 cables.
En la próxima sesión montaremos uno para que veáis la diferencia.
Resumen de la sesión
En este curso arduino hemos aprendido lo siguiente: