Salasanasuojauspiiri 4 × 4 -näppäimistöllä ja Arduinolla

Salasanasuojauspiiri 4 × 4 -näppäimistöllä ja Arduinolla

Tässä viestissä aiomme rakentaa salasanan turvalukituspiirin, johon pääsee 6-numeroisella salasanalla. Tarkemmin sanottuna se on aakkosnumeerinen salasana.

Laitteisto tälle projektille

Aiomme käyttää 4x4-näppäimistöä, joka koostuu 0–9 desimaaliarvosta, kahdesta erikoismerkistä ”#” ja ”*” sekä A – D aakkosista. Näiden merkkien yhdistelmää voidaan käyttää salasanana.



Arduino on järjestelmän aivot, rele on liitetty Arduinoon aktivoimiseksi ja deaktivoimiseksi, kun oikea salasana käsketään. Tässä käytetään kahta merkkivaloa osoittamaan lukitusjärjestelmän tilaa.



Jos et ole perehtynyt 4x4-näppäimistöön, katso edellinen artikkelini, josta keskusteltiin kattavasti 4x4-matriisinäppäimistön perusteet

Ehdotetulla projektilla on melko minimalistinen laitteistosuunnittelu. Se koostuu vain näppäimistöstä, releestä, arduinosta ja parista LEDistä, jopa arduinossa oleva noob voi suorittaa sen helposti.



Ainoa osa, joka on hieman hankalaa tässä projektissa, on koodaus, ei tarvitse huolehtia, että koodi on annettu tässä projektissa. Ohjelma on kirjoitettava siten, että se on typerä todiste eikä yksikään kaappaaja voi hakkeroida järjestelmää.

Mutta ole varovainen, jos paljastat laitteiston tai tämän projektin laitteisto on helposti saatavilla, rele voidaan hakkeroida helposti. Joten pidä tämä projekti hyvin suojatussa alustassa.

Kuinka se toimii

Huomautus: Virranrajoitinvastus 4.7K on kytkettävä transistorin pohjaan, mikä ei ole esitetty kaaviossa.



Katsotaan nyt, kuinka tämä Arduino-salasanasuojauslukituspiiri toimii, lue alla annettu ohje huolellisesti, jotta piiriä voidaan käyttää.

Piirikaavio

Arduino-salasanasuojauspiiri 4x4-näppäimistöllä

Tässä on kaksi kuvaa näppäimistön ja Arduinon käyttöliittymästä:

Arduino-salasanasuojauslukitustestit

• Kun piiri on kytketty päälle, se pyytää salasanaa, jonka näet sarjamonitorissa (sarjamonitori ei ole pakollinen, mutta sitä voidaan käyttää testaukseen).

• Kirjoita ohjelmassa kirjoittamasi salasana ennen sen kokoamista.

• Kun painat näppäimiä, vihreä LED vilkkuu kymmenes sekunnin ajan osoittaen, että käyttäjä painaa jotakin näppäintä.

• Kun olet syöttänyt 6-numeroisen salasanan, paina ”D” näppäimistössä, joka toimii ”Enter”. Jos salasanasi on oikea, rele aktivoituu, vihreä LED syttyy.

• Poista rele käytöstä painamalla näppäimistön ”C” -näppäintä. Kun tämä on tehty, vihreä LED sammuu ja rele deaktivoituu. Mikään muu avain ei voi deaktivoida releä.

• Jos käyttäjän antama salasana on väärä, punainen LED syttyy ja käyttäjän on odotettava 30 sekuntia päästäksesi seuraavaan yritykseen. Kun 30 sekuntia on kulunut, punainen LED sammuu ja ilmoittaa käyttäjälle, että järjestelmä on valmis saamaan käyttäjältä tuloa.

• Kun rele deaktivoidaan onnistuneen aktivoinnin jälkeen, jotta rele voidaan aktivoida uudelleen, käyttäjän on syötettävä salasana uudelleen ja painettava ‘D’.

Tässä on erityistapaus:

• Kun oikea salasana syötetään, rele aktivoituu ja onnistuneen deaktivoinnin jälkeen, kun käyttäjä osuu väärään näppäimen painallukseen (ei koko salasanaan), ohjelma tunnistaa virheellisen salasanan ja käyttäjän on odotettava vielä 30 sekuntia. Jos tämä oli kaappaaja, se viivästyttää kaappaajan tekemien yritysten määrää.

• Kun oikeaa näppäinpainallusta painetaan ensimmäisellä yrityksellä, vasta sitten se antaa seuraavan näppäimen. Tämä koskee vain ensimmäistä näppäilyä eikä kaikkia peräkkäisiä näppäimiä.

• Edellä selitetyn konseptin motto on viivästyttää kaappaajan tekemien yritysten määrää.

Ohjelmakoodi:

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

}
}
muu
{
mene kaatopaikalle
}
TO:
key2 = näppäimistö.waitForKey ()
jos (avain2 == läpäise [1])
{
digitalWrite (vihreä, KORKEA)
viive (100)
digitalWrite (vihreä, LOW)
{
z = 2
Sarja.tulos ('*')
goto B
}
}
muu
{
mene kaatopaikalle
}
B:
key3 = näppäimistö.waitForKey ()
jos (avain3 == läpäise [2])
{
digitalWrite (vihreä, KORKEA)
viive (100)
digitalWrite (vihreä, LOW)
{
z = 3
Sarja.tulos ('*')
aloita C
}
}
muu
{
mene kaatopaikalle
}
C:
key4 = näppäimistö.waitForKey ()
jos (avain4 == läpäise [3])
{
digitalWrite (vihreä, KORKEA)
viive (100)
digitalWrite (vihreä, LOW)
{
z = 4
Sarja.tulos ('*')
goto D
}
}
muu
{
mene kaatopaikalle
}
D:
key5 = näppäimistö.waitForKey ()
jos (avain5 == läpäise [4])
{
digitalWrite (vihreä, KORKEA)
viive (100)
digitalWrite (vihreä, LOW)
{
z = 5
Sarja.tulos ('*')
goto E
}
}
muu
{
mene kaatopaikalle
}
ON:
key6 = näppäimistö.waitForKey ()
jos (avain6 == läpäise [5])
{
digitalWrite (vihreä, KORKEA)
viive (100)
digitalWrite (vihreä, LOW)
{
z = 6
Sarja.tulos ('*')
menee ok
}
}
muu
{
mene kaatopaikalle
}
ok:
keyOK = näppäimistö.waitForKey ()
jos (avainOK == ok [0])
{
digitalWrite (OP, HIGH)
digitalWrite (vihreä, KORKEA)
Serial.println ('')
Serial.println ('Rele aktivoitu, paina' C 'deaktivoida.n')
}
muu
{
Serial.println ('')
Serial.println ('Paina' D 'päästäksesi')
menee ok
}
vinossa:
offkey = näppäimistö.waitForKey ()
jos (offkey == pois [0])
{
digitalWrite (OP, LOW)
digitalWrite (vihreä, LOW)
Serial.println ('Rele deaktivoitu.n')
mennä huipulle
}
muu
{
Serial.println ('Deaktivoi painamalla' C ')
mene pois
}
kaatopaikka:
jos (z == 0)
{
digitalWrite (vihreä, KORKEA)
viive (100)
digitalWrite (vihreä, LOW)
Sarja.tulos ('*')
dumpkey = näppäimistö.waitForKey ()
Sarja.tulos ('*')
dumpkey = näppäimistö.waitForKey ()
Sarja.tulos ('*')
dumpkey = näppäimistö.waitForKey ()
Sarja.tulos ('*')
dumpkey = näppäimistö.waitForKey ()
Sarja.tulos ('*')
dumpkey = näppäimistö.waitForKey ()
Sarja.tulos ('*')
dumpkey = näppäimistö.waitForKey ()
Sarja.tulos ('*')
mennä virhe
}
jos (z == 1)
{
digitalWrite (vihreä, KORKEA)
viive (100)
digitalWrite (vihreä, LOW)
Sarja.tulos ('*')
dumpkey = näppäimistö.waitForKey ()
Sarja.tulos ('*')
dumpkey = näppäimistö.waitForKey ()
Sarja.tulos ('*')
dumpkey = näppäimistö.waitForKey ()
Sarja.tulos ('*')
dumpkey = näppäimistö.waitForKey ()
Sarja.tulos ('*')
dumpkey = näppäimistö.waitForKey ()
Sarja.tulos ('*')
mennä virhe
}
jos (z == 2)
{
digitalWrite (vihreä, KORKEA)
viive (100)
digitalWrite (vihreä, LOW)
Sarja.tulos ('*')
dumpkey = näppäimistö.waitForKey ()
Sarja.tulos ('*')
dumpkey = näppäimistö.waitForKey ()
Sarja.tulos ('*')
dumpkey = näppäimistö.waitForKey ()
Sarja.tulos ('*')
dumpkey = näppäimistö.waitForKey ()
Sarja.tulos ('*')
mennä virhe
}
jos (z == 3)
{
digitalWrite (vihreä, KORKEA)
viive (100)
digitalWrite (vihreä, LOW)
Sarja.tulos ('*')
dumpkey = näppäimistö.waitForKey ()
Sarja.tulos ('*')
dumpkey = näppäimistö.waitForKey ()
Sarja.tulos ('*')
dumpkey = näppäimistö.waitForKey ()
Sarja.tulos ('*')
mennä virhe
}
jos (z == 4)
{
digitalWrite (vihreä, KORKEA)
viive (100)
digitalWrite (vihreä, LOW)
Sarja.tulos ('*')
dumpkey = näppäimistö.waitForKey ()
Sarja.tulos ('*')
dumpkey = näppäimistö.waitForKey ()
Sarja.tulos ('*')
mennä virhe
}
jos (z == 5)
{
digitalWrite (vihreä, KORKEA)
viive (100)
digitalWrite (vihreä, LOW)
Sarja.tulos ('*')
dumpkey = näppäimistö.waitForKey ()
Sarja.tulos ('*')
mennä virhe
}
virhe:
Serial.println ('')
Serial.print ('Väärä salasana, odota 30 sekuntia.')
digitalWrite (punainen, KORKEA)
viive (10000)
viive (10000)
viive (10000)
digitalWrite (punainen, LOW)
mennä huipulle
}
// --------------------------------- Ohjelman on kehittänyt R.Girish --------- ----------------- //

HUOMAUTUS: Salasanan asettaminen: char pass [] = '123ABC' // vain 6-numeroinen salasana (ei vähempää tai enempää)
Vaihda ”123ABC” omalla salasanallasi lainausmerkissä.

Varmista, että ohjelmassa asetettu salasana on VAIN 6-numeroinen, ei vähempää tai enempää, mutta täsmälleen 6-numeroinen. Muuten ohjelma ei toimi oikein.

Jos sinulla on epäilyksiä selitetystä salasanan lukituspiiristä, voit lähettää ne kommenteihisi




Pari: Sunrise Sunset Simulator LED -piiri Seuraava: Bluetooth-moottorin ohjainpiiri