Módulo I2C para LCD 16×2 e Arduino

modulo-I2C-para-LCD
Font Size

Atualmente, o módulo I2C para LCD é a melhor solução quando necessitamos reduzir a complexidade na montagem dos circuitos. Pois um dos grandes problemas ao trabalhar com o display LCD 16 x 2 é sua grande quantidade de conexões. Conforme é possível observar na Figura 1, temos um total de 16 pinos no LCD 16×2.

Logo, o circuito se torna mais complexo, em virtude da quantidade de fios e conexões.

Em suma, o propósito desse artigo é apresentar uma solução para reduzir a complexidade do circuito e utilizar apenas 2 fios de controle para o LCD. Para isto, utilizaremos o módulo I2C para o LCD.

A seguir, apresentaremos o módulo I2C PCF8574 e sua comunicação com o Display LCD 16×2.

Comunicação I2C com o Display LCD 16×2

O display LCD 16×2 necessita de várias conexões para funcionar. Logo, isso gera diversas consequências nas etapas de projeto, como: aumento da quantidade de conexões, cabeamento e aumento no número de trilhas na placa de circuito impresso.

Desse modo, para que possamos reduzir essa quantidade de elementos, devemos utilizar o módulo I2C para LCD 16×2, conforme apresentado na Figura 1.

Figura 1 – LCD 16×2 com Módulo I2C.

Na Figura 1, temos o display da esquerda sem o módulo e o display da direita com o módulo I2C soldado. Esse módulo é composto pelo CHIP PCF8574, que tem a finalidade de controlar suas saídas através de dois pinos de comunicação I2C.

Desse modo, é possível transmitir todas as informações de controle do LCD utilizando apenas dois fios.

A seguir, desenvolvemos uma aplicação onde iremos apresentar um circuito onde faremos a conexão e programação.

Aplicação – Detector de Porta Aberta/Fechada

Primeiramente, apresentação o circuito completo na Figura 2. Para realizar o processo de detecção de porta aberta e fechada, utilizamos o sensor Reed Switch e um ímã.

Figura 2 – Circuito do Módulo I2C com LCD

Portanto, o Reed Switch será o responsável por enviar informação do estado da porta para o Arduino. Quando a porta estiver fechada, o ímã estará próximo do Reed Switch. Caso contrário, o ímã estará afastado. Em seguida, o LCD apresentará a mensagem do estado da porta para o usuário.

Agora, apresentamos a lista de componentes eletrônicos para a construção completa do projeto. Todos os ítens estão disponíveis em nossa Loja Autocore Robótica.

Lista de Componentes Eletrônicos

01 x Arduino Nano
01 x LCD 16×2
01 x Módulo I2C para Display LCD
01 x Sensor Reed Switch
01 x Resistor 10kR
01 x Protoboard 830 pontos

A seguir, iniciaremos a discussão do projeto, a fim de compreendermos o funcionamento do módulo I2C.

Desenvolvimento da Lógica de Programação para o Módulo I2C para LCD 16×2

Primeiramente, apresentamos a lógica de programação completa, para desenvolvimento do detector de estado de porta aberta/fechada. Em seguida, discutiremos a lógica do sistema.

<code>#include &lt;Wire.h&gt; //Biblioteca de Comunicacao I2C 
#include &lt;LiquidCrystal_I2C.h&gt; //Biblioteca I2C do LCD 16x2

LiquidCrystal_I2C lcd(0x27,20,4);  // Configurando o endereco do LCD 16x2 para 0x27

#define REED 8

bool sensor = 0, EstadoAnterior = 1;

void setup()
{
  
  Wire.begin(); //Inicializacao da Comunicacao I2C
  Serial.begin(9600); //Inicializacao da comunicacao Serial
  
  lcd.init();                      //Inicializacao do LCD
  lcd.backlight();

  pinMode(8, INPUT);  
}

void loop() 
{   
    sensor = digitalRead(REED);

    if(sensor == 1 &amp;&amp; EstadoAnterior == 0)
    {
      lcd.clear();
      lcd.setCursor(2,0);
      lcd.print("Estado Atual");
      lcd.setCursor(1,1);
      lcd.print("Porta Fechada");  
      EstadoAnterior = 1;
    }
  
    if(sensor == 0 &amp;&amp; EstadoAnterior == 1)
    {
      lcd.clear();
      lcd.setCursor(2,0);
      lcd.print("Estado Atual");
      lcd.setCursor(2,1);
      lcd.print("Porta Aberta");  
      EstadoAnterior = 0;
    }

  delay(2000);
  
}</code>

Em suma, o código apresentado é simples e tem o intuito de servir como exemplo básico. Inicialmente, inserimos a biblioteca I2C do módulo (Baixa a Biblioteca) e da comunicação I2C.

Em seguida, declaramos as variáveis do programa e entramos na função void setup, conforme apresentado a seguir.

<code>#include &lt;Wire.h&gt; //Biblioteca de Comunicacao I2C 
#include &lt;LiquidCrystal_I2C.h&gt; //Biblioteca I2C do LCD 16x2

LiquidCrystal_I2C lcd(0x27,20,4);  // Configurando o endereco do LCD 16x2 para 0x27

#define REED 8

bool sensor = 0, EstadoAnterior = 1;

void setup()
{
  
  Wire.begin(); //Inicializacao da Comunicacao I2C
  Serial.begin(9600); //Inicializacao da comunicacao Serial
  
  lcd.init();                      //Inicializacao do LCD
  lcd.backlight();

  pinMode(8, INPUT);  
}</code>

Portanto, realizamos a inicialização da comunicação I2C e do módulo LCD 16 x 2. Finalmente, configuramos o pino do sensor Reed Switch como entrada e, em seguida, executamos a lógica na função loop.

De acordo com a lógica, em cada iteração é realizada uma leitura do estado do sensor, conforme apresentada na linha a seguir.

<code>sensor = digitalRead(REED);</code>

Em seguida, verifica-se o estado da variável, conforme apresentado nas linhas abaixo.

<code>if(sensor == 1 &amp;&amp; EstadoAnterior == 0)
    {
      lcd.clear();
      lcd.setCursor(2,0);
      lcd.print("Estado Atual");
      lcd.setCursor(1,1);
      lcd.print("Porta Fechada");  
      EstadoAnterior = 1;
    }
  
    if(sensor == 0 &amp;&amp; EstadoAnterior == 1)
    {
      lcd.clear();
      lcd.setCursor(2,0);
      lcd.print("Estado Atual");
      lcd.setCursor(2,1);
      lcd.print("Porta Aberta");  
      EstadoAnterior = 0;
    }</code>

Caso o valor seja 0, exibirá a mensagem “Porta Aberta”, conforme apresentado na Figura 3.

Figura 3 – Mensagem de Porta Aberta.

No entanto, caso o valor seja 1, apresentará a mensagem “Porta Fechada”, conforme mostrado na Figura 4.

Figura 4 – Mensagem de Porta Fechada.

Assim, por meio dessa aplicação observamos que os comandos são iguais aos utilizados pela biblioteca LiquidCrystal.

Dessa forma, simplificamos e garantimos maior facilidade na construção do circuito.

Conclusão

Portanto, através do módulo I2C, foi possível realizar sua união nos pinos do LCD e, em seguida, realizar a comunicação. Dessa forma, realizou-se a comunicação com apenas dois fios do Arduino.

Além disso, permitiu reduzir a quantidade de fios, de modo a aumentar a disponibilidade de outros pinos de entrada/saída. Desse modo, é possível desenvolver aplicações que necessitam de uma maior disponibilizade de pinos de E/S, quando desejamos utilizar um LCD 16×2.

Portanto, consideramos o módulo I2C como um módulo ideal para solucionar o problema de excesso de pinos de controle para o LCD 16×2.

Posts relacionados

Utilizando Sensor de Cor TCS230

por Danilo Nogueira
6 anos ago

As 7 Dicas Importantes para Trabalhar com Arduino

por Danilo Nogueira
3 anos ago

Conhecendo o Protocolo I2C com Arduino

por Danilo Nogueira
5 anos ago
Sair da versão mobile