Uma das grandes características da plataforma Arduino é o reaproveitamento do que se torna antigo, ultrapassado, fora de linha. Encontrar componentes eletrônicos em ferros velhos é bem fácil e na maioria das vezes não custa nada.

Você ainda tem aquele celular Nokia no fundo da gaveta? Podemos hackear ele! Mas se você não tem ou não está afim de ter muito trabalho, rola de comprar a tela já com a breakout. Estes LCDs além de ter uma ótima resolução possuem um preço super atrativo se comparado com os displays de 16×2 caracteres. Dá até para fazer seus próprios caracteres ou desenhar na tela!

LCD Nokia 5110

Você pode comprá-la na Sparkfun, ou na Itead Store, no Ebay ou no MercadoLivre.

Especificações

  • Resolução de 84×48 pixels
  • Dimensão de 45x45mm
  • Controlador PCD8544
  • Opera com 2.7 a 3.3v
  • Consome menos de 20ma com o backlight ligado

+ Datasheet

Bibliotecas

Adafruit

Sem dúvida a mais completa dentre as 3 bibliotecas. Ela é repleta de funções para desenhar círculos, retângulos, linhas e quadrados. Vale a pena conferir o exemplo pcdtest.pde na pasta /examples.

+ Baixar a biblioteca

PCD8544

Esta biblioteca tem 8Kb a menos que a da Adafruit. Ela também tem métodos interessantes como o setInverse(), que inverte o preto e o branco da tela e o setPower(), onde é possível desligá-la via software.

+ Baixar a biblioteca

Hennin Karlsen

A vantagem desta biblioteca é que ela possui além os caracteres numéricos e alfanuméricos tradicionais caracteres numéricos médios e grandes, ótimos para exibir valores de sensores.

+ Baixar a biblioteca

Conexão entre os pinos

Cada uma das bibliotecas sugere um padrão de ligação diferente. Mas se por algum motivo você precisa mudar a disposição deles, veja como fazer isto:

Adafruit

Basta alterar a assinatura do método construtor no arquivo .pde do sketch dentro da pasta /examples. Note que existe uma diferente das demais, o pino RST é o último e não o penúltimo:

// pin 7 - Serial clock out (SCLK)
// pin 6 - Serial data out (DIN)
// pin 5 - Data/Command select (D/C)
// pin 4 - LCD chip select (CS)
// pin 3 - LCD reset (RST)
PCD8544 nokia = PCD8544(7, 6, 5, 4, 3);

PCD8544

Já na PCD8544 a mudança deve ser feita no arquivo PCD8544.h na raiz da biblioteca. Após salvar o arquivo a IDE do Arduino deve ser reiniciada:

PCD8544(
unsigned char sclk  = 3,   /* clock       (display pin 2) */
unsigned char sdin  = 4,   /* data-in     (display pin 3 ) */
unsigned char dc    = 5,   /* data select (display pin 4 ) */
unsigned char reset = 6,   /* reset       (display pin 8 ) */
unsigned char sce   = 7);  /* enable      (display pin 5 ) */

Hennin Karlsen

Assim como na biblioteca da Adafruit, a configuração dos pinos é feita no arquivo do sketch:

// It is assumed that the LCD module is connected to the following pins.
// SCK  - Pin 8
// MOSI - Pin 9
// DC   - Pin 10
// RST  - Pin 11
// CS   - Pin 12
#include <CK_LCD5110_Basic.h>
LCD5110 myGLCD(8,9,10,11,12);

Criando caracteres customizados

Cada carácter é formado por 5 pixels de largura e 8 pixels de altura. É possível manipular qualquer um destes 40 pixels que o formam, ligando ou não um a um. Pra isso, vamos usar o PCD8544 Glyph Editor, que nos retorna um array com valores hexadecimas. O símbolo será impresso na tela pela função drawBitmap() de cada biblioteca:

static byte thermometer[] = { 0x60, 0x9e, 0xb9, 0x9e, 0x60 };
lcd.drawBitmap(thermometer, THERMO_WIDTH, THERMO_HEIGHT);

Exibindo imagens na tela

Para exibir Bitmaps monocromáticos na tela vamos seguir basicamente o mesmo principio da customização dos caracteres. Iremos usar o Bitmap Converter, para transformar uma imagem .bmp em um conjunto de valores hexadecimais e assim fornecê-lo ao nosso algoritmo, através da função drawBitmap().

+ Download BitmapConverter

Preparando o Bitmap

Primeiro vamos escolher uma imagem, ela pode ser um gif, jpeg, png ou qualquer outro tipo, já que o formato final sempre será bmp. O importante é que ela respeite a mesma proporção do lcd: 84×48 pixels, para não distorcer.

Também precisamos de um editor de imagens, eu uso o Photoshop. Ele vai me ajudar a redimensionar a imagem e aplicar o filtro de cores e salvá-la como Bitmap, mas você pode usar qualquer outro que faça a mesma coisa.

Vamos começar com a logo do Arduino: http://www.mouser.com/images/suppliers/ArduinoLogo.gif

Redimensionando

Bitmap fora da resolução de 84x48

Modificando as cores para preto e branco

Efeito Black and White (Alt+Shift+Ctrl+B)Bitmap em preto e branco

Exportando como Bitmap

Vá ao menu “Save As” e escolha BMP no campo “Format”, clique em “Salvar” e pronto!

+ Baixar Bitmap

Convertendo o Bitmap para Hexadecimal

Abra o programa LCD Assistant, vá em “File” e em seguida “Load Image”, selecione a imagem que acabamos de salvar e clique em “Abrir”. Agora marque a opção “Vertical” no box “Byte Orientation”. Por fim, volte ao menu “File” e clique em “Save Output”. O programa irá salvar um arquivo texto com um array contendo os valores hexadecimais do Bitmap:

//------------------------------------------------------------------------------
// File generated by LCD Assistant
// http://en.radzio.dxp.pl/bitmap_converter/
//------------------------------------------------------------------------------
const unsigned char logo_arduino [] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
0xC0, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x80, 0x80, 0x80, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x80, 0x80, 0x00,
0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xE0, 0xF8, 0xFC, 0xFE, 0xFF, 0x3F, 0x1F, 0x0F, 0x07, 0x07, 0x07, 0x03,
0x03, 0x03, 0x07, 0x07, 0x07, 0x0F, 0x0F, 0x1F, 0x3F, 0x7E, 0xFE, 0xFC, 0xF8, 0xF0, 0xC0, 0xE0,
0xF8, 0xFC, 0xFC, 0x7E, 0x3F, 0x1F, 0x0F, 0x0F, 0x07, 0x07, 0x07, 0x83, 0x83, 0x03, 0x07, 0x07,
0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFE, 0xFC, 0xF8, 0xE0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xC0, 0x80, 0x00, 0x00,
0x00, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x0E, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0, 0xF3,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xE1, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x0E, 0x0E, 0x0E, 0x7F,
0x7F, 0x1E, 0x0E, 0x0E, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x07, 0x0F,
0x1F, 0x3F, 0x3E, 0x7E, 0x7C, 0x7C, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0x78, 0x7C, 0x7C, 0x7E, 0x3F,
0x3F, 0x1F, 0x0F, 0x07, 0x03, 0x01, 0x00, 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x1F, 0x3F, 0x3E, 0x7C,
0x7C, 0x78, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0x78, 0x7C, 0x7C, 0x3E, 0x3F, 0x1F, 0x0F, 0x07, 0x03,
0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xE0, 0x78, 0xF8, 0xE0, 0x00, 0x00, 0x00, 0xF8, 0xF8, 0x98, 0xF8, 0xF0, 0x60, 0x00,
0xF8, 0xF8, 0x18, 0x18, 0xF0, 0xF0, 0x00, 0x00, 0xF8, 0xF0, 0x00, 0x00, 0xF8, 0xF0, 0x00, 0x18,
0x18, 0xF8, 0xF8, 0x18, 0x18, 0x00, 0xF0, 0xF8, 0x78, 0xE0, 0x80, 0xF8, 0xF8, 0x00, 0xE0, 0xF0,
0x18, 0x18, 0xF8, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x07, 0x01, 0x01, 0x07, 0x07, 0x00, 0x00, 0x07, 0x03, 0x01,
0x07, 0x07, 0x04, 0x00, 0x07, 0x07, 0x06, 0x06, 0x07, 0x03, 0x00, 0x00, 0x03, 0x07, 0x06, 0x06,
0x07, 0x01, 0x00, 0x06, 0x06, 0x07, 0x07, 0x06, 0x06, 0x00, 0x03, 0x07, 0x00, 0x00, 0x03, 0x07,
0x07, 0x00, 0x03, 0x07, 0x06, 0x06, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

};

O Resultado

Se a imagem na tela for exibida com um aspecto muito fino, por exemplo: o nome Arduino não é visível. Então é necessário encorpá-la, pra isso você pode usar o controle de Levels (Ctrl+L).

+ Baixar código de exemplo usando a biblioteca PCD8544

LCD Nokia 5110

About Isaias Coelho

Analista de Sistemas por formação e Programador de Interface por profissão, agora tô aqui escrevendo sobre Arduino...

Related Posts: