Utilizando LCD com Arduino

0 Flares Twitter 0 Facebook 0 Google+ 0 0 Flares ×

O LCD (Display de Cristal Líquido) é um dispositivo gráfico muito poderoso na criação de interfaces com o usuário. Amplamente utilizado com Arduino e nos mais diversos tipos de projetos, esses displays são formados por uma fina camada de cristal líquido entre duas placas de vidro, com uma fonte de luz fluorescente ou de LEDs por baixo de toda essa estrutura. A formação de caracteres e imagens ocorre devido ao fato do cristal líquido, naturalmente transparente, se tornar opaco ao receber uma carga elétrica, impedindo a passagem de luz.

Funcionamento LCD

Existem, basicamente, dois tipos de LCDs:

  • Caracter: Esses tipos de LCD permitem apenas a escrita de caracteres, números e pequenos símbolos criados pelo usuário. Alguns tamanhos comuns para esse tipo de display são: 8×2, 16×2, 20×4, 24×4, 40×2, entre outros.
  • Gráficos: Os LCDs gráficos possuem resoluções bem maiores e permitem a exibição de figuras e imagens. Alguns tamanhos comuns para esse tipo de display são: 122×32, 128×64, 240×64, 240×128, entre outros.

Neste tutorial será ensinado como utilizar um display LCD de caracter no Arduino por meio da biblioteca LiquidCrystal, que acompanha o seu IDE. Para isso, será utilizado um display LCD 16X2 (2 linhas e 16 colunas).

A biblioteca LiquidCrystal possui diversas funções para utilização do LCD. Explicaremos as principais funções a seguir. As demais funções podem ser vistas na página de referências da biblioteca, no site do Arduino.

LiquidCrystal

É o construtor que cria um objeto da classe LiquidCrystal. Ele é sobrecarregado de 4 maneiras diferentes:

LiquidCrystal(RS, Enable, DB4, DB5, DB6, DB7)
LiquidCrystal(RS, R/W, Enable, DB4, DB5, DB6, DB7)
LiquidCrystal(RS, Enable, DB0, DB1, DB2, DB3, DB4, DB5, DB6, DB7)
LiquidCrystal(RS, R/W, Enable, DB0, DB1, DB2, DB3, DB4, DB5, DB6, DB7)

Caso o pino R/W não seja passado ao construtor, ele deve ser conectado ao terra para permitir a escrita no LCD. Observe que não é necessário enviar todos os pinos de dados ao construtor, pois o Arduino consegue controlar o display utilizando apenas os 4 últimos pinos.

begin(colunas, linhas)

Inicializa a interface com o LCD, recebendo como parâmetros o número de colunas e linhas do display. Deve ser chamada antes de qualquer outro método da classe.

setCursor(coluna, linha)

Posiciona o cursor do LCD nas coordenadas passadas pelo parâmetro, para que o texto possa ser escrito na posição desejada.

LCD

home()

Posiciona o cursor no canto superior esquerdo do display. Equivale ao setCursor(0,0).

print(conteúdo, base)

Escreve o conteúdo (char, int, string, byte ou long) na tela do LCD, na posição atual do cursor. O parâmetro base é opcional e indica apenas a base em que os números serão impressos (BIN para binário, DEC para decimal, OCT para octal e HEX para hexadecimal).

Ao término da escrita, o cursor é movido para a próxima posição.

clear()

Limpa a tela do LCD e posiciona o cursor na extremidade superior esquerda.

createChar(número, caracter)

Cria um caracter customizado para ser utilizado no display, até, no máximo, 8 caracteres. O símbolo criado é formado por um array de 8 bytes, em que os 5 bits menos significativos de cada byte determinam os pixels de cada linha.

Funcionamento LCD binários

O parâmetro número recebe um inteiro de 0 a 7, que simboliza qual caracter está sendo criado.

Para o caracter 0 é necessário que, no momento de imprimi-lo, faça-se um casting do número do caracter criado para um byte.

write(caracter)

Escreve um caracter no LCD na posição atual do cursor, movendo o cursor para a próxima posição.

Exemplo 1

Montagem do LCD com Arduino

O exemplo a seguir mostra a mensagem “Hello World!” seguida de dois smiles criados pelo usuário, após uma pequena contagem regressiva utilizando um LCD 16X2. Seguem abaixo a pinagem do LCD, o esquema de ligação do circuito e o código do programa:

1 Vss
2 Vdd
3 V0 (Ajuste de Contraste)
4 RS
5 R/W (Leitura/Escrita)
6 Enable (Habilita escrita no LCD)
7 DB0
8 DB1
9 DB2
10 DB3
11 DB4
12 DB5
13 DB6
14 DB7
15 Anodo – Luz de Fundo
16 Catodo – Luz de Fundo

 

Montagem do LCD com Arduino

O potenciômetro de 10kΩ permite variar a tensão no pino V0, ajustando o contraste do display.

#include <LiquidCrystal.h>     //Inclui biblioteca no programa

/*
Cria objeto lcd da classe LiquidCrystal
RS     2
Enable 3
DB4    4
DB5    5
DB6    6
DB7    7
*/
LiquidCrystal lcd(2,3,4,5,6,7);

//Cria um smile
byte smile[8] = {
  B11111,
  B00000,
  B01010,
  B00000,
  B10001,
  B01110,
  B00000,
  B00100,
};

//Cria outro smile
byte smile2[8] = {
  B00000,
  B00000,
  B01010,
  B01010,
  B00000,
  B10001,
  B11111,
  B00000,
};

void setup(){
  lcd.begin(16,2);            //Inicializa display de 2 linhas x 16 colunas
  lcd.createChar(0, smile);   //Cria o smile e o associa ao 0
  lcd.createChar(1, smile2);  //Cria o smile2 e o associa ao 1
  lcd.home();                 //Posiciona cursor no canto superior esquerdo
  lcd.print("3 ");            //Executa uma pequena contagem regressiva
  delay(500);
  lcd.print("2 ");
  delay(500);
  lcd.print("1 ");
  delay(500);
  lcd.clear();                //Limpa a tela do LCD
  lcd.print("Hello World!");  //Escreve Hello World!
  lcd.setCursor(6,1);         //Posiciona o cursor na posição (6,1)
  lcd.write(byte(0));         //Escreve o smile
  lcd.setCursor(8,1);         //Posiciona o cursor na posição (8,1)
  lcd.write(1);               //Escreve smile2
}

void loop(){

}

Exemplo 2

O próximo exemplo mostra a temperatura ambiente no LCD 16X2, obtida por meio do sensor LM35.

Montagem do LCD com Arduino

Os resistores de 15kΩ e 33kΩ diminuem a tensão de referência do conversor analógico-digital do Arduino para aproximadamente 1,5V, melhorando a resolução do sensor.

Importante: O pino AREF possui, por padrão, uma tensão de 5V (Referência interna do Arduino). Ao conectarmos um pino com uma tensão diferente, iremos criar um curto-circuito entre esses dois pontos. Para evitar que isso ocorra, o Arduino deve ser programado para aceitar uma referência externa antes que a conexão seja feita.

#include <LiquidCrystal.h> //Inclui biblioteca no programa

uint32_t timer;

/*
Cria objeto lcd da classe LiquidCrystal
RS     2
Enable 3
DB4    4
DB5    5
DB6    6
DB7    7
*/
LiquidCrystal lcd(2,3,4,5,6,7);

void setup(){

  analogReference(EXTERNAL);  // Muda a referência para a tensão no pino AREF

  lcd.begin(16,2);            //Inicializa display de 2 linhas x 16 colunas

}

void loop(){

  //Executa a cada 1 segundo
  if(millis() - timer > 1000)
  {
    // Atualiza o valor lido pelo conversor
    float valorLido = analogRead(A0);

   // Converte a temperatura lida para graus Celsius
   float temp = valorLido/1024*1562.5/10;

   lcd.clear();		     //Limpa o display

   //Imprime a temperatura no display
   lcd.print("Temperatura: ");
   lcd.print(temp);

   timer = millis();         //Atualiza a referência
}

}

 

Baixe Apostila Arduino

0 Flares Twitter 0 Facebook 0 Google+ 0 0 Flares ×

Ronan Largura

Estudante de engenharia elétrica e integrante do PET elétrica Ufes.

You may also like...