Lcd Arduino

Objetivos o Vamos a montar un display LCD de 16×2. o Veremos cómo enviar información o Definiremos algunos caracte

Views 198 Downloads 5 File size 2MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Objetivos

o

Vamos a montar un display LCD de 16×2.

o

Veremos cómo enviar información

o

Definiremos algunos caracteres especiales

Material requerido.

Arduino Uno o similar. Esta sesión acepta cualquier otro modelo de Arduino.

Una Protoboard.

Cables de protoboard

Un Potenciómetro.

Un display LCD, de 16×2 o 16×4.

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).



LCD viene del inglés Liquid Crystal Display, o sea Pantalla de cristal liquido.

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:



Son baratos.



Están disponibles en varios tamaños y configuraciones.



Son de bajo consumo.



Muy prácticos si te basta con mostrar solo texto (y algunos caracteres especiales).

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



En algún momento tendremos que hablar de cómo soldar componentes, pero ese día, aún no ha llegado.

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

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)

Tened cuidado porque los pines que hemos usado, no corresponden a los ejemplos de Arduino, así que podéis cargarlos, peroaseguraros de cambiar la línea de definición de los pines, o no correrán.

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:



Cuidado: Como siempre la primera linea, la superior, es la linea 0 y la segunda la linea 1.

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 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); String s = reloj() ; lcd.print(s) ; } String reloj()

// Ponte en la line 1, posicion 6

{ int n = millis() / 1000 ; int segundos = n % 60

;

int minutos =

;

n / 60

// Lo pasamos a segundos

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



Quita los espacios y miro lo que pasa en el cambio de minuto. ¿Cómo lo arreglarías, sin el truco de poner esos espacios al final? Piensalo.

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: lcd.setCursor(6, 1);

// Ponte en la line 1, posicion 6

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 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() { }

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.

APRENDER A USAR UN DISPLAY LCD

(17/08/14)

En este tutorial aprenderemos a conectar un display LCD a Arduino y a cómo usarlo a través de la librería LiquidCrystal. Material

-Arduino Uno Rev3 -Display LCD 16×2 -Potenciómetro 10k x2

Display LCD

Un display LCD (Liquid Crystal Display) es un display alfanumérico de matriz de puntos (dot-matrix) que sirve para mostrar mensajes a través de caracteres como letras, números o símbolos. La placa del display viene equipado con un microcontrolador (normalmente el modelo HD44780) que se encarga de generar los caracteres, polarizar la pantalla, desplazar el cursor… Además, también viene equipado con una memoria ROM donde están almacenados los caracteres a través de una matriz de puntos, y una memoria RAM donde se

pueden almacenar caracteres creados por nosotros. Estos displays disponen de unos pins para conectar un microcontrolador (en nuestro caso Arduino) para poder dar instrucciones al display. En el mercado existen displays de distintos tamaño de pantalla. En este tutorial usaremos un display 16×2, que quiere decir que contiene 16 columnas y 2 filas.

Conexiones display LCD

Normalmente los displays LCD tienen 16 pins (14 si la pantalla no es retroiluminada). Las funciones de los pins se describen a continuación:



Pins 1-2: Alimentación +5V



Pin 3: Voltaje para el contraste de la pantalla +5V. Si pones un

potenciómetro puedes regular el contraste. –

Pin 4: RS (Register Select) controla la memoria del display.



Pin 5: R/W (Read/Write) Selecciona modo escritura o modo lectura.



Pin 6: Enable. Habilitar o deshabilitar la escritura del display.



Pins 7-8-9-10-11-12-13-14: Bus de datos de 8 bits.



Pins 15-16: Habilitar retroiluminación aplicando +5V.

Librería LiquidCrystal de Arduino

A través de la líbreria de Arduino LiquidCrystal podemos controlar un display LCD con Arduino. En este enlace encontraréis todas las funciones de esta librería. http://arduino.cc/en/Reference/LiquidCrystal A continuación se explica las funciones básicas: – LiquidCrystal “nombre_variable” (rs, enable, d0, d1, d2, d3, d4, d5, d6, d7): A través de esta función se crea una variable de tipo LiquidCrystal. Entre paréntesis pondremos los pins del Arduino correspondientes a los pins del display (RS, Enable y los 8 pins de bus de datos). Con esta configuración se usa la totalidad del bus de datos. – LiquidCrystal “nombre_variable” (rs, enable, d4, d5, d6, d7): Igual que la anterior función pero solo usando 4 bits del bus de datos. – begin(columnas, filas): Inicializa la interfaz del LCD y establece las dimensiones de la pantalla. – setCursor(columna, fila): Posicionar el cursor de la pantalla LCD. – print(“mensaje”): Escribe texto a la pantalla LCD. – clear(): Limpia la pantalla LCD y posiciona el cursor en la parte superior izquierda.

Montaje

Para este tutorial usaremos 4 bits del bus de datos (D4, D5, D6, D7). Los pins restantes del bus de datos se dejan sin conectar.

-Juntar las masas del Arduino y de la fuente de alimentación. -El potenciómetro de 10k conectado al pin 3 del display LCD sirve para regular el contraste. -Un consejo: desconectar el cable USB del Arduino cuando no se use la comunicación serie porque pueden ocurrir fallos. Alimentar el Arduino con una fuente de alimentación a través del pin Vin o con el conector jack.

Código Arduino

Para hacer una demostración del display LCD, haremos un pequeño ejemplo donde saldrá un mensaje a través de la pantalla.

1 /* 2 3

www.diymakers.es by A.García 17/08/14

4 5

Aprender a usar un Display LCD Tutorial en: http://diymakers.es/aprender-usar-un-display-lcd/

6 */ 7 8 #include //Importamos la librería LiquidCrystal 9 1 0

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Creamos la variable y establecemos los pins del display

1 1 void setup() 1

{

2 lcd.begin(16, 2); //Inicializamos el display configurando 16 columnas por 2 filas 1 lcd.setCursor(0,0); //Ponemos el cursor en la primera fila a la izquierda 3 lcd.print("Inicializando..."); //Imprimimos un mensaje inicial 1 delay(2000); //Esperamos 2 segundos 4

lcd.clear(); //Borramos lo que pone a la pantalla

1 } 5 1 6 1 7 1

void loop() { //Primera fila lcd.setCursor(0, 0);

8 lcd.print("BIENVENIDOS A"); 1

delay(2000);

9 2 //Segunda fila 0 lcd.setCursor(0, 1); 2 lcd.print("DIYMAKERS"); 1

delay(2000);

2 2 lcd.clear(); //Borramos lo que pone a la pantalla

2 3 2 4 2 5 2 6 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3

}

4 3 5

Crear caracteres

Normalmente, los displays LCD traen almacenados por defecto los siguientes caracteres:

Aunque nosotros podemos crear los caracteres que queramos. Cada carácter del display está compuesto por una matriz de puntos de 5×8 tal como se muestra en la imagen:

Cada una de las ocho líneas del carácter es 1 byte. Por lo tanto, para crear un carácter tenemos que usar 8 bytes. Para entender esto, vamos a crear el siguiente carácter:

Como se aprecia en la imagen anterior, ponemos a valor 1 los puntos que queremos “encender” del carácter del display. Cada línea representa 1 byte con un total de 8 bytes por carácter.Para poder crear un carácter con Arduino, tendremos que crear un array de 8 bytes. En el carácter que hemos creado antes, el array de 8 bytes sería el siguiente: 1 2 3

byte caracter[8] = { B00100, B11111,

4

B10101,

5

B00100,

6

B00100,

7

B10101,

8

B01110, B00100

9

};

10

Luego, a través de la función creatChar() de la librería LiquidCrystal se crea el carácter con los 8 bytes del array. Y finalmente, a través de la función write() se escribe el carácter en el display. Vamos a hacer un ejemplo para entenderlo mejor. Crearemos un carácter móvil, que se irá moviendo constantemente. Haremos una cara que vaya cambiando su expresión de alegre, normal y enfadado. Cada uno de estos tres estados de expresión será un carácter que crearemos. El código sería el siguiente: 1 /* 2 3

www.diymakers.es by A.García 17/08/14

4 5

Aprender a usar un Display LCD Tutorial en: http://diymakers.es/aprender-usar-un-display-lcd/

6 */ 7 8 #include //Importamos la librería LiquidCrystal 9 1

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Creamos la variable y establecemos los pins del

0 display 1 1 //Creamos los 3 arrays de 8 bytes de los 3 caracteres 1 byte alegre[8] = { 2 1 3 1 4 1 5 1 6 1

B00000, B00000, B01010, B00000, B10001, B01110, B00000, B00000 };

7 1 byte normal[8] = { 8

B00000,

1

B00000,

9 2 0 2 1 2 2 2

B01010, B00000, B00000, B11111, B00000, B00000 };

3 2

byte enfadado[8] = {

4

B00000,

2

B00000,

5

B01010,

2

B00000,

6

B00000,

2

B01110,

7

B10001,

2

B00000

8

};

2 9 3 0 3 1 3

void setup() { //Creamos los 3 caracteres asignandoles un número a cada uno lcd.createChar(0, alegre); lcd.createChar(1, normal);

2 lcd.createChar(2, enfadado); 3 3 lcd.begin(16, 2); //Inicializamos el display configurando 16 columnas por 2 filas 3 lcd.setCursor(0,0); //Ponemos el cursor en la primera fila a la izquierda 4

lcd.print("Inicializando..."); //Imprimimos un mensaje inicial

3 delay(2000); //Esperamos 2 segundos 5

lcd.clear(); //Borramos lo que pone a la pantalla

3 } 6 3

7 void loop() 3

{

8 //Creamos un bucle para que cambien los caracteres automaticamente 3

for(int i=0; i