Si aún no eres usuario, puedes crear una cuenta o entrar
Tutorial Arduino: Pantalla Serial LCD 128x64

A partir de hoy me voy a encargar de realizar tutoriales con productos de BricoGeek. Hoy empezamos esta serie de tutoriales con un producto que siempre mejora la apariencia y la utilidad de nuestros proyectos. Una pantalla LCD.

Las pantallas LCD nos permiten mostrar datos o información de nuestro proyecto. Si son gráficas como la que vamos a tratar hoy, nor permiten incluso mostrar dibujos, gráficas, paneles o casi todo lo que se nos pueda ocurrir. La única pega de estas pantallas es que para controlarlas necesitamos normalmente un mínimo de ocho pines.

Hoy os traemos una pantalla que auna lo mejor de estos dos aspectos, es un gran LCD monocromo gráfico, pero que podemos controlar con solo un cable de datos.

No os perdáis el resto del tutorial asi como el vídeo final con la demo gráfica...





Repasemos brevemente sus características:

  • LCD monocromo, gráfico 128x64 pixeles. 
  • Luz de fondo verde ajustable por software.
  • Contraste ajustable por potenciómetro incluido en placa.
  • Alimentación 6-7v (se puede alimentar perfectamente con el pin de 5v del Arduino)
  • Consumo 220mA con la luz de fondo al 100%
  • Entrada de datos: 0-5v 115200bps (velocidad por defecto, ajustable por software)
  • Dimensiones 7,6 x 5 x 1,5cm

Se trata de una pantalla LCD normal que trae soldado un modulo backpack, basado en el Atmega168. Lleva pregrabado un firmware que nos permite enviarle por serial un conjunto de comandos que nos brindan las siguientes posibilidades:

  • Escribir un texto.
  • Borrar hacia atrás texto.
  • Situar el "puntero de escritura" en unas coordenadas determinadas.
  • Dibujar o borrar un pixel, línea, círculo o cuadrado.
  • Borrar un espacio determinado de pantalla.
  • Invertir el fondo (verde sobre negro o negro sobre verde).*
  • Realizar una demo preprogramada.
  • Ajustar el porcentaje de luz de fondo.*
  • Activar o desactivar el logo de encendido.*
  • Cambiar el baudrate.*

Hay que reseñar que los ajustes que tienen asterisco son persistentes, es decir permanecen ajustados aunque quitemos la alimentación de la pantalla. Esto nos permite configurar estos parámetros una sola vez y que si no los modificamos no tengamos que cambiarlos en cada ejecución de nuestro código.
Empezaremos conectando el LCD a nuestro Arduino :

Como veis las conexiones son muy sencillas y nos deja todos menos un pin del Arduino disponibles.


Ahora programaremos el Arduino con el código de configuración que podéis descargar al final del artículo. Mientras subimos el programa es normal que aparezcan símbolos raros en el LCD ya que programamos el Arduino a traves de el serie y el LCD tambien "ve" lo que mandamos. Podemos modificar el código a nuestro gusto, pero por defecto nos dejará el display configurado para que nos salga el logo de encendido, luz al 100% y comunicación a 115200 bps. Al final de la ejecución encenderá el led indicador del Arduino para que sepamos que ha terminado, y dejara un texto en pantalla para que podamos regular el contraste con el potenciómetro que se encuentra en la parte posterior del LCD. 

El programa se quedará alternando cada diez segundos entre fondo oscuro y fondo claro. Debemos desconectar el cable que va a los 5v del Arduino cuando el fondo del LCD se muestre como deseamos. Esto es debido a que el comando solo alterna de un modo a otro y depende como este configurado la última vez. Al quitar la alimentación quedará configurado como estaba cuando se desconectó.

Ahora sin conectar el display subiremos el código de ejemplo que he preparado exclusivamente para los lectores de BricoGeek. Lo podéis descargar al final del artículo. Una vez completemos la programación podemos apagar el Arduino, conectar el cable del LCD de nuevo y volver a encender el Arduino para ver la demo que os he programado. 


El código de ejemplo es completamente reutilizable y contiene funciones con todos los comandos que soporta el firmware por defecto. Por ejemplo esta es la función que dibuja una línea:

//dibuja o borra una linea
void linea (int desde_x, int desde_y, int hasta_x, int hasta_y, int on_off){ 
	Serial.print(0x7C,BYTE);             
	Serial.print(0x0C,BYTE);               
	Serial.print(desde_x,BYTE);
	Serial.print(desde_y,BYTE);
	Serial.print(hasta_x,BYTE);
	Serial.print(hasta_y,BYTE);  
	Serial.print(on_off,BYTE);
	delay(20);
}

Dibujar una línea en toda la diagonal de la pantalla por ejemplo, es tan sencillo como escribir en nuestro código:

linea(0,0,127,63,1);

Gráficos 

Con el display tambien podemos mostrar nuestros dibujos, gráficos, o imágenes. Es tan sencillo como hacer un bucle que dibuje, o no, cada uno de los pixeles de la pantalla. Dentro del código os he preparado una función que se encarga exactamente de eso:
void imagen (int desde_x, int desde_y, int ancho, int alto, PROGMEM  prog_uint16_t *array){ 
	q=0;	
	final=ancho+desde_x;
	y=alto-1; 
	for (a = 0; a <= alto ; a++)
	{
		for (x = desde_x; x < final ; x=x+8)   
		{       
			temp = pgm_read_word_near(array + q);
			for (z=x; z < (x+8); z++)
			{
				if (temp & 0x80)pixel(z,y,1);
				temp= temp<<1;
			} 
			q++;             
		}     
		y--;
	}
}
"array" es una variable donde guardamos el estado de todos y cada uno de los pixeles de nuestra imagen de la forma:
PROGMEM  prog_uint16_t splash[] = {  0xFF, 0x80, ...  , 0x00, 0x00};
Progmem sirve para almacenar la variable en memoria de programa ya que es una variable muy grande y nos podría dar problemas si la almacenamos normalmente. 

Ahora bien, ¿como conseguimos pasar una imagen a esta tabla de datos? Estos son los pasos:

  1. Convertimos nuestra imagen a un archivo bmp monocromo y de como máximo 128x64 pixeles. Esto es muy sencillo de realizar con el Paint de windows.
  2. Nos bajamos este programa (pagina web del autor).
  3. Lo ejecutamos, cargamos la imagen y lo configuramos así:
Si le damos a SAVE OUTPUT y lo guardamos como .txt nos generara un archivo con los datos que necesitamos meter dentro de la variable.
Siguiendo estos pasos tendréis facilmente vuestros LCD mostrando lo que querais.
Os dejo con el vídeo en el que os enseño la demo que os he preparado.
TCRobotics

Descarga los códigos de ejemplo

 

Vídeo

En la tienda

Pantalla Serial LCD 128x64 Arduino UNO Cable USB (A/B) Herramienta pinza con ventosa


Comparte esto con tus amigos!

Comentarios:


Andoni Diaz Puerta
Enviado el 01/07/2011 (20:00)
Excelente, muy bien explicado!
El vídeo está curradisimo!
Estas pantallitas son la leche!

Un saludo

Rafael Cardenas Cardenas
Enviado el 01/07/2011 (23:16)
Buenisimo el tutorial !!
me comprare una para trastear con ella... : )

Miguel ngel de Frutos Carro Miguel ngel de Frutos Carro es un colaborador!
Enviado el 03/07/2011 (21:17)
ALEX TC, Grandioso!!
Muchas gracias por un tutorial tan completo!

Steven Macias
Enviado el 04/07/2011 (12:10)
Un tutorial estupendo, super bien explicado y el video alucinante!

Gracias

Alex TC
Enviado el 04/07/2011 (17:12)
¡Me alegro que os guste!
Pronto publicaré uno nuevo:)

Juan Padrón Martín
Enviado el 06/07/2011 (19:20)
Alex, donde se puede comprar las pinzas-lupa que usas para sujetar lo que sueldas y el micro_soplete para el termoretractil? Gracias.


Andoni Diaz Puerta
Enviado el 06/07/2011 (21:49)
Hola Juan,
Fíjate en las pinzas que te ofrece esta misma tienda, quizás cumplan con la función que deseas.

Un saludo

Alex TC
Enviado el 06/07/2011 (22:32)
Las pinzas que uso principalmente son las que puedes encontrar en los enlaces. Son muy útiles, versátiles y adaptables.

Las que se ven mientras sueldo, son unas "helping hands" caseras que me hice con un tripode tipo GorillaPod al revés y poniendo en los extremos unas pinzas de cocodrilo. Están bien para sujetar cables, pero para sujetar las placas prefiero las que puedes ver en la tienda.

Saludos Juan!

Damián Fernández
Enviado el 08/07/2011 (16:35)
Gran tutorial Alex, como ya te dije por twitter! Cuando tenga un poco de pasta ahorrada esta va a ser una de las cosas que pida a la tienda.
Por cierto Juan, el micro-soplete lo puedes encontrar en dealextreme.

Juan Padrón Martín
Enviado el 09/07/2011 (09:50)
A ver si ahora con la doble paga me agencio algo de herramienta gracias a todos por las respuestas

diego martin
Enviado el 21/12/2011 (16:28)
Buenas a todos.

Hace poco me he agenciado esta pantalla LCD de 128x64 y la verdad que me esta costando mucho entenderlo.

He seguido al pie de la letra este manual, y me he dado cuenta que este manual se refiere a la programación en arduino "beta". ya que algunos comandos como : Serial.print(desde_x,BYTE); no funcionan y deberia ser en la version actual 1.0 asi Serial.print(desde_x);

Bueno después de darle vueltas no consigo ni colocar texto en unas coordenadas ni sacar ningún gráfico por pantalla, siguiendo este manual, solo veo números y algún que otro texto. ¿ Alguien me ilumina sobre que camino debo seguir ?

Muchas Gracias.

diego martin
Enviado el 21/12/2011 (19:05)
Otra vez yo.

Compre esta pantalla aquí en Brigogeek. y después de probar 1000 cosas he conseguido que funcione.

El problema es que el código de esta entrada no es totalmente compatible con la nueva versión de arduino, (haciendo unos simples cambios en el código, ya lo es) así que os dejo el código fuente compatible con arduino 1.0 y no os dejéis los sesos contra la pared. )

http://www.megaupload.com/?d=SM379TWY

Pd : Quería dar las gracias a Alex TC por compartir este pedazo de manual único en la red.



Valentin Ramirez Prieto
Enviado el 20/01/2012 (21:07)
Muchas gracias, así da gusto utilizar estos dispositivos...

Valentin Ramirez Prieto
Enviado el 20/01/2012 (22:29)
La nueva versión de Arduino 1.0 No compila el ejemplo. Dice que 'BYTE' ya no se soporta en esta versión, y que se ha de emplear la funcion Serial.write()

Jorge López Rodríguez
Enviado el 21/01/2012 (22:38)
Buenas a todos,

Me acabo de comprar esta pantalla, y también me estoy peleando con ella. Hoy se me ocurre mirar este tutorial y veo que según Diego Martín, el codigo no es compatible.

Resulta que cuando voy a bajar el codigo que habia puesto esta en Megaupload y esta noche lo han clausurado. ¿Alguien tiene el código y lo puede poner aquí?

Muchísimas gracias de antemano.

Julián Gutiérrez Santos
Enviado el 30/01/2012 (00:36)
Primero felicitar a AlexTC por este super tutorial. BRAVO!

Y segundo, alguien sabe donde se puede conseguir ese fantástico PDF que estaba alojado en Megaupload?? otro mirror?? otro blog?? O en su defecto, algún otro documento del uso de esta pantalla con la nueva versión de Arduino??

Yo estoy googleando, si encuentro algo lo dejaré por aqui...

Un saludo!!

Julián Gutiérrez Santos
Enviado el 30/01/2012 (02:39)
Me contesto a mí mismo y añado: ¡EUREKA!

Después de mucho leer y trastear, he encontrado una librería en la propia página de Sparkfun (para descargar aquí -> http://dlnmh9ip6v2uc.cloudfront.net/datasheets/LCD/Color/serialGLCDlib1.04.zip) para este LCD serial, el problema vuelve a ser que no funciona con Arduino 1.0

Tras mucho trastear he conseguido hacerla funcionar modificando el código de la propia librería. Existen dos problemas:
- El ya sabido problema con #include "Arduino.h"
- y que para mandar un Byte, ya no vale la expresión "Serial.print(0x11, BYTE)" y hay que sustituirla por "Serial.write((uint8_t)0x11)" (atención al casting para indicar que es un entero unsigned de 8 bits)

y ya está funcionando la pantalla con Arduino1.0... Yo he probado a escribir varias lineas, colocar un carácter en un lugar determinado de la pantalla y dibujar un círculo; el resto no me ha dado tiempo. Si alguien quiere el código ya "parcheado" que me lo pida.

Un saludo!

Oscar Gonzalez Oscar Gonzalez es un colaborador!
Enviado el 30/01/2012 (19:36)
Estupendo Julián, muchas gracias por tu aporte!

Julián Gutiérrez Santos
Enviado el 04/02/2012 (14:45)
No hay de qué.

Jorge López Rodríguez
Enviado el 02/03/2012 (23:55)
Gracias Julián, pero debo de seguir haciendo algo mal, ¿podrías colgar el código "arreglado" a ver si así consigo hacer que funcione?.
Un saludo.

Rafael Saez
Enviado el 27/09/2012 (09:55)
Hola, estoy intentado poner la pantalla en funcionamiento y me es imposible. Seria de gran ayuda si se colocara en el foro el enlace de la libreria definitiva y como ponera en funcionamiento

gracias a todos

Patricio Morote Castillo
Enviado el 19/10/2012 (14:25)
Hola e comprado esta pantatalla pero el codigo me da error, y los enlaces que hay colgados no funcionan ya.
Serias tan amables de colgar uno que funcionase?
Se a de importar alguna libreria en especial par poder escribir o mostrar datos de entradas analogicas en ella?
Muchas gracias a todos!

Oscar Gonzalez Oscar Gonzalez es un colaborador!
Enviado el 19/10/2012 (16:34)
Hola Patricio,
Aquí tienes el enlace de los archivos del tutorial:

http://bit.ly/tutorial-arduino-lcd128x64

Patricio Morote Castillo
Enviado el 19/10/2012 (20:34)
Me da error BYTE no es soportada,entonces cambio Byte por "Serial.write((uint8_t)0x11)"?pero en todos los BYTE?perdón pero la de 16x2 la manejo un poco mejor.
Muchas Gracias

Imanol rivas García
Enviado el 28/10/2012 (15:01)
Patricio Morote Castillo
Tienes q actualizar el controlador sparkfun de el lcd, para hacerlo compatible con la versión actual del programador de arduino. Si necesitas ayuda envíame un mail a ima.r.g@terra.es y te echo una mano.

Nacho Limetre
Enviado el 16/11/2012 (00:20)
Hola, haber si alguien me da un poco de luz.

Tengo un Arduino Leonardo y este LCD, no consigo escribir nada. Solo pasan cuadrados de lado a lado llenando la pantalla.

He intentado hacer lo que dicen en los comentarios y nada.

Utilizo la version 1.0.2 del IDE de Arduino en MacOSx.

Un saludo y muchas gracias.

Oscar Gonzalez Oscar Gonzalez es un colaborador!
Enviado el 16/11/2012 (10:25)
Hola Nacho,
Usas SoftSerial o el UART del Leonardo? He utilizado esta pantalla hace unos días y con Softserial va perfecta.

Un saludo!

Nacho Limetre
Enviado el 16/11/2012 (18:28)
Hola Oscar, pues utilizo la patilla 1 del Leonardo, creo que es UART, como el tutorial, pero no llego ni a la primera parte del ejemplo, bajo los codigos y el al verificar me dice que hay errores en el codigo y no puedo ni cargarlo en el Leonardo. Un saludo.

Edilberto Miranda
Enviado el 05/12/2012 (00:45)
Hola muy buen tutorial, queria saber si me puedes ayudar con mi proyecto final, estoy armando un robot, pero este es un carrito de juguete lo qe yo qiero esqe en el parabrisas se muestren las palabras que me responda el robot para esto también qiero agregarle un reconocedor de voz todo esto trabajando con el Arduino puedes ayudarme?

Edilberto Miranda
Enviado el 05/12/2012 (00:53)
Hola buen tutorial!
Sabes queria saber si puedes ayudarme con mi proyecto final,
estoy armando un robot pero este es un carrito masomenos como el que se muestra en mi perfil y quisiera ponerle el LCD en el parabrisas y que lo que el robot me respondiera apareciera en el parabrisas para esto también quiero ponerle un reconocedor de voz y asi pueda actuar a lo que yo le ordeno, todo esto trabajando con el arduino claro, puedes ayudarme?

Patricio Morote Castillo
Enviado el 14/02/2013 (22:09)
Buenas,que comando seria el de mostrar una señal analógica sin que al mostrarlos sigan apareciendo símbolos después del dato a mostrar?
Gracias

Vicente Sanchez
Enviado el 11/05/2013 (03:09)
Hola me pudes ayudar con el codigo actualizado y la libreria

vicente sanchez
Enviado el 22/05/2013 (19:34)
ayuda no logo que funcione
http://www.youtube.com/watch?v=MDTExAFinfY&feature=youtu.be


Guillermo Fernandez R.
Enviado el 27/05/2013 (14:10)
Hola, muy buen tutorial! compre este LCD y me tranque con la instrucción BYTE. Alguien que tenga el codigo actualizado que lo cuelgue por favor.

Jose daniel tamargo Acebal
Enviado el 01/09/2013 (18:12)
Hola Alex, te quería dar la enorabuena por el tuto y depaso preguntarte una cosa. Tengo una moto Honda Varadero la cual lleva un LCD de 30mm*31 mm el cual es monocromo. Resulta que en estas motos y alguna mas de honda suelen fallar al darles el sol y resulta que Honda no se hace cargo de algo que esta mal fabricado y la solucion es comprar un cuadro completo sin dar posibilidades de cambiar la pantalla que es la que falla. La pantalla la he desmontado y lo que le pasa es que va perdiendo poco a poco la nitidez de los numeros que trae hasta que deja de funcionar. La he desmontado para ver su numero de serie y asi buscarla por internet pero no trae nada, habria alguna posibilidad de que me dijeras con una foto alguna pantalla compatible?. Un saludo y muchisimas gracias. jdtamargo@gmail.com

ANTONIO FRANCO
Enviado el 16/10/2013 (10:03)
Hola Alex. Acabo de coger en la tienda la pantalla 128x64 con backpack, ya la había comprado hace un par de años y con el tuto, había ido de cine. Lo que pasa es que ahora estoy teniendo bastantes problemas entre el tema de la librería y de la intrucción BYTE ya no soportada. ¿Tienes alguna dirección donde descargar la librería apropiada y un código del tutorial modificado? Muchas gracias, y un abrazo

Oscar Gonzalez Oscar Gonzalez es un colaborador!
Enviado el 16/10/2013 (19:33)
Hola Antonio,
Algunas cosas cambiaron en el IDE de Arduino desde que se ha publicado este tutorial. Normalmente con reemplazar las llamadas a Serial.print por Serial.write soluciona el problema de compilación.

Saludos!

Jose Garcia Saez
Enviado el 30/05/2014 (16:21)
Yo consigo que funcione, cuando cambio Serial.write x Serial.print(0x11, BYTE),funciona, pero luego, el mensaje en el LCD sale desordenado y dispersado, luego error de copilado, en fin tengo la cabeza a punto de explotar.
¿sabría alguien donde puedo encontrar el código correcto?.
seria muy importante para mi, quiero darle una sorpresa a mi hijo por su cumpleaños.
gracias y perdonar las molestias.


Enviar comentario

Debes disponer de una cuenta de usuario para publicar un comentario.

Si aún no dispones de una cuenta, únete a la comunidad de BricoGeek.com y registrate ahora, te llevará tan solo un minuto y es gratis. También puedes identificate si ya dispones de una cuenta de usuario.
rss

Conecta con BricoGeek.com

Canales sociales

Nos gusta mucho estar en contacto con nuestros lectores y saber más acerca de sus proyecto e inventos.


También puedes sugerir una noticia en el blog
Tienda de Electrónica DIY y Arduino

Lo que se cuece...

Comentarios recientes Más comentado Top noticias
Feed de novedades

Tienda BricoGeek.com

Electrónica para tus proyectos!

Estás preparando un proyecto o quieres iniciarte en la electrónica? Encuentra todo lo que necesitas en la tienda.

Visita la tienda BricoGeek!

La familia de BricoGeek.com

Conoce toda la gente que hace que BricoGeek.com sea posible cada día:

Alejandro Mallo
Colaborador
Puedes hacer click sobre un autor para ver todas sus noticias


Etiquetas más populares:

Descubre todo el contenido de bricogeek.com con las etiquetas más populares:


© BricoGeek.com 2005-2014

Demuestra lo que sabes hacer!