Trong bài viết này, các bạn sẽ được hướng dẫn làm một mạch khóa số điện tử dùng Arduino. Các thành phần chính của mạch bao gồm bàn phím, màn hình LCD và bộ điều khiển Arduino.
Khóa mật mã số được sử dụng phổ biến trong các hệ thống an ninh. Khóa số hay khóa số điện tử là một thiết bị có một khối điều khiển điện tử gắn liền với nó. Hệ thống này cho phép người dùng mở khóa thiết bị bằng mật khẩu. Mật khẩu được nhập thông qua bàn phím. Người dùng cũng có thể đặt lại mật khẩu của mình để đảm bảo bảo vệ tốt hơn.
Linh kiện cần thiết
Số TT | Tên linh kiện | Số lượng |
1 | Arduino Uno | 1 |
2 | LCD 16×2 | 1 |
3 | Bàn phím 4×4 | 1 |
4 | Relay | 1 |
5 | Điện trở 1kΩ | 1 |
6 | Transistor BC548 | 1 |
7 | LED | 2 |
Mạch khóa số điện tử được thiết kế sử dụng Arduino Uno, màn hình LCD và bàn phím. Màn hình LCD và bàn phím tạo thành giao diện người dùng để nhập mật khẩu và hiển thị các thông báo liên quan như “Mật khẩu sai”, “Cửa mở”, v.v. Hai đèn LED được sử dụng để cho biết trạng thái của cửa là đóng hay mở. Để vận hành chốt/khóa, chúng ta sử dụng Rơ le có thể được kết nối với bộ truyền động điện tử hay solenoid.
Sơ đồ mạch khóa số điện tử dùng Arduino
Chương trình
Chương trình được viết sử dụng hai thư viện “LiquidCrystal” và “Keypad”. Chương trình có các mô-đun khác nhau, Setup, Loop, Lock. Trong phần setup, chúng ta khởi tạo tất cả các kết nối IO, màn hình LCD, bàn phím. Trong vòng lặp chính, chúng ta sẽ lấy các phím được nhấn trong mảng “code []”, khi bốn chữ số đã được nhập vào, chương trình sẽ không nhận các phím nữa. Chúng ta sử dụng các phím số và phím ‘C’, “=”. Phím ‘C’ được sử dụng để khóa hoặc xóa màn hình hiển thị nhập sai mật khẩu. Chúng ta có thể ẩn mật khẩu đã nhập bằng cách đặt ký tự dấu sao ‘*’.
Sau khi nhập mật khẩu, bạn sẽ nhấn phím ‘=’ . Nếu mật khẩu đúng, cửa sẽ mở khóa trong vài giây. Nếu mật khẩu nhập không chính xác, thông báo sẽ được hiển thị trên màn hình LCD.
#include <Keypad.h>
#include <LiquidCrystal.h>
// khởi tạo thư viện với các chân giao tiếp
LiquidCrystal lcd(9, 8, 7, 6, 5, 4);
const byte ROWS = 4; // 4 hàng
const byte COLS = 4; // 4 cột
// định nghĩa các ký tự và số trên bàn phím
char hexaKeys[ROWS][COLS] = {
{‘7’, ‘8’, ‘9’, ‘/’},
{‘4’, ‘5’, ‘6’, ‘*’},
{‘1’, ‘2’, ‘3’, ‘-‘},
{‘C’, ‘0’, ‘=’, ‘+’}
};
byte rowPins[ROWS] = {3, 2, 19, 18}; // kết nối các chân hàng của bàn phím
byte colPins[COLS] = {17, 16, 15, 14}; // kết nối các chân cột của bàn phím
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
const int LED_RED = 10; // LED đỏ
const int LED_GREEN = 11; // LED xanh
const int RELAY = 12; // Relay hay động cơ
char keycount = 0;
char code[4]; // giữa các phím đã nhấn
//=================================================================
// SETUP
//=================================================================
void setup() {
pinMode(LED_RED, OUTPUT);
pinMode(LED_GREEN, OUTPUT);
pinMode(RELAY, OUTPUT);
// thiết lập số cột và số hàng của màn hình LCD:
lcd.begin(16, 2);
// hiện thị tin nhắn ra LCD
lcd.print(“Nhap mat khau:”);
lcd.setCursor(0, 1); // di chuyển con trỏ sang dòng 2
// mở con trỏ
lcd.cursor();
digitalWrite(LED_GREEN, HIGH); // LED xanh tắt
digitalWrite(LED_RED, LOW); // LED đỏ sáng
digitalWrite(RELAY, LOW); // tắt relay
}
//=================================================================
// LOOP
//=================================================================
void loop() {
char customKey = customKeypad.getKey();
if (customKey && (keycount < 4) && (customKey != ‘=’) && (customKey != ‘C’)) {
//lcd.print(customKey); // hiển thị các phím đã nhập
lcd.print(‘*’); // không hiển thị các phím đã nhập
code[keycount] = customKey;
keycount++;
}
if (customKey == ‘C’) // phím cancel/khóa để xóa màn hình và khóa
{
Lock(); // khóa và xóa màn hình
}
if (customKey == ‘=’) // kiểm tra mật khẩu và mở cửa
{
if ((code[0] == ‘1’) && (code[1] == ‘2’) && (code[2] == ‘3’) && (code[3] == ‘4’)) // khớp với mật khẩu
{
digitalWrite(LED_GREEN, LOW); // LED xanh tắt
digitalWrite(LED_RED, HIGH); // led đỏ sáng
digitalWrite(RELAY, HIGH); // mở relay
lcd.setCursor(0, 1);
lcd.print(“Cua mo “);
delay(4000); // cửa mở trong 4 giây
Lock();
}
else
{
lcd.setCursor(0, 1);
lcd.print(“Mat khau sai”); // hiển trị tin nhắn nhập sai mật khẩu
delay(1500);
Lock();
}
}
}
//=================================================================
// Khóa cửa và cập nhật hiển thị
//=================================================================
void Lock()
{
lcd.setCursor(0, 1);
lcd.print(“Cua da dong “);
delay(1500);
lcd.setCursor(0, 1);
lcd.print(” “); // xóa mật khẩu
lcd.setCursor(0, 1);
keycount = 0;
digitalWrite(LED_GREEN, HIGH); // LED xanh tắt
digitalWrite(LED_RED, LOW); // LED đỏ mở
digitalWrite(RELAY, LOW); // tắt relay }
Kết luận
Mạch khóa số điện tử dùng Arduino để bảo vệ cho ngôi nhà một cách an toàn và hiệu quả, có thể thêm chức năng cảnh báo khi có trộm đột nhập. Việc sử dụng key phím 3×4 kết hợp với board Arduino hiển thị lên màn hình LCD 16×2 và có thể mở cửa bằng servo làm cho mạch trở nên hay và có tính ứng dụng thực tế cao.