domingo, 25 de agosto de 2019

Arduino usando Modulo de Visualição no Nokia 5110

O nome icônico“Nokia 5110” em si deveria ter comprado memórias do robusto celular Nokia, que foi muito popular durante os 90’s. O modelo 5110 veio com um Display Gráfico que foi suficiente para atuar como uma tela de exibição para o celular naquela época. Esta tela foi capaz de exibir tudo, desde caracteres alfanuméricos até pequenos gráficos, tudo o que é necessário para o celular. À medida que a terra revolveu novos técnicos com telas de toque brilhantes surgiram e essa tela não está mais em uso. Mas esperamos que eles possam ser usados ​​em aplicações eletrônicas, onde um pequeno gráfico tem que ser exibido e evitar gastar dinheiro em grandes telas de LCD.  Então neste tutorial vamos aprender como fazer interface com um LCD gráfico Nokia 5110 com Arduino e fazê-lo funcionar.
Estes LCDs possuem pixels preto e branco de dimensões 84 × 48. Eles podem parecer monótonos, mas ainda assim podem ser usados ​​para exibir gráficos decentes para seus projetos e podem ser facilmente usados ​​com microcontroladores como o Arduino. Então, vamos começar ...!  

Materiais requisitados:

  1. Arduino Board (qualquer versão)
  2. Visor do Nokia 5110
  3. Conectando fios


Módulo de visualização gráfica do Nokia 5110:

Existem dois tipos desses LCDs gráficos disponíveis no mercado. Um com pastilhas de solda acima e abaixo da tela e o outro com pastilhas de solda apenas na parte inferior da tela. O que estamos usando pertence ao tipo 2, onde existem blocos apenas sob a tela. Ambos os módulos funcionam da mesma maneira e, portanto, as conexões são as mesmas para ambos. Portanto, independentemente do módulo, você pode seguir o tutorial.
Como dito anteriormente LCD Gráfico Nokia 5110 tem 84 pixels na horizontal e 48 pixels na vertical. O tamanho total da tela é 1,72 x 1,72. O módulo possui 6 pinos de entrada, nos quais podemos fazer a interface com qualquer microcontrolador através da comunicação SPI. O IC de interface que se comunica entre o monitor e o Arduino é o IC do controlador de monitor Philips PCD8544 cuja folha de dados pode ser encontrada aqui. No entanto, se você estiver usando o Arduino para se comunicar com este IC, não precisamos nos preocupar com a folha de dados, pois existem bibliotecas prontas para serem baixadas e usadas. O módulo que estamos usando aqui é mostrado abaixo.
nokia 5110 graphical lcd display

Diagrama de circuito:

O diagrama completo do circuito para conectando o Nokia5110 Graphical LCD com o Arduino é dado abaixo.
Circuit Diagram for Nokia5110 Graphical LCD with Arduino
O módulo de exibição possui 8 pinos, usados para configurar um Comunicação SPI com Arduino. O módulo é alimentado com o pino de 3,3V da placa Arduino. Observe que esses módulos funcionam com lógica de 3.3V e, portanto, não fornecem 5V ao pino Vcc dos monitores. Liguei diretamente o Pin do monitor ao Arduino, embora o LCD funcione na lógica de 3.3V e o Arduino na lógica de 5V, porque só então achei que o LCD funcionava corretamente. Você pode usar um divisor de tensão para converter 5V para 3,3V, se necessário, mas para mim ele funciona apenas sem a conversão lógica. As conexões são bem simples e fáceis de fazer. Depois de concluir as conexões, sua configuração será semelhante à mostrada abaixo.
Interfacing Nokia5110 Graphical LCD with Arduino

Programa Arduino e Trabalho:

Siga as etapas abaixo para programe seu Arduino para o Nokia 5110 Display. As etapas assumem que você já instalou o IDE do Arduino e está familiarizado com o uso dele..
Passo 1: Abra o Arduino IDE no seu computador e selecione a placa apropriada no menu de ferramentas depois de conectar seu Arduino ao seu computador.
Passo 2: Click aqui para baixar a Biblioteca de vídeos Nokia 5110 pela biblioteca Adafruit do repositório GitHub.
Passo 3: Após o download do arquivo Zip, selecione Sketch -> Include Library -> Add .ZIP library e navegue até o local onde o ZIP foi baixado.
Nota: Você também precisará fazer o download do núcleo da Adafruit GFX Graphics, que realiza todos os círculos, textos, retângulos etc. Você pode obtê-lo em https://github.com/adafruit/Adafruit-GFX-Library e instale da mesma maneira.
Passo 4: Agora abra o programa de exemplo selecionando File -> Examples -> Adafruit PCD Nokia 5110 LCD Library -> pcdtest e clique no botão upload
Example for pcdtest in arduino library
Passo 5: Depois que o programa for carregado, pressione o botão de reset no Arduino e você verá o programa de exemplo exibindo todas as animações, conforme mostrado no vídeo fornecido no final deste tutorial.

Você pode ler o programa de exemplo para entender as várias funções internas que podem ser usadas para executar vários designs gráficos no LCD. Mas vamos dar um passo adiante e tentar exibindo o logotipo CircuitDigest na tela LCD.
Agora abra a imagem necessária em Pintura and redimensionar a imagem. O tamanho máximo da imagem que podemos usar para nossa exibição é 84 × 48.
resizing image in paint

Após redimensionar a imagem, salve-a como bitmap (preto e branco) usando o botão salvar como opção no Paint. Para exibir a imagem como um bitmap em nossa tela LCD, precisaremos de um software que possa converter a imagem de bitmap em código. Você pode baixar o software clicando em aqui. Uma vez baixado, descompacte o arquivo e clique em “BitmapEncoder” para iniciar o aplicativo. Abra a imagem de bitmap que acabamos de salvar usando este software para obter a matriz de valores codificados. Você pode copiar diretamente esses valores e colá-los em sua matriz Arduino. O valor mostrado pelo software para o nosso logotipo é mostrado abaixo
bitmap encoder for nokia-5110 graphical lcd display
Como você pode ver, o array começa com valor 48, 48 esse é o tamanho da nossa imagem. Não devemos adicionar isso em nossa matriz. Portanto, remova os dois primeiros valores e use o restante como o valor da matriz no programa. A matriz será semelhante abaixo. o programa completo é dado no final desta página para sua referência.
static const unsigned char PROGMEM Logo[] =
{B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,
B00000000,B00000000,B00001111,B11111000,B00000000,B00000000,
B00000000,B00000000,B00001111,B11111111,B00000000,B00000000,
B00000000,B00000011,B00011111,B11111111,B11000000,B00000000,
B00000000,B00001110,B00111110,B00111111,B11110000,B00000000,
B00000000,B00111110,B00111110,B10000000,B01111100,B00000000,
B00000000,B01111100,B01111100,B11000000,B00111110,B00000000,
B00000000,B11111100,B01111110,B00000000,B00001111,B00000000,
B00000001,B11111000,B11111111,B00111111,B10000111,B10000000,
B00000011,B11111000,B11111111,B11111111,B11000011,B11000000,
B00000111,B11110001,B11111111,B11111111,B11100000,B11100000,
B00000111,B11100001,B11111111,B11100011,B11111000,B01100000,
B00000000,B00000011,B11100000,B00001001,B11111100,B00000000,
B00000000,B00000111,B11100000,B00011001,B11111110,B00000000,
B00000000,B00000111,B11000000,B00000001,B11111111,B10000000,
B00011111,B11111111,B11000111,B11100011,B11111111,B11111000,
B00111111,B11111111,B10001111,B11111111,B11111111,B11111100,
B00111111,B11111111,B00011111,B11111111,B11111111,B11111100,
B00111111,B11111111,B00011111,B11111111,B11111111,B11111100,
B00111111,B11111110,B00111111,B00111111,B11111111,B11111110,
B01111111,B11111110,B00111110,B00000000,B01111111,B11111100,
B01111111,B11111100,B01111100,B11000000,B00000000,B00000000,
B01111111,B11111100,B01111110,B10000000,B00000000,B00000000,
B00000000,B00000000,B11111110,B00111111,B11111111,B11111110,
B00000000,B00000001,B11111111,B11111111,B11111111,B11111110,
B01111111,B11111111,B11111111,B11111111,B11111111,B11111110,
B01111111,B11111111,B11111111,B11111111,B11111111,B11111110,
B01111111,B11111111,B11000111,B11111111,B11111111,B11111110,
B00111111,B11111111,B10000011,B11111110,B00000000,B00000000,
B00111111,B11111111,B10110011,B11111000,B00000000,B00000000,
B00111111,B11111111,B10000001,B11100000,B00000000,B00000000,
B00111111,B11111111,B11000000,B10000001,B11111111,B11111100,
B00000000,B00011111,B11111000,B00000111,B11111111,B11111000,
B00000000,B00000111,B11111110,B00011111,B11111111,B11111000,
B00000000,B00000001,B11111111,B01111111,B11111111,B11110000,
B00001111,B11100000,B11111111,B11111111,B11111111,B11110000,
B00000111,B11111000,B00001111,B11111111,B11000000,B00000000,
B00000011,B11111100,B00100111,B11111111,B00000000,B00000000,
B00000011,B11111111,B00110111,B11111100,B00000000,B00000000,
B00000001,B11111111,B10000111,B11011000,B00111111,B10000000,
B00000000,B11111111,B11001111,B10000000,B11111111,B00000000,
B00000000,B01111111,B11111111,B10110001,B11111110,B00000000,
B00000000,B00011111,B11111111,B10110111,B11111100,B00000000,
B00000000,B00001111,B11111111,B10000111,B11110000,B00000000,
B00000000,B00000011,B11111111,B11111111,B11000000,B00000000,
B00000000,B00000000,B11111111,B11111111,B00000000,B00000000,
B00000000,B00000000,B00001111,B11110000,B00000000,B00000000,
B00000000,B00000000,B00000000,B00000000,B00000000,B00000000};

Agora, para exibir este bitmap, precisamos usar as seguintes linhas de código. Onde os dados anteriores na tela são apagados e a nova imagem de bitmap é gravada.
  display.clearDisplay();
  display.drawBitmap(20, 0,  Logo, 48, 48, 1);
  display.display();
A linha display.drawBitmap(20, 0,  Logo, 48, 48, 1); exibir a posição, tamanho e cor da imagem bitmap.  A sintaxe pode ser dada como.
display.drawBitmap (X_Position, Y_Position, Nome da matriz, comprimento da imagem, largura da imagem);

O comprimento e a largura da imagem podem ser obtidos dos dois primeiros elementos da matriz, respectivamente, conforme informado anteriormente. Quando esse código for executado, obteremos o bitmap exibido em nossa tela LCD como mostrado abaixo.
showing image on Nokia5110 Graphical LCD with Arduino

Você também pode exibir um texto simples como mostrado abaixo:
showing logo on Nokia5110 Graphical LCD with Arduino

Espero que você tenha entendido o tutorial e tenha Nokia 5110 LCD com interface Arduino. Com esta exibição gráfica em sua manga, você pode criar muitos projetos que exigem detalhes gráficos menores.
Code: 
// Nokia5110_logo
// Este programa é uma demonstração de como exibir o logotipo.
// Você também pode ver como usar invert().
// It is assumed that the LCD module is connected to
// the following pins
//      RST  - Pin 3
//      CE   - Pin 4
//      DC   - Pin 5
//      DIN  - Pin 6
//      CLK  - Pin 7
#include <Nokia5110.h>
Nokia5110 glcd(3,4,5,6,7);
/*You can create your own logo by generating an array of your logo_image using any image_to_hex_code_convrter*/

const char CircuitsTodayLogo [504] = {
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, 0x00, 0x80, 0x80, 0xc0, 0xe0, 0xf0, 0xf0, 0xf8, 0x7c, 0x7c, 0x3e, 0x1c, 0x8c, 0xc8, 0xc0, 0xe0, 0xe0, 0xc0, 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,
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, 0x18, 0x1c, 0x3c, 0x7e, 0xff, 0xff, 0xff, 0xe7, 0xe3, 0xc3, 0x89, 0x98, 0x3c, 0x3e, 0x1e, 0x0f, 0x0f, 0x8f, 0x9f, 0xff, 0xfd, 0xf8, 0xf0, 0xf8, 0xfc, 0x7c, 0x3c, 0x1c, 0x18, 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, 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, 0x01, 0x03, 0x03, 0x07, 0x0f, 0x1f, 0x1f, 0x3e, 0x7c, 0x3e, 0x1f, 0x1f, 0x0f, 0x07, 0x03, 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, 0x00, 0x30, 0xfc, 0xfc, 0xce, 0x86, 0x06, 0x07, 0x06, 0x86, 0x86, 0x84, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x66, 0x66, 0xf6, 0xfe, 0xbc, 0x18, 0x00, 0x30, 0xfc, 0xfc, 0xce, 0x86, 0x06, 0x07, 0x06, 0x86, 0x86, 0x84, 0x00, 0x00, 0x7e, 0xfe, 0xfe, 0x80, 0x00, 0x00, 0x80, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x00, 0x00, 0x06, 0x06, 0x06, 0xfe, 0xfe, 0xfe, 0x06, 0x06, 0x06, 0x00, 0x80, 0x9e, 0x9e, 0x3e, 0x37, 0xb6, 0xf6, 0xe0, 0x40, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x61, 0x61, 0x63, 0x63, 0xe3, 0xe3, 0xe1, 0x61, 0x61, 0x60, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x80, 0xc0, 0xc3, 0xe3, 0x63, 0x60, 0x60, 0xe0, 0xc1, 0xc3, 0x03, 0x02, 0x00, 0x00, 0x01, 0x01, 0x03, 0xe3, 0xe3, 0xe3, 0xe1, 0x61, 0x60, 0xe0, 0xc0, 0xc0, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0x00, 0xc0, 0xe0, 0xe0, 0xe3, 0xe3, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x23, 0x60, 0xe0, 0xe0, 0xc0, 0x00, 0x81, 0xc1, 0xe3, 0x63, 0x23, 0x01, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0f, 0x1f, 0x18, 0x18, 0x10, 0x18, 0x1c, 0x1f, 0x0f, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x1f, 0x1f, 0x18, 0x18, 0x1c, 0x1f, 0x0f, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x1e, 0x1f, 0x0f, 0x0c, 0x0d, 0x0f, 0x1f, 0x1e, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x1f, 0x1f, 0x1f, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
void setup()
{
 glcd.Initialize_LCD();
}
void loop()
{
  glcd.Invert(true); //for inverting display
  glcd.allClear();
  glcd.logoDisp(CircuitsTodayLogo);
  delay(3000);
 
  glcd.allClear();
  glcd.Invert(false);
  glcd.logoDisp(CircuitsTodayLogo);
  delay(3000);
}

Nenhum comentário:

Postar um comentário

Peço que use somente caixa baixa, não todo escrito em letra grande.