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
Lista completa de produtos
comprarBlackBoard UNO R3
Cabo USB AB 1.50m
Teclado Matricial de Membrana 16 Teclas
LED 5mm Vermelho (10 unidades)
LED 5mm Verde (10 unidades)
Resistor 300Ω - Pacote com 10 unidades
Protoboard 400 Pontos
WorkPlate 400 - Preta
Jumpers Macho-Macho x40 Unidades
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.
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.
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.
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.
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.
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.
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.