Arduino - Sistema de Fechadura de Porta com Senha

Neste tutorial, vamos aprender a fazer um sistema de fechadura de porta com senha. O tutorial tem duas partes principais:

O LCD é opcional. Ele apenas deixa o sistema um pouco mais prático.

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, a Fechadura Eletromagnética e o LCD

Se você ainda não conhece a fechadura eletromagnética, o teclado e o LCD (pinagem, como funcionam, como programar...), aprenda sobre eles nos seguintes tutoriais:

Como o sistema de fechadura de porta funciona

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, a porta é destravada.
    • Independentemente de a senha estar correta ou não, a string de entrada é limpa para a próxima digitação

Diagrama de Ligação

  • Arduino - Sistema de fechadura de porta com senha usando teclado e fechadura eletromagnética
Diagrama de ligação do sistema de fechadura de porta com Arduino

This image is created using Fritzing. Click to enlarge image

  • Arduino - Sistema de fechadura de porta com senha usando teclado, fechadura eletromagnética e LCD
Diagrama de ligação do sistema de fechadura de porta com Arduino e LCD

This image is created using Fritzing. Click to enlarge image

Código Arduino - Sistema de fechadura de porta com senha usando teclado e fechadura eletromagnética

/* * 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-door-lock-system-using-password */ #include <Keypad.h> const int RELAY_PIN = A0; // 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 32, change if needed pinMode(RELAY_PIN, OUTPUT); // initialize pin as an output. digitalWrite(RELAY_PIN, HIGH); // 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, LOW); // unlock the door for 20 seconds delay(20000); digitalWrite(RELAY_PIN, HIGH); // 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 } } }

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
  • Coloque a placa de armadura perto do eletroímã.
  • Abra o Serial Monitor
  • Pressione as teclas 123456 e pressione #
  • Pressione as teclas 1234ABC e pressione #
  • Observe a atração entre a placa de armadura e o eletroímã 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

Código Arduino - Sistema de fechadura de porta com senha usando teclado, fechadura eletromagnética e LCD

/* * 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-door-lock-system-using-password */ #include <Keypad.h> #include <DIYables_LCD_I2C.h> const int RELAY_PIN = A0; // 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 ); DIYables_LCD_I2C lcd(0x27, 16, 2); // I2C address 0x27 (from DIYables LCD), 16 column and 2 rows 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, HIGH); // lock the door lcd.init(); // initialize the lcd lcd.backlight(); } void loop(){ char key = keypad.getKey(); if (key){ Serial.println(key); if(key == '*') { input_password = ""; // reset the input password lcd.clear(); } else if(key == '#') { lcd.clear(); if(input_password == password_1 || input_password == password_2 || input_password == password_3) { Serial.println("password is correct"); lcd.setCursor(0, 0); lcd.print("CORRECT!"); lcd.setCursor(0, 1); lcd.print("DOOR UNLOCKED!"); digitalWrite(RELAY_PIN, LOW); // unlock the door for 20 seconds delay(20000); digitalWrite(RELAY_PIN, HIGH); // lock the door } else { Serial.println("password is incorrect, try again"); lcd.setCursor(0, 0); lcd.print("INCORRECT!"); lcd.setCursor(0, 1); lcd.print("ACCESS DENIED!"); } input_password = ""; // reset the input password } else { if(input_password.length() == 0) { lcd.clear(); } input_password += key; // append new character to input password string lcd.setCursor(input_password.length(), 0); // move cursor to new position lcd.print('*'); // print * key as hiden character } } }

※ 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

  • Vá até o ícone Libraries na barra esquerda da Arduino IDE.
  • Pesquise “DIYables LCD I2C” e encontre a biblioteca DIYables_LCD_I2C da DIYables
  • Clique no botão Install para instalar a biblioteca DIYables_LCD_I2C.
Biblioteca DIYables LCD I2C 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
  • Coloque a placa de armadura perto do eletroímã.
  • Digite uma senha errada e depois digite uma senha correta
  • Observe a atração entre a placa de armadura e o eletroímã durante 20 segundos.
  • Veja o texto no LCD

※ Nota:

  • Nos códigos 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!