Parooliga turvaluku lukustusahel, kasutades 4 × 4 klahvistikku ja Arduino

Proovige Meie Instrumenti Probleemide Kõrvaldamiseks





Selles postituses kavatseme ehitada parooliga turvalukustuse ahela, millele pääseb juurde 6-kohalise parooliga. Täpsemalt öeldes on see tähtnumbriline parool.

Selle projekti riistvara

Kasutame 4x4 klahvistikku, mis koosneb 0–9 kümnendkohast, kahest erimärgist „#” ja „*” ning A – D tähestikust. Nende märkide kombinatsiooni saab kasutada paroolina.



Arduino on süsteemi aju, Arduinoga on liidetud relee aktiveerimiseks ja deaktiveerimiseks, kui on antud õige parool. Lukustussüsteemi oleku näitamiseks kasutatakse siin kahte indikaatortuli.

Kui te pole 4x4 klaviatuuriga tuttav, lugege palun minu varasemat artiklit, milles põhjalikult arutleti 4x4 maatriksiklaviatuuri põhitõed



Kavandatud projektil on üsna minimalistlik riistvara disain. See koosneb lihtsalt klahvistikust, releest, arduinost ja paarist LED-ist, isegi arduino noob suudab seda hõlpsasti täita.

Ainus osa, mis on selles projektis veidi keeruline, on kodeerimine, ei pea muretsema, et kood on antud projektis. Programm peaks olema kirjutatud nii, et see oleks lollikindel ja ükski kaaperdaja ei saaks süsteemi häkkida.

Kuid olge ettevaatlik, kui paljastate selle projekti riistvara või riistvara on hõlpsasti ligipääsetav, releed saab hõlpsasti häkkida. Nii et hoidke seda projekti hästi kaitstud šassiis.

Kuidas see töötab

Märkus. Transistori alusega tuleb ühendada voolu piirav takisti 4.7K, mida diagrammil pole näidatud.

Vaatame nüüd, kuidas see Arduino parooliga turvaluku ahel toimib, lugege skeemi kasutamiseks hoolikalt allpool toodud juhiseid.

Vooluringi skeem

Arduino paroolikaitselülitus, kasutades 4x4 klaviatuuri

Siin on kaks illustratsiooni, kuidas klaviatuuri ja Arduino kasutada.

Arduino parooliga turvaluku testi tulemused

• Kui vooluahel on sisse lülitatud, küsib see parooli, mida näete jadamonitoril (jadamonitor pole kohustuslik, kuid seda saab kasutada testimise eesmärgil).

• Sisestage enne selle koostamist programmi sisestatud parool.

• Klahve vajutades vilgub kümnendik sekundit roheline LED, mis näitab, et kasutaja on mõnda klahvi vajutanud.

• Kui olete 6-kohalise parooli sisestanud, vajutage klaviatuuril nuppu D, mis toimib kui sisestusklahv. Kui teie parool on õige, aktiveeritakse relee, roheline LED süttib.

• Relee väljalülitamiseks vajutage klahvistikul ‘C’. Kui see on tehtud, lülitub roheline LED välja ja relee deaktiveeritakse. Ükski teine ​​võti ei saa relee deaktiveerida.

• Kui kasutaja sisestas parooli valesti, süttib punane LED ja kasutaja peab järgmise katse sisestamiseks ootama 30 sekundit. Kui 30 sekundit on möödas, lülitub punane valgusdiood välja, teavitades kasutajat sellest, et süsteem on valmis kasutajalt sisendit saama.

• Kui relee on pärast edukat aktiveerimist deaktiveeritud, peab relee uuesti aktiveerimiseks sisestama kasutaja uuesti parooli ja vajutama nuppu D.

Siin on erijuhtum:

• Kui õige parool on sisestatud, aktiveeritakse relee ja pärast edukat desaktiveerimist, kui kasutaja tabab vale klahvivajutuse (mitte kogu parooli), tunnistab programm vale parooli ja kasutaja peab ootama veel 30 sekundit. Kui see oli kaaperdaja, lükkab see kaaperdaja katse arvu edasi.

• Kui esimesel katsel vajutatakse õiget klahvivajutust, võimaldab see sisestada järgmise klahvi. See on mõeldud ainult esimese klahvivajutuse jaoks ja mitte kõigi järjestikuste klahvivajutuste jaoks.

• Eespool selgitatud kontseptsiooni motoks on kaaperdaja tehtud katsete arvu viivitamine.

Programmi kood:

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

}
}
muud
{
goto dump
}
TO:
key2 = klahvistik.waitForKey ()
kui (võti2 == pass [1])
{
digitalWrite (roheline, HIGH)
viivitus (100)
digitalWrite (roheline, LOW)
{
z = 2
Serial.print ('*')
goto B
}
}
muud
{
goto dump
}
B:
key3 = klahvistik.waitForKey ()
kui (võti3 == pass [2])
{
digitalWrite (roheline, HIGH)
viivitus (100)
digitalWrite (roheline, LOW)
{
z = 3
Serial.print ('*')
mine C
}
}
muud
{
goto dump
}
C:
key4 = klahvistik.waitForKey ()
kui (võti4 == pass [3])
{
digitalWrite (roheline, HIGH)
viivitus (100)
digitalWrite (roheline, LOW)
{
z = 4
Serial.print ('*')
goto D
}
}
muud
{
goto dump
}
D:
key5 = klahvistik.waitForKey ()
kui (võti5 == pass [4])
{
digitalWrite (roheline, HIGH)
viivitus (100)
digitalWrite (roheline, LOW)
{
z = 5
Serial.print ('*')
mine E
}
}
muud
{
goto dump
}
ON:
key6 = klahvistik.waitForKey ()
kui (võti6 == pass [5])
{
digitalWrite (roheline, HIGH)
viivitus (100)
digitalWrite (roheline, LOW)
{
z = 6
Serial.print ('*')
mine ok
}
}
muud
{
goto dump
}
Okei:
keyOK = klahvistik.waitForKey ()
kui (keyOK == ok [0])
{
digitalWrite (OP, HIGH)
digitalWrite (roheline, HIGH)
Serial.println ('')
Serial.println ('Relee aktiveeritud, desaktiveerimiseks vajutage' C '. N)
}
muud
{
Serial.println ('')
Serial.println ('Sisestamiseks vajutage' D ')
mine ok
}
väljas:
offkey = klahvistik.waitForKey ()
kui (offkey == välja [0])
{
digitalWrite (OP, LOW)
digitalWrite (roheline, LOW)
Serial.println ('relee deaktiveeritud.n')
mine üles
}
muud
{
Serial.println ('Deaktiveerimiseks vajutage' C ')
mine lahti
}
prügila:
kui (z == 0)
{
digitalWrite (roheline, HIGH)
viivitus (100)
digitalWrite (roheline, LOW)
Serial.print ('*')
dumpkey = klahvistik.waitForKey ()
Serial.print ('*')
dumpkey = klahvistik.waitForKey ()
Serial.print ('*')
dumpkey = klahvistik.waitForKey ()
Serial.print ('*')
dumpkey = klahvistik.waitForKey ()
Serial.print ('*')
dumpkey = klahvistik.waitForKey ()
Serial.print ('*')
dumpkey = klahvistik.waitForKey ()
Serial.print ('*')
mine viga
}
kui (z == 1)
{
digitalWrite (roheline, HIGH)
viivitus (100)
digitalWrite (roheline, LOW)
Serial.print ('*')
dumpkey = klahvistik.waitForKey ()
Serial.print ('*')
dumpkey = klahvistik.waitForKey ()
Serial.print ('*')
dumpkey = klahvistik.waitForKey ()
Serial.print ('*')
dumpkey = klahvistik.waitForKey ()
Serial.print ('*')
dumpkey = klahvistik.waitForKey ()
Serial.print ('*')
mine viga
}
kui (z == 2)
{
digitalWrite (roheline, HIGH)
viivitus (100)
digitalWrite (roheline, LOW)
Serial.print ('*')
dumpkey = klahvistik.waitForKey ()
Serial.print ('*')
dumpkey = klahvistik.waitForKey ()
Serial.print ('*')
dumpkey = klahvistik.waitForKey ()
Serial.print ('*')
dumpkey = klahvistik.waitForKey ()
Serial.print ('*')
mine viga
}
kui (z == 3)
{
digitalWrite (roheline, HIGH)
viivitus (100)
digitalWrite (roheline, LOW)
Serial.print ('*')
dumpkey = klahvistik.waitForKey ()
Serial.print ('*')
dumpkey = klahvistik.waitForKey ()
Serial.print ('*')
dumpkey = klahvistik.waitForKey ()
Serial.print ('*')
mine viga
}
kui (z == 4)
{
digitalWrite (roheline, HIGH)
viivitus (100)
digitalWrite (roheline, LOW)
Serial.print ('*')
dumpkey = klahvistik.waitForKey ()
Serial.print ('*')
dumpkey = klahvistik.waitForKey ()
Serial.print ('*')
mine viga
}
kui (z == 5)
{
digitalWrite (roheline, HIGH)
viivitus (100)
digitalWrite (roheline, LOW)
Serial.print ('*')
dumpkey = klahvistik.waitForKey ()
Serial.print ('*')
mine viga
}
viga:
Serial.println ('')
Serial.print ('Vale parool, oodake 30 sekundit.')
digitalWrite (punane, HIGH)
viivitus (10000)
viivitus (10000)
viivitus (10000)
digitalWrite (punane, LOW)
mine üles
}
// --------------------------------- Programm, mille on välja töötanud R.Girish --------- ----------------- //

MÄRGE: Parooli määramiseks: char pass [] = '123ABC' // ainult 6-kohaline parool (ei vähem ega rohkem)
Muutke “123ABC” oma parooliga jutumärgis.

Veenduge, et programmis määratud parool on AINULT kuuekohaline, mitte vähem ega rohkem, kuid täpselt 6-kohaline. Vastasel juhul ei tööta programm õigesti.

Kui teil on täiendavaid kahtlusi selgitatud parooli turvaluku vooluahelas, postitage need oma kommentaaride kaudu




Paar: Sunrise Sunset Simulator LED-ahel Järgmine: Bluetooth-mootori kontrolleri vooluring