fbpx

Como utilizar o display LCD 16×02 com módulo I2C no Arduino

No tutorial Como utilizar o Display LCD 16×2 no Arduino aprendemos sobre a importância, especificações e forma de utilização do display LDC 16×2. Apesar de ser simples, a conexão deste componente ao Arduino requer o uso de muitas portas digitais, o que pode ser um problema em projetos maiores.

Este problema pode ser contornado com o uso de um módulo I2C para display LCD 16×2 ou 20×4, conforme Figura 1. Com este componente, é possível controlar um display 16×2 ou 20×4 utilizando apenas duas portas do Arduino.

Neste tutorial, vamos aprender como utilizar o display LCD 16×2 com módulo I2C no Arduino.

A imagem mostra um modulo I2C em sua forma real
Figura1: Módulo I2C para display LCD 16×2 ou 20×4.


MÓDULO I2C PARA DISPLAY LCD 16X2 OU 20X4

O módulo I2C para display LCD 16×2 ou 20×4 tem como principal função simplificar as conexões e facilitar a utilização de displays LCD ao microcontrolador.

O módulo I2C deve ser acoplado ao display LCD por meio da conexão dos seus 16 pinos, conforme ilustra a Figura 2.

A figura mostra um display 16x2
Figura 2: Display 16×2 com módulo I2C.

No centro do módulo I2C, está o chip PCF8574, um expansor de 8 bits que converte os dados I2C de um microcontrolador nos dados paralelos exigidos pelo display LCD.

Na parte lateral, o módulo I2C conta com quatro pinos para conexão com o Arduino ou qualquer outro microcontrolador que suporte o protocolo de comunicação I2C. Estes quatro pinos são: GND, VCC, SDA e SCL. O pino SDA (do inglês, Serial Data) é o responsável pela transferência e recebimento de dados. Por sua vez, o pino SCL (do inglês, Serial Clock) é utilizado para temporização.

O módulo I2C conta também com dois pinos para controle da luz de fundo do visor do display, que se encontram conectados por um jumper, por padrão. Assim, a luz de fundo estará sempre ligada. Você pode remover este jumper para desligar a luz de fundo do display.

Além disto, a placa conta com um pequeno trimpot para fazer ajustes finos no contraste do display e um barramento para configuração do endereço I2C. O módulo já vem configurado com o endereço 0x27, mas é possível alterá-lo caso você esteja usando vários dispositivos no mesmo barramento I2C.

A Figura 3 detalha as partes que compõem o módulo I2C para display LCD 16×2 ou 20×4.

a figura mostra o modulo i2c acoplado no display
Figura 3: Partes que compõem módulo I2C para display LCD 16×2 ou 20×4

O barramento de configuração do endereço possui três jumpers de solda (A0, A1 e A2) ou pads de solda, usados para codificar o endereço. Acima de cada pad há uma conexão de aterramento (GND). Para alterar o endereço, basta conectar qualquer pad ao pino GND localizado acima deles, soldando-os. A Figura 4 abaixo demonstra todas as conexões e endereços hexadecimais possíveis.

A imagem mostra um modelo de como mudar endereço por meio de soldagem em um display
Figura 4: Possíveis endereços do módulo I2C.


MATERIAIS NECESSÁRIOS

1 x Placa UNO SMD R3 Atmega328 compatível com Arduino UNO;
1 x Cabo USB;
1 x Display  LCD 16×02;
1x Conversor I2C Módulo para Display 16×02 ou 20×04;
Jumpers macho-fêmea.


ESQUEMÁTICO DE LIGAÇÃO DOS COMPONENTES

Inicialmente, certifique-se de que a sua placa Arduino esteja desligada. Em seguida monte o circuito da Figura 5 utilizando o Módulo I2C e os jumpers macho-fêmea.

Circuito de um display em maneira ilustrativa
Figura 5: Circuito utilizando o módulo I2C Display 16×02 e Arduino UNO.

Ao montar o circuito observe os seguintes pontos:

  • O GND do módulo I2C deve ser conectado ao pino GND do Arduino;
  • O módulo I2C opera com uma tensão de alimentação de 5V. Deste modo, conecte o VCC ao pino 5V do Arduino;
  • Nas placas Arduino UNO, os pinos associados ao I2C são A4 (SDA) e A5 (SCL).

Caso você esteja utilizando uma placa Arduino diferente, consulte a Tabela 1 abaixo:

 SCLSDA
Arduino NanoA5A4
Arduino Mega2120
Arduino Leonardo32
Arduino Micro32


ELABORANDO O CÓDIGO

Após a montagem do circuito, vamos programação do Sketch no Arduino IDE. Nesse projeto, vamos utilizar o Display 16×02 com módulo I2C para exibir inicialmente as mensagens:

“BLOG DA ROBOTICA”
“TUTORIAL DISPLAY”

Para fazer a comunicação do modulo I2C o Arduino, vamos utilizar a biblioteca Wire.h que já se encontra instalada com o Arduino IDE. Para incluí-la ao sketch acesse o seguinte caminho: Sketch>Incluir Biblioteca> Wire.

Vamos usar também a biblioteca LiquidCrystal_I2C.h que permite controlar displays I2C com funções exatamente semelhantes à biblioteca LiquidCrystal. Para instalá-la, abra o Gerenciador de Bibliotecas através do caminho: Ferramentas>Gerenciar Bibliotecas… ou por meio do atalho Ctrl+Shift+I. Em seguida, busque por LiquidCrystal I2C e clique em instalar, conforme a Figura 6.

A imagem ilustra a biblioteca liquid na arduino ide
Figura 6: Instalação da biblioteca LiquidCrystal I2C através do Gerenciador de Bibliotecas.

Vamos entender a lógica de programação desse projeto a partir dos seguintes passos:

1. Incluir as bibliotecas:

Foram incluídas as bibliotecas Wire.h para fazer a comunicação com o I2C e LiquidCrystal_I2C.h para controlar displays I2C.

2. Definir as constantes:

No código definiremos 3 constantes. A constante “col” que se refere ao número de colunas utilizadas no Display, a constante “lin” que se refere ao número de linhas utilizadas no display e a constante “ende” que se refere ao endereço o qual o display se encontra, usualmente esse endereço costuma ser 0x27.

3. Criar objeto do tipo LiquidCrystal_I2C

Em seguida, criaremos o objeto lcd, do tipo LiquidCrystal_I2C, e informamos o endereço, número de colunas e linhas do display, no seguinte formato: LiquidCrystal lcd(<endereço>, <coluna>, <linha>);

4. Função setup()

No setup(), inicializaremos a exibição do display LCD usando a função init(). A função clear() será usada para limpar o buffer de exibição. A função backlight deve ser utilizada para ativar a luz de fundo do display

Para iniciar a escrita no display LCD precisamos colocar o cursor na posição na coluna 0 e linha 0. Para isso, usaremos a função lcd.setCursor(0, 0);. A partir daí, escreveremos a primeira parte do texto, que será feita a partir da função lcd.print(“BLOG DA ROBOTICA”);.

Para escrever a segunda linha do texto, posicionaremos o cursor para a posição linha 1 e coluna 0 com a função lcd.setCursor(0, 1);. Daí, escreveremos o texto com a função lcd.print(“TUTORIAL DISPLAY”);.

5. Função loop()

No loop, chamaremos a função que desliga o display lcd.noDisplay() e liga o display lcd.display();.

Desta forma, o Sketch do projeto ficará da seguinte maneira:

/*
  ---     DISPLAY LCD 16 X 2 COM MÓDULO I2C     ---
  =================================================
  === BLOG DA ROBOTICA - www.blogdarobotica.com ===
  =================================================
  Autor: Jonas Souza
  E-mail: contato@blogdarobotica.com
  Facebook: facebook.com/blogdarobotica
  Instagram:@blogdarobotica
  YouTube: youtube.com/user/blogdarobotica
  =================================================
  === CASA DA ROBOTICA - www.casadarobotica.com ===
  =================================================
  Facebook: facebook.com/casadaroboticaoficial
  Instagram:@casadarobotica
  ==================================================
*/

#include <Wire.h> //Biblioteca utilizada gerenciar a comunicação entre dispositicos através do protocolo I2C
#include <LiquidCrystal_I2C.h> //Biblioteca controlar display 16x2 através do I2C

#define col  16 //Define o número de colunas do display utilizado
#define lin   2 //Define o número de linhas do display utilizado
#define ende  0x27 //Define o endereço do display

LiquidCrystal_I2C lcd(ende, col, lin); //Cria o objeto lcd passando como parâmetros o endereço, o nº de colunas e o nº de linhas

void setup() {
  lcd.init(); //Inicializa a comunicação com o display já conectado
  lcd.clear(); //Limpa a tela do display
  lcd.backlight(); //Aciona a luz de fundo do display

  lcd.setCursor(0, 0); //Coloca o cursor do display na coluna 1 e linha 1
  lcd.print("BLOG DA ROBOTICA"); //Exibe a mensagem na primeira linha do display
  lcd.setCursor(0, 1); //Coloca o cursor do display na coluna 1 e linha 2
  lcd.print("TUTORIAL DISPLAY");  //Exibe a mensagem na segunda linha do display
}

void loop() {
  delay(1000);
  lcd.noDisplay();// Desliga Display:
  delay(1000);
  lcd.display();// Liga Display:
}

Após a transferência do código, o display exibirá as mensagens conforme o vídeo 1.

Vídeo 1: Display LCD 16×2 com módulo I2C exibindo mensagem.

OBSERVAÇÃO: Caso seu display não exiba as mensagens após a transferência do código, ajuste o contraste do display.


AJUSTANDO O CONTRASTE DO DISPLAY

O módulo I2C para display LCD 16×2 ou 20×4 possui um pequeno trimpot de ajuste do contraste do display, conforme Figura 7. Para aumentar o contraste do display basta girar o trimpot no sentido anti-horário. Por sua vez, para diminuir o contraste gire no sentido horário.

Figura7: Trimpot para ajuste do contraste do display.

Espero ter ajudado,

Obrigado a todos e em caso de dúvidas deixe seu comentário abaixo!

Att. Jonas Souza

Dúvidas? Deixe seu comentário

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.