Mạch khóa bảo mật bằng mật khẩu sử dụng bàn phím 4 × 4 và Arduino

Hãy Thử Công Cụ CủA Chúng Tôi Để LoạI Bỏ Các VấN Đề





Trong bài này, chúng ta sẽ xây dựng một mạch khóa bảo mật bằng mật khẩu, có thể được truy cập bằng mật khẩu 6 chữ số. Nói chính xác hơn, nó là mật khẩu số alpha.

Phần cứng cho Dự án này

Chúng tôi sẽ sử dụng bàn phím 4x4, bao gồm 0 đến 9 giá trị thập phân, hai ký tự đặc biệt ‘#’ và ‘*’ và bảng chữ cái A đến D. Sự kết hợp của các ký tự này có thể được sử dụng làm mật khẩu.



Arduino là bộ não của hệ thống, một rơ le được giao tiếp với Arduino để kích hoạt và hủy kích hoạt, khi mật khẩu chính xác được lệnh. Hai đèn LED chỉ báo được sử dụng ở đây để cho biết trạng thái của hệ thống khóa.

Nếu bạn chưa quen với bàn phím 4x4, vui lòng tham khảo bài viết trước của tôi, đã thảo luận toàn diện về khái niệm cơ bản về bàn phím ma trận 4x4



Dự án được đề xuất có thiết kế phần cứng khá tối giản. Nó chỉ bao gồm một bàn phím, rơ le, arduino và một vài đèn LED, ngay cả một noob trong arduino cũng có thể thực hiện nó một cách dễ dàng.

Phần duy nhất hơi khó khăn trong dự án này là mã hóa, không cần lo lắng mã được đưa ra trong dự án này. Chương trình phải được viết theo cách sao cho nó là bằng chứng đánh lừa và không có kẻ xâm nhập nào có thể hack hệ thống.

Tuy nhiên, hãy cẩn thận nếu bạn để lộ phần cứng hoặc phần cứng của dự án này có thể dễ dàng truy cập, rơle có thể bị tấn công dễ dàng. Vì vậy, giữ cho dự án này trong khung được bảo vệ tốt.

Làm thế nào nó hoạt động

Lưu ý: Một điện trở giới hạn dòng điện 4,7K phải được kết nối với đế của bóng bán dẫn, không được hiển thị trong sơ đồ.

Bây giờ chúng ta hãy xem cách hoạt động của mạch khóa bảo mật mật khẩu Arduino này, vui lòng đọc kỹ hướng dẫn được cung cấp bên dưới để vận hành mạch.

Sơ đồ mạch

Mạch khóa bảo mật mật khẩu Arduino sử dụng bàn phím 4x4

Dưới đây là hai hình ảnh minh họa cách giao diện bàn phím và Arduino:

Kết quả kiểm tra khóa bảo mật mật khẩu Arduino

• Khi được bật nguồn, mạch sẽ yêu cầu nhập mật khẩu, bạn có thể thấy trên màn hình nối tiếp (màn hình nối tiếp không bắt buộc nhưng có thể được sử dụng cho mục đích thử nghiệm).

• Nhập mật khẩu mà bạn đã nhập vào chương trình trước khi biên dịch.

• Trong khi bạn nhấn các phím, đèn LED màu xanh lá cây nhấp nháy trong một phần mười giây, cho biết rằng một số phím được nhấn bởi người dùng.

• Sau khi bạn nhập mật khẩu gồm 6 chữ số, hãy nhấn ‘D’ trên bàn phím có tác dụng như ‘Enter’. Nếu mật khẩu của bạn đúng, rơ le sẽ được kích hoạt, đèn LED màu xanh lục BẬT.

• Để tắt rơ le, nhấn ‘C’ trên bàn phím. Khi điều này được thực hiện, đèn LED màu xanh lá cây sẽ TẮT và rơle ngừng hoạt động. Không có phím nào khác có thể hủy kích hoạt rơle.

• Nếu mật khẩu do người dùng nhập không chính xác, đèn LED màu đỏ sẽ sáng lên và người dùng phải đợi 30 giây để nhập lần thử tiếp theo. Khi hết 30 giây, đèn LED màu đỏ TẮT, thông báo cho người dùng biết rằng, hệ thống đã sẵn sàng nhận đầu vào từ người dùng.

• Khi rơ le ngừng hoạt động sau khi kích hoạt thành công, để kích hoạt lại rơ le, người dùng cần nhập lại mật khẩu và nhấn ‘D’.

Đây là một trường hợp đặc biệt:

• Khi nhập đúng mật khẩu, rơ le sẽ được kích hoạt và sau khi hủy kích hoạt thành công, khi người dùng nhấn sai bất kỳ một lần gõ phím nào (không phải toàn bộ mật khẩu), chương trình sẽ nhận ra là mật khẩu không chính xác và người dùng cần đợi thêm 30 giây. Nếu đây là không tặc, nó sẽ trì hoãn số lần thực hiện của không tặc.

• Khi gõ phím đúng được nhấn trong lần thử đầu tiên, chỉ khi đó nó mới cho phép nhập phím tiếp theo. Điều này chỉ dành cho lần nhấn phím đầu tiên và không áp dụng cho tất cả các lần nhấn phím tiếp theo.

• Phương châm của khái niệm được giải thích ở trên là trì hoãn số lần thực hiện bởi không tặc.

Mã chương trình:

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

}
}
khác
{
goto dump
}
ĐẾN:
key2 = keypad.waitForKey ()
if (key2 == pass [1])
{
digitalWrite (xanh lá cây, CAO)
trì hoãn (100)
digitalWrite (xanh lá cây, THẤP)
{
z = 2
Serial.print ('*')
đi tới B
}
}
khác
{
goto dump
}
B:
key3 = keypad.waitForKey ()
if (key3 == pass [2])
{
digitalWrite (xanh lá cây, CAO)
trì hoãn (100)
digitalWrite (xanh lá cây, THẤP)
{
z = 3
Serial.print ('*')
goto C
}
}
khác
{
goto dump
}
C:
key4 = keypad.waitForKey ()
if (key4 == pass [3])
{
digitalWrite (xanh lá cây, CAO)
trì hoãn (100)
digitalWrite (xanh lá cây, THẤP)
{
z = 4
Serial.print ('*')
goto D
}
}
khác
{
goto dump
}
D:
key5 = keypad.waitForKey ()
if (key5 == pass [4])
{
digitalWrite (xanh lá cây, CAO)
trì hoãn (100)
digitalWrite (xanh lá cây, THẤP)
{
z = 5
Serial.print ('*')
goto E
}
}
khác
{
goto dump
}
LÀ:
key6 = keypad.waitForKey ()
if (key6 == pass [5])
{
digitalWrite (xanh lá cây, CAO)
trì hoãn (100)
digitalWrite (xanh lá cây, THẤP)
{
z = 6
Serial.print ('*')
được rồi
}
}
khác
{
goto dump
}
đồng ý:
keyOK = keypad.waitForKey ()
if (keyOK == ok [0])
{
digitalWrite (OP, HIGH)
digitalWrite (xanh lá cây, CAO)
Serial.println ('')
Serial.println ('Kích hoạt Relay, Nhấn' C 'để Hủy kích hoạt.n')
}
khác
{
Serial.println ('')
Serial.println ('Nhấn' D 'để Enter')
được rồi
}
tắt:
offkey = keypad.waitForKey ()
if (offkey == off [0])
{
digitalWrite (OP, LOW)
digitalWrite (xanh lá cây, THẤP)
Serial.println ('Relay Deactiised.n')
goto top
}
khác
{
Serial.println ('Nhấn' C 'để Deactivaten')
đi tắt
}
đổ:
nếu (z == 0)
{
digitalWrite (xanh lá cây, CAO)
trì hoãn (100)
digitalWrite (xanh lá cây, THẤP)
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 ('*')
lỗi goto
}
nếu (z == 1)
{
digitalWrite (xanh lá cây, CAO)
trì hoãn (100)
digitalWrite (xanh lá cây, THẤP)
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 ('*')
lỗi goto
}
nếu (z == 2)
{
digitalWrite (xanh lá cây, CAO)
trì hoãn (100)
digitalWrite (xanh lá cây, THẤP)
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
lỗi goto
}
nếu (z == 3)
{
digitalWrite (xanh lá cây, CAO)
trì hoãn (100)
digitalWrite (xanh lá cây, THẤP)
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
lỗi goto
}
nếu (z == 4)
{
digitalWrite (xanh lá cây, CAO)
trì hoãn (100)
digitalWrite (xanh lá cây, THẤP)
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
lỗi goto
}
nếu (z == 5)
{
digitalWrite (xanh lá cây, CAO)
trì hoãn (100)
digitalWrite (xanh lá cây, THẤP)
Serial.print ('*')
dumpkey = keypad.waitForKey ()
Serial.print ('*')
lỗi goto
}
lỗi:
Serial.println ('')
Serial.print ('Mật khẩu sai, đợi trong 30 giây.')
digitalWrite (đỏ, CAO)
trì hoãn (10000)
trì hoãn (10000)
trì hoãn (10000)
digitalWrite (đỏ, THẤP)
goto top
}
// --------------------------------- Chương trình được phát triển bởi R.Girish --------- ----------------- //

GHI CHÚ: Để đặt mật khẩu: char pass [] = '123ABC' // chỉ mật khẩu 6 chữ số (không ít hơn hoặc không nhiều hơn)
Thay đổi “123ABC” bằng mật khẩu của riêng bạn, bên trong dấu ngoặc kép.

Đảm bảo mật khẩu được đặt trong chương trình CHỈ gồm 6 chữ số, không ít hơn hoặc không nhiều hơn nhưng chính xác là 6 chữ số. Nếu không, chương trình sẽ không hoạt động chính xác.

Nếu bạn có thêm bất kỳ nghi ngờ nào liên quan đến mạch khóa bảo mật bằng mật khẩu được giải thích, vui lòng đăng chúng qua phần bình luận




Một cặp: Mạch LED mô phỏng hoàng hôn bình minh Tiếp theo: Mạch điều khiển động cơ Bluetooth