Arduino - Fechadura de Porta com Teclado

Neste tutorial, vamos aprender a fazer um sistema de fechadura de porta com senha usando teclado e fechadura solenoide.

Quando a porta é destravada com a senha correta, ela permanece destravada por 20 segundos e depois é travada novamente de forma automática. O código Arduino suporta várias senhas.

Sobre o Teclado e a Fechadura Solenoide

Se você ainda não conhece o teclado e a fechadura solenoide (pinagem, como funciona, como programar...), aprenda sobre eles nos seguintes tutoriais:

Diagrama de Ligação

  • Arduino - Fechadura de porta com teclado, fechadura solenoide
Diagrama de ligação do Arduino, teclado e fechadura solenoide

This image is created using Fritzing. Click to enlarge image

Código Arduino - Sistema de fechadura de porta com senha usando teclado, fechadura solenoide

/* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino/arduino-keypad-door-lock */ #include <Keypad.h> const int RELAY_PIN = A5; // the Arduino pin, which connects to the IN pin of relay const int ROW_NUM = 4; // four rows const int COLUMN_NUM = 4; // four columns char keys[ROW_NUM][COLUMN_NUM] = { {'1','2','3', 'A'}, {'4','5','6', 'B'}, {'7','8','9', 'C'}, {'*','0','#', 'D'} }; byte pin_rows[ROW_NUM] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad byte pin_column[COLUMN_NUM] = {5, 4, 3, 2}; //connect to the column pinouts of the keypad Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM ); const String password_1 = "1234ABC"; // change your password here const String password_2 = "5642CD"; // change your password here const String password_3 = "4545B"; // change your password here String input_password; void setup() { Serial.begin(9600); input_password.reserve(32); // maximum input characters is 33, change if needed pinMode(RELAY_PIN, OUTPUT); // initialize pin as an output. digitalWrite(RELAY_PIN, LOW); // lock the door } void loop() { char key = keypad.getKey(); if (key){ Serial.println(key); if(key == '*') { input_password = ""; // reset the input password } else if(key == '#') { if(input_password == password_1 || input_password == password_2 || input_password == password_3) { Serial.println("The password is correct, unlocking the door in 20 seconds"); digitalWrite(RELAY_PIN, HIGH); // unlock the door for 20 seconds delay(20000); digitalWrite(RELAY_PIN, LOW); // lock the door } else { Serial.println("The password is incorrect, try again"); } input_password = ""; // reset the input password } else { input_password += key; // append new character to input password string } } }

※ Nota:

O endereço I2C do LCD pode variar de acordo com o fabricante. No código, usamos 0x27, que é o endereço especificado pelo fabricante DIYables

Passos Rápidos

  • Conecte o Arduino ao PC via cabo USB
  • Abra a Arduino IDE, selecione a placa e a porta corretas
  • Vá até o ícone Libraries na barra esquerda da Arduino IDE.
  • Pesquise “keypad” e encontre a biblioteca keypad de Mark Stanley, Alexander Brevig
  • Clique no botão Install para instalar a biblioteca keypad.
Biblioteca keypad para Arduino
  • Copie o código acima e abra-o na Arduino IDE
  • Clique no botão Upload na Arduino IDE para carregar o código no Arduino
  • Abra o Serial Monitor
  • Pressione as teclas 12345 e pressione #
  • Pressione as teclas 1234ABC e pressione #
  • Observe o estado da lingueta da fechadura durante 20 segundos.
  • Veja o resultado no Serial Monitor
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
The password is incorrect, try again The password is correct, unlocking the door in 20 seconds
Ln 11, Col 1
Arduino Uno on COM15
2

Explicação do Código

As senhas válidas são predefinidas no código Arduino.

Uma string, chamada de string de entrada, é usada para armazenar a senha digitada pelos usuários. No teclado, duas teclas (* e #) são usadas para funções especiais: limpar a senha e finalizar a senha. O sistema funciona da seguinte forma:

  • Com exceção das duas teclas especiais, se outra tecla for pressionada, ela é adicionada à string de entrada
  • Se * for pressionada, a string de entrada é limpa. Você pode usá-la para começar ou recomeçar a digitar a senha
  • Se # for pressionada:
    • A string de entrada é comparada com as senhas predefinidas. Se ela corresponder a uma das senhas predefinidas, o relé é controlado para destravar a porta.
    • Independentemente de a senha estar correta ou não, a string de entrada é limpa para a próxima digitação

    ※ Nota:

    • No código acima, para simplificar, usamos a função delay. É melhor usar millis() em vez de delay(). Veja Como usar millis() em vez de delay()
    • Você pode adicionar um buzzer piezo para emitir um bipe sempre que uma tecla do teclado for pressionada.
    • Nos códigos acima, a porta é travada novamente após 20 segundos. Você pode substituir isso por um sensor de porta. A porta é travada quando o sensor de porta detecta que ela foi fechada pelo usuário.
    • No código acima, as senhas estão fixas no código. Na prática, deveria ser possível adicionar/excluir/alterar senhas dinamicamente por meio de um modo especial. Nesse caso, as senhas devem ser salvas na memória EEPROM. A quantidade de senhas que pode ser salva depende do tamanho da EEPROM. O código ficará complicado. Se você quiser construir um sistema assim, oferecemos um serviço de programação. Fique à vontade para entrar em contato conosco.

Vídeo

※ NOSSAS MENSAGENS

  • Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!