Cerradura de Puerta Segura por Contraseña con Arduino, Teclado y Actuador Lineal
Componentes y suministros
| Arduino UNO | × | 1 |
| Teclado de membrana 4x4 | × | 1 |
| Driver de motor dual H-Bridge L293D (Texas Instruments) | × | 1 |
| Actuador lineal 12V | × | 1 |
Sobre el proyecto
Hay numerosos sitios web que han publicado este proyecto y está presente en varios canales de YouTube. Siendo honesto, no es nada original. Pero puedo explicarlo y mostrarlo de manera más simple e informativa.
El teclado matriz
El componente principal es el teclado matriz 4x4 de membrana. Las teclas son pulsadores que se cierran al presionarse y vuelven a abrir al soltarse. Internamente están conectados en filas y columnas: al presionar '1', se conectan columna 1 y fila 1; al presionar '9', fila 3 y columna 3.
Escaneo del teclado
El escaneo se hace con 4 pines como salidas (filas) y 4 como entradas (columnas) con resistencias pull-up internas. Todas las filas se ponen LOW una por una, muy rápido. Cuando se presiona una tecla, la columna correspondiente se vuelve LOW. Leyendo el estado de las columnas múltiples veces por segundo, se detecta qué tecla se presionó: si fila 1 está LOW y columna 1 está LOW simultáneamente, se presionó '1'.
Código 1: Escaneo básico (sin librería)
Escribí este código yo mismo para entender el funcionamiento y poder usarlo en STM32 donde la librería Keypad no era compatible. Con este código entenderás la explicación anterior. O puedes usar la librería Keypad y el ejemplo 'customkeypad'. Ambos sirven, pero este código explica el funcionamiento.
int rows=4; int columns=4;
#define c3 9 #define c2 8 #define c1 7 #define c0 6
#define r3 5 #define r2 4 #define r1 3 #define r0 2
void setup() {
Serial.begin(9600);
pinMode(c0,INPUT_PULLUP); pinMode(c1,INPUT_PULLUP);
pinMode(c2,INPUT_PULLUP); pinMode(c3,INPUT_PULLUP);
pinMode(r0,OUTPUT); pinMode(r1,OUTPUT);
pinMode(r2,OUTPUT); pinMode(r3,OUTPUT);
pinMode(11,OUTPUT); pinMode(12,OUTPUT);
}
char readkey(void) {
digitalWrite(r0,LOW); digitalWrite(r1,HIGH); digitalWrite(r2,HIGH); digitalWrite(r3,HIGH);
if(digitalRead(c0)==LOW){delay(500); return '1';}
else if(digitalRead(c1)==LOW){delay(500); return '2';}
else if(digitalRead(c2)==LOW){delay(500); return '3';}
else if(digitalRead(c3)==LOW){delay(500); return 'A';}
digitalWrite(r0,HIGH); digitalWrite(r1,LOW); digitalWrite(r2,HIGH); digitalWrite(r3,HIGH);
if(digitalRead(c0)==LOW){delay(500); return '4';}
else if(digitalRead(c1)==LOW){delay(500); return '5';}
else if(digitalRead(c2)==LOW){delay(500); return '6';}
else if(digitalRead(c3)==LOW){delay(500); return 'B';}
digitalWrite(r0,HIGH); digitalWrite(r1,HIGH); digitalWrite(r2,LOW); digitalWrite(r3,HIGH);
if(digitalRead(c0)==LOW){delay(500); return '7';}
else if(digitalRead(c1)==LOW){delay(500); return '8';}
else if(digitalRead(c2)==LOW){delay(500); return '9';}
else if(digitalRead(c3)==LOW){delay(500); return 'C';}
digitalWrite(r0,HIGH); digitalWrite(r1,HIGH); digitalWrite(r2,HIGH); digitalWrite(r3,LOW);
if(digitalRead(c0)==LOW){delay(500); return '*';}
else if(digitalRead(c1)==LOW){delay(500); return '0';}
else if(digitalRead(c2)==LOW){delay(500); return '#';}
else if(digitalRead(c3)==LOW){delay(500); return 'D';}
return 'o';
}
char nfunc(void) {
char key='o';
while(key=='o') key=readkey();
return key;
}
void loop() {
char key1= nfunc();
if(key1) Serial.print(key1);
}
Código 2: Validación de contraseña y control del actuador
Tras verificar el escaneo, implementamos la contraseña. Definí un string "1234" como contraseña. Lo que se teclea se guarda en un array. Cuando se alcanza 4 dígitos, se comparan. Si coinciden → contraseña correcta (LED en pin 11 se enciende, actuador se retrae abriendo la puerta). Si no → "intruso".
char password[5]="1234";
char typed[5];
int count=0;
void loop() {
char key1= nfunc();
if(key1){
typed[count]=key1;
count++;
Serial.print(key1);
}
if(count==4){
if(strcmp(typed,password)==0) {
Serial.println(" correct");
digitalWrite(11,HIGH);
digitalWrite(12,LOW);
delay(250);
digitalWrite(11,LOW);
} else{
Serial.println(" intruder");
}
count=0;
}
}
El actuador lineal 12V se controla con el L293D. Este IC toma entradas de 5V del Arduino y entrega 12V al actuador. Cuando la contraseña es correcta, pin 11 HIGH y pin 12 LOW → actuador se retrae → puerta se abre.
Esquemáticos
Conexión del actuador donde va el motor. Pin 8 a 12V. Incluye videos de demostración: tecla presionada en monitor serial, LED al acertar contraseña, actuador abriendo puerta.
Proceso de manufactura
- Por Dentro de las Cámaras Acorazadas Bancarias: Historia, Diseño y Futuro de la Seguridad
- Puertas Giratorias: Diseño, Historia y Beneficios de Ahorro Energético
- Canales y esclusas: ingeniería, historia y futuro del transporte fluvial en EE. UU.
- La evolución y fabricación de cerraduras modernas de cilindro de pines
- Cerradura de combinación: Diseño, fabricación y evolución histórica
- Estación meteorológica solar DIY con Raspberry Pi
- Construya una Puerta con Auto‑Bloqueo Inteligente Usando la Proximidad Bluetooth de su Smartphone
- Construye una Puerta con Reconocimiento Facial Segura usando Windows IoT y Raspberry Pi
- Autómatas Celulares en Tiempo Real con Arduino y Pantalla OLED 128x64
- Cerradura Inteligente WiFi con Arduino y ESP8266: Desbloqueo desde el Móvil
- Configuración de Motores: Guía Completa de Tipos y Características