LCD Keypad Shield 16x2 para Arduino: 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âmetro | Especificação |
|---|---|
| Modelo / Tipo | LCD Keypad Shield 1602 (16x2) para Arduino |
| Controlador do Display | Compatível com Hitachi HD44780 / SPLC780D |
| Resolução de Caracteres | 16 colunas × 2 linhas (32 caracteres simultâneos) |
| Matriz de Caracteres | 5 × 8 pontos (dots) por caractere |
| Cor do Visor / Backlight | Fundo azul com caracteres brancos (retroiluminação LED) |
| Interface de Dados do LCD | Paralela de 4 bits (Pinos digitais D4, D5, D6, D7, D8 e D9) |
| Controle de Backlight | Pino digital D10 (suporta chaveamento ON/OFF ou dimerização PWM) |
| Teclado Integrado | 6 botões táteis (5 de navegação via pino analógico A0 + 1 botão RST) |
| Ajuste de Contraste | Trimpot multivoltas de precisão (10 k) integrado na PCB |
| Dimensões Mecânicas | 80 mm × 58 mm × 20 mm (compatível com padrão Arduino Uno R3) |
| Peso Aproximado | 54 g |
Características elétricas e operacionais
| Parâmetro Elétrico | Mínimo | Típico | Máximo | Unidade |
|---|---|---|---|---|
| Tensão de Alimentação () | 4,5 | 5,0 | 5,5 | V DC |
| Nível Lógico de Dados (Barramento LCD) | -0,3 | 5,0 | V | |
| Corrente de Operação (Lógica do LCD) | 1,0 | 1,5 | 3,0 | mA |
| Corrente do Backlight LED (Pino D10 em HIGH) | 15 | 25 | 40 | mA |
| Corrente Total Consumida pelo Shield | 18 | 30 | 45 | mA |
| Faixa de Tensão na Entrada Analógica A0 | 0,0 | — | 5,0 | V |
| Temperatura de Operação | -10 | 25 | +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 () 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 (
SDAeSCL). - 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 Arduino | Função no LCD Keypad Shield | Direção | Descrição Técnica |
|---|---|---|---|
| A0 | Saída do Teclado Analógico | Entrada (ADC) | Lê a tensão resultante do divisor resistivo dos 5 botões (RIGHT, UP, DOWN, LEFT, SELECT) |
| A1 a A5 | Pinos Analógicos / Digitais Livres | I/O Livre | Disponíveis nos pads/pinos de expansão do shield para conexão de sensores externos |
| D0 a D3 | Pinos Digitais Livres | I/O Livre | Livres para uso geral (D0/D1 dedicados à UART Serial RX/TX; D2/D3 com suporte a interrupções externas) |
| D4 | Pino DB4 do LCD | Saída Digital | Bit 4 do barramento de dados paralelo de 4 bits |
| D5 | Pino DB5 do LCD | Saída Digital | Bit 5 do barramento de dados paralelo de 4 bits |
| D6 | Pino DB6 do LCD | Saída Digital | Bit 6 do barramento de dados paralelo de 4 bits |
| D7 | Pino DB7 do LCD | Saída Digital | Bit 7 do barramento de dados paralelo de 4 bits |
| D8 | Pino RS (Register Select) | Saída Digital | Seleciona entre envio de comando de instrução (LOW) ou envio de caractere para a RAM (HIGH) |
| D9 | Pino E (Enable) | Saída Digital | Pulso de habilitação (clock de validação de dados no controlador HD44780) |
| D10 | Controle de Backlight | Saída Digital / PWM | Aciona o transistor da luz de fundo do display (HIGH = aceso, LOW = apagado) |
| D11 a D13 | Pinos Digitais Livres (SPI) | I/O Livre | Livres para uso geral ou comunicação SPI (MOSI, MISO, SCK) |
| 5V | Alimentação Lógica Principal | Alimentação | Recebe +5V regulados da placa Arduino para alimentar o controlador HD44780, LED e divisor resistivo |
| GND | Referência Comum (0V) | Alimentação | Terra comum do circuito e aterramento fixo do pino R/W do display |
| RESET | Botão RST | Controle | Conectado 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

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 Sugerida | Tipo de Sinal | Observação Técnica |
|---|---|---|---|---|
| Pino 5V | Pino 5V (Header de Alimentação) | Vermelho | Alimentação DC (+5V) | Alimenta o controlador HD44780, LED de fundo e rede resistiva |
| Pino GND | Pino GND (Header de Alimentação) | Preto | Terra Comum (0V DC) | Referência elétrica de todo o módulo |
| Pino Analógico A0 | Pino A0 (Saída do Teclado) | Verde | Analógico (0V a 5V) | Leitura dos 5 botões via analogRead(A0) |
| Pino Digital D8 | Pino D8 (RS do LCD) | Azul | Digital (Saída) | Seleção de registrador (Comando / Dado) |
| Pino Digital D9 | Pino D9 (Enable do LCD) | Amarelo | Digital (Saída) | Pulso de validação de leitura do barramento |
| Pino Digital D4 | Pino D4 (DB4 do LCD) | Laranja | Digital (Saída) | Via de dados 4 bits (Bit menos significativo do nibble) |
| Pino Digital D5 | Pino D5 (DB5 do LCD) | Branco | Digital (Saída) | Via de dados 4 bits |
| Pino Digital D6 | Pino D6 (DB6 do LCD) | Cinza | Digital (Saída) | Via de dados 4 bits |
| Pino Digital D7 | Pino D7 (DB7 do LCD) | Roxo | Digital (Saída) | Via de dados 4 bits (Bit mais significativo do nibble) |
| Pino Digital D10 | Pino D10 (Controle Backlight) | Marrom | Digital / PWM | Controle 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
GNDquando polarizado. Para evitar sobrecarga de corrente no pino D10 do microcontrolador ATmega328P ao acender o display, configure o pinoD10como 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
- 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.
- Energização: Conecte o cabo USB ao computador. A retroiluminação azul do display deverá acender imediatamente.
- 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.
- Inicialização no código: Instancie o objeto da biblioteca
LiquidCrystalsempre 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 ( ligado ao , seguido por resistores em série de , , e ). Quando nenhum botão está pressionado, o resistor de pull-up de mantém o pino A0 em (leitura ADC igual a ).
Ao pressionar qualquer botão, um ponto específico da escada resistiva é aterrado (GND), gerando uma tensão analógica dada pela equação clássica do divisor de tensão:
O conversor analógico-digital (ADC) de 10 bits do Arduino converte essa tensão em um valor inteiro digital entre e , conforme a relação:
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 Pressionado | Resistência Inferior Equivalente () | Tensão Típica em A0 () | Valor Típico no ADC (0–1023) | Faixa Segura de Detecção no Código |
|---|---|---|---|---|
| RIGHT | (Curto direto ao GND) | < 60 | ||
| UP | 60 a 200 | |||
| DOWN | () | 200 a 400 | ||
| LEFT | () | 400 a 600 | ||
| SELECT | () | 600 a 850 | ||
| Nenhum (Solto) | (Circuito aberto) | > 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 estruturaif / 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 (
D4aD7), controle (D8,D9), backlight (D10) e preservação das portasA1aA5para expansão. - Como fazer a ligação: encaixe direto padrão Uno/Mega e precauções fundamentais para proteção elétrica do pino
D10e 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.