Obvod bezpečnostného zámku hesla pomocou klávesnice 4 × 4 a Arduino

Vyskúšajte Náš Nástroj Na Odstránenie Problémov





V tomto príspevku skonštruujeme obvod bezpečnostného zámku hesla, ku ktorému je možné získať prístup pomocou šesťmiestneho hesla. Presnejšie povedané, ide o alfanumerické heslo.

Hardvér pre tento projekt

Budeme využívať klávesnicu 4x4, ktorá sa skladá z 0 až 9 desatinných hodnôt, dvoch špeciálnych znakov „#“ a „*“ a abecedy A až D. Kombináciu týchto znakov je možné použiť ako heslo.



Arduino je mozgom systému, relé je prepojené s Arduinom na aktiváciu a deaktiváciu, keď je zadané správne heslo. Tu sa používajú dve kontrolné LED na indikáciu stavu zámkového systému.

Ak nepoznáte klávesnicu 4x4, prečítajte si môj predchádzajúci článok, ktorý je podrobne popísaný základy maticovej klávesnice 4x4



Navrhovaný projekt má dosť minimalistický dizajn hardvéru. Skladá sa iba z klávesnice, relé, arduina a niekoľkých LED, dokonca aj noob v arduino to zvládne s ľahkosťou.

Jedinou časťou, ktorá je v tomto projekte mierne náročná, je kódovanie, nemusíte sa báť, že kód je uvedený v tomto projekte. Program by mal byť napísaný tak, aby bol bláznivý a žiadny únosca nemohol hacknúť systém.

Ale buďte opatrní, ak odhalíte hardvér alebo hardvér tohto projektu je ľahko prístupný, relé je možné ľahko hacknúť. Takže tento projekt udržujte v dobre chránenom podvozku.

Ako to funguje

Poznámka: K spodnej časti tranzistora musí byť pripojený rezistor obmedzujúci prúd 4,7 K, ktorý na obrázku nie je zobrazený.

Teraz sa pozrime, ako tento obvod bezpečnostného zámku hesla Arduino funguje. Prečítajte si prosím pozorne pokyny uvedené nižšie, aby ste obvod mohli ovládať.

Schéma zapojenia

Okruh bezpečnostného zámku Arduino pomocou klávesnice 4x4

Tu sú dve ilustrácie, ako prepojiť klávesnicu a Arduino:

Výsledky testu bezpečnostného zámku Arduino

• Keď je obvod zapnutý, vyžaduje heslo, ktoré vidíte na sériovom monitore (sériový monitor nie je povinný, ale je možné ho použiť na testovacie účely).

• Zadajte heslo, ktoré ste zadali v programe pred jeho zostavením.

• Počas stlačenia klávesov bliká zelená LED jednu desatinu sekundy, čo znamená, že používateľ stlačil niektoré tlačidlo.

• Po zadaní 6-ciferného hesla stlačte na klávesnici kláves „D“, ktorý slúži ako „Enter“. Ak je vaše heslo správne, relé sa aktivuje, zelená LED svieti.

• Ak chcete relé deaktivovať, stlačte na klávesnici klávesu „C“. Keď je to hotové, zelená LED zhasne a relé sa deaktivuje. Žiadne iné tlačidlo nemôže deaktivovať relé.

• Ak je heslo zadané používateľom nesprávne, rozsvieti sa červená LED dióda a používateľ musí s ďalším pokusom počkať 30 sekúnd. Po uplynutí 30 sekúnd červená LED zhasne a informuje používateľa, že systém je pripravený na získanie vstupu od používateľa.

• Keď je relé deaktivované po úspešnej aktivácii, je potrebné znova aktivovať relé, užívateľ musí znova zadať heslo a stlačiť kláves „D“.

Tu je špeciálny prípad:

• Po zadaní správneho hesla sa relé aktivuje a po úspešnej deaktivácii, keď užívateľ stlačí jedno nesprávne stlačenie klávesu (nie celé heslo), program rozpozná ako nesprávne heslo a musí si počkať ďalších 30 sekúnd. Ak by išlo o únoscu, oneskorí sa počet pokusov únoscu.

• Ak pri prvom pokuse stlačíte správne stlačenie, umožníte to až potom zadanie ďalšieho klávesu. Toto je iba pre prvé stlačenie klávesov a nie pre všetky nasledujúce stlačenia.

• Heslom vyššie vysvetleného konceptu je oddialiť počet pokusov únoscu.

Programový kód:

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

}
}
inak
{
choď na výpis
}
DO:
key2 = keypad.waitForKey ()
if (key2 == prejsť [1])
{
digitalWrite (zelená, VYSOKÁ)
oneskorenie (100)
digitalWrite (zelená, NÍZKA)
{
z = 2
Serial.print ('*')
choď B
}
}
inak
{
choď na výpis
}
B:
key3 = keypad.waitForKey ()
if (key3 == prejsť [2])
{
digitalWrite (zelená, VYSOKÁ)
oneskorenie (100)
digitalWrite (zelená, NÍZKA)
{
z = 3
Serial.print ('*')
choď C.
}
}
inak
{
choď na výpis
}
C:
key4 = keypad.waitForKey ()
if (key4 == prejsť [3])
{
digitalWrite (zelená, VYSOKÁ)
oneskorenie (100)
digitalWrite (zelená, NÍZKA)
{
z = 4
Serial.print ('*')
choď D
}
}
inak
{
choď na výpis
}
D:
key5 = keypad.waitForKey ()
if (key5 == prejsť [4])
{
digitalWrite (zelená, VYSOKÁ)
oneskorenie (100)
digitalWrite (zelená, NÍZKA)
{
z = 5
Serial.print ('*')
choď E
}
}
inak
{
choď na výpis
}
JE:
key6 = keypad.waitForKey ()
if (key6 == prejsť [5])
{
digitalWrite (zelená, VYSOKÁ)
oneskorenie (100)
digitalWrite (zelená, NÍZKA)
{
z = 6
Serial.print ('*')
choď ok
}
}
inak
{
choď na výpis
}
ok:
keyOK = keypad.waitForKey ()
if (keyOK == ok [0])
{
digitalWrite (OP, HIGH)
digitalWrite (zelená, VYSOKÁ)
Serial.println ('')
Serial.println ('Relé aktivované, stlačte' C 'pre deaktiváciu.n')
}
inak
{
Serial.println ('')
Serial.println ('Na vstup stlačte' D ')
choď ok
}
vypnuté:
offkey = keypad.waitForKey ()
if (offkey == off [0])
{
digitalWrite (OP, LOW)
digitalWrite (zelená, NÍZKA)
Serial.println ('Relé deaktivované.n')
choď hore
}
inak
{
Serial.println ('Deaktivovať' stlačením 'C')
choď preč
}
skládka:
if (z == 0)
{
digitalWrite (zelená, VYSOKÁ)
oneskorenie (100)
digitalWrite (zelená, NÍZKA)
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 ('*')
chyba goto
}
if (z == 1)
{
digitalWrite (zelená, VYSOKÁ)
oneskorenie (100)
digitalWrite (zelená, NÍZKA)
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 ('*')
chyba goto
}
if (z == 2)
{
digitalWrite (zelená, VYSOKÁ)
oneskorenie (100)
digitalWrite (zelená, NÍZKA)
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
chyba goto
}
if (z == 3)
{
digitalWrite (zelená, VYSOKÁ)
oneskorenie (100)
digitalWrite (zelená, NÍZKA)
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
chyba goto
}
if (z == 4)
{
digitalWrite (zelená, VYSOKÁ)
oneskorenie (100)
digitalWrite (zelená, NÍZKA)
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
chyba goto
}
if (z == 5)
{
digitalWrite (zelená, VYSOKÁ)
oneskorenie (100)
digitalWrite (zelená, NÍZKA)
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
chyba goto
}
chyba:
Serial.println ('')
Serial.print ('Chybné heslo, počkajte 30 sekúnd.')
digitalWrite (červený, VYSOKÝ)
oneskorenie (10 000)
oneskorenie (10 000)
oneskorenie (10 000)
digitalWrite (červená, NÍZKA)
choď hore
}
// --------------------------------- Program vyvinutý R.Girishom --------- ----------------- //

POZNÁMKA: Nastaviť heslo: char pass [] = '123ABC' // iba 6-miestne heslo (nie menej ani viac)
Zmeňte „123ABC“ pomocou vlastného hesla v úvodzovkách.

Uistite sa, že heslo nastavené v programe je IBA 6-miestne, nie menej alebo viac, ale presne 6-miestne. Inak program nebude fungovať správne.

Ak máte ďalšie pochybnosti týkajúce sa vysvetleného obvodu bezpečnostného zámku hesla, neváhajte ich uverejniť prostredníctvom svojich komentárov




Dvojica: Sunrise Sunset Simulator LED Circuit Ďalej: Obvod radiča motora Bluetooth