Quem já está a mais tempo trabalhando com Arduino ou até mesmo está recém começando, mas precisa de bastantes portas digitais para o seu projeto sabe que cada porta disponível é crucial para o sucesso do seu projeto, ainda mais se utilizamos um modelo tipo o Arduino UNO que possui somente 13 portas digitais. Sendo assim, vamos trabalhar com o Projeto Arduino com Display LCD 20×4 e Adaptador I2C.
Visando resolver este problema e aumentar a capacidade dos projetos com Arduino, desenvolveu-se o Módulo Adaptador I2C que quando utilizado com Displays LCDs de 16×2 ou 20×4 possuem a capacidade de diminuir o número de portas digitais utilizadas.
Comumente um projeto que envolve a utilização de displays LCDs utiliza 6 pinos digitais mais os pinos de alimentação para o seu funcionamento, mas com o Módulo I2C você reduz este número para apenas 2 portas, que por utilizarem o sistema de comunicação I2C são conectadas junto às portas analógicas do Arduino.
Principais Funções do Módulo Adaptador I2C:
Jumper do Backlight: Jumper responsável por permanecer com o Backlight aceso quando conectado ao módulo ou apaga-lo quando desconectado.
Pinos para Conexão junto ao Display: Pinos que devem ser soldados na parte de trás do Display para garantir a comunicação e interpretação dos sinais.
Trimpot para ajuste do Backlight: Trimpot responsável por regular o contraste dos caracteres do display, tornando-os mais amostra ou menos.
Pinos para Conexão junto ao Arduino: Os pinos que constituem o Módulo Adaptador I2C são: GND (Negativo), VCC (Positivo), SDA (Pino de Comunicação I2C), SCL (Pino de Comunicação I2C).
Seletor para Código I2C: Através de uma combinação certa, possibilita diferentes endereços para comunicação I2C, possibilitando a conexão de mais de um equipamento nos mesmos pinos.
Conforme a tabela abaixo, podemos verificar os sequenciais que definem cada um dos endereços de comunicação, ou seja, por possuir 8 possibilidades de endereço, podem ser conectados 8 diferentes display nas mesmas duas portas SDA e SCL.
Por padrão, comumente o Módulo Adaptador I2C vem configurado com o endereço 0x27, mas você pode alterá-los sempre que necessário utilizando os pinos A0, A1 e A2 demonstrados no módulo, outros modelos, como o Display LCD 20×4 comercializados em nosso site possuem endereço fixo e não suportam endereçamento.
Para configurar o endereço de comunicação do módulo, basta utilizar a sequencia de bits representada através da tabela vista anteriormente como base para identificar quais os terminais A0, A1 e A2 devem ser interligados, para isto é necessário um pingo de solda que interligue as duas extremidades.
Quando as duas extremidades de cada pino estiverem conectadas entre sí, este pino estará representando um caractere igual à 0 e quando estes mesmos pinos estiverem em seu modo inicial, sem solda, o mesmo estará representando um caractere igual à 1.
Aplicação e Funcionamento
Que as utilidades deste exclusivo Módulo Adaptador são realmente relevantes para o desenvolvimento do Projeto Arduino com Display LCD 20×4 e Adaptador I2C, principalmente para aqueles mais complexos que necessitam da utilização elevadas de portas digitais, não temos dúvidas, principalmente após compreendermos como funciona a linguagem I2C.
Para quem está iniciando neste universo maker e de projetos pode ficar com algumas dúvidas, ainda mais que o código utilizado para o funcionamento de um Display com I2C é diferente do código convencional utilizado com Displays.
Para auxiliar quem ainda tem dúvidas neste processo, desenvolvemos o referente projeto, que irá de forma simples demonstrar a diferença existente entre os códigos com I2C e sem I2C, além de demonstrar o modo de ligação utilizado.
Produtos Utilizados no Projeto
Para o referente projeto Arduino com Display LCD 20×4 e Adaptador I2C podemos utilizar qualquer Display LCD 16×2 ou 20×4 que tenha soldado junto aos seus pinos um Módulo Adaptador I2C, ou que seja instalado em uma protoboard de maneira que possibilite a comunicação entre os equipamentos.
Optamos pela utilização de um produto que já possui o adaptador soldado junto aos pinos do display, comercializado de modo que baste conectar os jumpers no módulo e no Ardino, porém este modelo possui uma desvantagem já que é comercializado com o endereço fixo em 0x27.
Para o projeto utilizamos:
Porém também pode-se utilizar outros modelos de Arduino e de displays, como:
Vale lembrar que a utilização de displays como estes acima, necessitam da inclusão de um Módulo Adaptador para a comunicação I2C como o abaixo:
Montagem Física (Hardware)
A montagem física de ambos os meios de exibição através do Display LCD é o que mais se diferencia de um método para o outro, quando utilizado o método tradicional sem o Adaptador I2C a quantia de jumpers e conexões utilizada pode ser observada através da imagem abaixo:
Além de depender da instalação de um potenciômetro junto ao display que é fundamental para o funcionamento do mesmo, este esquema utiliza-se de 6 pinos digitais conectados entre o Arduino e o Display, além dos demais pinos necessários para a alimentação, tanto os modelos 16×2 quando 20×4 possuem o mesmo esquema de ligação.
Diferente do esquema de ligação utilizado pela forma tradicional e desenvolvido para diminuir a complexibilidade das conexões temos o Módulo Adaptador I2C, um método simplificado de alimentação que necessita de somente 2 pinos para alimentação e 2 pinos para a comunicação, que neste caso é através das portas analógicas do Arduino.
Estas informações podem ser constatadas logo abaixo junto ao esquema de ligação desenvolvido para a demonstração de funcionamento do projeto arduino com display LCD 20×4 e adaptador I2C. Como podemos observar, o potenciômetro sempre utilizado em projetos com display neste caso foi substituído por um trimpot conectado diretamente ao módulo.
Vamos ver uma comparação rápida entre estes dois métodos, enquanto um método utiliza 14 jumpers o outro utiliza somente 4, enquanto um necessita de protoboard e trimpot o outro não necessita destes equipamentos para funcionamento, como podemos ver, muitas são as vantagens de se utilizar o Adaptador I2C.
Como Alterar o Código Tradicional para I2C
Para você que achou grande a diferença entre os modos de conexão de ambos os métodos, saiba que o esquema de adaptação do código é extremamente simples e facilmente compreendido por quem deseja mudar o seu projeto sem se preocupar muito com o código.
Vamos começar com um código exemplo para impressão de textos em um display LCD 20×4:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
// Blog Usinainfo // Display LCD 20x4 sem Adaptador I2C e Arduino //Carrega as bibliotecas necessárias #include <LiquidCrystal.h>; // Define os pinos digitais utilizados pelo Display LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { // Define o número de colunas e linhas do Display lcd.begin(20, 4); } void loop() { lcd.setCursor(0, 0); lcd.print("********************"); lcd.setCursor(4, 1); lcd.print("BLOG USINAINFO"); lcd.setCursor(0, 2); lcd.print("DISPLAY 20X4 COM I2C"); lcd.setCursor(0, 3); lcd.print("********************"); } |
Este é um código simples que possui como finalidade somente apresentar os caracteres descritos junto ao código no Display LCD 20×4, vale lembrar que 20 sendo o número de colunas, é o número máximo de caracteres possíveis por linha, caso esteja utilizando um display 16×2 outras alterações devem ser feitas junto ao código, como a remoção de caracteres e linhas.
Para alterar este código, e torna-lo compatível com o sistema de comunicação I2C é somente necessário a realização de dois passos:
Incluir bibliotecas para comunicação I2C: É necessário para este procedimento a inclusão das bibliotecas Wire e LiquidCrystal_I2C (Download AQUI), esta segunda biblioteca é a única que necessita ser incluída na pasta libraries do Arduino, veja:
Em vez de:
1 2 |
//Carrega as bibliotecas necessárias #include <LiquidCrystal.h>; |
Vamos alterar para:
1 2 3 |
// Carrega as bibliotecas necessárias #include <Wire.h>; #include <LiquidCrystal_I2C>; |
Identificar o Endereço utilizado pelo Adaptador: Anteriormente trabalhamos com pinos digitais, os identificamos e nomeamos para reconhecimento do Arduino, neste caso vamos identificar o Endereço e demais informações para a comunicação, veja:
Em vez de:
1 2 |
// Define os pinos digitais utilizados pelo Display LiquidCrystal lcd(12, 11, 5, 4, 3, 2); |
Vamos alterar para:
1 2 |
// Define o endereço utilizado pelo Adaptador I2C LiquidCrystal_I2C lcd(0x27,20,4); |
Alterar o modo de inicialização do Display: Como estamos trabalhando com um sistema diferente, a inicialização deste modelo também é um pouco diferenciada, para isto temos que alterar o que define as colunas e linhas no void setup pelas variáveis de inicialização, veja:
Em vez de:
1 2 |
// Define o número de colunas e linhas do Display lcd.begin (20,4); |
Vamos alterar para:
1 2 3 |
//Inicializa o LCD e o backlight lcd.init(); lcd.backlight(); |
Com isto, todas as alterações necessárias já estarão realizadas e o código para comunicação I2C fica da seguinte forma:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
// Blog Usinainfo // Display LCD 20x4 com Adaptador I2C e Arduino; // Carrega as bibliotecas necessárias #include <Wire.h>; #include <LiquidCrystal_I2C.h>; // Define o endereço utilizado pelo Adaptador I2C LiquidCrystal_I2C lcd(0x27,20,4); void setup() { //Inicializa o LCD e o backlight lcd.init(); lcd.backlight(); } void loop() { lcd.setCursor(0, 0); lcd.print("********************"); lcd.setCursor(4, 1); lcd.print("BLOG USINAINFO"); lcd.setCursor(0, 2); lcd.print("DISPLAY 20X4 COM I2C"); lcd.setCursor(0, 3); lcd.print("********************"); } |
Conclusão
Alterar o sistema de comunicação parece ser algo complicado e que pode nos dar muita dor de cabeça, porém como pudemos ver, é um procedimento simples e que pode ser realizado sem problema algum, desde que tenha a biblioteca certa e as variáveis definidas.
Com o fim do Projeto Arduino com Display LCD 20×4 e Adaptador I2C, pudemos verificar bem acentuadamente que a diferença no sistema de conexão é extremamente grande, diminuímos consideravelmente o número de jumpers e conexões e que a alteração no código é extremamente simples sem maiores segredos e dificuldade.
Agora o próximo passo é desenvolver novos projetos, novos códigos e novas possibilidades, utilize este projeto como base para diversos outros e não esqueça de comentar suas experiências logo abaixo nos comentários, esperamos eu tenham gostado deste artigo e até a próxima!
Obrigado Ricardo! help with math
Equipe Usinainfo,thanks a lot for the article post.Much thanks again. Fantastic.
Estou tentando utilizar 2 sensores de temperatura MLX90614 com o mesmo arduino. Após utilizar o i2C scanner, constatei que ambos possuem o mesmo endereço de comunicação de fábrica, gostaria de saber como posso alterar esses endereços.
Boa tarde Carol!
A alteração do endereço de um equipamento I2C comumente é definida via código, caso não exista pinos de auxilio para configuração direta.
caso eu queira utilizar essa programação em um display 16×2 tenho que mudar alguma coisa?
Bom Dia Vinicius! Caso opte por utilizar um display 16×2 será necessário alterar a seguinte variável:
LiquidCrystal_I2C lcd(0x27,20,4); -> Para -> LiquidCrystal_I2C lcd(0x27,16,2);
Além disto, recomendo também que elimine as linhas 2 e 3 do código.
Projeto simples e claríssimo. Parabéns, Straub. Esse projeto me será muito útil como partida, para um projeto que lerá correntes dc com sensores ACS712-05B e ficará mostrando os seus valores em um lcd 20×4 com I2C.
Olá Matheus. Bacana demais!!! É possível fazer scroll (rolar um texto) com ic2?
Olá Eduardo! É possível utilizar esta função normalmente, assim como nos projetos sem adaptador I2C.
Desconheço este formato de inclusão de bibliotecas :
#include LiquidCrystal.h;
#include Wire.h;
#include LiquidCrystal_I2C.h;
Rui
Olá Rui! Realmente há um erro nestas bibliotecas, o correto é incluir entre o nome da biblioteca símbolos como <> ou “”. O código foi corrigido já, muito obrigado pela dica!
Boa tarde. Muito bom a apresentação, mas fiquei com uma dúvida. Estou usando o STM32F103C8T6 com o PCF8574. Não vi no programa como definir quem são os pinos da interface I2C (SDA e SCL). Esse processador tem dois módulos de I2C e assim posso optar entre o módulo 1 ou o 2. No módulo 1 o sinal SCL1 pode ser no pinos PB6 ou no PB8 enquanto que o sinal SDA1 pode ser no pino PB7 ou no PB9. No módulo 2 o sinal SDA2 é no pino PB11 e SCL2 no pino 10. Onde é feita a declaração dos pinos no programa?
Olá Porfirio! No Arduino existem pinos fixos para a comunicação I2C e estes estão declarados na biblioteca já, não estão declarados no código.