ESP32 - Sistema de Trava de Porta por Senha

Eletrônica

ESP32 - Sistema de Fechadura com Senha

ESP32 - Sistema de Fechadura com Senha

Aprenda a criar um sistema de fechadura eletrônica usando senha com teclado (keypad) e fechadura eletromagnética.

Usuários inserem a senha pelo teclado. Se a senha for válida, o ESP32 aciona a fechadura para destravar a porta. O sistema também pode incluir um display LCD para feedback visual.

Como funciona a verificação da senha

  • * - reseta a entrada de senha
  • # - finaliza a entrada de senha e a valida
  • Caracteres inseridos são armazenados em uma string
  • Ao pressionar #, a string é comparada com as senhas válidas

Diagrama de Fiação

Código: ESP32 com Teclado e Fechadura

#include <Keypad.h>

#define RELAY_PIN 19
#define ROW_NUM 4
#define COLUMN_NUM 3

char keys[ROW_NUM][COLUMN_NUM] = {
  {"1","2","3"},
  {"4","5","6"},
  {"7","8","9"},
  {"*","0","#"}
};

byte pin_rows[ROW_NUM] = {12,14,27,26};
byte pin_column[COLUMN_NUM] = {25,33,32};

Keypad keypad = Keypad(makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM);

const String password_1 = "1234";
const String password_2 = "4444";
const String password_3 = "55555";
String input_password;

void setup() {
  Serial.begin(9600);
  input_password.reserve(32);
  pinMode(RELAY_PIN, OUTPUT);
  digitalWrite(RELAY_PIN, HIGH); // trancar porta
}

void loop() {
  char key = keypad.getKey();
  if (key) {
    Serial.println(key);
    if (key == "*") {
      input_password = "";
    } else if (key == "#") {
      if (input_password == password_1 || input_password == password_2 || input_password == password_3) {
        Serial.println("Senha válida => destravar porta");
        digitalWrite(RELAY_PIN, LOW);
        delay(20000);
        digitalWrite(RELAY_PIN, HIGH);
      } else {
        Serial.println("Senha inválida => tente novamente");
      }
      input_password = "";
    } else {
      input_password += key;
    }
  }
}
  

Instruções Rápidas

  1. Conecte o ESP32 ao PC via USB
  2. Abra o Arduino IDE
  3. Instale a biblioteca Keypad
  4. Copie e cole o código
  5. Compile e envie para o ESP32
  6. Use um eletroímã simulando a fechadura
  7. Digite uma senha e pressione #

Teste

Digite 1234 e # → destrava a porta
Digite 1111 e # → senha incorreta

Código com LCD I2C

#include <LiquidCrystal_I2C.h>
#include <Keypad.h>

#define RELAY_PIN 19
#define ROW_NUM 4
#define COLUMN_NUM 3

char keys[ROW_NUM][COLUMN_NUM] = {
  {"1","2","3"},
  {"4","5","6"},
  {"7","8","9"},
  {"*","0","#"}
};

byte pin_rows[ROW_NUM] = {12,14,27,26};
byte pin_column[COLUMN_NUM] = {25,33,32};

Keypad keypad = Keypad(makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM);

const String password_1 = "1234";
const String password_2 = "4444";
const String password_3 = "55555";
String input_password;

LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() {
  Serial.begin(9600);
  input_password.reserve(32);
  pinMode(RELAY_PIN, OUTPUT);
  digitalWrite(RELAY_PIN, HIGH);
  lcd.init();
  lcd.backlight();
}

void loop() {
  char key = keypad.getKey();
  if (key) {
    Serial.println(key);
    if (key == "*") {
      input_password = "";
      lcd.clear();
    } else if (key == "#") {
      lcd.clear();
      if (input_password == password_1 || input_password == password_2 || input_password == password_3) {
        Serial.println("Senha válida => destravar porta");
        lcd.setCursor(0, 0); lcd.print("CORRETO!");
        lcd.setCursor(0, 1); lcd.print("PORTA ABERTA!");
        digitalWrite(RELAY_PIN, LOW);
        delay(20000);
        digitalWrite(RELAY_PIN, HIGH);
      } else {
        Serial.println("Senha inválida => tente novamente");
        lcd.setCursor(0, 0); lcd.print("INCORRETO!");
        lcd.setCursor(0, 1); lcd.print("ACESSO NEGADO!");
      }
      input_password = "";
    } else {
      if (input_password.length() == 0) lcd.clear();
      input_password += key;
      lcd.setCursor(input_password.length(), 0);
      lcd.print("*");
    }
  }
}
  

Nota: o endereço I2C do LCD pode variar. Neste exemplo, foi usado 0x27, comum em modelos da marca DIYables.

Tutorial em Vídeo

Se quiser vídeo tutorial, acesse e inscreva-se: Canal do ESP32io

Fonte
https://esp32io.com/tutorials/esp32-door-lock-system-using-password
Mais Dicas