En este tutorial veremos como crear un control de acceso básico, con teclado matricial de membrana y arduino nano. Armaremos el circuito, analizaremos el código fuente y finalmente probaremos este sistema. No te pierdas ningún video más suscríbete a nuestro canal de telegram https://t.me/carlosvolt_electronica_robotica
Tal vez pueda interesarte proyectos en arduino, pic, robótica, telecomunicaciones, suscribete en http://www.youtube.com/user/carlosvolt?sub_confirmation=1 mucho videos con código fuentes completos y diagramas
Componentes electrónicos
Arduino Nano
El Arduino Nano es una placa pequeña, completa y compatible con la placa de pruebas basada en el ATmega328 (Arduino Nano 3.x). Tiene más o menos la misma funcionalidad del Arduino Duemilanove, pero en un paquete diferente. Solo carece de un conector de alimentación de CC y funciona con un cable USB Mini-B en lugar de uno estándar.
Microcontrolador | ATmega328 |
Arquitectura | AVR |
Tensión de funcionamiento | 5 V |
Memoria flash | 32 KB de los cuales 2 KB utiliza el gestor de arranque |
SRAM | 2 KB |
Velocidad de reloj | 16 MHz |
Pines analógicos IN | 8 |
EEPROM | 1 KB |
Corriente CC por pines de E / S | 40 mA (pines de E / S) |
Voltaje de entrada | 7-12 V |
Pines de E / S digitales | 22 (6 de los cuales son PWM) |
Salida PWM | 6 |
El consumo de energía | 19 mA |
Tamaño de PCB | 18 x 45 mm |
Peso | 7 g |
Diagrama de pines
Buzzer
Pines hembra
Módulo Relay
ESPECIFICACIONES TÉCNICAS
- Voltaje de Operación: 5V DC
- Señal de Control: TTL (3.3V o 5V)
- Nº de Relays (canales): 1 CH
- Capacidad máx: 10A/250VAC, 10A/30VDC
- Corriente máx: 10A (NO), 5A (NC)
- Tiempo de acción: 10 ms / 5 ms
- Para activar salida NO: 0 Voltios
Zócalo para arduino nano
Un resistor de 470 Ohm
Un teclado de membrana de 4 x 4
Cables dupont hembra macho
Pines macho a 90 grados
Un diodo led de 5 mm
Circuito impreso (pcb)
Archivo gerber —> pcb
Código fuente
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 |
#include <Keypad.h> char password[]="1234"; //Contraseña de 4 dígitos char clave[4]; //Aqui guardamos los caracteres presionados en el teclado int conteo=0; //Esta variable se aumente en 1 x cada tecla precionada const byte FILAS = 4; //Numero de filas del teclado que se esta usando const byte COLUMNAS = 4; //Numero de columnas del teclado que se esta usando //Mapa del teclado que estamos usando char mapaTeclas[FILAS][COLUMNAS] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} }; byte pinesFilas[FILAS] = {10, 9, 8, 7}; //Pines donde estan las filas del teclado byte pinesColumnas[COLUMNAS] = {6, 5, 4, 3}; //Pines donde estan las columnas del teclado Keypad teclapad = Keypad(makeKeymap(mapaTeclas), pinesFilas, pinesColumnas, FILAS, COLUMNAS); //Inicializamos el teclado matricial void setup() { Serial.begin(9600); //Puerto serie a 9600 bps pinMode(2, OUTPUT); //Pin 2 como salida para el módulo relay pinMode(12, OUTPUT); //Pin 12 como salida para el buzzer } void loop() { char tecla = teclapad.getKey(); //se alamacena en la variable "tecla" el caracter presionado if (tecla != NO_KEY) //¿Se ha presionado alguna tecla? { clave[conteo]=tecla; //Almacenamos caracter por caracter en el arreglo clave[] Serial.println(clave[conteo]); //Se muestra en el puerto serial la tecla presionada conteo=conteo+1; //Se incremente en 1 la variable conteo if(conteo==4) //Si 4 teclas fueron presionadas se verifica si la clave es la correcta o no { if(clave[0]==password[0]&&clave[1]==password[1]&&clave[2]==password[2]&&clave[3]==password[3]) { bip(100);//Suena un solo bip en el buzzer indicando que la calve es correcta //Activamos el módulo relay durante 3 segundos para la apertura de una puerta digitalWrite(2,HIGH); delay(3000); digitalWrite(2,LOW); conteo=0;//Seteamos la variable conteo al valor 0 } //Si la clave es incorrecta sonará dos veces el buzzer if (conteo!=0){ bip(100); bip(100); } conteo=0; //Seteamos la variable conteo al valor 0 } } } //Sonido del buzzer void bip(int demora){ digitalWrite(12, HIGH); delay(demora); digitalWrite(12, LOW); delay(demora); } |
VIDEO RECOMENDADO