A segurança é uma grande preocupação em nosso dia a dia e as travas digitais se tornaram uma parte importante desses sistemas de segurança. Um desses bloqueios de código digital é imitado neste projeto usando a placa arduino e um teclado de matriz.
Componentes
- Arduino
- Módulo de teclado
- Buzzer
- LCD 16x2
- Transistor BC547
- Resistor (1k)
- Tábua de pão
- Poder
- Fios de conexão
Neste circuito, utilizamos a técnica de multiplexação para fazer a interface do teclado para entrada da senha no sistema. Aqui, estamos usando o teclado 4x4 que contém 16 teclas. Se quisermos usar 16 chaves, precisamos de 16 pinos para conexão com o Arduino, mas na técnica de multiplexação, precisamos usar apenas 8 pinos para fazer a interface de 16 chaves. É uma forma inteligente de fazer a interface com um módulo de teclado.
Técnica de multiplexação: a técnica de multiplexação é uma maneira muito eficiente de reduzir o número de pinos usados com o microcontrolador para fornecer entrada ou senha ou números. Basicamente, essa técnica é usada de duas maneiras - uma é a varredura de linha e a outra é a varredura de dois pontos. Mas, neste projeto baseado em Arduino, usamos a biblioteca do teclado, então não precisamos fazer nenhum código de multiplexação para este sistema. Precisamos apenas usar a biblioteca do teclado para fornecer dados.
Descrição do Circuito
O circuito deste projeto é muito simples que contém Arduino, módulo de teclado, campainha e LCD. O Arduino controla os processos completos, como pegar o módulo do teclado do formulário de senha, comparar senhas, acionar a campainha e enviar o status para o display LCD. O teclado é usado para obter a senha. Buzzer é usado para indicações e LCD é usado para exibir status ou mensagens nele. A campainha é acionada por meio de um transistor NPN.
Os pinos da coluna do módulo do teclado são conectados diretamente aos pinos 4, 5, 6, 7 e os pinos da linha são conectados a 3, 2, 1, 0 do arduino uno. Um LCD 16x2 é conectado ao arduino no modo de 4 bits. Os pinos de controle RS, RW e En são conectados diretamente aos pinos 13, GND e 12 do arduino. E o pino de dados D4-D7 é conectado aos pinos 11, 10, 9 e 8 do arduino. E um buzzer é conectado no pino 14 (A1) do Arduino por meio de um transistor NPN BC547.
Trabalhando
Usamos a EEPROM embutida do arduino para salvar a senha, então, quando rodamos este programa pela primeira vez do circuito, lemos um dado lixo da EEPROM embutida do arduino e comparamos com a senha de entrada e enviamos uma mensagem no LCD que é Acesso negado porque a senha não corresponde. Para resolver este problema, precisamos definir uma senha padrão pela primeira vez usando a programação fornecida abaixo:
para (int j = 0; j <4; j ++) EEPROM.write (j, j + 49);
lcd.print ("Digite sua senha:"); lcd.setCursor (0,1); para (int j = 0; j <4; j ++) pass = EEPROM.read (j);
Isso definirá a senha “1234” para EEPROM do Arduino.
Depois de executá-lo pela primeira vez, precisamos removê-lo do programa e novamente escrever o código no arduino e executar. Agora seu sistema funcionará bem. E, pela segunda vez, a senha usada agora é “1234”. Agora você pode alterá-lo pressionando o botão # e, em seguida, inserir sua senha atual e, em seguida, inserir sua nova senha.
Quando você inserir sua senha, o sistema irá comparar sua senha inserida com a senha que está armazenada na EEPROM do arduino. Se houver correspondência, o LCD mostrará “acesso concedido” e se a senha estiver errada, o LCD irá “Acesso negado” e a campainha emitirá um sinal sonoro contínuo por algum tempo. E a campainha também toca uma única vez sempre que o usuário pressiona qualquer botão do teclado.
Descrição de Programação
No código, usamos a biblioteca do teclado para fazer a interface do teclado com o arduino.
#incluir
const byte ROWS = 4; // quatro linhas const byte COLS = 4; // quatro colunas char hexaKeys = {{'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', ' 8 ',' 9 ',' C '}, {' * ',' 0 ',' # ',' D '}}; byte rowPins = {3, 2, 1, 0}; // conectar à pinagem de linha do byte do teclado colPins = {4, 5, 6, 7}; // conectar à pinagem da coluna do teclado // inicializar uma instância da classe NewKeypad Teclado customKeypad = Teclado (makeKeymap (hexaKeys), rowPins, colPins, ROWS, COLS);
Incluímos a biblioteca LCD para a interface do LCD e para a interface EEPROM, incluímos a biblioteca EEPROM.h. E, em seguida, a variável inicializada e os pinos definidos para os componentes.
# define buzzer 15 LiquidCrystal lcd (13,12,11,10,9,8); senha do char; char pass, pass1; int i = 0; char customKey = 0;
E então inicializamos o LCD e damos direção aos pinos na função de configuração
configuração vazia () {lcd.begin (16,2); pinMode (led, OUTPUT); pinMode (buzzer, OUTPUT); pinMode (m11, OUTPUT); pinMode (m12, SAÍDA); lcd.print ("Eletrônico"); lcd.setCursor (0,1); lcd.print ("Bloqueio do teclado"); atraso (2000); lcd.clear (); lcd.print ("Digite sua senha:"); lcd.setCursor (0,1);
Depois disso, lemos o teclado na função de loop
customKey = customKeypad.getKey (); if (customKey == '#') change (); if (customKey) {password = customKey; lcd.print (customKey); bip(); }
E então compare a senha com a senha salva usando o método de comparação de string.
if (i == 4) {atraso (200); para (int j = 0; j <4; j ++) pass = EEPROM.read (j); if (! (strncmp (senha, passe, 4))) {digitalWrite (led, HIGH); bip(); lcd.clear (); lcd.print ("Senha aceita"); atraso (2000); lcd.setCursor (0,1); lcd.print ("#. Alterar senha"); atraso (2000); lcd.clear (); lcd.print ("Digite a senha:"); lcd.setCursor (0,1); i = 0; digitalWrite (led, LOW); }
Esta é a função de alteração de senha e função de buzzer
void change () {int j = 0; lcd.clear (); lcd.print ("UR Current Passk"); lcd.setCursor (0,1); while (j <4) {char key = customKeypad.getKey (); if (chave) {pass1 = chave; lcd.print (chave); void beep () {digitalWrite (buzzer, HIGH); atraso (20); digitalWrite (campainha, LOW); }