LCD Nokia 5110 – Nenhum outro é tão legal!

LCD Nokia 5110 – Nenhum outro é tão legal!

O que tem de tão legal nesse display Nokia 5110? Primeiramente, o controle que você pode ter sobre cada pixel, de modo que você poderá desenhar o que desejar  e com isso exibir relógios, gauges, progress bar e tudo isso junto utilizando Arduino!

Nesse tutorial de hoje, veremos a maneira mais simples de interagir com esse display pra que você possa começar agora mesmo a brincar com ele. Vamos começar pela lista de materiais:

Eu preferi fazer uma plaquinha pra evitar a protoboard e também para estrear meus resistores SMD. Tentei outras vezes e só deu errado, pela primeira vez acertei (aplausos)! Porém, estou obtendo ruidos na tela. No video eu mostro o  “shot zero” com uma barra de progresso nessa placas, utilizando um Arduino Pro Mini 5V.

Nokia 5110 e Arduino Pro Mini
Nokia 5110 e Arduino Pro Mini

Os pinos do Arduino a serem utilizados são a sequência de 3 a 7 e também você precisará do GND comum. Ainda, alimento o Arduino com 5V mas o display é 3V3, por isso coloquei um regulador de tensão ( na placa que fiz – aplausos novamente, porque esse também é SMD) e um diodo no GND pra garantir que nada queime em caso de fios invertidos na alimentação. Outra opção seria uma ponte de diodos, mas estou sendo o mais simplista possível.

Especificações do display Nokia 5110





Esse display tem uma resolução bacana de 84×48 pixels. Isso é mais do que um ícone grande de computador, que varia entre 32×32 ou 64×64. Isso significa que você pode desenhar com boa compreensão, mas obviamente a resolução não será a mesma de um computador porque os pixels são grandes.

Esse display está disposto em um circuito quadrado de 4.5cm e usa um controlador Philips PCD8544. Isso é o que as pessoas não sabem porque normalmente se fala apenas “display de Nokia”.

Tem circuitos azuis que descrevem tensão em 5V e 3V3, mas esse vermelho certamente é 3V3, operando desde 2.7V.

Seu consumo é ínfimo; inferior a 20mA, de modo que poderia seguramente ser ligado diretamente ao 3V3 de um Arduino, mas como a alimentação do Arduino Pro Mini fiz externamente, preferi colocar um regulador de tensão pra pegar alimentação pro display.

Datasheet Nokia 5110

Nesse link você terá acesso ao datasheet com muitas informações interessantes, mas que provavelmente serão dispensadas por você, considerando o uso de uma biblioteca pronta.

Wiring

A primeira coisa que faço quando preciso de imagens é ir ao Google Images. Lá certamente terá tudo o que você precisa pra não precisar reinventar a roda. Eu peguei essa imagem abaixo que é muito parecido com o que fiz na placa de prototipagem, com algumas pequenas resalvas.

Wiring Nokia 5110
Wiring Nokia 5110

Eu não ia usar potenciômetro, mas aí eu não poderia aproveitar o desenho acima (e com isso não sei se estou tendo mais ou menos trabalho em não redesenhar). Já no exemplo com Arduino UNO eu não alimentei o backlight do display.

Biblioteca para Nokia 5110

Tem várias; várias “mesmo”. Se você abrir a IDE do Arduino e ir em Sketch->Include Library->Library Manager e digitar “5110”, verá de imediato algumas opções, mas me parece que a biblioteca da Adafruit é a mais completa porque tem funções prontas para desenho, então como queremos por o negócio pra funcionar logo, vamos direto nela, buscando-a através desse link.

Se quiser experimentar mais algumas além das já citadas, você pode pegar aquiaqui e aqui. Não se preocupe, mal não fará, sugiro que experimente todas.

Seleção dos pinos

Em algumas dessas bibliotecas você pode definir pinos diferentes do padrão, caso seu projeto já esteja utilizando os atualmente descritos. Algumas estão no código principal, outras em um dos arquivos de include, é fácil achar e modificar.

Como desenhar seu próprio caracter no Nokia 5110

É facílimo manipular cada pixel desse display. Mas precisamos de alguns conceitos básicos para isso, então primeiramente devemos definir que a matriz de um caracter é composto por 5 colunas de 8 linhas. Pense nisso como uma (inheca) planilha do excell. A segunda coisa a pensar é nos endereçamentos, que podem ser feitos de diversas maneiras, mas pra conseguir desenhar um gráfico em um espaço pequeno, vou utilizar a representação hexadecimal:

0x01 0x01 0x01 0x01 0x01
0x02 0x02 0x02 0x02 0x02
0x04 0x04 0x04 0x04 0x04
0x08 0x08 0x08 0x08 0x08
0x10 0x10 0x10 0x10 0x10
0x20 0x20 0x20 0x20 0x20
0x40 0x40 0x40 0x40 0x40
0x80 0x80 0x80 0x80 0x80

Como você pode notar, os endereços são os mesmos, o que faz todo o sentido. Mas isso precisa ser colocado em um array para dizer qual posição está sendo manipulada. Então:

Isso significa que na coluna 1 foram “ligados” todos os 8 pixels. Esse resultado é obtido pela soma dos valores hexadecimais. Para fazer essa conta, você pode utilizar uma calculadora no computador com capacidade de conversão de bases ou ainda, fazer a conta em bits:

bit 7 6 5 4 3 2 1 0
decimal 128 64 32 16 8 4 2 1

Depois é só preencher o valor desejado, somando os valores decimais dessa tabela anterior. Isto é, invés de colocar em hexadecimal, você poderia colocar em bits ou em decimal:

Depois, basta utilizar o método drawBitmap da biblioteca em questão:

Acalme-se e aproveite a leitura. Até aqui estamos falando das possibilidades, do funcionamento, como é escrever uma letra do display, como os caracteres são formados; só compreenda, chegaremos em excelentes exemplos.

Desenhar no display sem biblioteca

Essa parte pode ser interessante se você quiser dominar o display (não que esse seja o domínio, mas é o caminho). O código para  escrever no display diretamente sem biblioteca é bastante curto e baseando-se no exemplo de manipulação por endereço, vamos ver o que pode ser feito.

Tudo binário, coluna por coluna





É a representação mais fácil. Pense que você tem uma coluna de 8 bits. Ponto final. Desse modo você só precisa escrever sequencialmente de 8 em 8 bits. Se quiser escrever a letra “L”, definindo que cada letra deva ter 8 bits de altura por 5 de largura, ficaria assim:

Talvez não lhe faça muito sentido de imediato, mas como estamos escrevendo do bit mais significativo, pense que estamos escrevendo da esquerda para a direita e de baixo para cima. Logo, o primeiro campo do array é a coluna preenchida e os demais campos são 1 bit do rodapé do caracter.

1
1
1
1
1
1
1
1….     1    1    1    1

Tendo montado seu caracter, basta rodar um loop para escrevê-lo na tela. No código de exemplo escrevi alguma sujeira na tela para mostrar a escrita em binário, decimal e hexadecimal. Isso significa que não importa o que você usar como base, servirá perfeitamente. Em seguida está o caracter “L” utilizando apenas 1 coluna por 1 linha. Você pode fazer o que quiser, basta montar suas estruturas.

Função para escrever letras no Nokia 5110

Se definirmos que o caracter deve ter 8×5 pixels, então uma função pode ajudar na escrita de letra a letra escrevendo os binários de uma maneira um pouco mais simplificada:

O exemplo está funcional no código, como você pode ver.

Barra de progresso no Nokia 5110

Isso é um exemplo extremanente bobo, mas para introdução é perfeito para mostrar uma animação na tela. O código que disponho a seguir está devidamente comentado, inclui uma função para limpar a tela e os exemplos supracitados. Em outros artigos patrocinados pela Autocore Robótica faremos melhores aplicações para esse display, por enquanto já é informação o suficiente para você brincar com liberdade.

Enfim, o resultado final desse tutorial está nesse código:

O video é só uma demonstração da prova de conceito, incluindo um teste com a biblioteca da Adafruit.

 

Inscreva-se no nosso newsletter, alí em cima à direita e receba novos posts por email.

Siga-nos no Do bit Ao Byte no Facebook.

Prefere twitter? @DobitAoByte.

Inscreva-se no nosso canal Do bit Ao Byte Brasil no YouTube.

Nossos grupos:

Arduino BR – https://www.facebook.com/groups/microcontroladorarduinobr/
Raspberry Pi BR – https://www.facebook.com/groups/raspberrybr/
Orange Pi BR – https://www.facebook.com/groups/OrangePiBR/
Odroid BR – https://www.facebook.com/groups/odroidBR/
Sistemas Embarcados BR – https://www.facebook.com/groups/SistemasEmbarcadosBR/
MIPS BR – https://www.facebook.com/groups/MIPSBR/
Do Bit ao Byte – https://www.facebook.com/groups/dobitaobyte/

Próximo post a caminho!

Comments

comments

Djames Suhanko

Djames Suhanko é Perito Forense Digital. Já atuou com deployer em sistemas de missão critica em diversos países pelo mundão. Programador Shell, Python, C, C++ e Qt, tendo contato com embarcados ( ora profissionalmente, ora por lazer ) desde 2009.