Arduino – Simulando fechadura controlada por senha

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.

img01_arduino_simulador_de_fechadura_controlada_por_senha_micro_servo_sg90_9g_teclado_matricial_membrana_4x4

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.

img02_arduino_simulador_de_fechadura_controlada_por_senha_micro_servo_sg90_9g_teclado_matricial_membrana_4x4

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.

img03_arduino_simulador_de_fechadura_controlada_por_senha_micro_servo_sg90_9g_teclado_matricial_membrana_4x4

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:

img04_arduino_simulador_de_fechadura_controlada_por_senha_micro_servo_sg90_9g_teclado_matricial_membrana_4x4

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:

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:
Próxima postagem:
Postagem feita por

Diretora de Marketing, Designer e Criadora de Conteúdo da MasterWalker Shop. Bacharel em Engenharia da Computação. Apaixonada por tecnologia, fã de super-heróis e bandas de rock.

Existem 19 comentários para esta postagem
  1. Alana às 13:26

    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.

    • Euler Oliveira às 08:30

      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.

  2. Claudia às 12:25

    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

  3. Wilna às 14:22

    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?

    • Euler Oliveira às 15:44

      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.

  4. silva às 03:53

    Legal, mas poderia mostrar o projeto com uma solenoide para simular a fechadura magnética.

    • Euler Oliveira às 09:21

      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.

  5. Gabriel Vinícius às 19:20

    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”);
    }
    }

  6. Adenio às 22:51

    Gostei muito, mas queria colocar um display lcd para informar senha errada ou senha correta. não consegui.

  7. juarez oliveira às 18:18

    Muito bom. Estou começando agora a fazer pequenos projetos com o arduino. Muito bom mesmo.

  8. Victor às 19:03

    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?

    • Luiz junior às 19:50

      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.