Tutorial: Backlight e Contraste por Software em LCD 16x2

Adquira estes componentes na Loja do Lab de Garagem

Geralmente em projetos com display LCD, o contraste é controlado por um potenciômetro e o backlight é conectado diretamente à alimentação, portanto sempre ligado. Neste tutorial, será mostrada uma maneira de controlar estes recursos em um LCD 16x2 via software com o Garagino ou Arduino, controlando o backlight por um certo tempo ligado (o que economiza energia) e o contraste através de botões. O Garagino é mais barato que o Arduino e pode ser incorporado em seus projetos com maior facilidade por ser bem compacto. Ele pode ser programado via Arduino ou com a ajuda de um conversor USB/Serial. No entanto, você poderá utilizar qualquer um deles para este tutorial, as duas opções serão mostradas. 

 

  

Para esta montagem, serão necessários os seguintes componentes:

- 1x Arduino Uno ou Garagino

- 3x Resistores de 10K Ohms

- 1x Resistor de 100 Ohms

- 1x Capacitor eletrolítico de 10uF

- 1x Capacitor cerâmico de 100nF

- 3x Push buttons

- 1x Display LCD 16x2

- 1x MOSFET Canal N

- Jumpers para Conexão

 

O controle do display é feito basicamente por três push buttons ligados aos pinos D7, D8 e D10 do Garagino/Arduino, que por sua vez lê o sinal dos mesmos e controla o display por meio de outros dois pinos (D9 - liga o backlight - fazendo com que o MOSFET seja ou não chaveado, e D6 - ajuste de contraste por PWM). O capacitor de 100nF conectado à alimentação do circuito serve como filtro de ruídos, o de 10uF conectado ao resistor funciona como um filtro passa baixa mantendo o nível DC estável na entrada do pino Vo (ajuste de contraste) no LCD. 

A seguir, monte um dos dois circuitos como mostrado abaixo:

Com o Garagino (clique para ampliar):

 

Com o Arduino (clique para ampliar):

Então, abra a IDE do Arduino e insira o seguinte código:

// Firmware para controle do display LCD 16x2

#include <LiquidCrystal.h>
#define botao_backlight 8 // Pino para verificação de acionamento do backlight
#define backlight 9 // Pino que habilita o acionamento do backlight (pelo MOSFET)
#define contraste 6 // Pino do contraste no LCD
#define ajuste1 7 // Pino para aumentar o contraste (diminui o valor do PWM no pino 6)
#define ajuste2 10 // Pino para diminuir o contraste (aumenta o valor do PWM no pino 6)

long intervalo = 6000; // Intervalo que o backlight permanecerá aceso quando for acionado
unsigned long valoranterior = 0; // Variável para atualização para contar o tempo de intervalo
unsigned char valor = 0; // Variável com o valor do contraste
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // Pinos do Arduino utilizados no LCD

void setup() {
pinMode(botao_backlight, INPUT); // Configurações de I/O
pinMode(ajuste2, INPUT);
pinMode(ajuste1, INPUT);
pinMode(backlight, OUTPUT);
pinMode(contraste, OUTPUT);

lcd.begin(16, 2); // Declaração do número de linhas e colunas do display
lcd.setCursor(0, 0); // Move o cursor para coluna 0 linha 0
lcd.print("Bem vindo ao"); // Exibe esta mensagem na primeira linha
lcd.setCursor(0, 1); // Move o cursor para coluna 0 linha 1
lcd.print("Lab de Garagem !"); // Exibe mensagem na segunda linha
}

void loop() {

/* Essa parte monitora o pino de backlight do display e liga-o
caso o botão "backlight" seja colocado no GND. Isto por 6 segundos (valor de "intervalo") */
unsigned long valoratual = millis(); // Valor atual que armazena o tempo a partir de quando o ATmega inicializado.
if((digitalRead(botao_backlight)) == LOW) { // Se o pino "backlight" estiver no GND,
digitalWrite(backlight, HIGH); // Após soltar o botão, liga o backlight
}
if(((valoratual - valoranterior) > intervalo)) { // Se passar o tempo de intervalo (no caso 6s),
valoranterior = valoratual; // atualiza o valor anterior para uma nova contagem
digitalWrite(backlight, LOW); // Desliga o backlight
}

/* Esta parte monitora os pinos de ajuste de contraste ("ajuste1" e ajuste2")
a fim de regulá-lo no display */
if(digitalRead(ajuste2) == LOW) { // Se o pino/botão "ajuste2" for colocado no GND,
while(digitalRead(ajuste2) == LOW) { // espera até soltar o botão
continue;
}
if(valor < 255) { // Após soltar o botão, se o valor do PWM não for maior que o máximo (255),
valor = valor + 5; // incrementa a variável "valor" em 5 (diminui o contraste)
}
analogWrite (contraste, valor); // Exibe este valor de contraste no pino Vo do display
}
if(digitalRead(ajuste1) == LOW) { // Se o pino/botão "ajuste1" for colocado no GND,
while(digitalRead(ajuste1) == LOW) { // espera até soltar o botão
continue;
}
if(valor > 0) { // Após soltar o botão, se o valor do PWM não for menor que mínimo (0),
valor = valor - 5; // decrementa a variável "valor" em 5 (aumenta o contraste)
}
analogWrite (contraste, valor); // Exibe este valor de contraste no pino Vo do display
}
}

Faça o upload para o seu Arduino/Garagino, os três botões (no pino D8 - backlight, nos pinos D7 e D10 - contraste) controlarão essas características do display. E o seu controle de display LCD está pronto!!! Esperamos que tenha gostado. Qualquer dúvida, poste aqui. Até a próxima!!!

Links de Referência:

Display de Cristal Líquido

- PWM 

 

Exibições: 25463

Comentar

Você precisa ser um membro de Laboratorio de Garagem (arduino, eletrônica, robotica, hacking) para adicionar comentários!

Entrar em Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)

Comentário de Eduardo castellani em 6 setembro 2016 às 16:51

Obrigado, mas como eu faria para ligar esse mesmo, só que com aquele Modulo i2c? que usa só 4 pinos do arduino?

Comentário de Judenilson Araujo em 20 julho 2015 às 1:54

Posso excluir o Mosfet e ajustar usando apenas as portas PWM? ou vai sobrecarregar o ARDUINO?  vlw e obg pelo tutor!

Comentário de Ronaldo Brandão em 15 março 2015 às 14:28

Como fazer o controle de contraste e backlight no LCD 16x2 utilizando I2C??

Comentário de josé em 9 fevereiro 2015 às 19:04

alguem me pode ajudar,

tenho um arduino mega ADK e um display, pus  o programa a correr no arduino e ele só faz contagem ate 30 segundos, depois re-inicia o arduino, volta tudo ao inicio 

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço