Khóa điện tử sử dụng vi điều khiển AVR- Atmega16
Bài viết dưới đây sẽ hướng dẫn chúng ta tạo ra khóa bảo mật dựa vào mật khẩu được thiết lập sẵn. Hệ thống sử dụng led bảy đoạn để hiển thị mật khẩu, bàn phím ma trận để nhập số / mật khẩu và vận hành rơle (để kích hoạt van điện từ) cho mục đích khóa và mở khóa. Hệ thống sẽ báo động thông qua loa nếu nhập sai mật khẩu 3 lần liên tục và tin nhắn SMS sẽ gửi đến số liên lạc được xác định trước. Mật khẩu có thể được thay đổi bất cứ khi nào cần, nhưng chỉ thay đổi được sau khi nhập đúng mật khẩu hiện tại. Mật khẩu được lưu trong EEPROM của vi điều khiển để việc mất điện hoặc thiết lập lại hệ thống không ảnh hưởng đến nhận dạng mật khẩu.
Sơ đồ mạch
Hệ thống bao gồm LED 7 đoạn, bàn phím ma trận 4X4 và mô-đun GSM để gửi thông báo trạng thái. Dựa trên những yêu cầu này, có thể sử dụng bất kì loại vi điều khiển nào có 3 cổng I/O và thiết bị ngoại vi UART. Trong bài viết này chúng ta sẽ sử dụng vi điều khiển ATMEGA16. Mạch được mô phỏng bằng phần mềm Proteus để mô phỏng nguyên lí hoạt đông của mạch. Tính năng thời gian thực được gọi là ‘Virtual Terminal’ trong phần mềm này có chức năng gửi SMS thông qua Mô-đun GSM được kết nối với máy tính.
Sơ đồ mạch để kết nối mô-đun GSM với máy tính được hiển thị bên dưới.
Bàn phím ma trận
Trong mạch này, bàn phím ma trận 4X4 được sử dụng để nhập mật khẩu và tương tác với hệ thống. Hàm 'get_key' được sử dụng để đọc phím được nhấn từ bàn phím và thông tin này được chuyển đến 'run_key_feft', đây là phím lệnh với 16 trường hợp và được gán cho một trường hợp cho mỗi khóa. Vì có 16 phím trong bàn phím, giá trị khóa nằm trong khoảng từ 1 đến 16 mặc định, giá trị khóa được đặt ngoài phạm vi này trong quá trình khởi tạo biến khóa. Hàm 'get_key' làm mới các cột và đọc các hàng để phát hiện phím được nhấn (nếu có). Bất cứ khi nào một phím được nhấn, giá trị mặc định này được thay thế bằng phím hiện được nhấn. Bây giờ, 'run_key_function' được thực thi và các câu lệnh tương ứng cho phím được nhấn được thực thi. Sau khi thực hiện các bước trên, Hàm hiển thị được gọi cho đến khi phím nhấn không được giải phóng. Ngay sau khi khóa được phát hành, một lần nữa giá trị khóa được đặt ngoài phạm vi. Dưới đây là mã chương trình cho các chức năng 'get_key'. Chức năng 'get_key' có thể dễ dàng được sửa đổi cho các bàn phím khác với ma trận 4X4.
Màn hình hiển thị
Vì mật khẩu gồm bốn chữ số nên mạch sử dụng 4 led 7 đoạn. Có một tùy chọn để hiển thị /ẩn mật khẩu trong khi nhập. Hàm hiển thị được trình bày trong bài viết này sử dụng một vòng lặp for và nó có thể được sửa đổi dễ dàng nếu số lượng chữ số thay đổi. Nếu tùy chọn hiển thị = 1 thì các chữ số sẽ được hiển thị và nếu tùy chọn hiển thị = 0 thì phân đoạn 'G' của màn hình được bật thay vì toàn bộ chữ số. Mã chương trình cho chức năng hiển thị được hiển thị bên dưới.
Số đã nhập sẽ được đọc và lưu trữ dưới dạng một mảng vì vậy mỗi chữ số của số được gửi đến mảng hiển thị sau khi bật chữ số tương ứng. Tùy chọn hiển thị/ẩn được đọc và dữ liệu được gửi tùy thuộc vào giá trị của biến 'hiển thị' như đã thảo luận ở trên.
Phím 'xóa' được sử dụng làm khoảng lùi để xóa khóa đã nhập cuối cùng. Khi nhấn phím xóa này, chỉ số mảng bị giảm đi một và dữ liệu mảng tương ứng sẽ bị xóa và được đặt thành bất kỳ giá trị mặc định nào khác từ 0 đến 9, do đó lịch sử của các số đã nhập sẽ bị xóa. Ở đây sử dụng 10 làm giá trị mặc định. Mã chương trình cho hoạt động backspace này được tìm thấy trong trường hợp 4 (key = 4) của 'run_key_function'.
Sau khi nhập mật khẩu gồm 4 chữ số, người dùng phải nhấn phím ‘open’ để mở khóa. Bây giờ, chức năng xác minh được thực thi và kết quả được lưu trữ trong biến ‘match’ . Nếu match= 1 thì tủ khóa sẽ được mở khóa bằng cách kích hoạt rơle. Nếu khớp = 0 thì số 'miss_match' được tăng thêm một và tiếng chuông được kích hoạt trong một giây và số bị xóa. Nếu số này đạt đến ba lần sau đó, chuông được kích hoạt trong 10 giây và một tin nhắn SMS được gửi đến số điện thoại di động được cung cấp trong chương trình. Mã chương trình để mở hoặc chặn hệ thống được tìm thấy trong trường hợp 16 (key = 16) của 'run_key_feft'.
Đọc và xác minh mật khẩu đã nhập
Số đã nhập được đọc và lưu trữ dưới dạng một mảng để dễ xử lý. Khi nhấn một phím tương ứng với các số từ 0 đến 9, số đó được lưu trong vị trí địa chỉ hiện tại của mảng và con trỏ địa chỉ sẽ tăng lên thông qua một biến ‘index’. Vì vậy, khi nhấn phím tiếp theo, số sẽ được lưu trong vị trí địa chỉ bên cạnh chữ số đã nhập trước đó. Kích thước mảng được giới hạn ở 4 và nhập vượt quá giới hạn này dẫn đến lỗi thời gian chạy. Vì vậy, trước khi lưu trữ chữ số đã nhập, giá trị của index cần được xác minh xem nó nhỏ hơn hoặc bằng ba. Mật khẩu đã nhập được xác minh bằng chức năng 'verify_password' được hiển thị bên dưới.
Hệ thống thông báo sai mật khẩu
Sau ba lần thử sai liên tục, hệ thống sẽ bị chặn trong một giờ (thời gian có thể được sửa đổi) và sau đó hệ thống sẽ hoạt động trở lại. Khi hệ thống bị chặn, nếu có sự cố mất điện hoặc nếu người dùng trái phép cố gắng thiết lập lại hệ thống thì trạng thái chặn sẽ bị mất, tức là, hệ thống hoạt động bình thường. Để tránh điều này, thông tin liên quan đến chặn và thời gian trôi qua sau khi chặn hệ thống nên được lưu trữ trong EEPROM. Sau mỗi lần thiết lập lại hoặc công tắc có điện trở lại của hệ thống, thông tin này sẽ được đọc và nếu trước đó hệ thống ở trạng thái bị chặn thì việc chặn này tiếp tục trong thời gian còn lại và sau đó hệ thống sẽ tiếp tục. Các hoạt động liên quan đến EEPROM được thực hiện trong quy trình con ngắt bộ định thời 16 bit. Dưới đây là mã chương trình.
Để chặn người dùng trái phép, bộ đếm thời gian / bộ đếm 16 bit được sử dụng. Sau khi chặn, một tin nhắn SMS được gửi và bộ hẹn giờ được khởi tạo với tần số 16 MHz / 1024. Các thanh ghi so sánh của vi điều khiển được đặt trước với giá trị đếm tương đương với một giây. Vì vậy, ngắt so sánh được tạo ra cho mỗi giây. Thời gian chờ được tăng lên cho mỗi giây trong thường trình con Ngắt và giá trị cập nhật được lưu trữ trong EEPORM. Do đó, ngay cả khi có sự cố mất điện hoặc điều kiện đặt lại, thời gian trôi qua sau khi chặn có sẵn trong các thanh ghi EEPROM và sau khi thiết lập lại vi điều khiển, các giá trị này được đọc và hoạt động chặn được tiếp tục.
Thay đổi mật khẩu
Mật khẩu chỉ có thể được thay đổi sau khi đã nhập mật khẩu hiện tại. Khi hệ thống được mở khóa thành công bằng mật khẩu hiện tại, phím thay đổi được kích hoạt. Bây giờ nếu nhấn phím thay đổi, mảng số chứa mật khẩu đã nhập sẽ được cập nhật thành giá trị mặc định (nghĩa là = 10). Nhưng, các thanh ghi EEPROM vẫn chứa mật khẩu. Bây giờ nhập mật khẩu mới và bấm phím thiết lập. Điều này sẽ cập nhật các thanh ghi EEPROM với mật khẩu mới nhập. Từ giờ trở đi, mật khẩu mới này được sử dụng để xác minh. Sau khi BẬT nguồn hoặc Đặt lại hệ thống, mật khẩu này được đọc từ các thanh ghi EEPROM và được lưu trong RAM của vi điều khiển.
Gửi tin nhắn SMS
Như đã đề cập trước đó, hệ thống sẽ gửi SMS sau ba lần thử sai. SMS được gửi qua mô-đun GSM được kết nối với vi điều khiển. Trong sơ đồ mạch, một MÁY TÍNH được kết nối trực tiếp với vi điều khiển. Nhưng trong thời gian thực, các chân RX và TX của mô-đun GSM được kết nối với vi điều khiển. Các tham số truyền thông là Baud speed = 9600, Stop bits = 1, Parity = none và Data bits = 8.
Trước khi sử dụng các lệnh SMS, các tham số nhất định phải được đặt sau khi cấp nguồn cho Mô-đun GSM. Các lệnh này được nhóm vào hàm 'gsm_initialization'. Trước đó, mô-đun phải sẵn sàng, có thể mất khoảng 15 giây (ranh giới an toàn). Suy nghĩ một cách logic, SMS phải được gửi sau ba lần thử sai. Vì vậy, nếu chúng tôi vô hiệu hóa hệ thống trong 3 giây sau mỗi lần thử sai, mô-đun sẽ khởi tạo đúng cách ngay cả khi ta hoạt động ngay sau khi Bật nguồn.
Tin nhắn được gửi qua chức năng 'send_sms'. Thông qua một loạt các lệnh, số liên lạc và tin nhắn được gửi đến mô-đun GSM và mô-đun gửi tin nhắn. Chương trình gửi tin nhắn SMS được hiển thị dưới đây.
Chú ý:
Khi thực hiện mạch này trong phần cứng, hãy nhớ ghi các thanh ghi EEPROM bằng mật khẩu đã biết, biến khối và vị trí giá trị thời gian bằng không. Nếu không, hệ thống không thể được mở. Phần mềm lập trình sẽ có tính năng ghi dữ liệu EEPORM. Sử dụng tính năng này ghi mật khẩu và chặn các thanh ghi trạng thái trong EEPROM tại các vị trí mong muốn. Trong hình ảnh bên dưới, các vị trí địa chỉ 0 đến 3 chứa mật khẩu '1234' và vị trí 10 chứa dữ liệu biến khối = 0 và 11, 12 vị trí địa chỉ chứa giá trị thời gian = 0.
Dowload chương trình tại đây
Nguồn tham khảo: http://www.circuitstoday.com/keypad-door-lock
Hotline: 0979 466 469