Usando o Teclado Matricial com Arduino




Introdução

O Teclado Matricial 4x4 foi desenvolvido para facilitar a entrada de dados em projetos microcontrolados. Este teclado possui 16 teclas, onde 10 delas são números, 4 são letras e 2 são caracteres especiais. Com ele podemos criar uma infinidade de projetos, tais como criar controles de acesso, teclados musicais, entre outros.

Nesse tutorial iremos montar um simples projeto, assim aprendendo o funcionamento básico do teclado, de imprimir as teclas pressionadas no monitor serial. Posteriormente iremos acionar cargas, mediante a uma senha programada.

Lista de Materiais

Conceitos Teóricos

O teclado possui 16 teclas, que estão dispostas em 4 linhas por 4 colunas, e ele possui 8 pinos para ligação. Embaixo de cada tecla há um interruptor de membrana. Cada interruptor em uma linha é conectado aos outros interruptores da mesma linha por um traço condutor sob o bloco, e da mesma forma são conectadas às colunas, onde todos os botões da coluna também estão conectados. Ou seja, todos os botões do teclado estão conectados a uma linha e a uma coluna, por isso que é chamado de teclado matricial. A imagem abaixo ilustra o circuito do teclado.

keypad-inside
Esquema de Ligação dos Botões e Terminais de Conexão
Fonte: Circuit Basics

Para identificar qual botão foi pressionado, a placa Arduino executa quatro passos. O primeiro é configurar todas as colunas da matriz como entradas em nível lógico alto (resistor de pull-up interno ativado), e todas as linhas como saídas em nível lógico baixo. Deste modo, caso o botão "5" seja pressionado, a coluna "2" passará para o nível lógico baixo, completando o segundo passo. Já no terceiro passo, o Arduino identifica a linha que foi pressionada invertendo o nível lógico anterior, ou seja, configurando as colunas para nível lógico baixo, e mantendo as linhas em nível lógico alto. Desta forma, a linha "2", em nosso exemplo, passará para o nível lógico baixo, e o microcontrolador identificará que o botão pressionado está na linha "2" e coluna "2", completando, portanto, o quarto e último passo, como na imagem abaixo.

passos-leitura
Passos para a Leitura das Teclas Pressionadas
Editado de Circuit Basics

Projeto Teclando com Arduino

Para começar a trabalhar com o teclado matricial, vamos criar um projeto simples de exibição das teclas pressionadas na tela do computador.

Circuito

Para exibir no monitor serial as teclas presionadas, monte o circuito a seguir.

circuito-1
Circuito Elétrico

Software

Biblioteca

Para que possamos começar nossos estudos sobre o teclado matricial, baixe e instale a biblioteca através do botão a seguir.

Download da Biblioteca "Keypad"

Caso você não saiba como instalar bibliotecas na Arduino IDE, siga os passos de nosso tutorial Adicionando Bibliotecas na IDE Arduino.

Código

Com a biblioteca adicionada à Arduino IDE, copie o código abaixo e carregue-o para sua BlackBoard.

Entendendo o Código

Logo no início, após a inclusão da biblioteca "Keypad", declaramos em variáveis a quantidade de linhas e de colunas do teclado utilizado, no nosso caso, 4 linhas e 4 colunas.

Também criamos a matriz TECLAS_MATRIZ, responsável por armazenar as informações do nosso teclado, e onde indicamos para nosso microcontrolador, através de uma matriz, qual caractere é impresso quando um determinado botão do teclado é pressionado.

Abaixo definimos em vetores quais pinos são responsáveis pelas linhas e pelas colunas (respectivamente PINOS_LINHAS e PINOS_COLUNAS). Posteriormente inserimos o comando Keypad teclado_personalizado, para iniciar o teclado e associar nossa matriz de acordo com o pinos estabelecidos para colunas e linhas.

No setup do programa, inserimos o comando Serial.begin(9600), assim iniciando a porta serial em 9600 bits por segundo.

Por fim, no looping do programa, e com o comando leitura_teclas = teclado_personalizado.getKey(), atribuímos à variável leitura_teclas o caractere do botão que foi pressionado. Com essa variável, verificamos se alguma tecla foi realmente pressionada através da condição if (leitura_teclas). Caso alguma tecla tenha sido realmente pressionada, o valor da variável será diferente de "0" e a condição será verdadeira, resultando na impressão da tecla pressionada no monitor serial.

O Que Deve Acontecer

Ao abrir o Monitor Serial em 9600 bps, pressione o botão desejado e o mesmo será impresso na tela, como na figura abaixo.

resultado-1
Resultado Final

Projeto Controle de Acesso

Já que aprendemos o funcionamento básico do Teclado Matricial, que tal criarmos uma senha de acesso a um cofre, ou até mesmo uma liberação de uma fechadura?

Circuito

No projeto a seguir, iremos utilizar dois LEDs, sendo eles um vermelho e um verde. Os mesmos representam se a fechadura foi ou não liberada.

circuito-2
Circuito Elétrico

Software

Biblioteca

Para que possamos criar um controle de acesso através um senha pré-definida, baixe e instale a biblioteca a seguir.

Download da Biblioteca "Password"

Caso você não saiba como instalar bibliotecas na Arduino IDE, siga os passos de nosso tutorial Adicionando Bibliotecas na IDE Arduino.

Código

Após a inclusão da biblioteca, copie o código abaixo e passe-o para sua placa. Esse código foi baseado no projeto acima, porém incluindo uma nova biblioteca e adicionando alguns comandos.

Entendendo o Código

Primeiramente, com a ajuda da biblioteca "Password", criamos a variável senha e indicamos os caracteres que irão fazer parte dela, sendo números, letras ou caracteres especiais. Além disso, declaramos as variáveis que armazenam os pinos onde os LEDs do circuito estão conectados.

No setup do programa, configuramos os pinos dos LEDs (PINO_LED_VERDE e PINO_LED_VERMELHO) como saídas, em nível lógico baixo.

No looping, iniciamos a repetição atribuindo à variável leitura_teclas a leitura dos botões, como no código anterior. Entretanto, neste código, após verificarmos se alguma tecla foi realmente pressionada, verificamos, através da condição if(leitura_teclas == 'C'), se a tecla "C", responsável pela confirmação da senha, foi pressionada. Caso ela tenha sido pressionada, damos continuidade para a verificação da senha digitada através da condição if(senha.evaluate()). Caso a senha digitada esteja correta, piscamos o LED verde e exibimos a mensagem que a senha foi confirmada. Caso contrário, por meio do comando else, piscamos o LED vermelho e exibimos a mensagem que a senha está incorreta. Logo após a verificação da senha, graças ao comando senha.reset(), limpamos a variável senha para que ela possa ser digitada novamente. Entretanto, caso a tecla pressionada não seja a tecla "C", a tecla que foi pressionada é impressa no monitor, e acrescentada à variável senha através do comando senha.append(leitura_teclas).

O Que Deve Acontecer

Ao abrir o Monitor Serial em 9600 bps, digite a senha programada anteriormente e confirme pressionando a tecla "C". Note que o LED verde irá piscar rapidamente 5 vezes. Você também pode digitar uma senha incorreta para verificar que o LED vermelho irá piscar rapidamente 5 vezes, como nos GIFs abaixo.

resultado-2
Resultado Final
Resultado Final - Senha Incorreta
Resultado Final - Senha Correta

Indo Além

Embora utilizamos a biblioteca Keypad.h neste tutorial, é possível realizar a leitura da tecla pressionada sem a utilização dos comandos da biblioteca. Para isso, basta você seguir os passos de leitura mencionados na seção Conceitos Teóricos, e verificar a linha e a coluna que estão interligados no botão pressionado.

Avatar
Avatar