La seguretat és una preocupació important en el nostre dia a dia, i els panys digitals s’han convertit en una part important d’aquests sistemes de seguretat. Un d’aquest tipus de bloqueig de codi digital s’imita en aquest projecte mitjançant una placa arduino i un teclat matricial.
Components
- Arduino
- Mòdul de teclat
- Zumbador
- LCD de 16x2
- BC547 Transistor
- Resistència (1 k)
- Taula de pa
- Potència
- Connexió de cables
En aquest circuit hem utilitzat la tècnica de multiplexació per a la interfície del teclat per introduir la contrasenya al sistema. Aquí fem servir un teclat 4x4 que conté 16 tecles. Si volem utilitzar 16 tecles, necessitarem 16 pins per a la connexió a arduino, però en la tècnica de multiplexació només haurem d’utilitzar 8 pins per connectar 16 tecles. De manera que és una manera intel·ligent d’interfaçar un mòdul de teclat.
Tècnica de multiplexació: la tècnica de multiplexació és una manera molt eficient de reduir el nombre de pins utilitzats amb el microcontrolador per proporcionar entrada o contrasenya o números. Bàsicament, aquesta tècnica s'utilitza de dues maneres: una és l'escaneig de files i l'altra és l'escaneig de dos punts. Però en aquest projecte basat en arduino hem utilitzat la biblioteca de teclats, de manera que no necessitem crear cap codi de multiplexació per a aquest sistema. Només hem d’utilitzar la biblioteca del teclat per proporcionar informació.
Descripció del circuit
El circuit d’aquest projecte és molt senzill i conté Arduino, mòdul de teclat, timbre i LCD. Arduino controla els processos complets com prendre el mòdul de teclat del formulari de contrasenya, comparar contrasenyes, conduir el brunzidor i enviar l’estat a la pantalla LCD. El teclat s’utilitza per prendre contrasenyes. El buzzer s’utilitza per indicacions i la pantalla LCD s’utilitza per mostrar-hi l’estat o els missatges. El buzzer és accionat mitjançant un transistor NPN.

Els pins de columna del mòdul de teclat estan connectats directament als pins 4, 5, 6, 7 i els pins de fila estan connectats a 3, 2, 1, 0 de l’arduino uno. Una pantalla LCD de 16x2 està connectada amb arduino en mode de 4 bits. Els pins de control RS, RW i En estan connectats directament als pins 13 d’arduino, GND i 12. I el pin de dades D4-D7 està connectat als pins 11, 10, 9 i 8 d’arduino. I un brunzidor està connectat al pin 14 (A1) de l’arduino mitjançant un transistor NPN BC547.
Treball
Hem utilitzat la EEPROM d’arduino incorporada per desar la contrasenya, de manera que quan executem aquest circuit per primera vegada, llegiu les dades d’escombraries de la EEPROM d’arduino incorporada i les compareu amb la contrasenya d’entrada i envieu un missatge a la pantalla LCD que es denega l’accés perquè la contrasenya no coincideix. Per solucionar aquest problema, hem d’establir una contrasenya per defecte per primera vegada mitjançant la programació que es mostra a continuació:
per a (int j = 0; j <4; j ++) EEPROM.write (j, j + 49);
lcd.print ("Introduïu la vostra contrasenya:"); lcd.setCursor (0,1); for (int j = 0; j <4; j ++) pass = EEPROM.read (j);
Això establirà la contrasenya "1234" a EEPROM d'Arduino.
Després d’executar-lo per primera vegada, hem d’eliminar-lo del programa i tornar a escriure el codi a l’arduino i executar-lo. Ara el vostre sistema funcionarà bé. I per segona vegada la contrasenya que utilitzeu ara és "1234". Ara podeu canviar-lo prement el botó # i, a continuació, introduïu la contrasenya actual i, a continuació, introduïu la vostra nova contrasenya.
Quan introduïu la vostra contrasenya, el sistema compararà la vostra contrasenya introduïda amb la contrasenya que s’emmagatzema a EEPROM d’arduino. Si es produeix una coincidència, la pantalla LCD mostrarà "accés concedit" i, si la contrasenya és incorrecta, la pantalla LCD "Accés denegat" i el brunzidor emetrà un so continu durant algun temps. I el timbre també emet un so cada vegada que l’usuari prem qualsevol botó del teclat.
Descripció de la programació
Al codi hem utilitzat la biblioteca de teclats per a la interfície del teclat amb arduino.
#incloure
byte const ROWS = 4; // quatre files const byte COLS = 4; // quatre columnes char hexaKeys = {{'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', ' 8 ',' 9 ',' C '}, {' * ',' 0 ',' # ',' D '}}; byte rowPins = {3, 2, 1, 0}; // connecteu-vos als pinouts de la fila del byte del teclat colPins = {4, 5, 6, 7}; // connectar-se als pinouts de la columna del teclat // inicialitzar una instància de la classe NewKeypad Keypad customKeypad = Teclat (makeKeymap (hexaKeys), rowPins, colPins, ROWS, COLS);
Hem inclòs la biblioteca LCD per a la interfície LCD i, per a la interfície EEPROM, hem inclòs la biblioteca EEPROM.h., I després hem inicialitzat els pins variables i definits per als components.
#define buzzer 15 LiquidCrystal lcd (13,12,11,10,9,8); contrasenya char; char pass, pass1; int i = 0; char customKey = 0;
I després vam inicialitzar la pantalla LCD i donar direcció als pins en funció de configuració
void setup () {lcd.begin (16,2); pinMode (led, OUTPUT); pinMode (buzzer, OUTPUT); pinMode (m11, OUTPUT); pinMode (m12, OUTPUT); lcd.print ("electrònic"); lcd.setCursor (0,1); lcd.print ("Bloqueig del teclat"); endarreriment (2000); lcd.clear (); lcd.print ("Introduïu la vostra contrasenya:"); lcd.setCursor (0,1);
Després d'això, llegim el teclat en funció de bucle
customKey = customKeypad.getKey (); if (customKey == '#') change (); if (customKey) {contrasenya = customKey; lcd.print (customKey); beep (); }
A continuació, compareu la contrasenya amb la contrasenya de desar mitjançant el mètode de comparació de cadenes
if (i == 4) {delay (200); for (int j = 0; j <4; j ++) pass = EEPROM.read (j); if (! (strncmp (password, pass, 4))) {digitalWrite (led, HIGH); beep (); lcd.clear (); lcd.print ("Contrasenya acceptada"); endarreriment (2000); lcd.setCursor (0,1); lcd.print ("#. Canvia la clau de pas"); endarreriment (2000); lcd.clear (); lcd.print ("Introduïu la contrasenya:"); lcd.setCursor (0,1); i = 0; digitalWrite (led, BAIX); }
Aquesta és la funció de canvi de contrasenya i la funció de so de timbre
void change () {int j = 0; lcd.clear (); lcd.print ("UR Current Passk"); lcd.setCursor (0,1); while (j <4) {char key = customKeypad.getKey (); if (clau) {pass1 = clau; lcd.print (clau); void beep () {digitalWrite (brunzidor, ALT); retard (20); digitalWrite (brunzidor, BAIX); }
