LCD Keypad Shield 16x2 para Arduino: Manual Técnico Completo

LCD Keypad Shield 16x2 — manual técnico completo

Introdução

Neste manual, será apresentado como instalar, configurar e utilizar o LCD Keypad Shield 16x2 para Arduino. Se desejar adquirir este produto, clique aqui.

O LCD Keypad Shield 16x2 é uma placa de expansão (shield) desenvolvida no formato mecânico padrão das placas Arduino Uno R3, Arduino Mega 2560 e Arduino Leonardo. Ele integra em um único circuito impresso um visor alfanumérico de cristal líquido de 16 colunas por 2 linhas (compatível com o controlador HD44780) em modo paralelo de 4 bits e um teclado de navegação com 6 botões táteis (push-buttons). Para economizar portas digitais do microcontrolador, os 5 botões de comando (SELECT, LEFT, UP, DOWN e RIGHT) são multiplexados através de uma rede divisora de tensão resistiva conectada exclusivamente à entrada analógica A0.

Este guia técnico abrange as especificações elétricas de operação, o mapeamento completo de pinos ocupados e livres, o equacionamento do divisor resistivo para calibração do conversor analógico-digital (ADC), os cuidados com o controle de backlight no pino D10 e exemplos práticos em C++ utilizando a biblioteca nativa LiquidCrystal.h.


Especificações técnicas

Principais especificações

ParâmetroEspecificação
Modelo / TipoLCD Keypad Shield 1602 (16x2) para Arduino
Controlador do DisplayCompatível com Hitachi HD44780 / SPLC780D
Resolução de Caracteres16 colunas × 2 linhas (32 caracteres simultâneos)
Matriz de Caracteres5 × 8 pontos (dots) por caractere
Cor do Visor / BacklightFundo azul com caracteres brancos (retroiluminação LED)
Interface de Dados do LCDParalela de 4 bits (Pinos digitais D4, D5, D6, D7, D8 e D9)
Controle de BacklightPino digital D10 (suporta chaveamento ON/OFF ou dimerização PWM)
Teclado Integrado6 botões táteis (5 de navegação via pino analógico A0 + 1 botão RST)
Ajuste de ContrasteTrimpot multivoltas de precisão (10 kΩ\Omega) integrado na PCB
Dimensões Mecânicas80 mm × 58 mm × 20 mm (compatível com padrão Arduino Uno R3)
Peso Aproximado54 g

Características elétricas e operacionais

Parâmetro ElétricoMínimoTípicoMáximoUnidade
Tensão de Alimentação (VCCV_{CC})4,55,05,5V DC
Nível Lógico de Dados (Barramento LCD)-0,35,0VCC+0,3V_{CC} + 0,3V
Corrente de Operação (Lógica do LCD)1,01,53,0mA
Corrente do Backlight LED (Pino D10 em HIGH)152540mA
Corrente Total Consumida pelo Shield183045mA
Faixa de Tensão na Entrada Analógica A00,0—5,0V
Temperatura de Operação-1025+60°C

Descrição do produto

O que é o LCD Keypad Shield 16x2?

O LCD Keypad Shield 16x2 é uma interface homem-máquina (IHM) compacta projetada para acoplamento direto (plug-and-play) sobre placas da família Arduino. O módulo elimina a necessidade de protoboards, cabos jumper e soldagem de potenciômetros externos que normalmente seriam exigidos para operar um display LCD 1602 tradicional de 16 pinos.

Sua arquitetura opera o controlador HD44780 no modo de transferência de 4 bits (enviando cada byte em dois nibbles sequenciais pelos pinos D4 a D7), mantendo o pino R/W (Read/Write) permanentemente aterrado em nível lógico baixo (GND, modo escrita). Adicionalmente, a placa dispõe de um trimpot multivoltas azul tipo 3296W no canto superior esquerdo para ajuste fino da tensão de contraste (V0V_0) e barramentos extras para acesso às portas analógicas livres (A1 a A5) e alimentação (5V e GND).

Para que serve?

  • Criação de menus interativos locais: permite navegar entre parâmetros, telas de configuração e ajustes de setpoint usando as teclas direcionais sem depender de computador ou monitor serial.
  • Monitoramento de sensores em tempo real: exibe leituras de temperatura, umidade, pressão, tensão ou contagem de peças diretamente no painel do equipamento.
  • Diagnóstico e instrumentação de bancada: atua como terminal de depuração para cronômetros, geradores de sinais, controladores PID, fontes ajustáveis e dosadores automatizados.

Por que devo usar?

  • Economia drástica de pinos de I/O: consolida a leitura de 5 botões independentes em uma única porta analógica (A0), preservando os pinos digitais e analógicos restantes (D0–D3, D11–D13 e A1–A5) para sensores e atuadores.
  • Montagem mecânica robusta sem cabos soltos: o encaixe direto nos conectores fêmea do Arduino evita mau contato, ruído eletromagnético em fios longos de barramento paralelo e erros de ligação.
  • Ajuste de contraste de alta precisão: o potenciômetro multivoltas integrado permite calibrar com exatidão o ângulo de visão dos caracteres sobre o fundo azul iluminado.

Quando devo usar?

Utilize este shield em projetos embarcados baseados em Arduino Uno, Mega ou Leonardo que demandem exibição textual direta (até 32 caracteres por tela) e entrada de comandos por botões físicos em gabinetes ou bancadas.

Quando não usar:

  • Se o seu projeto já ocupa os pinos digitais D4 a D10 (como em conjunto com alguns shields Ethernet/Motor que conflitam nessas portas) ou se o microcontrolador possuir pouquíssimos pinos disponíveis (como ESP8266 ou ATtiny85), prefira o Display LCD 16x2 com Módulo I2C integrado, que utiliza apenas 2 pinos de comunicação (SDA e SCL).
  • Caso necessite exibir gráficos vetoriais, ícones complexos ou mais linhas de informações simultâneas, utilize um Display OLED 0.96” I2C (SSD1306) ou uma Tela TFT Touch Nextion.

Pinout e diagrama de entradas/saídas

A tabela abaixo detalha todos os pinos conectados entre o LCD Keypad Shield e a placa Arduino base, bem como os barramentos que permanecem livres para expansão:

Pino no ArduinoFunção no LCD Keypad ShieldDireçãoDescrição Técnica
A0Saída do Teclado AnalógicoEntrada (ADC)Lê a tensão resultante do divisor resistivo dos 5 botões (RIGHT, UP, DOWN, LEFT, SELECT)
A1 a A5Pinos Analógicos / Digitais LivresI/O LivreDisponíveis nos pads/pinos de expansão do shield para conexão de sensores externos
D0 a D3Pinos Digitais LivresI/O LivreLivres para uso geral (D0/D1 dedicados à UART Serial RX/TX; D2/D3 com suporte a interrupções externas)
D4Pino DB4 do LCDSaída DigitalBit 4 do barramento de dados paralelo de 4 bits
D5Pino DB5 do LCDSaída DigitalBit 5 do barramento de dados paralelo de 4 bits
D6Pino DB6 do LCDSaída DigitalBit 6 do barramento de dados paralelo de 4 bits
D7Pino DB7 do LCDSaída DigitalBit 7 do barramento de dados paralelo de 4 bits
D8Pino RS (Register Select)Saída DigitalSeleciona entre envio de comando de instrução (LOW) ou envio de caractere para a RAM (HIGH)
D9Pino E (Enable)Saída DigitalPulso de habilitação (clock de validação de dados no controlador HD44780)
D10Controle de BacklightSaída Digital / PWMAciona o transistor da luz de fundo do display (HIGH = aceso, LOW = apagado)
D11 a D13Pinos Digitais Livres (SPI)I/O LivreLivres para uso geral ou comunicação SPI (MOSI, MISO, SCK)
5VAlimentação Lógica PrincipalAlimentaçãoRecebe +5V regulados da placa Arduino para alimentar o controlador HD44780, LED e divisor resistivo
GNDReferência Comum (0V)AlimentaçãoTerra comum do circuito e aterramento fixo do pino R/W do display
RESETBotão RSTControleConectado diretamente ao pino de Reset do microcontrolador para reinicialização imediata

Como fazer a ligação

Requisitos de instalação e alimentação

Por possuir formato de shield, a instalação física dispensa cabos para o display e botões: basta alinhar os barramentos de pinos machos inferiores do LCD Keypad Shield com os conectores fêmea do Arduino Uno R3 ou Arduino Mega 2560 e pressionar verticalmente até o encaixe completo.

A alimentação de 5V DC é fornecida automaticamente pelo barramento do Arduino, podendo vir da porta USB (5V / 500 mA) ou de uma fonte externa DC de 7V a 12V conectada ao plugue Jack P4 da placa principal.

Diagrama de ligação elétrica

Diagrama de ligação elétrica do LCD Keypad Shield 16x2 para Arduino

O infográfico acima ilustra o roteamento interno das trilhas do LCD Keypad Shield sobre o Arduino. O barramento de dados opera nos pinos D4 a D7, os sinais de controle em D8 (RS), D9 (E) e D10 (Backlight), enquanto o teclado utiliza exclusivamente o conversor analógico-digital no pino A0.

Tabela de conexões dos terminais

Caso você deseje conectar o shield fora do encaixe padrão (via jumpers em bancada de testes ou em outra placa compatível com 5V), siga o mapeamento exato ponto a ponto abaixo:

Terminal de Origem (Placa Arduino)Terminal de Destino (LCD Keypad Shield)Cor SugeridaTipo de SinalObservação Técnica
Pino 5VPino 5V (Header de Alimentação)VermelhoAlimentação DC (+5V)Alimenta o controlador HD44780, LED de fundo e rede resistiva
Pino GNDPino GND (Header de Alimentação)PretoTerra Comum (0V DC)Referência elétrica de todo o módulo
Pino Analógico A0Pino A0 (Saída do Teclado)VerdeAnalógico (0V a 5V)Leitura dos 5 botões via analogRead(A0)
Pino Digital D8Pino D8 (RS do LCD)AzulDigital (Saída)Seleção de registrador (Comando / Dado)
Pino Digital D9Pino D9 (Enable do LCD)AmareloDigital (Saída)Pulso de validação de leitura do barramento
Pino Digital D4Pino D4 (DB4 do LCD)LaranjaDigital (Saída)Via de dados 4 bits (Bit menos significativo do nibble)
Pino Digital D5Pino D5 (DB5 do LCD)BrancoDigital (Saída)Via de dados 4 bits
Pino Digital D6Pino D6 (DB6 do LCD)CinzaDigital (Saída)Via de dados 4 bits
Pino Digital D7Pino D7 (DB7 do LCD)RoxoDigital (Saída)Via de dados 4 bits (Bit mais significativo do nibble)
Pino Digital D10Pino D10 (Controle Backlight)MarromDigital / PWMControle de iluminação traseira

Cuidados e observações de segurança

⚠️ Atenção: Verifique a folga mecânica entre a parte inferior do potenciômetro de contraste (ou dos terminais metálicos do display) e a carcaça metálica do conector USB Tipo B do Arduino Uno. Caso fiquem muito próximos, cole uma fita isolante ou fita Kapton sobre a blindagem metálica do conector USB do Arduino para evitar curtos-circuitos acidentais ao pressionar os botões.

⛔ Perigo: Em certos lotes de fabricação do LCD Keypad Shield, o transistor de acionamento do backlight ligado ao pino D10 tem sua base conectada sem resistor limitador em série para o GND quando polarizado. Para evitar sobrecarga de corrente no pino D10 do microcontrolador ATmega328P ao acender o display, configure o pino D10 como entrada (pinMode(10, INPUT)) para ligar o backlight pelo resistor de pull-up da placa, e coloque-o como saída em nível baixo (pinMode(10, OUTPUT); digitalWrite(10, LOW);) apenas quando desejar apagar a tela.


Como usar

Guia de operação passo a passo

  1. Acoplamento físico: Com o Arduino totalmente desligado, alinhe todos os pinos laterais do LCD Keypad Shield sobre os barramentos do Arduino Uno/Mega, certificando-se de que nenhum pino ficou deslocado para fora do conector.
  2. Energização: Conecte o cabo USB ao computador. A retroiluminação azul do display deverá acender imediatamente.
  3. Calibração inicial de contraste (Trimpot 3296W): Caso a tela acenda mas não mostre nenhum caractere mesmo após carregar o código, utilize uma chave de fenda pequena para girar o parafuso do trimpot azul no canto superior esquerdo. Gire no sentido anti-horário ou horário (até 15 a 20 voltas) até que os retângulos da matriz 5×8 ou os textos fiquem nítidos.
  4. Inicialização no código: Instancie o objeto da biblioteca LiquidCrystal sempre com a sequência exata de pinos do hardware: LiquidCrystal lcd(8, 9, 4, 5, 6, 7);.

Modos de operação e ajustes

Princípio da rede divisora resistiva no pino A0

Diferente de teclados matriciais comuns que exigem um pino digital para cada tecla, o LCD Keypad Shield utiliza um divisor de tensão em escada com resistores de precisão (R1=2 kΩR_1 = 2\,\text{k}\Omega ligado ao +5 V+5\,\text{V}, seguido por resistores em série de 330 Ω330\,\Omega, 620 Ω620\,\Omega, 1 kΩ1\,\text{k}\Omega e 3,3 kΩ3,3\,\text{k}\Omega). Quando nenhum botão está pressionado, o resistor de pull-up de 2 kΩ2\,\text{k}\Omega mantém o pino A0 em +5 V+5\,\text{V} (leitura ADC igual a 10231023).

Ao pressionar qualquer botão, um ponto específico da escada resistiva é aterrado (GND), gerando uma tensão analógica VA0V_{A0} dada pela equação clássica do divisor de tensão:

VA0=VCC⋅(RinferiorR1+Rinferior)V_{A0} = V_{CC} \cdot \left( \frac{R_{\text{inferior}}}{R_1 + R_{\text{inferior}}} \right)

O conversor analógico-digital (ADC) de 10 bits do Arduino converte essa tensão em um valor inteiro digital ADCleitura\text{ADC}_{\text{leitura}} entre 00 e 10231023, conforme a relação:

ADCleitura=⌊1023⋅(VA0VCC)⌋\text{ADC}_{\text{leitura}} = \left\lfloor 1023 \cdot \left( \frac{V_{A0}}{V_{CC}} \right) \right\rfloor

A tabela abaixo apresenta os valores teóricos e as faixas de comparação recomendadas no software (incluindo margem de tolerância para variações térmicas e resistivas entre revisões de hardware v1.0 e v1.1):

Botão PressionadoResistência Inferior Equivalente (RinferiorR_{\text{inferior}})Tensão Típica em A0 (VA0V_{A0})Valor Típico no ADC (0–1023)Faixa Segura de Detecção no Código
RIGHT0 Ω0\,\Omega (Curto direto ao GND)0,00 V0,00\,\text{V}00< 60
UP330 Ω330\,\Omega0,71 V0,71\,\text{V}99 a 14599 \text{ a } 14560 a 200
DOWN950 Ω950\,\Omega (330+620 Ω330 + 620\,\Omega)1,61 V1,61\,\text{V}255 a 330255 \text{ a } 330200 a 400
LEFT1950 Ω1950\,\Omega (950 Ω+1 kΩ950\,\Omega + 1\,\text{k}\Omega)2,47 V2,47\,\text{V}409 a 505409 \text{ a } 505400 a 600
SELECT5250 Ω5250\,\Omega (1950 Ω+3,3 kΩ1950\,\Omega + 3,3\,\text{k}\Omega)3,62 V3,62\,\text{V}640 a 741640 \text{ a } 741600 a 850
Nenhum (Solto)∞\infty (Circuito aberto)5,00 V5,00\,\text{V}10231023> 850

💡 Dica: Como a leitura dos botões é analógica, sempre compare os valores em ordem crescente (< 60, < 200, < 400, < 600, < 850) dentro de uma estrutura if / else if. Isso garante que cada faixa seja avaliada sem sobreposição.

Exemplos práticos de uso

O código completo abaixo implementa a inicialização segura do display e do backlight, a leitura contínua do teclado analógico no pino A0 com filtro de debounce e um contador interativo controlado pelas teclas (UP incrementa, DOWN decrementa, LEFT/RIGHT alteram o passo de ajuste e SELECT zera o contador):

/**
 * Manual Técnico: LCD Keypad Shield 16x2 para Arduino
 * Descrição: Leitura das 5 teclas analógicas no pino A0, controle seguro
 *            de backlight no pino D10 e interface interativa no LCD 16x2.
 * Biblioteca: LiquidCrystal (Nativa da Arduino IDE)
 */

#include <LiquidCrystal.h>

// Mapeamento fixo de hardware do LCD Keypad Shield:
// LiquidCrystal(RS, Enable, D4, D5, D6, D7)
const int PIN_RS = 8;
const int PIN_EN = 9;
const int PIN_D4 = 4;
const int PIN_D5 = 5;
const int PIN_D6 = 6;
const int PIN_D7 = 7;
const int PIN_BACKLIGHT = 10;
const int PIN_KEYPAD = A0;

LiquidCrystal lcd(PIN_RS, PIN_EN, PIN_D4, PIN_D5, PIN_D6, PIN_D7);

// Enumeração para identificação das teclas
enum Botao {
  BTN_NENHUM,
  BTN_RIGHT,
  BTN_UP,
  BTN_DOWN,
  BTN_LEFT,
  BTN_SELECT
};

long contador = 0;
int passoAjuste = 1;
bool luzFundoAtiva = true;
unsigned long ultimaLeituraMs = 0;
const unsigned long INTERVALO_DEBOUNCE_MS = 180;

// Função segura para ligar/desligar o Backlight no pino D10
void definirBacklight(bool ligar) {
  if (ligar) {
    // Define como INPUT para acionar o backlight via pull-up sem sobrecarregar D10
    pinMode(PIN_BACKLIGHT, INPUT);
  } else {
    pinMode(PIN_BACKLIGHT, OUTPUT);
    digitalWrite(PIN_BACKLIGHT, LOW);
  }
}

// Função que lê o conversor ADC em A0 e retorna o botão correspondente
Botao lerTecladoAnalogico(int &valorAdcBruto) {
  valorAdcBruto = analogRead(PIN_KEYPAD);

  if (valorAdcBruto < 60)  return BTN_RIGHT;
  if (valorAdcBruto < 200) return BTN_UP;
  if (valorAdcBruto < 400) return BTN_DOWN;
  if (valorAdcBruto < 600) return BTN_LEFT;
  if (valorAdcBruto < 850) return BTN_SELECT;

  return BTN_NENHUM;
}

// Converte a enumeração do botão para texto legível no LCD
const char* nomeBotao(Botao b) {
  switch (b) {
    case BTN_RIGHT:  return "RIGHT ";
    case BTN_UP:     return "UP    ";
    case BTN_DOWN:   return "DOWN  ";
    case BTN_LEFT:   return "LEFT  ";
    case BTN_SELECT: return "SELECT";
    default:         return "LIVRE ";
  }
}

void atualizarDisplay(Botao botaoAtual, int adcBruto) {
  // Linha 0: Nome da tecla e leitura bruta do ADC
  lcd.setCursor(0, 0);
  lcd.print("Tecla:");
  lcd.print(nomeBotao(botaoAtual));
  lcd.print(" ");
  if (adcBruto < 1000) lcd.print(" ");
  if (adcBruto < 100)  lcd.print(" ");
  if (adcBruto < 10)   lcd.print(" ");
  lcd.print(adcBruto);

  // Linha 1: Valor do contador e passo atual
  lcd.setCursor(0, 1);
  lcd.print("Val:");
  lcd.print(contador);
  lcd.print(" (x");
  lcd.print(passoAjuste);
  lcd.print(")     ");
}

void setup() {
  Serial.begin(9600);

  // Inicializa o backlight ligado de forma segura
  definirBacklight(true);

  // Inicializa o display 16 colunas x 2 linhas
  lcd.begin(16, 2);
  lcd.clear();

  lcd.setCursor(0, 0);
  lcd.print("RoboBuilders IHM");
  lcd.setCursor(0, 1);
  lcd.print("LCD Keypad 16x2");
  delay(1500);
  lcd.clear();
}

void loop() {
  int leituraAdc = 1023;
  Botao botao = lerTecladoAnalogico(leituraAdc);

  // Processa comandos das teclas com debounce temporal
  if (botao != BTN_NENHUM && (millis() - ultimaLeituraMs > INTERVALO_DEBOUNCE_MS)) {
    ultimaLeituraMs = millis();

    switch (botao) {
      case BTN_UP:
        contador += passoAjuste;
        break;
      case BTN_DOWN:
        contador -= passoAjuste;
        break;
      case BTN_RIGHT:
        passoAjuste = 10;
        break;
      case BTN_LEFT:
        passoAjuste = 1;
        break;
      case BTN_SELECT:
        contador = 0;
        break;
      default:
        break;
    }

    Serial.print("Tecla: ");
    Serial.print(nomeBotao(botao));
    Serial.print(" | ADC(A0): ");
    Serial.print(leituraAdc);
    Serial.print(" | Contador: ");
    Serial.println(contador);
  }

  atualizarDisplay(botao, leituraAdc);
  delay(40);
}

Projetos

O LCD Keypad Shield 16x2 é amplamente empregado na construção de interfaces locais para controladores térmicos, temporizadores cíclicos de irrigação, menus de calibração de sensores industriais e sistemas de automação de bancada. Utilizando os pinos analógicos livres (A1 a A5) expostos na própria placa, você pode acoplar sensores de temperatura (como LM35, NTC ou DS18B20) e módulos relé nos pinos digitais livres (D2, D3, D11, D12) para criar um termostato programável completo com ajuste de histerese pelos botões UP e DOWN.


Conclusão

Neste manual técnico, você conferiu a arquitetura, o esquemático de ligação e a programação prática do LCD Keypad Shield 16x2 para Arduino:

  • Especificações técnicas: operação em 5V DC com controlador compatível HD44780 em modo paralelo de 4 bits e consumo típico de 30 mA com retroiluminação ativa.
  • Descrição e Pinout: mapeamento completo dos pinos de dados (D4 a D7), controle (D8, D9), backlight (D10) e preservação das portas A1 a A5 para expansão.
  • Como fazer a ligação: encaixe direto padrão Uno/Mega e precauções fundamentais para proteção elétrica do pino D10 e isolamento do conector USB.
  • Como usar: cálculo do divisor de tensão resistivo no pino A0, faixas de calibração do ADC para as 5 teclas e código C++ completo com filtro de debounce.

Com essas referências de hardware e firmware, sua interface homem-máquina está pronta para integrar menus de controle, diagnóstico e telemetria nos seus projetos com Arduino.

Solução de problemas

Olá! Sou o assistente técnico da RoboBuilders. Descreva seu problema com o LCD Keypad Shield 16x2 para Arduino: Manual Técnico Completo e eu ajudarei a encontrar a solução.

O assistente usa IA e pode errar. Confirme informações críticas no datasheet oficial do fabricante.