Displays LCD com Arduino

Tutorial sobre Displays LCD:

Utilização, Caracteres personalizados e Menus.

 

Este tutorial se baseia em displays que utilizam o chip HD44780, que é basicamente 99% desses displays de cristal líquido (tipo da imagem abaixo).

Exporemos aqui o básico da biblioteca LiquidCrystal com uma abordagem bem prática e resumida, um guia de criação de character personalizado  e uma forma de criação de menus.

Primeiro, a montagem!

Seu display deve ser semelhante ao da imagem abaixo:

Ele originalmente vem com furos e é necessário soldar pinos (como da imagem) ou fios para utiliza-lo. Se já tiver fios ou pinos, sem problemas!

Agora ligue o display ao Arduino da seguinte maneira:

O pino BL (penúltimo pino) que está ligado à saída 7 do Arduino é o que controla a luz de fundo do display (BL -> backlight)

O pino V0 (3º pino) é o contraste. 0V = máximo e 5V = mínimo.  Na minha montagem eu o deixei ligado ao Gnv (0V) direto, mas você pode ligá-lo a uma saída PWM do Arduino para controlar o contraste pelo programa ou ligar a um potenciômetro pra controlar manualmente, conforme a imagem abaixo:

Segundo, o programa!

Agora vamos ao que interessa. Grave esse programa no Arduino:

#include <LiquidCrystal.h> // declara a utilização da biblioteca LiquidCrystal

#define Luz_Fundo  7

//cria um objeto tipo LiquidCrystal que chamei de "lcd" nos pinos citados:
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup()
{
lcd.begin(16, 2); // Iniciando o objeto "lcd" de 2 linhas e 16 colunas
pinMode(Luz_Fundo,OUTPUT); //define o pino como saída
digitalWrite(Luz_Fundo,HIGH); // Liga a luz do display.
}

void loop()
{
lcd.setCursor(0,0); // seta o cursor para: (coluna = 0, linha = 0)
lcd.print(" engenheirando! ");
lcd.setCursor(0,1); // seta para linha 1, ou seja, a linha de baixo
lcd.print(" :)  ");
lcd.print(millis()/1000); // escreve os segundos passados.
}

Pronto! Você já tem o necessário pra usar um display!

Caso desejar, você pode ligar o pino da luz de fundo diretamente aos 5V, assim o display ficará sempre aceso e você economizará um pino no Arduino.

Existe ainda uma função bem útil que é a:
lcd.clear();  -> limpa todo conteúdo do display

Todas as funções da biblioteca estão documentadas neste link.

 

Criando caracteres personalizados:

Com os displays baseados no HD44780 podemos criar até 8 caracteres customizados! Primeiro devemos criar um vetor de 8 bytes que representará o nosso caracter. Não achei maneira melhor de explicar do que fazendo essas imagens. Dê uma olhada o código correspondente à esse coração:

byte heart[8] = { 0b00000,
0b01010,
0b11111,
0b11111,
0b01110,
0b00100,
0b00000,
0b00000 };

Entendeu? Aí vai uma melhor então:

Pronto, agora que criamos nosso caractere, precisamos enviá-lo ao display.
Para gravar o caracter no display na posição 1:

  lcd.createChar(1, heart);  // Grava o caracter heart na posição 1.

  lcd.write(1);    // Escreve o caracter da posição 1 no display.

Capitche? Aqui tem que ser write(), e não print()!

Podemos usar as posições de 1 a 8. Aí vai um programa de teste:

#include <LiquidCrystal.h>
#define Luz_Fundo  7
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

byte heart[8] = { 0b00000, // vetor de bytes correspondentes
0b01010,  // ao desenho do coração
0b11111,
0b11111,
0b01110,
0b00100,
0b00000,
0b00000
};

void setup()
{
lcd.begin(16, 2);
pinMode(Luz_Fundo,OUTPUT);
digitalWrite(Luz_Fundo,HIGH);
lcd.setCursor(0,0);
lcd.print(" engenheirando! ");

lcd.createChar(1, heart); // envia nosso character p/ o display
}

void loop()
{
lcd.setCursor(3,1);
lcd.write(1); // desenha o coração
delay(500);
lcd.setCursor(3,1);
lcd.print(" "); // Após 0.5s apaga o coração, assim ele
delay(500); // ficará piscando
}

Criando um Menu para nosso projeto!

 

Fizemos um vídeo-tutorial explicando qual o procedimento usamos para criação de menus para display LCD. Veja abaixo ou clique aqui.
Pra dar like, (e você vai dar né? :) , tem que clicar alí mesmo pra abrir o vídeo no youtube.

 

O código do exemplo usado no vídeo pode ser visto abaixo ou baixado clicando-se aqui.

 

É isso aí, espero ter ajudado!

Pra receber atualizações do site por email, clique no botão “Inscreva-se” no canto superior da tela.

Obrigado!

22 comments

  1. Muito bem detalhado o tutorial, fica a dica de uma ferramenta para criação de caracteres customizados: http://www.carlos-rodrigues.com/projects/pcd8544/

  2. Marcelo Melo says:

    Muito bom, Mauricio! Meus parabéns pelo tutorial! Bem didático!

  3. Ras B says:

    Talvez sej de notar o facto de que convem sempre referir a datasheet do display antes de ligar ao arduino, ja que eles variam de marca para marca.
    Exemplo- alguns tem os pins 15-16 e son entao 1-2-3, etc ate ao 14

  4. Muito bom esse tutorial. Útil demais.
    Parabéns, Maurício.

  5. Jimi says:

    Amigão parabéns! Gostei muito do que você e me ajudou a ter novas ideias.
    Tem como mostrar como fez essa caixinha preta para guardar o arduino?

    Obrigadão!!!

  6. Morim says:

    gostei tem muito boa informação

    obrigada

  7. Sidney says:

    Caraca, fantástico seu tutorial. Parabens. Você usa muito bem a edição do video a seu favor, coisa de profissional.

  8. tiac says:

    Parabéns muito bom!!!!

    Como sou amador poderia só disponibilizar os botões a que entradas ligam, esquema eléctrico.

    Obrigada

  9. tiac says:

    OK descobri.
    Obrigado.

  10. julio says:

    Será que não dar para mostra a montagem na protoboard ????

  11. nilton says:

    Muito boa materia me ajudou a montar meu LCD PARABÉNS!!

    Só uma observação: No caso do meu LCD 20×4 ligar o contraste no maximo faz com que os digitos sumam. Quase dei o devolvi como queimado.

    Att. Nilton

  12. Felipe says:

    Fala galera tudo bem?
    muito bom o tutorial, queria saber se eu consigo utilizar um LCD de câmera digital pra fazer medição e exibir mensagem?

  13. Fábio. says:

    Muito bom.
    Continue ajudando a quem precisa
    Obrigado

  14. Dey Neto says:

    Boa noite,

    Estou fazendo um alimentador de cães automático com Arduíno, mas não sei como fazer o programa para o mesmo. Esse alimentador será assim:
    Vou colocar a ração dentro de um vaso de água de 20 litros e um cano na boca desse vaso para guiar a ração até o pote dos cachorros. No meio desse cano terá um dispositivo giratório com um buraco (para quando o buraco passar pelo cano a ração cair), comandado por um motorzinho de 12v 15rpm. Terá um Display lcd 16×2 para definir a hora que eu quero que o alimentador dê comida aos cães, esse relógio será feito pelo Ci DS1307. Preciso de um programa que trabalhe com o arduino mega 2560 que faça isso tudo. Será que você poderia me ajudar?

    meu e-mail é deyneto182@hotmail.com, espero respostas.

  15. Schmitt says:

    Parabéns pelo tuto, chegando meu mega2560 testo ele, valeuuuuu

  16. mil says:

    mt bom! eu estou querendo fazer um robõ e vou usar a LCD para passar a tabuada p a criançada aprender.

  17. Rafael says:

    Ola Mauricio!! eu noa estou conseguindo fazer funcionar..so que eu estou usando o LCD Keypad Shield…que ja vem com os botoezinhos..pdoeria me dar um help? abracos!

  18. Elder Znidarcis says:

    Muito bom! Valeu a ajuda, continua com o site que e ótimo.

  19. Jonny Matuichuk says:

    Estou iniciando no Arduíno e gostaria de obter maiores informações quanto a programação, tenho noções básicas de C, C++ no entanto, não estou familiarizado com a programação do Arduino. Voce possui alguma apostia ou coisa parecida.

    Abraços

  20. felipe says:

    Estou fazendo um relogio no LCD.Nos celulares, quando vamos ajustar as horas os numeros ficam piscando de acordo com o que estou modificando no momento(hora ou minutos). alguem pode me dizer como fazer esse efeito no LCD ? email:felipecarv@outlook.com

  21. Lucas says:

    ola amigo fis td como mencionado no post mas apenas ascende o lcd e nao aparece nenhuma letra,oq pode ser?

    • Lucas says:

      ola conssegui fazer aparecer as letras soh q agora a luz dos quadrados do lcd esta mto forte e soh conssigo ver as letras qndo olho meio d lado para a tela,seria falta d um dispositivo controlador de luz d fundo?

Leave a Reply

Your email address will not be published. Required fields are marked *

*