Circuit de bloqueig de seguretat de contrasenya mitjançant teclat 4 × 4 i Arduino

Proveu El Nostre Instrument Per Eliminar Problemes





En aquest post anem a construir un circuit de bloqueig de seguretat de contrasenya, al qual es pot accedir mitjançant una contrasenya de 6 dígits. Per ser més precisos, és una contrasenya alfanumèrica.

Maquinari per a aquest projecte

Utilitzarem el teclat 4x4, que consta de 0 a 9 valors decimals, dos caràcters especials '#' i '*' i alfabets de A a D. La combinació d'aquests caràcters es pot utilitzar com a contrasenya.



L'Arduino és el cervell del sistema, un relé s'interfaccia amb Arduino per activar-lo i desactivar-lo, quan es mana la contrasenya correcta. Aquí s’utilitzen dos indicadors LED per indicar l’estat del sistema de bloqueig.

Si no esteu familiaritzat amb el teclat 4x4, consulteu el meu article anterior, que he tractat de manera exhaustiva conceptes bàsics del teclat de matriu 4x4



El projecte proposat té un disseny de maquinari força minimalista. Només consisteix en un teclat, relé, arduino i un parell de LEDs, fins i tot un noob en arduino pot aconseguir-ho amb facilitat.

L'única part que és lleugerament difícil en aquest projecte és la codificació, no us heu de preocupar del codi que es dóna en aquest projecte. El programa s’ha d’escriure de manera que sigui a prova d’engany i cap segrestador pugui piratejar el sistema.

Però vés amb compte si exposes que el maquinari o el maquinari d’aquest projecte és fàcilment accessible, el relé es pot piratejar amb facilitat. Per tant, mantingueu aquest projecte en un xassís ben protegit.

Com funciona

Nota: Cal connectar una resistència limitadora de corrent 4.7K a la base del transistor, que no es mostra al diagrama.

Ara vegem com funciona aquest circuit de bloqueig de seguretat de la contrasenya Arduino. Llegiu detingudament les instruccions que es donen a continuació per fer funcionar el circuit.

Esquema de connexions

Circuit de bloqueig de seguretat de la contrasenya Arduino mitjançant teclat 4x4

A continuació, es mostren les dues il·lustracions sobre la interfície del teclat i Arduino:

Resultats de la prova de bloqueig de seguretat de contrasenyes Arduino

• Quan el circuit està encès, demana una contrasenya, es pot veure al monitor sèrie (el monitor sèrie no és obligatori, però es pot utilitzar per fer proves).

• Introduïu la contrasenya que heu introduït al programa abans de compilar-la.

• Mentre premeu les tecles, el LED verd parpelleja durant una dècima de segon, cosa que indica que l'usuari prem una tecla.

• Quan hàgiu introduït la contrasenya de 6 dígits, premeu 'D' al teclat que actua com a 'Retorn'. Si la vostra contrasenya és correcta, el relé s’activa i el LED verd s’encén.

• Per desactivar el relé, premeu 'C' al teclat. Quan es fa això, el LED verd s'apaga i el relé es desactiva. Cap altra tecla pot desactivar el relé.

• Si la contrasenya introduïda per l'usuari és incorrecta, el LED vermell s'encén i l'usuari ha d'esperar 30 segons per iniciar el següent intent. Quan s’acaba el 30 segon, el LED vermell s’APAGA i informa l’usuari que el sistema està preparat per rebre l’entrada de l’usuari.

• Quan el relé es desactiva després de l’activació correcta, per tornar a activar el relé, l’usuari ha d’introduir la contrasenya de nou i prémer ‘D’.

Aquí teniu un cas especial:

• Quan s'introdueix la contrasenya correcta, el relé s'activa i, després de la desactivació correcta, quan l'usuari prem una tecla incorrecta (no tota la contrasenya), el programa reconeix com a contrasenya incorrecta i l'usuari ha d'esperar 30 segons més. Si es tracta d'un segrestador, es retardarà el nombre d'intents fets pel segrestador.

• Quan es prem la pulsació correcta al primer intent, només llavors permet introduir la tecla següent. Això només és per a la primera pulsació de tecla i no per a totes les pulsacions successives.

• El lema del concepte explicat anteriorment és retardar el nombre d'intents fets pel segrestador.

Codi del programa:

//---------------------------------Program Developed by R.Girish--------------------------//
#include
const byte ROWS = 4
const byte COLS = 4
char pass[] = '123ABC' // 6 digit password only (no less or no more)
int OP=10
int green=12
int red=11
char key1
char key2
char key3
char key4
char key5
char key6
char dumpkey
char keyOK
char ok[]='D'
char offkey
char off[]='C'
int z
char keys[ROWS][COLS] =
{
{'D','#','0','*'},
{'C','9','8','7'},
{'B','6','5','4'},
{'A','3','2','1'}
}
byte rowPins[ROWS] = {6,7,8,9} //connect to the row pinouts of the keypad
byte colPins[COLS] = {2,3,4,5} //connect to the column pinouts of the keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS )
void setup()
{
Serial.begin(9600)
pinMode(OP,OUTPUT)
pinMode(green,OUTPUT)
pinMode(red,OUTPUT)
digitalWrite(OP,LOW)
}
void loop()
{
top:
Serial.println('')
Serial.println('[Press D = Enter]')
Serial.print('Enter the password: ')
key1=keypad.waitForKey()
if(key1 == pass[0])
{
digitalWrite(green,HIGH)
delay(100)
digitalWrite(green,LOW)
{
z=1
Serial.print('*')
goto A

}
}
en cas contrari
{
anar a l’abocador
}
A:
tecla2 = teclat.waitForKey ()
if (clau2 == passa [1])
{
digitalWrite (verd, ALT)
retard (100)
digitalWrite (verd, BAIX)
{
z = 2
Serial.print ('*')
anar a B
}
}
en cas contrari
{
anar a l’abocador
}
B:
key3 = keypad.waitForKey ()
if (clau3 == passa [2])
{
digitalWrite (verd, ALT)
retard (100)
digitalWrite (verd, BAIX)
{
z = 3
Serial.print ('*')
anar a C
}
}
en cas contrari
{
anar a l’abocador
}
C:
key4 = keypad.waitForKey ()
if (clau4 == passa [3])
{
digitalWrite (verd, ALT)
retard (100)
digitalWrite (verd, BAIX)
{
z = 4
Serial.print ('*')
anar a D
}
}
en cas contrari
{
anar a l’abocador
}
D:
key5 = keypad.waitForKey ()
if (clau5 == passa [4])
{
digitalWrite (verd, ALT)
retard (100)
digitalWrite (verd, BAIX)
{
z = 5
Serial.print ('*')
anar a E
}
}
en cas contrari
{
anar a l’abocador
}
ÉS:
key6 = keypad.waitForKey ()
if (clau6 == passa [5])
{
digitalWrite (verd, ALT)
retard (100)
digitalWrite (verd, BAIX)
{
z = 6
Serial.print ('*')
anar bé
}
}
en cas contrari
{
anar a l’abocador
}
D'acord:
keyOK = keypad.waitForKey ()
if (teclaOK == bé [0])
{
digitalWrite (OP, HIGH)
digitalWrite (verd, ALT)
Serial.println ('')
Serial.println ('Relé activat, premeu' C 'per desactivar-lo.n')
}
en cas contrari
{
Serial.println ('')
Serial.println ('Premeu' D 'per entrar')
anar bé
}
desactivat:
offkey = keypad.waitForKey ()
if (offkey == off [0])
{
digitalWrite (OP, LOW)
digitalWrite (verd, BAIX)
Serial.println ('Relé desactivat.n')
anar a la part superior
}
en cas contrari
{
Serial.println ('Premeu' C 'per desactivar-lo')
goto off
}
bolcat:
if (z == 0)
{
digitalWrite (verd, ALT)
retard (100)
digitalWrite (verd, BAIX)
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
aneu a error
}
if (z == 1)
{
digitalWrite (verd, ALT)
retard (100)
digitalWrite (verd, BAIX)
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
aneu a error
}
if (z == 2)
{
digitalWrite (verd, ALT)
retard (100)
digitalWrite (verd, BAIX)
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
aneu a error
}
si (z == 3)
{
digitalWrite (verd, ALT)
retard (100)
digitalWrite (verd, BAIX)
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
aneu a error
}
if (z == 4)
{
digitalWrite (verd, ALT)
retard (100)
digitalWrite (verd, BAIX)
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
aneu a error
}
if (z == 5)
{
digitalWrite (verd, ALT)
retard (100)
digitalWrite (verd, BAIX)
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
aneu a error
}
error:
Serial.println ('')
Serial.print ('Contrasenya incorrecta, espereu 30 segons.')
digitalWrite (vermell, ALT)
retard (10000)
retard (10000)
retard (10000)
digitalWrite (vermell, BAIX)
anar a la part superior
}
// --------------------------------- Programa desenvolupat per R.Girish --------- ----------------- //

NOTA: Per definir la contrasenya: char pass [] = '123ABC' // Només contrasenya de 6 dígits (ni més ni menys)
Canvieu '123ABC' amb la vostra pròpia contrasenya, entre cometes.

Assegureu-vos que la contrasenya establerta al programa sigui de 6 dígits NOMÉS, ni més ni menys, però exactament de 6 dígits. En cas contrari, el programa no funcionarà correctament.

Si teniu més dubtes sobre el circuit de bloqueig de seguretat de contrasenya explicat, no dubteu a publicar-los a través dels vostres comentaris




Anterior: Circuit LED de Sunrise Sunset Simulator Següent: Circuit de controlador de motor Bluetooth