Cerradura sin llave segura basada en Arduino con pantalla LCD y teclado 4x4
Componentes y suministros
| Arduino UNO | 1 |
| Teclado matriz 4x4 compatible con LED (SparkFun Button Pad) | 1 |
| Pantalla LCD estándar 16x2 Blanco sobre Azul (Adafruit) | 1 |
| Relé (genérico) | 1 |
| Batería 9V (genérica) | 1 |
| Potenciómetro monovuelta 10 kΩ | 1 |
| Resistencia 10 kΩ | 1 |
Aplicaciones y servicios en línea
- Arduino IDE
Sobre el proyecto
Sistema de cerradura sin llave Arduino con teclado y LCD
Por Ali Hamza
En este proyecto, vamos a hacer un sistema de cerradura sin llave que usa un teclado 4x4 para introducir la contraseña y una cerradura DC para abrir o cerrar la puerta. Se usará una pantalla LCD 16x2 para visualización.
Componentes requeridos
- Arduino
- Teclado 4x4
- LCD
- Cerradura DC
- Relé
- Batería 9V
- Potenciómetro 10k
- Resistencia 220 Ω
¿Cómo funciona?
Cada vez que se presionan teclas, se comparan con la contraseña ya almacenada. Si las teclas presionadas coinciden con la contraseña inicial guardada en la EEPROM ('1234'), la cerradura se abre. Si la contraseña no coincide, se muestra "acceso denegado" en el LCD.
Si se pulsa la tecla '#', se pedirá introducir la contraseña actual y, si coincide, se pedirá la nueva contraseña y esta se cambiará.
Diagrama de circuito
Primero, conecta el teclado 4x4 al Arduino: conecta los primeros seis pines del teclado con los pines A0 a A5 del Arduino. Luego conecta los dos últimos pines del módulo teclado a los pines digitales 3 y 2 del Arduino.
Después, conecta el LCD al Arduino. Las conexiones son:
- Pin 1 LCD (VSS) → GND Arduino
- Pin 2 (VDD) → 5V Arduino
- Pin 3 (V0) → pin central potenciómetro 10k; los otros dos pines del potenciómetro a 5V y GND. Este pin ajusta el contraste del LCD.
- Pin 4 (RS) → pin 7 Arduino
- Pin 5 (R/W) → GND Arduino
- Pin 6 (Enable) → pin 6 Arduino
- Pines 11, 12, 13, 14 (datos) → pines 5, 4, 3, 2 Arduino
- Pin 15 (retroiluminación LCD) → 5V Arduino a través de resistencia 220 Ω
- Pin 16 (negativo retroiluminación) → GND Arduino
Por último, conectamos la cerradura DC con Arduino. La cerradura funciona a 7-12V, así que no podemos conectarla directamente al Arduino. Necesitamos un relé y una batería.
Conecta el pin de señal del relé al pin 10 Arduino y el VCC y GND de la cerradura a 5V y GND Arduino. En el otro lado del relé, conecta el negativo de la batería al común del relé y el NO (Normalmente abierto) a un lado de la cerradura. Luego conecta el otro lado de la cerradura al positivo de la batería.

Código Arduino para cerradura con teclado
La contraseña inicial es 1234.
#include
#include
#include
LiquidCrystal liquid_crystal_display(9,8,7,6,5,4);
char password[4];
char initial_password[4], new_password[4];
int i = 0;
int relay_pin = 10;
char key_pressed = 0;
const byte rows = 4;
const byte columns = 4;
char hexaKeys[rows][columns] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte row_pins[rows] = {A0, A1, A2, A3};
byte column_pins[columns] = {A4, A5, 3, 2};
Keypad keypad_key = Keypad(makeKeymap(hexaKeys), row_pins, column_pins, rows, columns);
void setup() {
pinMode(relay_pin, OUTPUT);
liquid_crystal_display.begin(16,2);
liquid_crystal_display.print(" DIYhacking.com");
liquid_crystal_display.setCursor(0,1);
liquid_crystal_display.print("Electronic Lock ");
delay(2000);
liquid_crystal_display.clear();
liquid_crystal_display.print("Enter Password");
liquid_crystal_display.setCursor(0,1);
initialpassword();
}
void loop() {
digitalWrite(relay_pin, HIGH);
key_pressed = keypad_key.getKey();
if(key_pressed == '#') change();
if (key_pressed) {
password[i++] = key_pressed;
liquid_crystal_display.print(key_pressed);
}
if(i == 4) {
delay(200);
for(int j = 0; j < 4; j++)
initial_password[j] = EEPROM.read(j);
if(!(strncmp(password, initial_password, 4))) {
liquid_crystal_display.clear();
liquid_crystal_display.print("Pass Accepted");
digitalWrite(relay_pin, LOW);
delay(2000);
liquid_crystal_display.setCursor(0,1);
liquid_crystal_display.print("Pres # to change");
delay(2000);
liquid_crystal_display.clear();
liquid_crystal_display.print("Enter Password:");
liquid_crystal_display.setCursor(0,1);
i = 0;
} else {
digitalWrite(relay_pin, HIGH);
liquid_crystal_display.clear();
liquid_crystal_display.print("Wrong Password");
liquid_crystal_display.setCursor(0,1);
liquid_crystal_display.print("Pres # to Change");
delay(2000);
liquid_crystal_display.clear();
liquid_crystal_display.print("Enter Password");
liquid_crystal_display.setCursor(0,1);
i = 0;
}
}
}
void change() {
int j = 0;
liquid_crystal_display.clear();
liquid_crystal_display.print("Current Password");
liquid_crystal_display.setCursor(0,1);
while(j < 4) {
char key = keypad_key.getKey();
if(key) {
new_password[j++] = key;
liquid_crystal_display.print(key);
}
key = 0;
}
delay(500);
if((strncmp(new_password, initial_password, 4))) {
liquid_crystal_display.clear();
liquid_crystal_display.print("Wrong Password");
liquid_crystal_display.setCursor(0,1);
liquid_crystal_display.print("Try Again");
delay(1000);
} else {
j = 0;
liquid_crystal_display.clear();
liquid_crystal_display.print("New Password:");
liquid_crystal_display.setCursor(0,1);
while(j < 4) {
char key = keypad_key.getKey();
if(key) {
initial_password[j] = key;
liquid_crystal_display.print(key);
EEPROM.write(j, key);
j++;
}
}
liquid_crystal_display.print("Pass Changed");
delay(1000);
}
liquid_crystal_display.clear();
liquid_crystal_display.print("Enter Password");
liquid_crystal_display.setCursor(0,1);
key_pressed = 0;
}
void initialpassword() {
for(int j = 0; j < 4; j++)
EEPROM.write(j, j + 49); // '1','2','3','4'
for(int j = 0; j < 4; j++)
initial_password[j] = EEPROM.read(j);
}
Explicación del código
Primero incluimos las librerías para teclado 4x4, LCD y almacenamiento de contraseña. La librería EEPROM guarda la contraseña. La contraseña por defecto es '1234'.
#include
#include
#include
En la función loop, la tecla pulsada se guarda en 'key_pressed' y se compara. Si es '#', se llama a la función change() para cambiar contraseña.
key_pressed = keypad_key.getKey();
if(key_pressed == '#') change();
Las teclas pulsadas se almacenan en 'password' y se muestran en el LCD. Luego se comparan con la contraseña inicial en EEPROM. Si coinciden, la cerradura se abre y se muestra "Pass Accepted". Si no, pide volver a introducir la contraseña.
if (key_pressed) {
password[i++] = key_pressed;
liquid_crystal_display.print(key_pressed);
}
if(i == 4) {
delay(200);
for(int j = 0; j < 4; j++)
initial_password[j] = EEPROM.read(j);
if(!(strncmp(password, initial_password, 4))) {
liquid_crystal_display.clear();
liquid_crystal_display.print("Pass Accepted");
digitalWrite(relay_pin, LOW);
delay(2000);
// ...
}
}
Si se pulsa '#', se llama a change(). En esta función, pide la contraseña actual. Si es correcta, pide la nueva y la guarda en EEPROM.
void change() {
int j = 0;
liquid_crystal_display.clear();
liquid_crystal_display.print("Current Password");
liquid_crystal_display.setCursor(0,1);
while(j < 4) {
char key = keypad_key.getKey();
if(key) {
new_password[j++] = key;
liquid_crystal_display.print(key);
}
key = 0;
}
delay(500);
// ... (resto de la función)
}
Etiquetas: Teclado 4x4, Arduino, Cerradura DC, Cerradura, Teclado, LCD, Lock
Esquemáticos
Usa un Arduino para controlar una cerradura de solenoide que se abre con la combinación correcta de teclas.

Proceso de manufactura
- Construye un Juego Giroscópico en Tiempo Real con Arduino Nano y Sensor MPU-6050
- Sistema de Asistencia RFID Fiable con Arduino y Python
- Proyecto Sensor DHT11 Temperatura y Humedad con Indicadores LED y Altavoz Piezo
- Crea Animaciones y Juegos en LCD 16×2 con Arduino UNO
- Unopad: Controlador MIDI Arduino para Ableton Live sin complicaciones
- Registrador de Temperatura y Humedad con Arduino, DHT11 y Ethernet Shield
- Sensor de obstáculos IR casero con Arduino – Tutorial fácil con LED IR y fotodiodo
- Construye un Cubo LED 4x4x4 con Arduino Uno y 1Sheeld – Proyecto LED Interactivo
- Tacómetro Arduino de Alta Velocidad – Algoritmo "Single-Shot" para RPM Preciso
- Sistema de control de asistencia RFID en tiempo real con Arduino y Google Sheets
- Cerradura Inteligente Sin Llave: Arduino y Android con Bluetooth y Contraseña