Componentes Eletronicos

Arduino – Keypad 4×4 e Display Digital

Eletrogate 14 de abril de 20197 min

Introdução

Keypad 4 x 4 – Teoria de funcionamento

Para alguns tipos de aplicações dos Microcontroladores é necessária uma interface de entrada de dados, que permita a comunicação entre o homem e a máquina. E a interface mais usada é o teclado. Através de um teclado, o usuário da “máquina” pode selecionar e alterar funções ou operações.

Os teclados de membrana são muito usados ainda, pois eles tem baixo custo, boa durabilidade e boa confiabilidade nas operações. Todos os celulares usam os teclados de membrana. Os smartphones mais antigos usavam também, mas atualmente os teclados são capacitivos e montados sobre a tela. Os teclados de laptops e desktops usam o mesmo princípio de teclado matricial, mas no lugar das membranas são usadas teclas.

Esse teclado de membrana é montado como uma matriz de teclas. Por isso também é chamado de matricial. Mas o nome mais usado em inglês é Keypad, devido ao pequena tamanho. Veja a identificação dos pinos do conector (L = linhas e C = colunas) . Essa foto foi editada para diminuir o tamanho do cabo.

Keypad 4 x 4

Editei esse diagrama do circuito do teclado para identificação das ligações entre as teclas. A montagem forma uma matriz de linhas (L) x colunas (C). Quando a tecla “1” é pressionada, o circuito é fechado entre a linha L1 e a coluna C1. Para a tecla “2” , entre a linha L1 e coluna C2, etc.

Circuito do Keypad 4 x 4

Pesquisei sobre a origem desse tipo de teclado de membrana e descobri que ele foi inventado em 1969, por um funcionário da empresa americana Singer! Se interessar, poderá obter mais informações no Link abaixo:

patents.google.com/patent/US3591749

Patente do Teclado de membrana

Para demonstrar melhor como um teclado matricial de membrana funciona, resolvi analisar os níveis lógicos de cada um dos fios do cabo do teclado. Usando um analisador lógico, capturei os sinais de cada linha e cada coluna. A montagem que eu fiz, foi usando o Arduino e a biblioteca Keypad, que estão nos tópicos seguintes. Essa tela abaixo refere-se à captura do acionamento das 16 teclas, na sequência do teclado: 1,2,3,A,4,5,6,B… Interessante observar que no Arduino, as colunas foram configuradas como saídas e as linhas foram configuradas como entradas.

O microcontrolador fica fazendo a varredura(scan) das teclas. A cada período ele altera em sequência, o estado (para nível 0) de uma das quatro saídas – C1,C2,C3 e C4. Se algumas da teclas for acionada, o estado de uma das saídas será capturado. Durante a varredura, o microcontrolador faz a leitura das portas de entrada (L1,L2,L3 e L4). Se alguma das linhas estiver com o nível 0 é porque uma tecla foi acionada! Assim, baseando-se na matriz definida no Sketch, o programa identificará qual tecla foi acionada.

Captura do acionamento das 16 teclas

Veja a sequência abaixo de varredura das teclas. Nessa sequência, a coluna C1 é alterada para o nível 0 , depois as colunas C2,C3 e C4. Essa varredura é realizada a cada 11 milisegundos (90 Hz) aproximadamente. Nessa amostragem, a tecla “4” foi acionada. Veja que a entrada L2 conseguiu capturar o nível 0 da coluna C1. Tecla 4 = L2 x C1 . A largura de cada pulso 0 dessa imagem é de aproximadamente 40 microsegundos.

Amostragem da tecla 4 acionada


Montagem

Fiz a montagem com um display de somente um dígito para simplificar o exemplo. Se precisar usar mais dígitos, recomendo o outro tutorial do Blog Eletrogate :

https://blog.eletrogate.com/guia-completo-dos-displays-de-7-segmentos-arduino/

Esse é o display de 7 segmentos – anodo comum (F5161BH) utilizado na montagem . Os pinos com bolinhas pretas são os pinos comuns – anodos. Use somente um, já que os dois são interligados internamente. Cada segmento é identificado com uma letra – A até G. E o ponto decimal, não usado, é o DP. Obs: se for usar um display com catodo comum, deverá fazer modificações no circuito e no sketch.

Esse é o diagrama da montagem. O keypad foi conectado nos pinos D4 até D11. E o display de 7 segmentos foi conectado nas portas analógicas A0 a A5 e nos pinos D12 e D13. Como nessa montagem um grande número de portas é necessário, tive que usar as portas analógicas também. Mas não sei se já sabia, mas essas portas que normalmente são utilizadas para medições analógicas, podem ser usadas como portas digitais de entrada e saída. Foi isso que eu fiz, usei essas portas como saída, controlando o display. Como o display é do tipo anodo comum, esse pino comum foi conectado ao 5V do Arduino, acrescentando um resistor de 330 ohms em série para limitar a corrente nos segmentos.

Materiais necessários para o projeto com Keypad 4×4 e Display Digital

cta_cart

Sketch Arduino com Keypad e Display digital

O programa que eu desenvolvi tem o objetivo de identificar a tecla pressionada e mostrá-la no display (veja a imagem animada no inicio do tutorial). Como no display não existe os caracteres * e # , identifiquei-os como F e E respectivamente.

A biblioteca usada para controlar o Keypad tem o mesmo nome. Para instalar a nova Biblioteca na Arduino IDE , clique em :

Sketch > Incluir Biblioteca > Gerenciar Bibliotecas 

Após abrir a janela do Gerenciador de Biblioteca, refine a busca digitando  keypad . Na biblioteca Keypad (de Mark Stanley) , clique em More Info e depois em Instalar. Após alguns segundos, ela será automaticamente instalada. Lembre-se que o seu computador precisa estar conectado na internet, para poder baixar a biblioteca. Após a instalação da Biblioteca, é necessário que feche e abra novamente o programa Arduino IDE.

A biblioteca SevenSegment usada para controlar o display deverá ser instalada de um modo diferente. Faça o download do arquivo SevenSegment-master.zip.

Clique em : Sketch > Incluir Biblioteca > Adicionar biblioteca.zip

Abra o arquivo, para instalar automaticamente a biblioteca. Após a instalação da Biblioteca, é necessário que feche e abra novamente o programa Arduino IDE.

Para referência, esse é o link da biblioteca SevenSegment. Ela serve para controlar somente um display :

github.com/dgduncan/SevenSegment

Esse é o Sketch do programa KeypadDisplayDigital :

// Arduino - Keypad e Display digital
// Gustavo Murta - 20/abr/2019
// https://blog.eletrogate.com/arduino-keypad-4x4-e-display-digital
// baseado em https://playground.arduino.cc/Code/Keypad/
// baseado em https://github.com/dgduncan/SevenSegment

#include <Keypad.h>                                                // biblioteca Keypad
#include <SegmentDisplay.h>                                        // biblioteca SegmentDisplay

SegmentDisplay segmentDisplay(A0, A1, A2, A3, A4, A5, 12, 13);     // definição das portas para segmentos do display
                                                                   // A0=E A1=D A2=C A3=D A4=B A5=A D12=F D13=G

const byte ROWS = 4;                                               // Keypad 4 linhas
const byte COLS = 4;                                               // Keypad 4 colunas

char hexaKeys[ROWS][COLS] =                                        // definição dos caracteres do Keypad
{
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'F', '0', 'E', 'D'}                                             // alterações *=F e #=E
};

byte rowPins[ROWS] = {11, 10, 9, 8};                               // portas D11 a D8 conectadas nas linhas do Keypad
byte colPins[COLS] = {7, 6, 5, 4};                                 // portas D7 a D4  conectadas nas colunas do Keypad

Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);  // inicializa o Keypad

void setup()
{
  Serial.begin(9600);                    // console serial 9600 Bps 
  pinMode(A0, OUTPUT);                   // definições das portas analógicas A0 a A5 como portas digitais de saidas 
  pinMode(A1, OUTPUT);
  pinMode(A2, OUTPUT);
  pinMode(A3, OUTPUT);
  pinMode(A4, OUTPUT);
  pinMode(A5, OUTPUT);
}

void loop()
{
  char customKey = customKeypad.getKey();                  // leitura da tecla pressionada no Keypad  
  int number = customKey - 48;                             // converte o caracter em um número inteiro
  
  if ((number > 16) && (number < 23)) number = number - 7; // se numero for entre 17 e 22 subtraia 7 (numeros hexadecimais) 
  
  if (customKey)                                           // se tecla for pressionada 
  {
    segmentDisplay.displayHex(number, false);              // mostra o caracter no display sem o ponto decimal
    Serial.println(number);                                // imprime o numero na console serial (para teste) 
  }
}

Sobre o Autor


José Gustavo Abreu Murta

Consultor e Projetista de Sistemas Embarcados. Técnico em eletrônica, formado em Curso superior de TPD, pós-graduado em Marketing. Trabalhou por muitos anos na IBM na área de manutenção de computadores de grande porte. Aposentou-se, podendo curtir o que mais gosta : estudar e ensinar Tecnologia. Hobista em eletrônica desde 1976. Gosta muito de Fotografia e Observação de aves.


Eletrogate

14 de abril de 2019

A Eletrogate é uma loja virtual de componentes eletrônicos do Brasil e possui diversos produtos relacionados à Arduino, Automação, Robótica e Eletrônica em geral.

Conheça a Metodologia Eletrogate e Lecione um Curso de Robótica nas Escolas da sua Região!

Eletrogate Robô

Cadastre-se e fique por
dentro de novidades!