BẢO MẬT BẰNG MÃ ARDUINO HIỂN THỊ LCD VÀ MẬT KHẨU DO NGƯỜI DÙNG CÀI ĐẶT
Vài tuần trước chúng tôi có đăng một bài “Bảo mật bằng mật khẩu sử dụng arduino”.Bài tiếp theo đây có một chút khác biệt. Phiên bản trước đó dựa trên mật khẩu cố định, trong đó người dùng không thể thay đổi mật khẩu. Ngoài ra, không có màn hình LCD giao tiếp với Arduino để hiển thị trạng thái khóa đầu ra. Dự án này là phiên bản cải tiến của “Bảo mật bằng mật khẩu sử dụng arduino” đi kèm với mật khẩu do người dùng xác định và màn hình LCD. Người dùng sẽ được nhắc đặt mật khẩu khi cài đặt. Mật khẩu này khi cài đặt sẽ tiếp tục giữ nguyên cho đến khi cài đặt mật khẩu mới. Người dùng có thể thay đổi mật khẩu hiện tại chỉ bằng một lần bấm phím. Chương trình sẽ kiểm tra mật khẩu hiện tại và cho phép người dùng thay đổi mật khẩu chỉ khi mật khẩu hiện tại được nhập chính xác.
Kiến thức cần có.
Bạn nên tìm hiểu hai khái niệm quan trọng trước khi bắt đầu dự án này. Đầu tiên là “Giao tiếp bàn phím hex với arduino”. Thứ hai là “Kết nối LCD với Arduino - Hiển thị văn bản và ký tự trên màn hình LCD bằng Arduino”. Những dự án trên giúp bạn hiểu các khái niệm đằng sau việc giao tiếp giữa màn hình LCD và bàn phím hex, chỉ cần thêm một vài dòng code để xây dựng dự án Bảo mật số bằng mã Arduino.
Sử dụng thiết bị.
Bước Cài đặt - Bạn sẽ được yêu cầu nhập 5 chữ số làm mật khẩu khi khởi động / đặt lại thiết bị ban đầu. 5 chữ số đầu tiên bạn nhập khi cài đặt sẽ được lưu dưới dạng SET PASSWORD. Thiết bị sẽ bị KHÓA sau khi cài đặt PASSWORD.
Phím A - để mở khóa thiết bị. Nhập mật khẩu chính xác và nhấn A để mở khóa.
Phím B - để khóa bất cứ lúc nào. Chỉ cần nhấn B và bạn sẽ thấy thông báo LOCKED.
Phím C - để thay đổi mật khẩu. Nhập mật khẩu chính xác và nhấn C. Bạn sẽ thấy thông báo yêu cầu ENTER MẬT KHẨU MỚI. Nhập 5 chữ số làm mật khẩu. 5 chữ số đầu tiên bạn nhập sẽ được SAVED là PASSWORD MỚI.
Các trường hợp ngoại lệ - Bạn không thể sử dụng các khóa ’A’,’B’ và ‘C’ và bên trong tổ hợp mật khẩu. 3 phím này là các phím điều khiển của thiết bị với các chức năng cụ thể. Chương trình kiểm tra các lần nhấn phím này (tại thời điểm cài đặt mật khẩu - bạn có thể thấy chức năng SetPassword () và xem điều kiện để kiểm tra nhấn phím không hợp lệ) và xác định chúng là Khóa không hợp lệ. Bạn sẽ phải nhập 5 chữ số mới làm mật khẩu sau khi nhấn phím không hợp lệ.
Các biến và mảng quan trọng.
pass [6] - là mảng được sử dụng để lưu và giữ mật khẩu do người dùng xác định.
check [6] - là mảng được sử dụng để thu thập và giữ đầu vào của người dùng. Dữ liệu đầu vào của người dùng này (trong mảng check []) được so sánh với mảng pass [] để xác thực mật khẩu.
entry - là biến được sử dụng để xác định điểm vào ban đầu của chương trình. Người dùng được yêu cầu THIẾT LẬP Mật khẩu 5 chữ số khi cài đặt Khóa. Do đó, chúng ta cần một biến để xác định mục nhập và lặp 5 lần để thu thập 5 chữ số và lưu chúng để vượt qua mảng []. Biến tương tự sau đó được sử dụng để Thay đổi Mật khẩu. Khi nhấn phím Thay đổi mật khẩu (ở đây ’C,), biến này chỉ được gán một giá trị 0 (trạng thái ban đầu của biến). Điều này buộc điều khiển chương trình nhập lại Vòng lặp thiết lập mật khẩu của chương trình.
key_id - là biến được sử dụng để xác định một lần nhấn phím và thực hiện một số hành động trong chương trình (điều đó chỉ xảy ra khi nhấn phím). Theo mặc định, biến này được đặt giá trị ban đầu bằng không. Bất cứ khi nào một phím được nhấn trong bàn phím, biến này sẽ được gán một giá trị = 1. Bạn có thể kiểm tra hàm keyscan () để thấy điều này. Thủ thuật đơn giản này giúp xác định một lần bấm phím và thực hiện các hành động khác nhau trên lần nhấn phím đó (dựa trên giá trị của phím bấm). Biến này được đặt thành 0 tại các điểm khác nhau trong chương trình (để ngăn giá trị 1 trong biến key_id được xác định là nhấn phím sai). Bạn có thể kiểm tra chúng là tốt.
Lưu ý: - col_scan - là biến thực tế được kích hoạt ở mức THẤP khi nhấn phím (do đó giúp xác định nhấn phím). Nhưng biến này thực sự là một phần của chương trình giao thoa phím (phiên bản 2).
Count - là biến được sử dụng để lặp lại chỉ số của check [Count] (mảng đầu vào của người dùng). biến đếm được khởi tạo thành 1. Mỗi đầu vào của người dùng sẽ được lưu để kiểm tra mảng [] theo thứ tự tăng của biến đếm.
temp_press - là một biến tạm thời để giữ giá trị của phím bấm. Giá trị của phím bấm được gán cho biến temp_press là kết quả trả về của hàm keypress (). nhấn phím () là hàm được xác định để xác định giá trị của phím bấm.
lcd_count - là một biến đếm đơn giản được sử dụng để lặp lại vị trí cột của mô-đun LCD. Biến này giúp hiển thị dữ liệu đầu vào của người dùng liên tiếp trong hàng 2 của mô-đun LCD.
i, j, flag - chỉ là các biến giả được sử dụng trong chương trình. i, j được sử dụng làm biến đếm bên trong vòng lặp. cờ được sử dụng để giữ trạng thái của chương trình con checkPassword () (hàm được sử dụng để so sánh dữ liệu đầu vào của người dùng và mật khẩu SET). Một quyết định được đưa ra dựa trên giá trị bên trong biến cờ.
Các chương trình con được sử dụng trong Chương trình.
SetPassword () - là chương trình con được sử dụng để đặt mật khẩu do người dùng xác định. Chương trình con này phụ thuộc rất nhiều vào “Password Setting Loop” được viết bên trong chương trình chính. Vòng lặp cài đặt mật khẩu này sẽ được lặp lại khi cài đặt thiết bị (đó là lúc khởi động hoặc đặt lại thiết bị) cho 5 lần nhấn phím đầu tiên. 5 phím bấm đầu tiên này sẽ được sử dụng để THIẾT LẬP Mật khẩu. Những giá trị phím này sẽ được lưu vào mảng []. Như đã đề cập trước đó, entry là biến được sử dụngtrong 5 vòng lặp. key_id là biến được sử dụng xác định nhấn phím.
Lưu ý: Vòng lặp “Password Setting Loop” được sử dụng để Thay đổi Mật khẩu. Khi nhấn phím C, mật khẩu hiện tại được kiểm tra. Nếu mật khẩu đầu vào khớp với mật khẩu cài đặt trước, thì biến entry sẽ được gán cho giá trị 0. Thao tác này sẽ chuyển từ chương trình kiểm tra nhấn enter sang chương trình “password Setting Loop” lại từ đầu.
keyscan () - là chương trình con để quét bàn phím để bấm phím. Chương trình con này về cơ bản giống như mã phiên bản 2 của giao diện bàn phím hex với arduino. Tôi đã thêm một số dòng mã cần thiết cho khóa mã này. Ngoài ra, các dòng mã trong chương trình con này giống như các dòng bàn phím giao tiếp. chương trình con keyscan () quét để bấm phím (khi nào hàm được gọi từ chương trình chính hoặc từ các thường trình con khác như SetPassword ()) và xác định hàng và cột của phím được nhấn. Nếu nhấn phím ‘1, thì keyscan xác định phím đó ở hàng 1 và cột 1 được nhấn. Tương tự nếu nhấn phím 6 6, phím bấm xác định phím được nhấn ở hàng 2 và cột 3. Khi nào nhấn phím, một chương trình con khác có tên là keypress () được gọi trong thường trình keyscan (). Thói quen nhấn phím () này được sử dụng để xác định giá trị của phím bấm (giả sử ‘1’, ‘2’, ‘3’ or ‘A’, ‘C’ or ‘D’ v…v)
keypress()- như đã đề cập ở trên là chương trình con để xác định giá trị của phím bấm. Thường trình keyscan () xác định hàng và cột của phím phím được nhấn. Số hàng và số cột này được truyền cho thường trình keypress () dưới dạng tham số (sử dụng các giá trị biến của i và j).
checkPassword () - là chương trình con để kiểm tra mật khẩu đầu vào của người dùng có trùng khớp với Mật khẩu do người dùng cài đặt trước hay không. Dữ liệu đầu vào của người dùng (mật khẩu để kiểm tra chéo) được thu thập trong mảng check []. Và so sánh với mảng Mật khẩu bên trong mảng pass []. Một vòng lặp for được sử dụng để so sánh. Nếu mỗi chữ số bên trong mảng khớp nhau, cờ báo ngắt sẽ vẫn bằng không. Nếu bất kỳ sự không phù hợp nào xảy ra, cờ báo ngắt sẽ được đặt thành 1 và vòng lặp sẽ dừng lại.
Chương trình.
https://drive.google.com/file/d/1mUezEL69I28ZwDhBE123xAL8upvWP0Ht/view?usp=sharing
Hotline: 0979 466 469