Vezje za zaklepanje gesla s tipkovnico 4 × 4 in Arduino

Preizkusite Naš Instrument Za Odpravo Težav





V tem prispevku bomo zgradili vezje varnostne ključavnice z geslom, do katerega lahko dostopate s šestmestnim geslom. Natančneje, gre za številčno geslo.

Strojna oprema za ta projekt

Uporabili bomo tipkovnico 4x4, ki je sestavljena iz 0 do 9 decimalnih vrednosti, dveh posebnih znakov '#' in '*' ter A do D abecede. Kombinacijo teh znakov lahko uporabite kot geslo.



Arduino so možgani sistema, rele je povezan z Arduinom, da se aktivira in deaktivira, ko je ukazano pravilno geslo. Za prikaz stanja sistema zaklepanja se tukaj uporabljata dve indikatorski LED.

Če tipkovnice 4x4 ne poznate, si oglejte moj prejšnji članek, v katerem je bila podrobno obravnavana osnove matrične tipkovnice 4x4



Predlagani projekt ima precej minimalistično zasnovo strojne opreme. Vsebuje le tipkovnico, rele, arduino in nekaj LED, celo noob v arduinu ga lahko z lahkoto doseže.

Edini del, ki je pri tem projektu nekoliko težaven, je kodiranje, ne skrbite, koda je podana v tem projektu. Program bi moral biti napisan tako, da je brezhiben in noben ugrabitelj ne more vdreti v sistem.

Vendar bodite previdni, če izpostavite strojno opremo ali je strojna oprema tega projekta lahko dostopna, rele lahko vdrete z lahkoto. Zato imejte ta projekt v dobro zaščitenem podvozju.

Kako deluje

Opomba: Na podnožje tranzistorja mora biti priključen upor za omejevanje toka 4.7K, kar na sliki ni prikazano.

Zdaj pa poglejmo, kako deluje to vezje za zaklepanje z geslom Arduino, natančno preberite spodnja navodila, da boste lahko upravljali tokokrog.

Shema vezja

Vezje za zaklepanje gesla Arduino s tipkovnico 4x4

Tu sta dve ilustraciji, kako povezati tipkovnico in Arduino:

Rezultati testa za zaklepanje varnostnega zaklepanja Arduino

• Ko je vezje vklopljeno, zahteva geslo, kar lahko vidite na serijskem monitorju (serijski monitor ni obvezen, vendar ga je mogoče uporabiti za preizkušanje).

• Vnesite geslo, ki ste ga vnesli v program, preden ga sestavite.

• Medtem ko pritiskate tipke, utripa zelena lučka za desetino sekunde, kar pomeni, da uporabnik pritisne neko tipko.

• Ko vnesete 6-mestno geslo, pritisnite tipko „D“ na tipkovnici, ki deluje kot „Enter“. Če je vaše geslo pravilno, se rele aktivira, prižge se zelena LED.

• Če želite rele izključiti, pritisnite tipko „C“ na tipkovnici. Ko je to storjeno, se zelena LED ugasne in rele se deaktivira. Nobena druga tipka ne more deaktivirati releja.

• Če je geslo, ki ga vnese uporabnik, napačno, zasveti rdeča LED in uporabnik mora počakati 30 sekund, da vnese naslednji poskus. Ko je 30 sekund konec, se rdeča LED ugasne in uporabnika obvesti, da je sistem pripravljen na vnos od uporabnika.

• Ko je rele po uspešnem vklopu deaktiviran, mora uporabnik za ponovni vklop releja znova vnesti geslo in pritisniti ‘D’.

Tu je poseben primer:

• Ko vnesete pravilno geslo, se rele aktivira in po uspešni deaktivaciji, ko uporabnik pritisne katero koli napačno tipko (ne celo geslo), program prepozna kot napačno geslo in uporabnik mora počakati še 30 sekund. Če je bil ugrabitelj, bo zamudil število poskusov ugrabitelja.

• Ko ob prvem poskusu pritisnete pravilno tipko, šele nato omogočite vnos naslednje tipke. To je samo za prvo pritiskanje tipk in ne za vsa zaporedna pritiskanja tipk.

• Moto zgoraj pojasnjenega koncepta je odložiti število poskusov ugrabitelja.

Koda 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

}
}
drugače
{
pojdi na smetišče
}
DO:
key2 = keypad.waitForKey ()
če (key2 == poda [1])
{
digitalWrite (zelena, VISOKO)
zamuda (100)
digitalWrite (zelena, LOW)
{
z = 2
Serial.print ('*')
pojdi na B
}
}
drugače
{
pojdi na smetišče
}
B:
key3 = keypad.waitForKey ()
če (key3 == poda [2])
{
digitalWrite (zelena, VISOKO)
zamuda (100)
digitalWrite (zelena, LOW)
{
z = 3
Serial.print ('*')
pojdi na C
}
}
drugače
{
pojdi na smetišče
}
C:
key4 = keypad.waitForKey ()
če (key4 == poda [3])
{
digitalWrite (zelena, VISOKO)
zamuda (100)
digitalWrite (zelena, LOW)
{
z = 4
Serial.print ('*')
pojdi na D
}
}
drugače
{
pojdi na smetišče
}
D:
key5 = keypad.waitForKey ()
če (key5 == poda [4])
{
digitalWrite (zelena, VISOKO)
zamuda (100)
digitalWrite (zelena, LOW)
{
z = 5
Serial.print ('*')
pojdi na E
}
}
drugače
{
pojdi na smetišče
}
IS:
key6 = keypad.waitForKey ()
če (key6 == poda [5])
{
digitalWrite (zelena, VISOKO)
zamuda (100)
digitalWrite (zelena, LOW)
{
z = 6
Serial.print ('*')
pojdi ok
}
}
drugače
{
pojdi na smetišče
}
v redu:
keyOK = keypad.waitForKey ()
če (keyOK == ok [0])
{
digitalWrite (OP, HIGH)
digitalWrite (zelena, VISOKO)
Serial.println ('')
Serial.println ('Rele aktiviran, pritisnite' C 'za izklop.n')
}
drugače
{
Serial.println ('')
Serial.println ('Pritisnite' D 'za vstop')
pojdi ok
}
izklopljeno:
offkey = keypad.waitForKey ()
če (izklopna tipka == izklopljena [0])
{
digitalWrite (OP, LOW)
digitalWrite (zelena, LOW)
Serial.println ('Rele deaktiviran.n')
pojdi na vrh
}
drugače
{
Serial.println ('Pritisnite' C 'za izklop')
iti off
}
smetišče:
če (z == 0)
{
digitalWrite (zelena, VISOKO)
zamuda (100)
digitalWrite (zelena, LOW)
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 ('*')
Pojdi na napako
}
če (z == 1)
{
digitalWrite (zelena, VISOKO)
zamuda (100)
digitalWrite (zelena, LOW)
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 ('*')
Pojdi na napako
}
če (z == 2)
{
digitalWrite (zelena, VISOKO)
zamuda (100)
digitalWrite (zelena, LOW)
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
Pojdi na napako
}
če (z == 3)
{
digitalWrite (zelena, VISOKO)
zamuda (100)
digitalWrite (zelena, LOW)
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
Pojdi na napako
}
če (z == 4)
{
digitalWrite (zelena, VISOKO)
zamuda (100)
digitalWrite (zelena, LOW)
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
Pojdi na napako
}
če (z == 5)
{
digitalWrite (zelena, VISOKO)
zamuda (100)
digitalWrite (zelena, LOW)
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
Pojdi na napako
}
napaka:
Serial.println ('')
Serial.print ('Napačno geslo, počakajte 30 sekund.')
digitalWrite (rdeča, VISOKA)
zamuda (10000)
zamuda (10000)
zamuda (10000)
digitalWrite (rdeča, NIZKA)
pojdi na vrh
}
// --------------------------------- Program razvil R.Girish --------- ----------------- //

OPOMBA: Če želite nastaviti geslo: char pass [] = '123ABC' // samo 6-mestno geslo (nič manj ali nič več)
Spremenite “123ABC” z lastnim geslom, znotraj narekovaja.

Prepričajte se, da je geslo, nastavljeno v programu, SAMO 6-mestno, nič manj ali nič več, ampak natančno 6-mestno. V nasprotnem primeru program ne bo deloval pravilno.

Če imate kakršne koli nadaljnje dvome glede pojasnjenega vezja za zaklepanje gesla, jih lahko objavite v svojih komentarjih




Prejšnja: LED vezje Sunrise Sunset Simulator Naprej: vezje krmilnika motorja Bluetooth