4 × 4 Tuş Takımı ve Arduino Kullanarak Şifreli Güvenlik Kilidi Devresi

Sorunları Ortadan Kaldırmak Için Enstrümanımızı Deneyin





Bu yazıda, 6 basamaklı bir şifre ile erişilebilen bir şifre güvenlik kilidi devresi oluşturacağız. Daha kesin olmak gerekirse, alfa sayısal paroladır.

Bu Proje için Donanım

0 ila 9 ondalık değer, iki özel karakter '#' ve '*' ve A'dan D'ye harflerden oluşan 4x4 tuş takımını kullanacağız. Bu karakterlerin kombinasyonu şifre olarak kullanılabilir.



Arduino, sistemin beynidir, doğru şifre komutu verildiğinde etkinleştirmek ve devre dışı bırakmak için Arduino ile bir röle arayüzlenir. Kilit sisteminin durumunu göstermek için burada iki gösterge LED'i kullanılır.

4x4 tuş takımına aşina değilseniz, lütfen kapsamlı bir şekilde tartışılan önceki makaleme bakın. 4x4 matris tuş takımının temelleri



Önerilen proje oldukça minimalist bir donanım tasarımına sahiptir. Sadece bir tuş takımı, röle, arduino ve birkaç LED'den oluşur, arduino'daki bir çaylak bile kolaylıkla başarabilir.

Bu projede biraz zor olan tek kısım kodlama, endişelenmenize gerek yok kod bu projede verilmiştir. Program, aptalca bir kanıt olacak ve hiçbir korsanın sistemi hackleyemeyeceği şekilde yazılmalıdır.

Ancak, bu projenin donanımının veya donanımının kolayca erişilebilir olduğunu ortaya çıkarırsanız dikkatli olun, röle kolaylıkla hacklenebilir. Bu yüzden bu projeyi iyi korunan bir kasada saklayın.

Nasıl çalışır

Not: Şemada gösterilmeyen bir 4.7K akım sınırlama direnci, transistörün tabanına bağlanmalıdır.

Şimdi bu Arduino şifre güvenlik kilidi devresinin nasıl çalıştığını görelim, devreyi çalıştırmak için lütfen aşağıda verilen talimatları dikkatlice okuyunuz.

Devre şeması

4x4 Tuş Takımını Kullanan Arduino Şifre Güvenlik Kilidi Devresi

Klavye ve Arduino'nun nasıl arayüzleneceğini gösteren iki örnek:

Arduino Şifre Güvenlik Kilidi Test Sonuçları

• Devre açıldığında şifre ister, seri monitörde görebilirsiniz (seri monitör zorunlu değildir ancak test amaçlı kullanılabilir).

• Derlemeden önce programa girdiğiniz şifreyi girin.

• Tuşlara basarken, yeşil LED saniyenin onda biri kadar yanıp sönerek kullanıcı tarafından bir tuşa basıldığını gösterir.

• 6 haneli şifreyi girdikten sonra, tuş takımında 'Enter' işlevi gören 'D'ye basın. Şifreniz doğruysa, röle devreye girer, yeşil LED yanar.

• Röleyi devre dışı bırakmak için tuş takımında 'C' ye basın. Bu yapıldığında yeşil LED KAPANIR ve röle devre dışı kalır. Başka hiçbir anahtar röleyi devre dışı bırakamaz.

• Kullanıcı tarafından girilen şifre yanlışsa, kırmızı LED yanar ve kullanıcının bir sonraki girişimi girmek için 30 saniye beklemesi gerekir. 30 saniye sona erdiğinde, kırmızı LED söner ve kullanıcıyı, sistemin kullanıcıdan girdi almaya hazır olduğunu bildirir.

• Başarılı aktivasyondan sonra röle devre dışı bırakıldığında, röleyi tekrar etkinleştirmek için, kullanıcının şifreyi tekrar girmesi ve 'D'ye basması gerekir.

İşte özel bir durum:

• Doğru şifre girildiğinde, röle etkinleştirilir ve başarılı bir şekilde devre dışı bırakıldıktan sonra, kullanıcı herhangi bir yanlış tuşa (tam şifre değil) bastığında, program yanlış şifre olarak algılar ve kullanıcının 30 saniye daha beklemesi gerekir. Eğer bu bir korsan ise, korsanın yaptığı deneme sayısını geciktirecektir.

• İlk denemede doğru tuşa basıldığında, ancak o zaman sonraki tuşa girilmesine izin verir. Bu yalnızca ilk tuş vuruşu içindir ve tüm ardışık tuş vuruşları için değildir.

• Yukarıda açıklanan konseptin sloganı, korsanın yaptığı girişimlerin sayısını geciktirmektir.

Program kodu:

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

}
}
Başka
{
çöplüğe git
}
ALICI:
key2 = keypad.waitForKey ()
eğer (key2 == geç [1])
{
digitalWrite (yeşil, YÜKSEK)
gecikme (100)
digitalWrite (yeşil, DÜŞÜK)
{
z = 2
Seri. Baskı ('*')
B'ye git
}
}
Başka
{
çöplüğe git
}
B:
key3 = keypad.waitForKey ()
eğer (key3 == geç [2])
{
digitalWrite (yeşil, YÜKSEK)
gecikme (100)
digitalWrite (yeşil, DÜŞÜK)
{
z = 3
Seri. Baskı ('*')
C'ye git
}
}
Başka
{
çöplüğe git
}
C:
key4 = keypad.waitForKey ()
eğer (key4 == geç [3])
{
digitalWrite (yeşil, YÜKSEK)
gecikme (100)
digitalWrite (yeşil, DÜŞÜK)
{
z = 4
Seri. Baskı ('*')
D'ye git
}
}
Başka
{
çöplüğe git
}
D:
key5 = keypad.waitForKey ()
eğer (key5 == geç [4])
{
digitalWrite (yeşil, YÜKSEK)
gecikme (100)
digitalWrite (yeşil, DÜŞÜK)
{
z = 5
Seri. Baskı ('*')
E'ye git
}
}
Başka
{
çöplüğe git
}
DIR-DİR:
key6 = keypad.waitForKey ()
eğer (key6 == geç [5])
{
digitalWrite (yeşil, YÜKSEK)
gecikme (100)
digitalWrite (yeşil, DÜŞÜK)
{
z = 6
Seri. Baskı ('*')
tamam git
}
}
Başka
{
çöplüğe git
}
Tamam mı:
keyOK = keypad.waitForKey ()
eğer (keyOK == tamam [0])
{
digitalWrite (OP, HIGH)
digitalWrite (yeşil, YÜKSEK)
Serial.println ('')
Serial.println ('Röle Etkinleştirildi, Devre Dışı Bırakmak için' C'ye Basın.n ')
}
Başka
{
Serial.println ('')
Serial.println ('Girmek için' D'ye basın ')
tamam git
}
kapalı:
offkey = keypad.waitForKey ()
eğer (kapalı == kapalı [0])
{
digitalWrite (OP, DÜŞÜK)
digitalWrite (yeşil, DÜŞÜK)
Serial.println ('Relay Deactivated.n')
Başa gitmek
}
Başka
{
Serial.println ('Devre Dışı Bırakmak için' C'ye Basın ')
gitmek
}
dökümü:
eğer (z == 0)
{
digitalWrite (yeşil, YÜKSEK)
gecikme (100)
digitalWrite (yeşil, DÜŞÜK)
Seri. Baskı ('*')
dumpkey = keypad.waitForKey ()
Seri. Baskı ('*')
dumpkey = keypad.waitForKey ()
Seri. Baskı ('*')
dumpkey = keypad.waitForKey ()
Seri. Baskı ('*')
dumpkey = keypad.waitForKey ()
Seri. Baskı ('*')
dumpkey = keypad.waitForKey ()
Seri. Baskı ('*')
dumpkey = keypad.waitForKey ()
Seri. Baskı ('*')
hataya git
}
eğer (z == 1)
{
digitalWrite (yeşil, YÜKSEK)
gecikme (100)
digitalWrite (yeşil, DÜŞÜK)
Seri. Baskı ('*')
dumpkey = keypad.waitForKey ()
Seri. Baskı ('*')
dumpkey = keypad.waitForKey ()
Seri. Baskı ('*')
dumpkey = keypad.waitForKey ()
Seri. Baskı ('*')
dumpkey = keypad.waitForKey ()
Seri. Baskı ('*')
dumpkey = keypad.waitForKey ()
Seri. Baskı ('*')
hataya git
}
eğer (z == 2)
{
digitalWrite (yeşil, YÜKSEK)
gecikme (100)
digitalWrite (yeşil, DÜŞÜK)
Seri. Baskı ('*')
dumpkey = keypad.waitForKey ()
Seri. Baskı ('*')
dumpkey = keypad.waitForKey ()
Seri. Baskı ('*')
dumpkey = keypad.waitForKey ()
Seri. Baskı ('*')
dumpkey = keypad.waitForKey ()
Seri. Baskı ('*')
hataya git
}
eğer (z == 3)
{
digitalWrite (yeşil, YÜKSEK)
gecikme (100)
digitalWrite (yeşil, DÜŞÜK)
Seri. Baskı ('*')
dumpkey = keypad.waitForKey ()
Seri. Baskı ('*')
dumpkey = keypad.waitForKey ()
Seri. Baskı ('*')
dumpkey = keypad.waitForKey ()
Seri. Baskı ('*')
hataya git
}
eğer (z == 4)
{
digitalWrite (yeşil, YÜKSEK)
gecikme (100)
digitalWrite (yeşil, DÜŞÜK)
Seri. Baskı ('*')
dumpkey = keypad.waitForKey ()
Seri. Baskı ('*')
dumpkey = keypad.waitForKey ()
Seri. Baskı ('*')
hataya git
}
eğer (z == 5)
{
digitalWrite (yeşil, YÜKSEK)
gecikme (100)
digitalWrite (yeşil, DÜŞÜK)
Seri. Baskı ('*')
dumpkey = keypad.waitForKey ()
Seri. Baskı ('*')
hataya git
}
hata:
Serial.println ('')
Serial.print ('Yanlış şifre, 30 saniye bekleyin.')
digitalWrite (kırmızı, YÜKSEK)
gecikme (10000)
gecikme (10000)
gecikme (10000)
digitalWrite (kırmızı, DÜŞÜK)
Başa gitmek
}
// --------------------------------- R.Girish Tarafından Geliştirilen Program --------- ----------------- //

NOT: Parola ayarlamak için: char pass [] = '123ABC' // yalnızca 6 haneli parola (daha az veya daha fazla değil)
'123ABC' yi tırnak işareti içinde kendi şifrenizle değiştirin.

Programda ayarlanan parolanın YALNIZCA 6 haneli olduğundan, daha az veya daha fazla değil, tam olarak 6 haneli olduğundan emin olun. Aksi takdirde program düzgün çalışmayacaktır.

Açıklanan şifre güvenlik kilidi devresiyle ilgili başka şüpheleriniz varsa, lütfen bunları yorumlarınız aracılığıyla yayınlamaktan çekinmeyin.




Önceki: Sunrise Sunset Simülatörü LED Devresi Sonraki: Bluetooth Motor Kontrol Devresi