Slaptažodžio saugumo užrakto grandinė naudojant 4 × 4 klaviatūrą ir „Arduino“

Išbandykite Mūsų Instrumentą, Kaip Pašalinti Problemas





Šiame įraše mes sukursime slaptažodžio apsaugos užrakto grandinę, prie kurios bus galima prisijungti naudojant 6 skaitmenų slaptažodį. Tiksliau sakant, tai yra raidinis skaitmeninis slaptažodis.

Aparatūra šiam projektui

Mes ketiname naudoti 4x4 klaviatūrą, kurią sudaro 0–9 dešimtainės reikšmės, du specialieji simboliai „#“ ir „*“ bei A – D abėcėlės. Šių simbolių derinys gali būti naudojamas kaip slaptažodis.



„Arduino“ yra sistemos smegenys, su „Arduino“ sąsaja yra relė, kuri suaktyvinama ir išjungiama, kai nurodomas teisingas slaptažodis. Čia naudojami du indikatoriniai šviesos diodai, rodantys užrakto sistemos būseną.

Jei nesate susipažinę su 4x4 klaviatūra, skaitykite mano ankstesnį straipsnį, kuriame išsamiai aptarta 4x4 matricos klaviatūros pagrindai



Siūlomas projektas turi gana minimalistinį aparatūros dizainą. Tai tiesiog susideda iš klaviatūros, relės, „arduino“ ir kelių šviesos diodų, net arduino „noob“ gali tai lengvai pasiekti.

Vienintelė dalis, kuri yra šiek tiek sudėtinga šiame projekte, yra kodavimas, nereikia jaudintis, kad kodas pateiktas šiame projekte. Programa turėtų būti parašyta taip, kad ji būtų neprotinga ir joks užgrobėjas negalėtų nulaužti sistemos.

Tačiau būkite atsargūs, jei atskleisite šio projekto aparatinę įrangą arba lengvai prieinama šio projekto aparatinė įranga, relę galima lengvai nulaužti. Taigi laikykite šį projektą gerai apsaugotoje važiuoklėje.

Kaip tai veikia

Pastaba: Prie tranzistoriaus pagrindo turi būti prijungtas srovės ribotuvas 4.7K, kuris nėra parodytas diagramoje.

Dabar pažiūrėkime, kaip veikia ši „Arduino“ slaptažodžio apsaugos užrakto grandinė, atidžiai perskaitykite toliau pateiktą instrukciją, kad galėtumėte valdyti grandinę.

Grandinės schema

„Arduino“ slaptažodžių saugumo užrakto grandinė naudojant 4x4 klaviatūrą

Čia pateikiamos dvi iliustracijos, kaip valdyti klaviatūrą ir „Arduino“:

„Arduino“ slaptažodžio saugumo užrakto bandymo rezultatai

• Kai grandinė įjungta, ji prašo slaptažodžio, kurį galite pamatyti serijiniame monitoriuje (nuoseklusis monitorius nėra privalomas, tačiau jį galima naudoti bandymams atlikti).

• Prieš sudarydami įveskite slaptažodį, kurį įvedėte programoje.

• Jums paspaudus klavišus, dešimtoji sekundės mirksi žalia lemputė, rodanti, kad vartotojas paspaudė kurį nors klavišą.

• Įvedę 6 skaitmenų slaptažodį, klaviatūroje paspauskite „D“, kuri veikia kaip „Enter“. Jei jūsų slaptažodis teisingas, relė įsijungia, žalias šviesos diodas įsijungia.

• Norėdami išjungti relę, klaviatūroje paspauskite „C“. Kai tai bus padaryta, žalias šviesos diodas išsijungs ir relė bus išjungta. Joks kitas raktas negali išjungti relės.

• Jei vartotojo slaptažodis yra neteisingas, užsidega raudonas šviesos diodas ir vartotojas turi palaukti 30 sekundžių, kol pateks į kitą bandymą. Praėjus 30 sekundžių, raudonas šviesos diodas išsijungia, informuodamas vartotoją, kad sistema yra pasirengusi gauti vartotojo įvestį.

• Kai relė išjungiama po sėkmingo įjungimo, norint vėl įjungti relę, vartotojas turi vėl įvesti slaptažodį ir paspausti „D“.

Čia yra specialus atvejis:

• Įvedus teisingą slaptažodį, relė įsijungia ir po sėkmingo deaktyvavimo, vartotojui paspaudus bet kurį neteisingą klavišo paspaudimą (ne visą slaptažodį), programa pripažįsta neteisingą slaptažodį ir vartotojui reikia palaukti dar 30 sekundžių. Jei tai buvo pagrobėjas, tai užtruks užgrobėjo bandymų skaičių.

• Kai pirmas bandymas paspaudžiamas teisingas klavišo paspaudimas, tik tada jis leidžia įvesti kitą klavišą. Tai taikoma tik pirmajam paspaudimui, o ne visiems paeiliui.

• Pirmiau paaiškintos koncepcijos šūkis yra atidėti užgrobėjo bandymų skaičių.

Programos kodas:

//---------------------------------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

}
}
Kitas
{
goto dump
}
Į:
key2 = klaviatūra.waitForKey ()
jei (raktas2 == perduoti [1])
{
„digitalWrite“ (žalia, HIGH)
vėlavimas (100)
„digitalWrite“ (žalia, LOW)
{
z = 2
„Serial.print“ („*“)
goto B
}
}
Kitas
{
goto dump
}
B:
key3 = klaviatūra.waitForKey ()
jei (raktas3 == perduoti [2])
{
„digitalWrite“ (žalia, HIGH)
vėlavimas (100)
„digitalWrite“ (žalia, LOW)
{
z = 3
„Serial.print“ („*“)
goto C
}
}
Kitas
{
goto dump
}
C:
key4 = klaviatūra.waitForKey ()
jei (raktas4 == perduoti [3])
{
„digitalWrite“ (žalia, HIGH)
vėlavimas (100)
„digitalWrite“ (žalia, LOW)
{
z = 4
„Serial.print“ („*“)
goto D
}
}
Kitas
{
goto dump
}
D:
key5 = klaviatūra.waitForKey ()
jei (raktas5 == leidimas [4])
{
„digitalWrite“ (žalia, HIGH)
vėlavimas (100)
„digitalWrite“ (žalia, LOW)
{
z = 5
„Serial.print“ („*“)
eik E
}
}
Kitas
{
goto dump
}
IS:
key6 = klaviatūra.waitForKey ()
jei (raktas6 == praeiti [5])
{
„digitalWrite“ (žalia, HIGH)
vėlavimas (100)
„digitalWrite“ (žalia, LOW)
{
z = 6
„Serial.print“ („*“)
eik gerai
}
}
Kitas
{
goto dump
}
Gerai:
keyOK = klaviatūra.waitForKey ()
jei (raktasOK == gerai [0])
{
„digitalWrite“ (OP, HIGH)
„digitalWrite“ (žalia, HIGH)
Serial.println ('')
Serial.println („Įjungta relė, paspauskite„ C “, kad išaktyvintumėte.n“)
}
Kitas
{
Serial.println ('')
Serial.println („Norėdami patekti, paspauskite„ D “)
eik gerai
}
išjungta:
offkey = klaviatūra.waitForKey ()
jei (offkey == off [0])
{
„digitalWrite“ (OP, LOW)
„digitalWrite“ (žalia, LOW)
„Serial.println“ („Relay Deactivated.n“)
viršuje
}
Kitas
{
Serial.println („Paspauskite„ C “, kad išaktyvintumėte)
pasitrauk
}
išpilti:
jei (z == 0)
{
„digitalWrite“ (žalia, HIGH)
vėlavimas (100)
„digitalWrite“ (žalia, LOW)
„Serial.print“ („*“)
dumpkey = klaviatūra.waitForKey ()
„Serial.print“ („*“)
dumpkey = klaviatūra.waitForKey ()
„Serial.print“ („*“)
dumpkey = klaviatūra.waitForKey ()
„Serial.print“ („*“)
dumpkey = klaviatūra.waitForKey ()
„Serial.print“ („*“)
dumpkey = klaviatūra.waitForKey ()
„Serial.print“ („*“)
dumpkey = klaviatūra.waitForKey ()
„Serial.print“ („*“)
goto klaida
}
jei (z == 1)
{
„digitalWrite“ (žalia, HIGH)
vėlavimas (100)
„digitalWrite“ (žalia, LOW)
„Serial.print“ („*“)
dumpkey = klaviatūra.waitForKey ()
„Serial.print“ („*“)
dumpkey = klaviatūra.waitForKey ()
„Serial.print“ („*“)
dumpkey = klaviatūra.waitForKey ()
„Serial.print“ („*“)
dumpkey = klaviatūra.waitForKey ()
„Serial.print“ („*“)
dumpkey = klaviatūra.waitForKey ()
„Serial.print“ („*“)
goto klaida
}
jei (z == 2)
{
„digitalWrite“ (žalia, HIGH)
vėlavimas (100)
„digitalWrite“ (žalia, LOW)
„Serial.print“ („*“)
dumpkey = klaviatūra.waitForKey ()
„Serial.print“ („*“)
dumpkey = klaviatūra.waitForKey ()
„Serial.print“ („*“)
dumpkey = klaviatūra.waitForKey ()
„Serial.print“ („*“)
dumpkey = klaviatūra.waitForKey ()
„Serial.print“ („*“)
goto klaida
}
jei (z == 3)
{
„digitalWrite“ (žalia, HIGH)
vėlavimas (100)
„digitalWrite“ (žalia, LOW)
„Serial.print“ („*“)
dumpkey = klaviatūra.waitForKey ()
„Serial.print“ („*“)
dumpkey = klaviatūra.waitForKey ()
„Serial.print“ („*“)
dumpkey = klaviatūra.waitForKey ()
„Serial.print“ („*“)
goto klaida
}
jei (z == 4)
{
„digitalWrite“ (žalia, HIGH)
vėlavimas (100)
„digitalWrite“ (žalia, LOW)
„Serial.print“ („*“)
dumpkey = klaviatūra.waitForKey ()
„Serial.print“ („*“)
dumpkey = klaviatūra.waitForKey ()
„Serial.print“ („*“)
goto klaida
}
jei (z == 5)
{
„digitalWrite“ (žalia, HIGH)
vėlavimas (100)
„digitalWrite“ (žalia, LOW)
„Serial.print“ („*“)
dumpkey = klaviatūra.waitForKey ()
„Serial.print“ („*“)
goto klaida
}
klaida:
Serial.println ('')
Serial.print ('Neteisingas slaptažodis, palaukite 30 sekundžių.')
„digitalWrite“ (raudona, HIGH)
vėlavimas (10000)
vėlavimas (10000)
vėlavimas (10000)
„digitalWrite“ (raudona, LOW)
viršuje
}
// --------------------------------- Programą sukūrė R.Girishas --------- ----------------- //

PASTABA: Norėdami nustatyti slaptažodį: char pass [] = '123ABC' // Tik 6 skaitmenų slaptažodis (ne mažiau ar ne daugiau)
Pakeiskite „123ABC“ naudodami savo slaptažodį kabutėse.

Įsitikinkite, kad programoje nustatytas slaptažodis yra TIK 6 skaitmenų, ne mažiau ar ne daugiau, bet tiksliai 6 skaitmenų. Priešingu atveju programa neveiks tinkamai.

Jei turite daugiau abejonių dėl paaiškinto slaptažodžio apsaugos užrakto grandinės, nedvejodami paskelbkite jas savo komentaruose




Pora: „Sunrise Sunset Simulator“ LED grandinė Kitas: „Bluetooth“ variklio valdiklio grandinė