18. Abrir puerta

Abrir una puerta con ESP32

Ya manejamos un teclado matricial 4×4 despues aprendimos a Validar contraseña con el ESP32 ya teniendo esos conocimientos vamos a Abrir una puerta con ESP32 siguiendo estos pasos:

  • Ingresaremos una variable con la contraseña “ABCD45” por ejemplo.
  • Esperamos a ingresar la contraseña y comparamos la contraseña.
  • Si la contraseña es correcta, encendemos un led verde y movemos el servo 90 grados y despues lo cerramos a 0 grados.
  • Si la contraseña es incorrecta, encendemos un led rojo.

Requerimientos:

  • ESP32.
  • Teclado matricial 4×4.
  • 2 Led (Rojo y Verde)
  • 2 Resistencias 330 Ohms.
  • Servomotor.
  • Cables.

Conexiones:

TecladoESP32
C4D15
C3D2
C2D4
C1D16
R4D17
R3D5
R2D18
R1D19

  • Led rojo al pin 13 del ESP32.
  • Led verde al pin 12 del ESP32.
  • Servo al pin 21 del ESP32.
Abrir una puerta con ESP32

Código de como abrir una puerta con ESP32:

/*
Abrir una puerta con ESP32
*/
// importa libreria Keypad
#include <Keypad.h>
//  importa libreria Servo
#include <ESP32Servo.h>
// define numero de filas
const uint8_t ROWS = 4;
// define numero de columnas
const uint8_t COLS = 4;
// define la distribucion de teclas
char keys[ROWS][COLS] = {
  { '1', '2', '3', 'A' },
  { '4', '5', '6', 'B' },
  { '7', '8', '9', 'C' },
  { '*', '0', '#', 'D' }
};
// pines correspondientes a las filas
uint8_t colPins[COLS] = { 16, 4, 2, 15 };
// pines correspondientes a las columnas
uint8_t rowPins[ROWS] = { 19, 18, 5, 17 };
// crea objeto con los prametros creados previamente
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);

//Declaramos la variable que almacena el password
char pass[7]="ABCD45";
//Varible que alamacena la clave que se va ingresando
char ingresaPass[7];
//Variable que define el numero de letra que se va ingresando
int indice=0;

//Inicializamos las variables de los pines del led verde y rojo
int pinLedVerde=12;
int pinLedRojo=13;
//Inicializamos la variable del pin del servo
int pinServo=14;

//Instaciamos e servo
Servo servo_1;

void setup() {
  pinMode(pinLedVerde, OUTPUT);
  pinMode(pinLedRojo, OUTPUT);
  servo_1.attach(pinServo, 500, 2500);
  //Movemos el servo_1 a 0 grados
  servo_1.write(0);
  //Esperamos 1.5 segundos
  delay(1500);
  
  Serial.begin(115200);
}

void loop() {
  // obtiene tecla presionada y asigna a variable
  char key = keypad.getKey();
  // comprueba que se haya presionado una tecla
  if (key) {
    //Alamacenamos la letra ingresada en arreglo de letras ingresaPass
    ingresaPass[indice]=key;
    //Aumentamos la letra que se va a alamacenar
    indice++;
    // envia a monitor serial la tecla presionada
    Serial.println(key);
    digitalWrite(pinLedVerde, LOW);
    digitalWrite(pinLedRojo, LOW);
  }
  //Si ya se ingresaron 6 letras o mas
  if(indice==6){
    //Si el password coincide con la clave ingresada
    if(strcmp(pass,ingresaPass)==0){
      // Mostramos el mensaje de acceso permitido
      Serial.println("Acceso permitido");
      digitalWrite(pinLedVerde, HIGH);
      //Movemos el servo_1 a 0 grados
      servo_1.write(179);
      //Esperamos 1.5 segundos
      delay(2500);
      //Movemos el servo_1 a 179 grados
      servo_1.write(0);
      //apagamos el led verde
      digitalWrite(pinLedVerde, LOW);
      //Esperamos 1.5 segundos
      delay(1500);

    }
    //Si el password NO coincide con la clave ingresada
    else{
      // Mostramos el mensaje de acceso denegado
      Serial.println("Acceso denegado");
      digitalWrite(pinLedRojo, HIGH);
    }
    //Regresamos el indice a 0 para ingresar nuevas letras al password
    indice=0;
  }
}

Código y diagrama: https://wokwi.com/projects/343768666860421715

Librerías del teclado: https://github.com/Chris–A/Keypad

🎦 Este curso: https://www.youtube.com/watch?v=VuJkqL2Ys3Y&list=PLCTD_CpMeEKTvjzabAvLGHakg-ql6t0q6&ab_channel=ProgramadorNovato

🎦 Curso de Arduino: https://www.youtube.com/watch?v=oGinJt9aALc&list=PLCTD_CpMeEKSqw3Nh7rA9aXUAzbPIPkdv&ab_channel=ProgramadorNovato

🎦 [CURSO] C++ DE 0 A HEROE: https://www.youtube.com/watch?v=APN8aCyPvww&list=PLCTD_CpMeEKTofxs7iottRxJ5YPM7BOcc

Los comentarios están cerrados.

Salir de la versión móvil