Obwód blokady bezpieczeństwa hasła za pomocą klawiatury 4 × 4 i Arduino

Obwód blokady bezpieczeństwa hasła za pomocą klawiatury 4 × 4 i Arduino

W tym poście zamierzamy zbudować obwód blokady zabezpieczającej hasło, do którego można uzyskać dostęp za pomocą 6-cyfrowego hasła. Dokładniej jest to hasło alfanumeryczne.

Sprzęt dla tego projektu

Zamierzamy wykorzystać klawiaturę 4x4, która składa się z wartości dziesiętnych od 0 do 9, dwóch znaków specjalnych „#” i „*” oraz alfabetów od A do D. Kombinacja tych znaków może służyć jako hasło.

Arduino jest mózgiem systemu, przekaźnik jest połączony z Arduino w celu aktywacji i dezaktywacji, gdy zostanie podane poprawne hasło. W tym przypadku zastosowano dwie diody LED wskazujące stan systemu zamka.



Jeśli nie jesteś zaznajomiony z klawiaturą 4x4, zajrzyj do mojego wcześniejszego artykułu, który obszernie omówiłem podstawy klawiatury 4x4 matrix

Proponowany projekt ma dość minimalistyczny wygląd sprzętu. Po prostu składa się z klawiatury, przekaźnika, arduino i kilku diod LED, nawet noob w arduino może to z łatwością zrobić.

Jedyną częścią, która jest nieco trudna w tym projekcie, jest kodowanie, nie musisz się martwić, że kod jest podany w tym projekcie. Program powinien być napisany w taki sposób, aby był niezawodny i żaden porywacz nie mógł włamać się do systemu.

Ale bądź ostrożny, jeśli ujawnisz sprzęt lub sprzęt tego projektu jest łatwo dostępny, przekaźnik można z łatwością zhakować. Więc trzymaj ten projekt w dobrze chronionym podwoziu.

Jak to działa

Uwaga: Rezystor ograniczający prąd 4,7 K musi być podłączony do podstawy tranzystora, co nie jest pokazane na schemacie.

Zobaczmy teraz, jak działa ten obwód blokady hasła Arduino, przeczytaj uważnie instrukcję podaną poniżej, aby obsługiwać obwód.

Schemat obwodu

Obwód blokady bezpieczeństwa hasła Arduino za pomocą klawiatury 4x4

Oto dwie ilustracje, jak połączyć klawiaturę i Arduino:

Wyniki testu blokady bezpieczeństwa hasła Arduino

• Gdy obwód jest włączony, prosi o hasło, które można zobaczyć na monitorze szeregowym (monitor szeregowy nie jest obowiązkowy, ale może być używany do celów testowych).

• Wprowadź hasło, które wpisałeś w programie przed kompilacją.

• Podczas naciskania klawiszy zielona dioda LED miga przez jedną dziesiątą sekundy, wskazując, że użytkownik naciska jakiś klawisz.

• Po wprowadzeniu 6-cyfrowego hasła naciśnij „D” na klawiaturze, która działa jak „Enter”. Jeśli hasło jest prawidłowe, przekaźnik zostanie aktywowany, zaświeci się zielona dioda LED.

• Aby wyłączyć przekaźnik, naciśnij „C” na klawiaturze. Po wykonaniu tej czynności zielona dioda LED gaśnie i przekaźnik zostaje dezaktywowany. Żaden inny klucz nie może dezaktywować przekaźnika.

• Jeśli hasło wprowadzone przez użytkownika jest nieprawidłowe, zapala się czerwona dioda LED i użytkownik musi odczekać 30 sekund na wprowadzenie kolejnej próby. Po upływie 30 sekund czerwona dioda LED gaśnie, informując użytkownika, że ​​system jest gotowy na wejście od użytkownika.

• Gdy przekaźnik jest dezaktywowany po pomyślnej aktywacji, aby ponownie aktywować przekaźnik, użytkownik musi ponownie wprowadzić hasło i nacisnąć „D”.

Oto szczególny przypadek:

• Po wpisaniu prawidłowego hasła przekaźnik zostaje aktywowany, a po pomyślnej dezaktywacji, gdy użytkownik naciśnie jeden nieprawidłowy klawisz (nie całe hasło), program rozpoznaje hasło jako nieprawidłowe i użytkownik musi odczekać kolejne 30 sekund. Jeśli był to porywacz, opóźni to liczbę prób wykonanych przez porywacza.

• Dopiero prawidłowe naciśnięcie klawisza przy pierwszej próbie pozwala na wprowadzenie kolejnego klawisza. Dotyczy to tylko pierwszego naciśnięcia klawisza, a nie wszystkich kolejnych naciśnięć.

• Mottem powyższej koncepcji jest opóźnianie liczby prób podejmowanych przez porywacza.

Kod programu:

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

}
}
jeszcze
{
goto dump
}
DO:
key2 = keypad.waitForKey ()
if (klucz2 == pass [1])
{
digitalWrite (zielony, HIGH)
opóźnienie (100)
digitalWrite (zielony, LOW)
{
z=2
Serial.print ('*')
goto B
}
}
jeszcze
{
goto dump
}
B:
key3 = keypad.waitForKey ()
if (klucz3 == pass [2])
{
digitalWrite (zielony, HIGH)
opóźnienie (100)
digitalWrite (zielony, LOW)
{
z=3
Serial.print ('*')
goto C
}
}
jeszcze
{
goto dump
}
DO:
key4 = keypad.waitForKey ()
if (klucz4 == pass [3])
{
digitalWrite (zielony, HIGH)
opóźnienie (100)
digitalWrite (zielony, LOW)
{
z=4
Serial.print ('*')
goto D
}
}
jeszcze
{
goto dump
}
RE:
key5 = keypad.waitForKey ()
if (klucz5 == pass [4])
{
digitalWrite (zielony, HIGH)
opóźnienie (100)
digitalWrite (zielony, LOW)
{
z=5
Serial.print ('*')
goto E
}
}
jeszcze
{
goto dump
}
JEST:
key6 = keypad.waitForKey ()
if (klucz6 == pass [5])
{
digitalWrite (zielony, HIGH)
opóźnienie (100)
digitalWrite (zielony, LOW)
{
z=6
Serial.print ('*')
gotowe
}
}
jeszcze
{
goto dump
}
ok:
keyOK = keypad.waitForKey ()
if (keyOK == ok [0])
{
digitalWrite (OP, HIGH)
digitalWrite (zielony, HIGH)
Serial.println ('')
Serial.println ('Relay Activated, Press' C 'to Deactivate.n')
}
jeszcze
{
Serial.println ('')
Serial.println ('Naciśnij' D ', aby wejść')
gotowe
}
poza:
offkey = keypad.waitForKey ()
if (offkey == off [0])
{
digitalWrite (OP, LOW)
digitalWrite (zielony, LOW)
Serial.println ('Relay Deactivated.n')
goto top
}
jeszcze
{
Serial.println ('Naciśnij' C ', aby dezaktywować')
wysiadać
}
wysypisko:
jeśli (z == 0)
{
digitalWrite (zielony, HIGH)
opóźnienie (100)
digitalWrite (zielony, 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 ('*')
Goto error
}
if (z == 1)
{
digitalWrite (zielony, HIGH)
opóźnienie (100)
digitalWrite (zielony, 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 ('*')
Goto error
}
if (z == 2)
{
digitalWrite (zielony, HIGH)
opóźnienie (100)
digitalWrite (zielony, LOW)
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
Goto error
}
jeśli (z == 3)
{
digitalWrite (zielony, HIGH)
opóźnienie (100)
digitalWrite (zielony, LOW)
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
Goto error
}
if (z == 4)
{
digitalWrite (zielony, HIGH)
opóźnienie (100)
digitalWrite (zielony, LOW)
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
Goto error
}
jeśli (z == 5)
{
digitalWrite (zielony, HIGH)
opóźnienie (100)
digitalWrite (zielony, LOW)
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
Goto error
}
błąd:
Serial.println ('')
Serial.print ('Złe hasło, poczekaj 30 sekund.')
digitalWrite (czerwony, HIGH)
opóźnienie (10000)
opóźnienie (10000)
opóźnienie (10000)
digitalWrite (czerwony, LOW)
goto top
}
// --------------------------------- Program opracowany przez R.Girisha --------- ----------------- //

UWAGA: Aby ustawić hasło: char pass [] = '123ABC' // tylko 6-cyfrowe hasło (nie mniej lub nie więcej)
Zmień „123ABC” na własne hasło w cudzysłowie.

Upewnij się, że hasło ustawione w programie jest TYLKO 6-cyfrowe, nie mniej lub nie więcej, ale dokładnie 6-cyfrowe. W przeciwnym razie program nie będzie działał poprawnie.

Jeśli masz dalsze wątpliwości dotyczące wyjaśnionego obwodu blokady hasła, możesz je opublikować w komentarzach




Poprzedni: Obwód LED symulatora Sunrise Sunset Dalej: Obwód sterownika silnika Bluetooth