sábado, 21 de septiembre de 2013

Nokia LCD 3310 + Arduino

A mi parecer, no hay elemento que le de un mejor aspecto e interacción a nuestros proyectos DIY que una pantalla. Podemos elegir entre muchos tipos de pantallas distintas: LCD de caracteres, LCD gráficos a color, monocromáticos, TFT, TFT táctil, etc.
Hoy vamos a ver como conectar y utilizar con Arduino, un LCD gráfico de 84×48 pixels monocromático, muy barato y muy sencillo de utilizar, el LCD Nokia 3310/5110 que utilizaban los antiguos teléfonos de la compañía finlandesa.

Podemos obtener estas pantallitas o bien desmontando un teléfono Nokia 3310/5110 o bien comprarla en multitud de tiendas online de electrónica.
En mi caso la compré por eBay, pero podemos comprarla por muy pocos euros en casi todas las tiendas de la lista del post anterior a este: ¿Donde comprar electrónica?
Esta pequeña pantalla trabaja con elcontrolador CMOS PCD8544, diseñado para el manejo de LCD gráficos de 48 filas x 84 columnas. Es de muy bajo consumo y la forma de conectarlo con μControladores se realiza mediante el bus SPI.
Funciona con tan solo 3,3V y posee retroiluminación led.
En una de las tiendas online donde venden la pantalla, encontré esta tabla de especificaciones muy concisa y breve que explica las características más importantes de esta pantalla:

Como se puede ver, es realmente de muy bajo consumo, por lo que la convierte en una pantalla ideal para proyectos alimentados a baterías o pilas.
Con esta pequeña introducción, pasemos a la acción: ¿Cómo se conecta?
Sigue leyendo!
Antes de conectar la pantalla, tendremos que ver cuales son sus pines:
La pantalla se comunica mediante el bus SPI, que en un Arduino UNO está compuesto por los pines 10, 11, 12 y 13 si utilizaramos la librería original de Arduino, pero en este caso, utilizaremos una librería externa a Arduino, por lo que la selección de pines a conectar queda a nuestra elección, ya que podremos configurarlos mediante software.
Veamos un poco como funciona la pantalla, para poder entender las funciones de la librería que utilizaremos para controlar la pantalla.
Sabemos que la pantalla es de 84 pixels de ancho por 48 pixels de alto, o lo que es lo mismo en el momento de hacerla funcionar, 84 bits de ancho por 48 bits de alto. Los bits del alto están agrupados en bytes, de forma que el direccionamiento de la pantalla se realiza de la siguiente manera: 84 bits de ancho por 6 bytes de alto, por tanto, irá de la siguiente manera: Eje X = 0 a 83 / Eje Y = 0 a 5.
Como se puede ver en la siguiente imagen:
Esto así visto no nos sirve demasiado si nuestra idea es simplemente añadir la pantalla a nuestro proyecto y utilizarla, pero es necesario saberlo, puesto que los caracteres a la hora de imprimir un texto por pantalla, ocupan cada uno un espacio de 5 bits de ancho por 8 de alto,  por lo que solo tendremos un máximo de 6 líneas para escribir en el LCD.
Conociendo como funciona la pantalla, en mi caso elegí el primer sketch de esta página de Arduino y lo convertí en librería para poder utilizar la pantalla y tener un sketch limpio y fácil de leer y entender.
Podemos descargar la librería de aquí: Librería NokiaLCD
Con esta librería podemos manejar el LCD de forma cómoda mediante las distintas funciones que dispone, como son configurar los pines de conexión,  inicializar el  LCD, borrar el LCD, situar el cursor, escribir caracteres o cadenas de caracteres, leer el puerto serie para cargar una imagen de mapa de bits, dibujar sobre la pantalla a partir de un array de bytes, etc.
Entonces, procedemos a conectar el LCD y a probar la librería, en mi caso, utilizo los pines 3, 4, 5, 6 y 7 digitales para conectar la pantalla, de la siguiente manera:
Cargamos el ejemplo que viene con la librería y analizamos un poco:
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <NokiaLCD.h>
NokiaLCD NokiaLCD(3,4,5,6,7); // (SCK, MOSI, DC, RST, CS)
void setup() {
NokiaLCD.init(); // Init screen.
 NokiaLCD.clear(); // Clear screen.
}
void loop() {
 NokiaLCD.setCursor(1,1);
 NokiaLCD.print("Hello World!");
}
Instanciamos un LCD y asignamos los pines de conexión, inicializamos el LCD y lo borramos entero, situamos el cursor y escribimos en pantalla. Destaca la simplicidad de manejo :)
La librería consta de las siguientes funciones:
- NokiaLCD NokiaLCD (SCK, MOSI, DC, RST, CS); // Instancia un LCD y asigna los pines.
- NokiaLCD.init(); // Inicializa el LCD.
- NokiaLCD.clear(); // Borra la pantalla  y sitúa el cursor en la posición (0,0).
- NokiaLCD.setCursor(x,y); // Sitúa el cursor en la posición indicada.
- NokiaLCD.print(“Cadena”); // Escribe en pantalla una cadena de caracteres.
- NokiaLCD.character(‘A’); // Escribe en pantalla un carácter.
- NokiaLCD.bitmap(array); // Dibuja en pantalla un array de bytes de una imagen BMP.
- NokiaLCD.sBitmap(); // Escucha el puerto serie por un array de bytes de una imagen BMP y lo dibuja en pantalla.
De lo más interesante de la pantalla, es que al ser una pantalla gráfica, podemos dibujar en ella con la función NokiaLCD.bitmap(array);  que recibe un array de bytes y lo dibuja en pantalla, por lo que era necesario conseguir dicho array de bytes a partir de un mapa de bits.
Para ello, junto con Dani (@Cuningan Simplificate 2.0), desarrollamos un software en C# para poder cargar imágenes BMP en la pantalla desde el PC, bien enviándolas por el puerto serie o convertirlas en array de bytes y almacenar dicho array en la memoria del μControlador o una memoria EEPROM.

Como podemos ver en la imagen anterior, el software es muy sencillo de utilizar, simplemente elegimos el puerto serie al que esté conectado nuestro Arduino, conectamos,y procedemos a elegir una imagen de archivo.
Una vez cargada la imagen en el programa, al pulsar en el botón “Cargar imagen en LCD” enviaremos por el puerto serie el array de bytes de la imagen, y a la vez, lo veremos en la caja de texto, para poder copiarlo y pegarlo en el código de nuestro sketch de Arduino.
Si vamos a cargar una imagen desde el PC por el puerto serie, el sketch de nuestro Arduino, debe tener la llamada a la función NokiaLCD.sBitmap(); en el bucle “void loop()”, de modo que esté constantemente recibiendo por el puerto serie, a la espera de que le llegue la imagen desde el PC.
El software es instalable, aunque solo para Windows.
Aquí el link de descarga: Software Nokia BMP Loader
Y eso es todo!
Realmente es una pantalla a tener en cuenta para pequeños proyectos, barata, muy sencilla de utilizar, y de muy bajo consumo.
Veamos unas imágenes y un vídeo de funcionamiento! :)  

      

No hay comentarios:

Publicar un comentario