Krug sigurnosne brave lozinke pomoću tipkovnice 4 × 4 i Arduina

Krug sigurnosne brave lozinke pomoću tipkovnice 4 × 4 i Arduina

U ovom ćemo postu izraditi sklop sigurnosnog zaključavanja lozinke, kojem se može pristupiti pomoću 6-znamenkaste lozinke. Točnije to je alfanumerička lozinka.



Hardver za ovaj projekt

Upotrijebit ćemo tipkovnicu 4x4 koja se sastoji od 0 do 9 decimalnih vrijednosti, dva posebna znaka '#' i '*' te A do D abecede. Kombinacija ovih znakova može se koristiti kao lozinka.

Arduino je mozak sustava, relej je povezan s Arduinom za aktiviranje i deaktiviranje, kada se naredi ispravna lozinka. Ovdje se koriste dva indikatorska LED-a za označavanje stanja sustava zaključavanja.





Ako niste upoznati s 4x4 tipkovnicom, pogledajte moj raniji članak koji je sveobuhvatno raspravio osnove 4x4 matrične tipkovnice

Predloženi projekt ima prilično minimalistički hardverski dizajn. Sastoji se samo od tipkovnice, releja, arduina i nekoliko LED-a, čak i noob u arduinu to može postići s lakoćom.



Jedini dio koji je malo težak u ovom projektu je kodiranje, ne treba brinuti da je kod naveden u ovom projektu. Program bi trebao biti napisan na takav način da je siguran i da niti jedan otmičar ne može hakirati sustav.

Ali, budite oprezni ako izložite hardver ili je hardver ovog projekta lako dostupan, relej se može lako hakirati. Stoga držite ovaj projekt u dobro zaštićenom kućištu.

Kako radi

Napomena: Otpor za ograničavanje struje 4.7K mora biti spojen na bazu tranzistora, što nije prikazano na dijagramu.

Sada da vidimo kako funkcionira ovaj krug sigurnosne brave Arduino, pažljivo pročitajte dolje navedene upute kako biste upravljali krugom.

Kružni dijagram

Sklop sigurnosnog zaključavanja lozinke Arduino pomoću tipkovnice 4x4

Evo dvije ilustracije povezivanja tipkovnice i Arduina:

Rezultati ispitivanja zaključavanja sigurnosne lozinke Arduino

• Kad se krug uključi, traži lozinku, možete vidjeti na serijskom monitoru (serijski monitor nije obvezan, ali se može koristiti u svrhu testiranja).

• Unesite lozinku koju ste unijeli u program prije sastavljanja.

• Dok pritiskate tipke, zelena LED lampica trepće desetinu sekunde, što znači da korisnik pritisne neku tipku.

• Nakon što ste unijeli 6-znamenkastu lozinku, pritisnite „D“ na tipkovnici koja djeluje kao „Enter“. Ako je lozinka ispravna, relej se aktivira, zeleni LED se uključuje.

• Da biste deaktivirali relej, pritisnite tipku „C“ na tipkovnici. Kada se to učini, zelena LED se ISKLJUČI, a relej se deaktivira. Nijedna druga tipka ne može deaktivirati relej.

• Ako je lozinka koju je korisnik unio netočna, tada svijetli crvena LED dioda i korisnik mora pričekati 30 sekundi da uđe u sljedeći pokušaj. Kad završi 30 sekundi, crvena se LED lampica ISKLJUČUJE, obavještavajući korisnika da je sustav spreman za primanje korisničkog unosa.

• Kada se relej deaktivira nakon uspješnog aktiviranja, da bi ponovno aktivirao relej, korisnik treba ponovo unijeti lozinku i pritisnuti ‘D’.

Evo posebnog slučaja:

• Kada se unese ispravna lozinka, relej se aktivira i nakon uspješne deaktivacije, kada korisnik pritisne bilo koji pogrešan pritisak na tipku (ne cijelu lozinku), program prepoznaje kao netočnu lozinku i korisnik mora pričekati još 30 sekundi. Ako je ovo bio otmičar, odgodit će broj pokušaja otmičara.

• Kada se pritisne ispravno pritiskanje tipke u prvom pokušaju, tek tada omogućuje ulazak u sljedeću tipku. Ovo je samo za prvo pritiskanje tipke, a ne za sva uzastopna pritiskanja tipki.

• Moto gore objašnjenog koncepta je odgoditi broj pokušaja otmičara.

Kod 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

}
}
drugo
{
ići na odlagalište
}
DO:
key2 = keypad.waitForKey ()
ako (key2 == proći [1])
{
digitalWrite (zeleno, VISOKO)
kašnjenje (100)
digitalWrite (zeleno, NISKO)
{
z = 2
Serial.print ('*')
ići na B
}
}
drugo
{
ići na odlagalište
}
B:
key3 = keypad.waitForKey ()
ako (key3 == proći [2])
{
digitalWrite (zeleno, VISOKO)
kašnjenje (100)
digitalWrite (zeleno, NISKO)
{
z = 3
Serial.print ('*')
ići na C
}
}
drugo
{
ići na odlagalište
}
C:
key4 = keypad.waitForKey ()
ako (key4 == proći [3])
{
digitalWrite (zeleno, VISOKO)
kašnjenje (100)
digitalWrite (zeleno, NISKO)
{
z = 4
Serial.print ('*')
ići na D
}
}
drugo
{
ići na odlagalište
}
D:
key5 = keypad.waitForKey ()
ako (key5 == proći [4])
{
digitalWrite (zeleno, VISOKO)
kašnjenje (100)
digitalWrite (zeleno, NISKO)
{
z = 5
Serial.print ('*')
ići na E
}
}
drugo
{
ići na odlagalište
}
JE:
key6 = keypad.waitForKey ()
ako (key6 == proći [5])
{
digitalWrite (zeleno, VISOKO)
kašnjenje (100)
digitalWrite (zeleno, NISKO)
{
z = 6
Serial.print ('*')
idi ok
}
}
drugo
{
ići na odlagalište
}
u redu:
keyOK = keypad.waitForKey ()
ako (keyOK == ok [0])
{
digitalWrite (OP, HIGH)
digitalWrite (zeleno, VISOKO)
Serial.println ('')
Serial.println ('Relej aktiviran, pritisnite' C 'da biste ga deaktivirali.n')
}
drugo
{
Serial.println ('')
Serial.println ('Pritisnite' D 'za ulazak')
idi ok
}
isključeno:
offkey = tipkovnica.waitForKey ()
ako (isključena tipka == isključena [0])
{
digitalWrite (OP, LOW)
digitalWrite (zeleno, NISKO)
Serial.println ('Relej deaktiviran.n')
idi na vrh
}
drugo
{
Serial.println ('Pritisnite' C 'da biste deaktivirali')
otići
}
istovariti:
ako (z == 0)
{
digitalWrite (zeleno, VISOKO)
kašnjenje (100)
digitalWrite (zeleno, NISKO)
Serial.print ('*')
dumpkey = tipkovnica.waitForKey ()
Serial.print ('*')
dumpkey = tipkovnica.waitForKey ()
Serial.print ('*')
dumpkey = tipkovnica.waitForKey ()
Serial.print ('*')
dumpkey = tipkovnica.waitForKey ()
Serial.print ('*')
dumpkey = tipkovnica.waitForKey ()
Serial.print ('*')
dumpkey = tipkovnica.waitForKey ()
Serial.print ('*')
goto pogreška
}
ako (z == 1)
{
digitalWrite (zeleno, VISOKO)
kašnjenje (100)
digitalWrite (zeleno, NISKO)
Serial.print ('*')
dumpkey = tipkovnica.waitForKey ()
Serial.print ('*')
dumpkey = tipkovnica.waitForKey ()
Serial.print ('*')
dumpkey = tipkovnica.waitForKey ()
Serial.print ('*')
dumpkey = tipkovnica.waitForKey ()
Serial.print ('*')
dumpkey = tipkovnica.waitForKey ()
Serial.print ('*')
goto pogreška
}
ako (z == 2)
{
digitalWrite (zeleno, VISOKO)
kašnjenje (100)
digitalWrite (zeleno, NISKO)
Serial.print ('*')
dumpkey = tipkovnica.waitForKey ()
Serial.print ('*')
dumpkey = tipkovnica.waitForKey ()
Serial.print ('*')
dumpkey = tipkovnica.waitForKey ()
Serial.print ('*')
dumpkey = tipkovnica.waitForKey ()
Serial.print ('*')
goto pogreška
}
ako (z == 3)
{
digitalWrite (zeleno, VISOKO)
kašnjenje (100)
digitalWrite (zeleno, NISKO)
Serial.print ('*')
dumpkey = tipkovnica.waitForKey ()
Serial.print ('*')
dumpkey = tipkovnica.waitForKey ()
Serial.print ('*')
dumpkey = tipkovnica.waitForKey ()
Serial.print ('*')
goto pogreška
}
ako (z == 4)
{
digitalWrite (zeleno, VISOKO)
kašnjenje (100)
digitalWrite (zeleno, NISKO)
Serial.print ('*')
dumpkey = tipkovnica.waitForKey ()
Serial.print ('*')
dumpkey = tipkovnica.waitForKey ()
Serial.print ('*')
goto pogreška
}
ako (z == 5)
{
digitalWrite (zeleno, VISOKO)
kašnjenje (100)
digitalWrite (zeleno, NISKO)
Serial.print ('*')
dumpkey = tipkovnica.waitForKey ()
Serial.print ('*')
goto pogreška
}
pogreška:
Serial.println ('')
Serial.print ('Pogrešna lozinka, pričekajte 30 sekundi.')
digitalWrite (crvena, VISOKA)
kašnjenje (10000)
kašnjenje (10000)
kašnjenje (10000)
digitalWrite (crvena, NISKA)
idi na vrh
}
// --------------------------------- Program razvio R.Girish --------- ----------------- //

BILJEŠKA: Da biste postavili lozinku: char pass [] = '123ABC' // samo 6-znamenkasta lozinka (ni manje ni više)
Promijenite '123ABC' s vlastitom lozinkom, unutar navodnika.

Provjerite je li lozinka postavljena u programu SAMO 6-znamenkasti, ni manje ni više nego točno 6-znamenkasti. Inače program neće ispravno funkcionirati.

Ako imate dodatnih sumnji u vezi s objašnjenim krugom sigurnosnog zaključavanja lozinke, slobodno ih objavite putem svojih komentara




Prethodno: LED krug simulatora zalaska sunca Sljedeće: Bluetooth krug upravljačkog sklopa