- Descrição: O sensor capacitivo tem seu funcionamento baseado na…
Arduino – Simulando fechadura controlada por senha
Está desenvolvendo um projeto de automação residencial e gostaria de acrescentar funções de segurança a ele?! Então este tutorial é para você. Nesta prática vamos criar com o Arduino, um simulador básico de segurança: uma fechadura acionada por senha.
Adicionar aplicações de segurança em um projeto de automação residencial pode torna-lo bastante interessante, afinal, quem não gostaria de morar em uma casa funcional e segura?
Pensando nisso, decidi escrever este tutorial que tem como objetivo criar uma fechadura acionada por senha, que será digitada em um teclado alfanumérico. Para isso, utilizei um micro servo motor que irá simular a fechadura de uma porta e um teclado matricial para inserção da senha.
O teclado que utilizei possui 16 teclas, onde 10 teclas são numerais, 4 literais e 2 de caracteres. As 16 teclas estão dispostas em 4 linhas por 4 colunas e o teclado possui um conector de 8 pinos para ligação.
O servo motor é um componente comum em projetos de robótica, pois com ele é possível controlar o giro e a posição eixo através dos comandos enviados pela plataforma microcontrolada. Como exemplo de utilização, podemos citar o controle de movimento de partes de um robô, projetos de aeromodelismo e automodelismo.
O modelo de servo motor que utilizei para o desenvolvimento desta prática é o Micro Servo Motor SG90.
O papel do teclado de membrana neste protótipo é ser o meio de comunicação entre hardware e usuário, onde a pessoa irá digitar a senha e esta informação será processada pelo Arduino para validar se a senha é a correta ou não. Caso a senha digitada seja a correta, o Arduino irá enviar ao servo motor o comando para executar a ação de destrancar a fechadura e abrir a porta. Caso contrário, a fechadura permanece trancada e a porta fechada.
Fácil né?! Então vamos começar a colocar em prática nosso simulador.
Abaixo temos a lista dos componentes necessários para esta prática:
– Arduino Uno R3 com Cabo USB A/B
– Teclado Matricial do Tipo Membrana 4×4
– Micro Servo Motor SG90
– LED Vermelho 5MM
– LED Verde 5MM
– Resistor de 150R
– Protoboard
– Cabo Jumper Macho-Macho
Você pode adquirir estes e muitos outros itens diretamente na loja virtual da MasterWalker Shop.
O esquema de ligação ser montado pode ser visto abaixo:
ATENÇÃO: FAÇA TODAS AS LIGAÇÕES COM SEU ARDUINO DESCONECTADO DA ALIMENTAÇÃO.
Veja na imagem abaixo que montei um esquema com representações de porta fechada e porta aberta para ficar mais fácil de entender o objetivo desta prática:
Feito o esquema de ligação, será necessário instalar a biblioteca Keypad na IDE do Arduino para que o código funcione corretamente.
Se você não sabe como fazer a instalação de bibliotecas na IDE, acesse o link abaixo e em seguida retorne para continuar:
Arduino – Importando bibliotecas para a IDE
Faça o download da biblioteca Keypad e em seguida faça a instalação da mesma na IDE do Arduino.
Se você ainda não instalou a IDE do Arduino, acesse o link abaixo e em seguida retorne para continuar:
Arduino – Instalação e Configuração da IDE no Windows
O código para testes está abaixo, basta copiar o mesmo, colar na IDE, salvar e carregar:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
#include <Keypad.h> // BIBLIOTECA PARA O FUNCIONAMENTO DO TECLADO DE MEMBRANA #include <Servo.h> // BIBLIOTECA PARA O FUNCIONAMENTO DO SERVO Servo servo_Motor; //OBJETO DO TIPO SERVO char* password = "123"; //SENHA CORRETA PARA DESTRANCAR A FECHADURA int position = 0; //VARIÁVEL PARA LEITURA DE POSIÇÃO DA TECLA PRESSIONADA const byte ROWS = 4; //NUMERO DE LINHAS DO TECLADO const byte COLS = 4; //NUMERO DE COLUNAS DO TECLADO char keys[ROWS][COLS] = { //DECLARAÇÃO DOS NUMEROS, LETRAS E CARACTERES DO TECLADO {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} }; byte rowPins[ROWS] = { 8, 7, 6, 9 }; // PINOS DE CONEXAO DAS LINHAS DO TECLADO byte colPins[COLS] = { 5, 4, 3, 2 }; //PINOS DE CONEXAO DAS COLUNAS DO TECLADO Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );//AS VARIAVEIS rowPins E colPins RECEBERÃO O VALOR DE LEITURA DOS PINOS DAS LINHAS E COLUNAS RESPECTIVAMENTE const int ledVermelho = 12; //PINO EM QUE ESTÁ CONECTADO O LED VERMELHO const int ledVerde = 13; //PINO EM QUE ESTÁ CONECTADO O LED VERDE void setup(){ pinMode(ledVermelho, OUTPUT); //DECLARA O PINO COMO SAÍDA pinMode(ledVerde, OUTPUT); //DECLARA O PINO COMO SAÍDA servo_Motor.attach(11); //PINO DE CONTROLE DO SERVO MOTOR setLocked(true); //ESTADO INICIAL DA FECHADURA (TRANCADA) } void loop(){ char key = keypad.getKey(); //LEITURA DAS TECLAS PRESSIONADAS if (key == '*' || key == '#') { //SE A TECLA PRESSIONADA POR IGUAL A CARACTERE "*" OU "#", FAZ position = 0; //POSIÇÃO DE LEITURA DA TECLA PRESSIONADA INICIA EM 0 setLocked(true); //FECHADURA TRANCADA } if (key == password[position]){ //SE A TECLA PRESSIONADA CORRESPONDER A SEQUÊNCIA DA SENHA, FAZ position ++;//PULA PARA A PRÓXIMA POSIÇÃO } if (position == 3){ // SE VARIÁVEL FOR IGUAL A 3 FAZ (QUANDO AS TECLAS PRESSIONADAS CHEGAREM A 3 POSIÇÕES, SIGNIFICA QUE A SENHA ESTÁ CORRETA) setLocked(false); //FECHADURA DESTRANCADA } delay(100);//INTERVALO DE 100 MILISSEGUNDOS } void setLocked(int locked){ //TRATANDO O ESTADO DA FECHADURA if (locked){ //SE FECHADURA TRANCADA, FAZ digitalWrite(ledVermelho, HIGH);// LED VERMELHO ACENDE digitalWrite(ledVerde, LOW);// LED VERDE APAGA servo_Motor.write(0); //POSIÇÃO DO SERVO FICA EM 0º (FECHADURA TRANCADA) } else{ //SENÃO, FAZ digitalWrite(ledVerde, HIGH);// LED VERDE ACENDE digitalWrite(ledVermelho, LOW);// LED VERMELHO APAGA servo_Motor.write(82);// SERVO GIRA A 82º (FECHADURA DESTRANCADA) } } |
Após carregar o código na placa, o servo motor vai se posicionar em 0º e isto representa fechadura trancada. O LED vermelho se manterá aceso enquanto o servo motor estiver em 0º. Após pressionar a sequência “123” no teclado matricial e a mesma ser validada pelo Arduino, o servo irá se mover para 90º, o que representa a fechadura destrancada. O LED vermelho irá apagar e o LED verde irá se manter aceso enquanto o servo estiver em 90º.
Se o servo estiver na posição “Abrir porta”, ao pressionar “ * ” ou “ # ” o servo irá retornar para a posição “Fechar porta”, o LED verde irá apagar e o LED vermelho vai acender. Caso a senha digitada seja diferente da senha correta, o servo irá manter a sua posição atual.
Você pode conferir o resultado final desta prática no vídeo abaixo:
Bem prático né?!
Em uma próxima postagem, vamos incrementar este pequeno projeto e utilizar uma fechadura real.
Gostou deste tutorial? Então deixa seu comentário, dúvida ou sugestão aí embaixo!
Loja online: https://www.masterwalkershop.com.br
Fan page no Facebook: https://www.facebook.com/masterwalkershop
Nos ajude a espalhar conhecimento clicando no botão de compartilhar (f Like) que está mais abaixo.
Obrigado e até a próxima!
Seu feedback é muito importante! Que tal dar uma nota para esta postagem?! Faça sua avaliação aqui embaixo.
Postagem anterior: Upgrade de Firmware no Shield WiFi ESP8266 para Arduino
Próxima postagem: Base Adaptador para o NodeMCU V3 da Lolin
Infelizmente comigo o projeto não funcionou. O servo fica girando sem parar. Ele só estabiliza quando colocado a senha, caso contrário, permanece girando.
Olá Alana.
Agradeço pelo comentário!
Revise o esquema de ligação e confira se os componentes usados na prática estão em perfeitas condições, pois várias pessoas executaram esta prática com sucesso.
Boa tarde gostava de saber como posso ultrapassar o erro que me da nesta linha
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
//AS VARIAVEIS rowPins E colPins RECEBERÃO O VALOR DE LEITURA DOS PINOS DAS LINHAS E COLUNAS RESPECTIVAMENTE
Se eu fosse fazer um projeto de fechadura eletrônica com arduino utilizando um sensor biométrico, e para auxiliar a fechadura utilizasse um transistor, como ficaria a programação?
Olá Wilna.
Agradeço pelo comentário!
Não temos nenhum tutorial voltado para este tipo de projeto, logo, não consigo te auxiliar na programação para o sensor biométrico.
Legal, mas poderia mostrar o projeto com uma solenoide para simular a fechadura magnética.
Olá Silva.
Agradeço pelo comentário!
Por hora não temos nenhuma prática neste sentido, mas em breve faremos uma prática da forma que mencionou.
modifiquei umas coisas
coloquei um lcd e o código como tava não tinha nadad de seguro porque se digitar varias vezes teclas aleatórias eles destravaria, pois ele fica só comparando com a senha no caso se eu ficar tentado varias teclas ele iria comparando indiscriminadamente e ia se destravar.
O meu também pode conter erros.
#include
#include // BIBLIOTECA PARA O FUNCIONAMENTO DO TECLADO DE MEMBRANA
#include
#include
// Inicializa o display no endereco 0x3F
LiquidCrystal_I2C lcd(0x3F,2,1,0,4,5,6,7,3, POSITIVE);
Servo servo;
#define ledVermelho 12
#define ledVerde 10
//senha
String senha= “___”;
char* password = “123”; //SENHA CORRETA PARA DESTRANCAR A FECHADURA
int posicao = 0; //VARIÁVEL PARA LEITURA DE POSIÇÃO DA TECLA PRESSIONADA
int posicao2 = 0;
int tams = 3;
int tentativa=0;
int tent=5;
int valor=0;
//teclado
const byte ROWS = 4; //NUMERO DE LINHAS DO TECLADO
const byte COLS = 4; //NUMERO DE COLUNAS DO TECLADO
char keys[ROWS][COLS] = { //DECLARAÇÃO DOS NUMEROS, LETRAS E CARACTERES DO TECLADO
{‘1′,’2′,’3′,’A’},
{‘4′,’5′,’6′,’B’},
{‘7′,’8′,’9′,’C’},
{‘*’,’0′,’#’,’D’}
};
byte rowPins[ROWS] = { 2, 3, 4, 5 }; // PINOS DE CONEXAO DAS LINHAS DO TECLADO
byte colPins[COLS] = { 6, 7, 8, 9 }; //PINOS DE CONEXAO DAS COLUNAS DO TECLADO
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );//AS VARIAVEIS rowPins E colPins RECEBERÃO O VALOR DE LEITURA DOS PINOS DAS LINHAS E COLUNAS RESPECTIVAMENTE
void setup(){
servo.attach(11);
Serial.begin(9600);
lcd.begin (16,2);
pinMode(ledVermelho, OUTPUT); //DECLARA O PINO COMO SAÍDA
pinMode(ledVerde, OUTPUT); //DECLARA O PINO COMO SAÍDA
setLocked(true); //ESTADO INICIAL DA FECHADURA (TRANCADA)
lcd.setBacklight(HIGH);
messagem();
lcdsenha(senha);
}
void loop(){
char key = keypad.getKey(); //LEITURA DAS TECLAS PRESSIONADAS
Serial.println(key);
if (key == ‘*’ || key == ‘#’) { //SE A TECLA PRESSIONADA POR IGUAL A CARACTERE “*” OU “#”, FAZ
posicao = 0; //POSIÇÃO DE LEITURA DA TECLA PRESSIONADA INICIA EM 0
posicao2 = 0;
setLocked(true); //FECHADURA TRANCADA
}
//mexa aqui
if(key != NO_KEY){
if(key == ‘*’ || key == ‘#’){
posicao2=0;
posicao=0;
senha=”___”;
valor=0;
key=’_’;
}
senha[valor]=key;
if(key != ‘_’){
valor= valor + 1;
}
if(valor==4){
senha= “___”;
valor=0;
}
if(key != ‘_’){
posicao2 = posicao2 + 1;
}
lcdlimpa();
messagem();
lcdsenha(senha);
if(key == ‘*’ || key == ‘#’){
posicao2=0;
}
}
if (key == password[posicao]){ //SE A TECLA PRESSIONADA CORRESPONDER A SEQUÊNCIA DA SENHA, FAZ
posicao ++;//PULA PARA A PRÓXIMA POSIÇÃO
}
if (posicao == tams && posicao2 == tams){ // SE VARIÁVEL FOR IGUAL A 3 FAZ (QUANDO AS TECLAS PRESSIONADAS CHEGAREM A 3 POSIÇÕES, SIGNIFICA QUE A SENHA ESTÁ CORRETA)
setLocked(false); //FECHADURA DESTRANCADA
}
if (posicao != tams && posicao2 == tams){
posicao=0;
posicao2=0;
}
}
void messageminv(){
lcd.setCursor(0,0);
lcd.print(“Senha invalida”);
lcd.setCursor(0,1);
lcd.print(“tente novamente”);
}
void messagem(){
lcd.setCursor(0,0);
lcd.print(“Digite a senha: “);
}
void lcdlimpa(){
lcd.clear();
}
void lcdsenha(String){
lcd.setCursor(0,1);
lcd.print(senha);
}
void setLocked(int locked){ //TRATANDO O ESTADO DA FECHADURA
if (locked){ //SE FECHADURA TRANCADA, FAZ
digitalWrite(ledVermelho, HIGH);// LED VERMELHO ACENDE
digitalWrite(ledVerde, LOW);// LED VERDE APAGA
servo.write(0);
}
else{ //SENÃO, FAZ
delay(500);
digitalWrite(ledVerde, HIGH);// LED VERDE ACENDE
digitalWrite(ledVermelho, LOW);// LED VERMELHO APAGA
servo.write(90);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(“Destravada”);
lcd.setCursor(0,1);
lcd.print(“* ou # p/ travar”);
}
}
Gostei muito, mas queria colocar um display lcd para informar senha errada ou senha correta. não consegui.
Muito bom. Estou começando agora a fazer pequenos projetos com o arduino. Muito bom mesmo.
Olá, eu gostaria de saber como ficaria esse mesmo projeto só que para mais de um usuário, exemplo: Temos 4 pessoas, cada pessoa tem uma senha diferente para entrar na casa. Tem como fazer isso?
Já fizeram com a fechadura real?
Olá Vinicius.
Ainda não.
Vocês já tem uma previsão de quando irão fazer?
Não temos ainda.
Olá,
Poderiam fazer um projeto para acionamento de relé 5VDC através de teclado 4×4 ?
Obrigado.
Em uma das saídas do arduino instale um módulo de relé e este , através do seu contato, acionar a fechadura.
Qualquer dúvida estou a disposição.
Show de bola!!!
Sou apaixonada por tecnologia