An ninh là một mối quan tâm lớn trong cuộc sống hàng ngày của chúng ta và khóa kỹ thuật số đã trở thành một phần quan trọng của các hệ thống an ninh này. Một khóa mã kỹ thuật số như vậy được mô phỏng trong dự án này bằng cách sử dụng bảng arduino và bàn phím ma trận.
Các thành phần
- Arduino
- Mô-đun bàn phím
- Buzzer
- LCD 16x2
- Bóng bán dẫn BC547
- Điện trở (1k)
- Bảng bánh mì
- Quyền lực
- Kết nối dây
Trong mạch này, chúng tôi đã sử dụng kỹ thuật ghép kênh để giao diện bàn phím để nhập mật khẩu vào hệ thống. Ở đây chúng tôi đang sử dụng bàn phím 4x4 có 16 phím. Nếu chúng ta muốn sử dụng 16 phím thì chúng ta cần 16 pin để kết nối với arduino nhưng trong kỹ thuật ghép kênh, chúng ta chỉ cần sử dụng 8 pin cho giao diện 16 phím. Vì vậy, đó là một cách thông minh để giao diện mô-đun bàn phím.
Kỹ thuật ghép kênh: Kỹ thuật ghép kênh là một cách rất hiệu quả để giảm số lượng chân được sử dụng với bộ vi điều khiển để cung cấp đầu vào hoặc mật khẩu hoặc số. Về cơ bản, kỹ thuật này được sử dụng theo hai cách - một là quét theo hàng và một là quét dấu hai chấm. Nhưng trong dự án dựa trên arduino này, chúng tôi đã sử dụng thư viện bàn phím nên chúng tôi không cần tạo bất kỳ mã ghép kênh nào cho hệ thống này. Chúng tôi chỉ cần sử dụng thư viện bàn phím để cung cấp đầu vào.
Mô tả mạch
Mạch của dự án này rất đơn giản bao gồm Arduino, mô-đun bàn phím, bộ rung và màn hình LCD. Arduino kiểm soát các quy trình hoàn chỉnh như lấy mô-đun bàn phím dạng mật khẩu, so sánh mật khẩu, điều khiển buzzer và gửi trạng thái đến màn hình LCD. Bàn phím được sử dụng để lấy mật khẩu. Buzzer được sử dụng để chỉ báo và LCD được sử dụng để hiển thị trạng thái hoặc thông báo trên đó. Buzzer được điều khiển bằng cách sử dụng bóng bán dẫn NPN.
Các chân Cột của mô-đun bàn phím được kết nối trực tiếp với chân 4, 5, 6, 7 và các chân Hàng được kết nối với 3, 2, 1, 0 của arduino una. Màn hình LCD 16x2 được kết nối với arduino ở chế độ 4-bit. Chân điều khiển RS, RW và En được kết nối trực tiếp với chân 13, GND và 12. Chân dữ liệu D4-D7 của arduino được kết nối với chân 11, 10, 9 và 8 của arduino. Và một bộ rung được kết nối tại chân 14 (A1) của arduino thông qua một bóng bán dẫn BC547 NPN.
Đang làm việc
Chúng tôi đã sử dụng EEPROM sẵn có của arduino để lưu mật khẩu, vì vậy khi chúng tôi chạy mạch này lần đầu tiên chương trình đọc dữ liệu rác từ EEPROM của arduino có sẵn và so sánh nó với mật khẩu đầu vào và đưa ra thông báo trên màn hình LCD là Access bị từ chối vì mật khẩu không khớp. Để giải quyết vấn đề này, chúng ta cần đặt mật khẩu mặc định lần đầu tiên bằng cách sử dụng lập trình dưới đây:
for (int j = 0; j <4; j ++) EEPROM.write (j, j + 49);
lcd.print ("Nhập Mật khẩu Ur:"); lcd.setCursor (0,1); for (int j = 0; j <4; j ++) pass = EEPROM.read (j);
Thao tác này sẽ đặt mật khẩu “1234” thành EEPROM của Arduino.
Sau khi chạy nó lần đầu tiên, chúng ta cần xóa nó khỏi chương trình và viết lại mã vào arduino và chạy. Bây giờ hệ thống của bạn sẽ chạy tốt. Và mật khẩu được sử dụng lần thứ hai của bạn bây giờ là “1234”. Bây giờ bạn có thể thay đổi nó bằng cách nhấn nút #, sau đó nhập mật khẩu hiện tại của bạn và sau đó nhập mật khẩu mới của bạn.
Khi bạn nhập mật khẩu, hệ thống sẽ so sánh mật khẩu đã nhập của bạn với mật khẩu được lưu trong EEPROM của arduino. Nếu khớp xảy ra thì màn hình LCD sẽ hiển thị “đã cấp quyền truy cập” và nếu mật khẩu sai thì màn hình LCD sẽ “Truy cập bị từ chối” và còi liên tục phát ra tiếng bíp trong một thời gian. Và buzzer cũng phát ra tiếng bíp mỗi khi người dùng nhấn bất kỳ nút nào từ bàn phím.
Mô tả lập trình
Trong mã, chúng tôi đã sử dụng thư viện bàn phím để giao tiếp bàn phím với arduino.
#include
const byte ROWS = 4; // bốn hàng const byte COLS = 4; // bốn cột char hexaKeys = {{'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', ' 8 ',' 9 ',' C '}, {' * ',' 0 ',' # ',' D '}}; byte rowPins = {3, 2, 1, 0}; // kết nối với sơ đồ hàng của byte bàn phím colPins = {4, 5, 6, 7}; // kết nối với sơ đồ cột của bàn phím // khởi tạo một phiên bản của lớp NewKeypad Keypad customKeypad = Keypad (makeKeymap (hexaKeys), rowPins, colPins, ROWS, COLS);
Chúng tôi đã bao gồm thư viện LCD cho giao diện LCD và để giao tiếp EEPROM, chúng tôi đã bao gồm thư viện EEPROM.h., Sau đó biến khởi tạo và các chân xác định cho các thành phần.
#define buzzer 15 LCD LiquidCrystal (13,12,11,10,9,8); mật khẩu char; pass char, pass1; int i = 0; char customKey = 0;
Và sau đó chúng tôi khởi tạo LCD và đưa ra hướng cho các chân trong chức năng thiết lập
void setup () {lcd.begin (16,2); pinMode (led, OUTPUT); pinMode (buzzer, OUTPUT); pinMode (m11, OUTPUT); pinMode (m12, OUTPUT); lcd.print ("Điện tử"); lcd.setCursor (0,1); lcd.print ("Khóa bàn phím"); chậm trễ (2000); lcd.clear (); lcd.print ("Nhập Mật khẩu Ur:"); lcd.setCursor (0,1);
Sau đó, chúng tôi đọc bàn phím trong chức năng vòng lặp
customKey = customKeypad.getKey (); if (customKey == '#') change (); if (customKey) {password = customKey; lcd.print (customKey); tiếng kêu bíp(); }
Và sau đó so sánh mật khẩu với mật khẩu lưu bằng phương pháp so sánh chuỗi.
if (i == 4) {delay (200); for (int j = 0; j <4; j ++) pass = EEPROM.read (j); if (! (strncmp (password, pass, 4))) {digitalWrite (led, HIGH); tiếng kêu bíp(); lcd.clear (); lcd.print ("Đã chấp nhận mật khẩu"); chậm trễ (2000); lcd.setCursor (0,1); lcd.print ("#. Thay đổi Mật khẩu"); chậm trễ (2000); lcd.clear (); lcd.print ("Nhập Mật khẩu:"); lcd.setCursor (0,1); i = 0; digitalWrite (dẫn đầu, THẤP); }
Đây là chức năng thay đổi mật khẩu và chức năng phát tiếng bíp
void thay đổi () {int j = 0; lcd.clear (); lcd.print ("UR Hiện tại Passk"); lcd.setCursor (0,1); while (j <4) {char key = customKeypad.getKey (); if (key) {pass1 = key; lcd.print (phím); void beep () {digitalWrite (buzzer, HIGH); chậm trễ (20); digitalWrite (buzzer, LOW); }