terça-feira, 30 de março de 2021

EX35 - Fechadura de segurança com teclado digital usando Arduino

    Muitas vezes, precisamos proteger um quarto em nossa casa ou escritório para que ninguém possa acessar o quarto sem nossa permissão e garantir proteção contra roubo ou perda de nossos acessórios e ativos importantes. Existem tantos tipos de sistemas de segurança presentes hoje, mas nos bastidores, para autenticação, todos eles se baseiam em impressão digital, identificação de rosto, leitor de RFID, senha, padrões, etc. Entre todas as soluções, a de menor custo é usar um sistema baseado em senha.     Portanto, neste projeto, construí uma fechadura com teclado Arduino que pode ser montada em qualquer uma das portas existentes para protegê-las com uma senha digital. 
    Antes de construir nosso projeto de travamento de porta com senha, primeiro precisamos coletar os componentes necessários e, em seguida, seguir em frente e seguir o processo de construção passo a passo. Lista de componentes:
  • Arduino Uno com microcontrolador Atmega 328p
  • 16 x 2 LCD (tela de cristal líquido)
  • Teclado de matriz 4 x 4 para Arduino
  • Servo motor
  • Fechadura de porta impressa em 3D / fechadura de porta personalizada
  • Componentes adicionais para fonte de alimentação de carregador móvel de 1 Amp 5 Volt
  • Caixas de plástico, parafusos, invólucro de plástico, etc.
Diagrama de circuito para a fechadura do teclado Arduino
Figura 01 - Diagrama elétrico

    O diagrama de circuito completo para nosso projeto de travamento de porta com teclado digital baseado em Arduino é mostrado na figura 01.
    Em primeiro lugar, partimos do cérebro deste projeto que é a placa Arduino UNO. A placa Arduino é conectada a um LCD e um servo motor. O servo motor é usado para empurrar (travar) ou puxar (destravar) a trava da porta.     Um LCD 16 x 2 é necessário para exibir a mensagem pelo Arduino, 16 x 2 significa que tem 16 números de colunas e 2 números de linhas. 
    Aqui, estou usando um servo motor Towerpro SG90 de 5v para fazer a trava. É um servo motor de nível básico e funciona bem com o Arduino sem nenhum circuito ou módulo externo. Conecte o servo motor com o pino D3 do Arduino Digital e com uma fonte de alimentação de 5 volts. Este servo motor tem um total de 3 linhas de entrada (GND, + 5V e LINHA DE SINAL).
    Neste projeto, usei um teclado de matriz 4 x 4 (mas a parte do teclado 4 x 4 não está disponível para fazer essa representação gráfica), mas não se preocupe, pois o teclado de matriz 4 x 3 também funciona bem com minha codificação . Precisamos de um teclado para entrada de senha e travar manualmente nosso armário personalizado. É composto por 16 teclas (soft switch) 4 teclas em linhas (R1, R2, R3, R4) e 4 teclas em colunas (C1, C2, C3, C4) quando uma tecla pressionada, estabelece uma conexão entre as linhas correspondentes e colunas. A tabela abaixo mostra como conectar seu Arduino com o teclado.
  • Pino 1 (linha 1) Pin Analógico A1
  • Pino 2 (linha 2) Pin Analógico A2
  • Pino 3 (linha 3) Pin Analógico A3
  • Pino 4 (linha 4) Pin Analógico A4
  • Pino 5 (colunas 1) Pin Analógico A5
  • Pino 6 (colunas 2) Pino digital 0
  • Pino 7 (colunas 3) Pino digital 1
  • Pino 8 (colunas 4) Pino digital 2
Código Arduino para fechadura digital do teclado
    O código completo da fechadura da porta do Arduino pode ser encontrado na parte inferior desta página. Você pode carregar o código diretamente, mas é recomendável ler os parágrafos abaixo para entender como o código funciona. Além disso, é importante certificar-se de que adicionou a seguinte biblioteca de teclado ao IDE do Arduino para compilar o código com êxito. Para isso basta abrir o link abaixo e baixar o arquivo ZIP. Em seguida, em seu IDE Arduino, navegue até Sketch -> Incluir Biblioteca -> Add.ZIP Library e navegue até o arquivo que você acabou de baixar.
    Depois de inserir todos os arquivos de cabeçalho e biblioteca, atribua todos os pinos para LCD e defina o comprimento da senha e defina a posição inicial do servo para 0. Depois disso, pegue um tipo de dados “char” para declarar o número que pode contê-lo incluindo o caractere nulo.
//#include <Keypad.h>
#include <LiquidCrystal.h>
#include <Servo.h>
Servo myservo;
LiquidCrystal lcd (8, 9, 4, 5, 6, 7);
#define Password_Lenght 7 // Give enough room for six chars + NULL char
int pos = 0;    // variable to store the servo position
char Data[Password_Lenght]; // 6 is the number of chars it can hold + the null char = 7
char Master[Password_Lenght] = "123456";
    Com este pedaço de código (char Master [Password_Lenght] = "123456";) - sob o Char Master, eu declaro a senha da fechadura da porta, em seguida, atribuo o número de linhas e colunas no teclado e também declaro keyMaps e conectar com linhas e colunas. Na configuração void, inicialize o servo sinal pino D3, servo status fechado e imprima o nome do projeto / dispositivo / empresa com 3 segundos de atraso no tempo de LCD de inicialização do dispositivo.
void setup()
{ myservo.attach(3);
  ServoClose();
  lcd.begin(16, 2);
  lcd.print(" Arduino Door");
  lcd.setCursor(0, 1);
  lcd.print("--Look project--");
  delay(3000);
  lcd.clear();
}
    Na função de loop, a condição if-else simples está lá. De acordo com o status (está bloqueado automaticamente), imprima "Porta está fechada" com 3 segundos de atraso e o servo gira para a posição fechada, os dados da porta contam como 1, caso contrário, oa trava da porta permanece aberta e os dados contam 0, o servo aberto gire para a posição 0 graus a 180 graus e para fechar vai de 180 a 0. As funções de abertura e fechamento do servo são mostradas abaixo.
void ServoOpen()
{   for (pos = 180; pos >= 0; pos -= 5) { // goes from 0 degrees to 180 degrees
    // in steps of 1 degree
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
}
void ServoClose()
{  for (pos = 0; pos <= 180; pos += 5) { // goes from 180 degrees to 0 degrees
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
}
    Escreva a posição do servo com 15 segundos de atraso para atingir a posição do servo. Na função void open, imprima no LCD “Enter Password” e então a condição especifica que a senha inserida deve ser a mesma da chave personalizada, dentro deste corpo os dados são contados e armazena o caractere no array de dados, incrementado e a senha de entrada impressa no LCD se o o comprimento dos dados (número da chave) e a senha de entrada correspondem ao Data Master (onde as chaves predefinidas estão presentes). Em seguida, como uma ação LCD limpa, servo drive, imprima no LCD “A porta está aberta” e o contador de dados é zerado.
    Se a chave de entrada não corresponder ao mestre de dados, como uma ação no LCD, limpe a impressão no LCD "Senha errada" para notificar com 1 segundo de atraso e permanecer em sua posição de bloqueio com o contador de dados definido como 1 e continuar este processo em um loop .
if (data_count == Password_Lenght - 1) // if the array index is equal to the number of expected chars, compare data to master
  {   if (!strcmp(Data, Master)) // equal to (strcmp(Data, Master) == 0)
    { lcd.clear();
      ServoOpen();
      lcd.print("  Door is Open");
      door = 0;
    }
    else
    { lcd.clear();
      lcd.print("  Wrong Password");
      delay(1000);
      door = 1;
    }
    clearData();
  }
Figura 02 - Peças 3D para "Fechadura de Segurança"
    Se você quiser mais segurança, terá que imprimir um modelo 3D de fechadura que funcione internamente com este servo. Você pode baixar os arquivos STL necessários no link abaixo e imprimi-los em 3D se tiver acesso a uma impressora 3D: 20_03_31 Peças 3D para Fechadura de segurança.
    No início do projeto, no momento em que o ligamos pela primeira vez, precisamos fornecer o nome do projeto (você pode exibir o nome da empresa também) para que pareça inteligente e exclusivo como um dispositivo comercial (como você pode ver em a imagem abaixo).
    Com 3 segundos de atraso , tranque rapidamente a porta e verifique diretamente no display o status da fechadura da porta conforme mostrado na imagem abaixo.
Figura 03 - Tela LCD.
    Quando você trava manualmente a porta pressionando a tecla “#”, primeiro mostra a porta está fechada por 1 segundo e, em seguida, exibe Digite a senha . Por outro lado, quando a porta é destrancada digitando a senha correta, aparece a mensagem Porta aberta .

    Se a porta permanecer destravada, será exibido - A porta está aberta contanto que você bloqueie a porta manualmente de acordo com a codificação. Eu forneci o código e você pode personalizar as configurações alterando o parâmetro de exibição do código conforme necessário. Você também pode verificar o trabalho completo com o vídeo no link na parte inferior desta página.
Figura 04 - Telas do display LCD.

    O arquivo do código fonte Fechadura de Segurança com teclado está disponível em: 21_03_31_Fechadura_de_Segurança_com_teclado _SRG (PDF).


    O arquivo do diagrama elétrico Fechadura de Segurança com teclado estará disponível em: 21_03_31_Circuito_Fechadura_de_Segurança_com_teclado″ SRG (PDF).

© Direitos de autor. 2021: Gomes; Sinésio Raimundo. Última atualização: 20/03/2021 

Nenhum comentário:

Postar um comentário