Cerradura Electrónica con Teclado Arduino: Código Definido por Usuario
Componentes y suministros
| Componente | Cantidad | Notas |
|---|---|---|
| Arduino UNO | 1 | |
| Teclado matriz 4x4 | 1 | |
| Pulsador genérico | 1 | Apertura desde dentro |
| LCD I²C | 1 | |
| Cerradura solenoide lineal | 1 | |
| MOSFET IRF510N | 1 | Control solenoide |
| Relé 1 canal | td>1 | Alternativa al MOSFET |
Herramientas necesarias
- Protoboard 170 pines
- Kit 10 cables puente 5 cm
Sobre el proyecto
Hola, bienvenido a este tutorial (sí, es viejo pero clásico). Hoy hago un proyecto de cerradura con Arduino, teclado, LCD I²C, y usaré para la cerradura un solenoide y un relé. Puedes ver mi tutorial de cerradura con huella dactilar donde usé cerradura con motor DC; depende de tu sistema de cerradura elegir cableado, códigos y adaptarlos.
Nota: Para proyecto real, no recomiendo solenoide, sino hackear una cerradura que se abra tanto electrónica como mecánicamente y adaptar tu proyecto a ella.
Componentes
Necesitamos estos componentes, más cables puente y fuente 12V (no la añadí aquí):
El pulsador sirve para abrir desde dentro; puedes quitarlo si no lo quieres. La resistencia es para antirrebote.
Uso teclado 4×4; puedes usar 3×4 pero tendrás que modificar cosas en el código (para confirmar uso 'A', puedes cambiar a '*' o '#').
El solenoide se alimenta con 12V externo y se controla con transistor MOSFET IRF510N.
El transistor actúa como interruptor; mejor usar canal N. El IRF510N es popular con Arduino: al aplicar 5V entre Gate y Source, el transistor cierra entre Drain y Source (como interruptor cerrado), sin necesitar resistencia como los bipolares. Sin voltaje en Gate, actúa como interruptor abierto. Así controlamos el solenoide.
Para la otra opción uso módulo relé 1 canal, funciona con 3.3V, y controlamos su entrada como el transistor, solo que están invertidos (lo veremos en el código).
Diagrama de flujo del algoritmo
Para entender fácil, aquí el diagrama de flujo (visión general, no detallado completamente):
Nota: Puedes usar el relé para controlar cualquier cerradura eléctrica hasta 250VAC, también para el solenoide.
Los códigos son exactamente iguales, solo cambias entre (LOW y HIGH) para abrir la cerradura.
Importante: Primera vez debes subir el código, cambiar el código de acceso, luego descomentar unas líneas (léelas en setup) y volver a subir para que lea el código de la EEPROM. SOLO SE HACE UNA VEZ.
También puedes cambiar longitud del código; al principio lo hice de 4 dígitos, puedes cambiarlo desde el código por defecto, ya que usé sizeof(code) en vez de 4. No puedes cambiar código de 4 a 6 dígitos directamente; primero cambia el código inicial en el fuente.
Pruebas
Encontrarás las pruebas en las fotos de abajo, navega por ellas:
Eso fue la prueba del proyecto, igual para solenoide o relé. El pulsador abre desde dentro si lo quieres, o puedes quitarlo.
Espero que sea útil. Si tienes problema o duda, deja comentario.
Código
Keypad_doorlock_solenoid.ino (Arduino)
Recuerda: sube el código primero, luego descomenta líneas 62-64 y vuelve a subir. Solo una vez.
/* Funciona con Teclado 4x4, LCD I2C, transistor IRF510N y pulsador
* Cerradura donde transistor controla solenoide, abres con código correcto
* o pulsador desde dentro
* Código se cambia directamente por teclado sin volver a subir
* Código guardado en EEPROM
* Referencia: www.surtrtech.com */
#include <Keypad.h>
#include <EEPROM.h>
#include <LiquidCrystal_I2C.h>
#define Solenoid 11 // Realmente Gate del transistor que controla solenoide
#define O_Button 10 // Pulsador apertura interior
#define I2C_ADDR 0x27 // Dirección I2C (usa scanner para encontrar, 0x27 típico)
#define BACKLIGHT_PIN 3
#define En_pin 2
#define Rw_pin 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7
const byte numRows = 4;
const byte numCols = 4;
char keymap[numRows][numCols] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
char keypressed;
char code[] = {'6','6','0','1'}; // Código por defecto, cámbialo o hazlo 'n' dígitos
char code_buff1[sizeof(code)];
char code_buff2[sizeof(code)];
short a=0, i=0, s=0, j=0;
byte rowPins[numRows] = {9,8,7,6}; // Filas 0-3
byte colPins[numCols] = {5,4,3,2}; // Columnas 0-3
LiquidCrystal_I2C lcd(I2C_ADDR, En_pin, Rw_pin, Rs_pin, D4_pin, D5_pin, D6_pin, D7_pin);
Keypad myKeypad = Keypad(makeKeymap(keymap), rowPins, colPins, numRows, numCols);
void setup() {
lcd.begin(16,2);
lcd.setBacklightPin(BACKLIGHT_PIN, POSITIVE);
lcd.setBacklight(HIGH);
lcd.home();
lcd.print("Standby");
pinMode(Solenoid, OUTPUT);
pinMode(O_Button, INPUT);
// for(i=0; i
Keypad_doorlock_relay.ino (Arduino)
Recuerda: sube el código primero, luego descomenta líneas 62-64 y vuelve a subir. Solo una vez.
/* Funciona con Teclado 4x4, LCD I2C, módulo relé y pulsador
* Cerradura donde relé controla cerradura, abres con código correcto
* o pulsador desde dentro
* Código se cambia directamente por teclado sin volver a subir
* Código guardado en EEPROM
* Referencia: www.surtrtech.com */
#include <Keypad.h>
#include <EEPROM.h>
#include <LiquidCrystal_I2C.h>
#define Relay 11 // Controla el Relé
#define O_Button 10 // Pulsador
#define I2C_ADDR 0x27 // Dirección I2C (escanea para encontrar)
#define BACKLIGHT_PIN 3
#define En_pin 2
#define Rw_pin 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7
const byte numRows = 4;
const byte numCols = 4;
char keymap[numRows][numCols] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
char keypressed;
char code[] = {'6','6','0','1'};
char code_buff1[sizeof(code)];
char code_buff2[sizeof(code)];
short a=0, i=0, s=0, j=0;
byte rowPins[numRows] = {9,8,7,6};
byte colPins[numCols] = {5,4,3,2};
LiquidCrystal_I2C lcd(I2C_ADDR, En_pin, Rw_pin, Rs_pin, D4_pin, D5_pin, D6_pin, D7_pin);
Keypad myKeypad = Keypad(makeKeymap(keymap), rowPins, colPins, numRows, numCols);
void setup() {
lcd.begin(16,2);
lcd.setBacklightPin(BACKLIGHT_PIN, POSITIVE);
lcd.setBacklight(HIGH);
lcd.home(); lcd.print("Standby");
pinMode(Relay, OUTPUT);
pinMode(O_Button, INPUT);
// for(i=0; i
Esquemáticos
Proceso de manufactura
- Por Dentro de las Cámaras Acorazadas Bancarias: Historia, Diseño y Futuro de la Seguridad
- Construya una Puerta con Auto‑Bloqueo Inteligente Usando la Proximidad Bluetooth de su Smartphone
- Sistema de Sensor de Temperatura Multiposición para Integración en Hogar Inteligente
- MotionSense: Detección inteligente de intrusos con Arduino y ESP8266
- Prevención de Incendios en Impresoras 3D: Sistema de Seguridad con Sensor Inteligente
- Cerradura de Puerta Segura por Contraseña con Arduino, Teclado y Actuador Lineal
- Crear un medidor IoT web con Arduino, Yaler e IFTTT
- Levitación magnética repulsiva con Arduino: Circuito simple y guía DIY
- Robot pinza controlado remotamente para manipulación de precisión
- Laboratorio avanzado de microcontroladores: ESP32, Arduino, PIC y módulos de sensores
- CoroFence: Detector Térmico Avanzado con Sensor PIR e Integración IoT