ESP8266 - Fechadura de Porta com Teclado

Este tutorial ensina como construir um sistema de fechadura de porta com senha usando ESP8266, teclado e trava solenoide ou trava eletromagnética. Veja abaixo como o sistema de fechadura funcionará:

ESP8266 NodeMCU, teclado, trava solenoide

Para facilitar, o tutorial é dividido em várias etapas, do fácil ao difícil:

Sobre o Teclado, a Trava Solenoide e a Trava Eletromagnética

Tanto a trava solenoide quanto a trava eletromagnética são usadas para travar/destravar a porta. Elas diferem principalmente no projeto mecânico. A ligação delas ao ESP8266 é parecida. O código do ESP8266 para controlá-las é o mesmo.

Se você não está familiarizado com teclado, trava solenoide e trava eletromagnética (pinagem, como funciona, como programar ...), os tutoriais a seguir podem ajudar você a aprender:

Diagrama de Ligação

  • Diagrama de Ligação com ESP8266, teclado e trava solenoide
diagrama de ligação do ESP8266 NodeMCU, teclado e trava solenoide

This image is created using Fritzing. Click to enlarge image

Para mais informações, veja Pinagem do ESP8266 e como alimentar o ESP8266 e outros componentes.

  • Diagrama de Ligação com ESP8266, teclado e trava eletromagnética
diagrama de ligação do ESP8266 NodeMCU, teclado e trava eletromagnética

This image is created using Fritzing. Click to enlarge image

Código ESP8266 - Fechadura de Porta com Teclado

/* * Este código de ESP8266 NodeMCU foi desenvolvido por pt.newbiely.com * Este código de ESP8266 NodeMCU é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/esp8266/esp8266-keypad-door-lock */ #include <Keypad.h> #define RELAY_PIN D0 // The ESP8266 pin connected to the IN pin of relay #define ROW_NUM 4 // 4 rows #define COLUMN_NUM 3 // 3 columns char key_layout[ROW_NUM][COLUMN_NUM] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9'}, {'*','0','#'} }; byte pin_rows[ROW_NUM] = {D1, D2, D3, D4}; // The ESP8266 pins connect to the row pins byte pin_column[COLUMN_NUM] = {D5, D6, D7}; // The ESP8266 pins connect to the column pins Keypad keypad = Keypad( makeKeymap(key_layout), pin_rows, pin_column, ROW_NUM, COLUMN_NUM ); const String password_1 = "0156CAB"; // change your password here const String password_2 = "5642CD"; // change your password here const String password_3 = "545423"; // change your password here String input_password; void setup() { Serial.begin(9600); input_password.reserve(32); // maximum input characters is 32 pinMode(RELAY_PIN, 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("Valid Password => unlock the door"); digitalWrite(RELAY_PIN, LOW); // unlock the door for 20 seconds delay(20000); digitalWrite(RELAY_PIN, HIGH); // lock the door } else { Serial.println("Invalid Password => Try again"); } input_password = ""; // reset the input password } else { input_password += key; // append new character to input password string } } }

Passos Rápidos

Para começar com o ESP8266 na Arduino IDE, siga estes passos:

  • Confira o tutorial como configurar o ambiente para ESP8266 na Arduino IDE se esta for a sua primeira vez usando o ESP8266.
  • Ligue os componentes como mostrado no diagrama.
  • Conecte a placa ESP8266 ao seu computador usando um cabo USB.
  • Abra a Arduino IDE no seu computador.
  • Escolha a placa ESP8266 correta, como (por exemplo, NodeMCU 1.0 (ESP-12E Module)), e a respectiva porta COM.
  • Conecte um cabo USB entre o ESP8266 e o PC.
  • Abra a Arduino IDE e selecione a placa e a porta corretas.
  • Clique no ícone Libraries na barra esquerda da Arduino IDE.
  • Pesquise por “keypad” e localize a biblioteca keypad criada por Mark Stanley e Alexander Brevig.
  • Depois, pressione o botão Install para concluir a instalação da biblioteca keypad.
biblioteca keypad para ESP8266 NodeMCU
  • Copie o código acima e abra-o com a Arduino IDE.
  • Clique no botão Upload da Arduino IDE para enviar o código ao ESP8266.
  • Abra o Serial Monitor.
  • Pressione as teclas 12345 seguidas do símbolo #.
  • Depois pressione as teclas 1234ABC seguidas do símbolo #.
  • Verifique o estado da lingueta da trava por 20 segundos.
  • Confira o resultado no Serial Monitor.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Nodemcu 1.0 (ESP-12E Module)
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Nodemcu 1.0 (ESP-12E Module)' on 'COM15')
New Line
9600 baud
The incorrect password! try again The correct password! Unlocking the door in 20 seconds
Ln 11, Col 1
Nodemcu 1.0 (ESP-12E Module) on COM15
2

Explicação do Código

As senhas válidas são pré-definidas no código do ESP8266. Uma string é usada para armazenar a senha digitada pelos usuários, chamada de input string. No teclado, duas teclas (* e #) são usadas para fins especiais: limpar a senha e encerrar a senha. O sistema funciona assim:

  • Além das duas teclas especiais, se outra tecla for pressionada, ela é adicionada à input string
  • Se * for pressionada, a input string é limpa. Você pode usá-la para iniciar ou reiniciar a digitação da senha
  • Se # for pressionada:
    • O ESP8266 compara a input string com as senhas pré-definidas. Se ela corresponder a uma das senhas pré-definidas, o ESP8266 controla o relé para destravar a porta.
    • Independentemente de a senha estar correta ou não, o ESP8266 limpa a input string para a próxima entrada.

Código ESP8266 - Várias Teclas

/* * Este código de ESP8266 NodeMCU foi desenvolvido por pt.newbiely.com * Este código de ESP8266 NodeMCU é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/esp8266/esp8266-keypad-door-lock */ #include <Keypad.h> #define RELAY_PIN D0 // The ESP8266 pin connected to the IN pin of relay #define ROW_NUM 4 // 4 rows #define COLUMN_NUM 3 // 3 columns char key_layout[ROW_NUM][COLUMN_NUM] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9'}, {'*','0','#'} }; byte pin_rows[ROW_NUM] = {D1, D2, D3, D4}; // The ESP8266 pins connect to the row pins byte pin_column[COLUMN_NUM] = {D5, D6, D7}; // The ESP8266 pins connect to the column pins Keypad keypad = Keypad( makeKeymap(key_layout), 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 correct password! 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 incorrect password! try again"); } input_password = ""; // reset the input password } else { input_password += key; // append new character to input password string } } }

Adicionando o som de bipe quando o teclado é pressionado.

Podemos fazer a fechadura parecer mais responsiva adicionando um buzzer piezo para gerar um bipe curto cada vez que uma tecla do teclado é pressionada.

É bem simples adicioná-lo. Por isso, deixamos esta parte para a sua criatividade. Você pode conferir o tutorial ESP8266 - Bipe do Teclado para mais orientações.

Adicionando um sensor de porta à fechadura de porta com teclado

No código mencionado anteriormente, o ESP8266 trava a porta após um tempo limite desde o destravamento. No entanto, em aplicações práticas, normalmente um sensor de porta é adicionado ao sistema. Se o ESP8266 detectar que a porta está fechada, ele trava a porta imediatamente em vez de esperar o tempo limite.

Para não sobrecarregar você, não incluímos o sensor de porta no diagrama de ligação e no código. Em vez disso, deixamos esta parte para a sua criatividade. Você pode conferir os tutoriais ESP8266 - Sensor de Porta e ESP8266 - Sensor de Porta controla Relé para mais orientações.

Gerenciando e armazenando as senhas válidas na EEPROM

O código acima tem senhas válidas (UID) fixadas no código do ESP8266. Isso significa que, se você quiser adicionar ou remover senhas, precisa alterar o código e fazer upload dele para o ESP8266 de novo, o que é inconveniente.

Em aplicações reais, é necessário gerenciar as senhas sem ter que modificar e fazer upload do código toda vez. Para isso, as senhas podem ser armazenadas na EEPROM em vez de fixadas no código. Consequentemente, é necessário um método para gerenciar facilmente as senhas na EEPROM.

Há dois métodos disponíveis para gerenciar senhas na EEPROM:

  • Usar senhas mestras
    • Ao utilizar uma senha como senha mestra ADD, novas senhas podem ser adicionadas ao sistema. Quando o ESP8266 detecta a senha mestra ADD, ele alterna entre o modo ADD e o modo OPERATION.
    • Durante o modo ADD, o ESP8266 adiciona à EEPROM qualquer nova senha que detectar.
    • Uma abordagem semelhante é usada para a senha mestra DELETE e o modo DELETE.
  • Usar comandos ADD/DELETE via Serial/Bluetooth/IR
    • Os comandos são transmitidos via Serial/Bluetooth/IR, utilizando ferramentas como o Serial Monitor, um aplicativo Bluetooth ou um controle IR.
    • Os comandos consistem em uma diretiva (ADD/DELETE) e na senha.

    Para utilizar qualquer um dos dois métodos acima, uma quantidade considerável de código do ESP8266 precisa ser adicionada. Para quem é novo em programação, isso pode ser uma tarefa desafiadora. Por isso, este tutorial tem como objetivo oferecer uma compreensão básica do sistema de fechadura de porta sem sobrecarregar os iniciantes com código complexo. Se você quiser implementar este sistema para fins práticos, entre em contato conosco por meio do nosso serviço de programação pago

Armazenando o histórico de acessos em um Cartão SD

Para acompanhar o histórico de acessos, pode ser necessário salvar o status do acesso (GRANTED/DENIED), além de data e hora. Como a EEPROM não tem capacidade suficiente para armazenar o histórico inteiro, um cartão SD pode ser usado no lugar. Você pode encontrar orientações no tutorial ESP8266 - Registrar Dados com Carimbo de Data e Hora no Cartão SD.

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!