🔩Funcionamiento
Este artículo presenta una inmersión profunda en el diseño y la construcción de un Sistema de Control de Acceso Electrónico (EACS) basado en la plataforma Arduino UNO. Este proyecto no es meramente un ejercicio de conmutación; representa una fusión elegante de interfaz de usuario robusta, lógica de seguridad programable y actuación electromecánica precisa. El objetivo central es crear un mecanismo de bloqueo que se active (movimiento del servomotor) únicamente tras la validación de una secuencia de caracteres ingresada por un teclado matricial 4×4, con toda la información de estado visualizada en un display LCD 16×2 comunicado eficientemente a través de la interfaz I2C.
La Interfaz de Entrada: Teclado Matricial 4×4
El teclado matricial es el punto de contacto primario del usuario. Su selección es estratégica en el diseño de microcontroladores debido a su eficiencia en el consumo de pines. Un teclado de 16 teclas (4 filas 4 columnas) solo requiere 4 + 4 = 8 pines digitales de Arduino, a diferencia de los 16 pines que requeriría la conexión individual de cada pulsador.
- Principio de Barrido (Scanning): El código de Arduino realiza un “barrido” cíclico, energizando una fila a la vez y leyendo el estado de las columnas. Cuando se detecta un pulso en una columna, el sistema infiere la coordenada exacta (Fila, Columna) y traduce esto a la tecla presionada (el carácter asociado).
La Interfaz de Visualización: LCD 16×2 con Módulo I2C
La pantalla de cristal líquido (LCD) es esencial para la retroalimentación del sistema, mostrando mensajes de bienvenida, el progreso de la clave ingresada (generalmente con asteriscos para ocultar los dígitos), y el resultado final de la validación.
- Ventaja del I2C (Inter-Integrated Circuit): Históricamente, una LCD 16×2 requería hasta 11 pines de Arduino en modo paralelo de 4 bits. El módulo conversor I2C, generalmente basado en el chip PCF8574, reduce drásticamente esta necesidad. Toda la comunicación de datos y comandos se realiza a través de solo dos líneas de comunicación: SDA (Serial Data Line) y SCL (Serial Clock Line), liberando valiosos pines para otros sensores o actuadores en el proyecto.
El Actuador de Precisión: Servomotor
El servomotor de 5V (comúnmente el modelo SG90 o MG996R, dependiendo del torque requerido) se utiliza para simular el pestillo o el mecanismo de apertura.
- Control PWM: El movimiento del servo se logra mediante la modulación por ancho de pulso (PWM). La librería
Servo.hde Arduino simplifica esto, permitiendo al programador simplemente indicar el ángulo deseado (ej. 90° para bloqueo, 0° para apertura). Esta capacidad de posicionamiento angular preciso es vital para un sistema de bloqueo.
🔨Componentes
| Componente | Cantidad | Especificación | Función |
|---|---|---|---|
| Placa Arduino | 1 | Arduino Uno, Nano, etc. | Control de componentes(cerebro) |
| Servo | 1 | SG90 5v | Abrir puerta |
| Teclado matricial | 1 | 4×4 | Introducir la contraseña |
| LCD | 1 | 1602a 16×2 | Mostrar información |
| Interfaz | 1 | I2C | Reducir pines del LCD |
| Cables de conexión | n | Unir los componentes | |
| Fuente de alimentación | 1 | 5v DC | Suministro de energía. |
🔌Conexiones
- Conexión del teclado 4×4:
- Fila 1 del teclado matricial a pin 9 del Arduino.
- Fila 2 del teclado matricial a pin 8 del Arduino.
- Fila 3 del teclado matricial a pin 7 del Arduino.
- Fila 4 del teclado matricial a pin 6 del Arduino.
- Fila 5 del teclado matricial a pin 5 del Arduino.
- Fila 6 del teclado matricial a pin 4 del Arduino.
- Fila 7 del teclado matricial a pin 3 del Arduino.
- Fila 8 del teclado matricial a pin 2 del Arduino.
- Conexiones del Servo:
- Conecta la entrada del servo(IN) al pin 11 de la placa Arduino.
- Conecta el pin VCC del servo al pin de 5V de la fuente de poder.
- Conecta el pin GND del servo al pin GND de la fuente de poder.
- Conexiones del LCD con interfaz I2C:
- Conecta el pin VCC del servo al pin de 5V de la placa Arduino.
- Conecta el pin GND del servo al pin GND de la placa Arduino
- Fuente de alimentación:
- Conecta GND de la fuente a GND de arduino(solo si usas fuente de alimentación externa)
0️⃣Código
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | #include <Arduino.h> #include <Keypad.h> #include <Servo.h> #include <LiquidCrystal_I2C.h> void moveServo(); // Configuración del teclado matricial const byte ROWS = 4; const byte COLS = 4; char keys[ROWS][COLS] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} }; byte rowPins[ROWS] = {9, 8, 7, 6}; // Pines de las filas byte colPins[COLS] = {5, 4, 3, 2}; // Pines de las columnas Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS); // Configuración del LCD con interfaz I2C LiquidCrystal_I2C lcd(0x27, 16, 2); // Dirección I2C, 16 columnas y 2 filas // Configuración del servomotor Servo servo; const int SERVO_PIN = 11; // Clave de acceso const String clave_correcta = "1234"; String clave_ingresada = ""; void setup() { lcd.init(); lcd.backlight(); lcd.print("Ingrese clave:"); servo.attach(SERVO_PIN); servo.write(90); // Posición inicial del servomotor } void loop() { char tecla = keypad.getKey(); if (tecla) { if (tecla == '#') { if (clave_ingresada == clave_correcta) { lcd.clear(); lcd.print("Acceso permitido"); moveServo(); // Mueve el servomotor delay(3000); // Tiempo para que el motor se mantenga servo.write(90); // Regresa al estado inicial } else { lcd.clear(); lcd.print("Clave incorrecta"); delay(2000); lcd.clear(); lcd.print("Ingrese clave:"); } clave_ingresada = ""; // Reinicia la clave ingresada } else if (tecla == '*') { clave_ingresada = ""; // Limpia la clave ingresada lcd.clear(); lcd.print("Ingrese clave:"); } else { clave_ingresada += tecla; // Agrega la tecla presionada lcd.setCursor(0, 1); // Segunda línea del LCD lcd.print(clave_ingresada); } } } void moveServo(){ for(int i = 90; i >= 0 ; i--){ servo.write(i); delay(10); } } |
🖌️Diseños

🎬Videos
📑Conclusión
El proyecto del Sistema de Control de Acceso Bi-Modal es una demostración integral de cómo la electrónica, la programación y la ingeniería de sistemas convergen para resolver problemas de seguridad en el mundo real. Al fusionar la interacción de un teclado matricial 4×4, la eficiencia de comunicación I2C con un display LCD 16×2, y la actuación precisa de un servomotor, se ha construido un prototipo robusto de una cerradura digital.
Este ejercicio de ingeniería no solo valida la contraseña mediante lógica condicional, sino que también ilustra la optimización de recursos:
- Ahorro de Pines: La elección de la interfaz I2C para el LCD liberó más de la mitad de los pines necesarios en una conexión paralela tradicional.
- Manejo de Actuadores: Se demostró el control angular exacto de un componente físico (el servomotor) a través de señales PWM generadas por software.
- Feedback Crítico: El LCD proporciona una retroalimentación clara e inmediata al usuario, esencial para cualquier sistema de seguridad.
En resumen, el sistema es una prueba fehaciente de que la placa Arduino es una herramienta excepcionalmente versátil para desarrollar soluciones de seguridad mecatrónica. Al gestionar con éxito la interacción entre entrada de datos, lógica de procesamiento y actuación física, este proyecto sienta una base sólida para futuros desarrollos en domótica, automatización y sistemas de seguridad inteligentes.

