Mạch khóa số điện tử dùng Arduino – Bảo vệ ngôi nhà của bạn một cách an toàn và hiệu quả

Trong bài viết này, chúng ta sẽ hướng dẫn cách tạo một mạch khóa số điện tử sử dụng Arduino. Mạch này bao gồm bàn phím, màn hình LCD và bo mạch điều khiển Arduino.

Linh kiện cần thiết

  1. Arduino Uno – 1 cái
  2. LCD 16×2 – 1 cái
  3. Bàn phím 4×4 – 1 cái
  4. Relay – 1 cái
  5. Điện trở 1kΩ – 1 cái
  6. Transistor BC548 – 1 cái
  7. Đèn LED – 2 cái

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 khóa/cửa, chúng ta sử dụng một Relay 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

Trong mạch này, chúng ta sử dụng 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 các kết nối IO, màn hình LCD và 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’, “=” để thực hiện các chức năng khác nhau. Phím ‘C’ được sử dụng để khóa hoặc xóa màn hình hiển thị khi nhập sai mật khẩu. Mật khẩu đã nhập có thể được ẩn bằng cách đặt ký tự dấu sao ‘*’.

Sau khi nhập mật khẩu, bạn chỉ cần 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 
#include 

// 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]; // Lưu 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ấn
    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 thị 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

Với mạch khóa số điện tử dùng Arduino này, bạn có thể bảo vệ ngôi nhà của mình một cách an toàn và hiệu quả. Mạch này cũng có thể được mở rộng để thêm chức năng cảnh báo khi có trộm xâm nhập. Việc sử dụng bàn phím 3×4 kết hợp với bo mạch Arduino và màn hình LCD 16×2 làm cho mạch trở nên thú vị và ứng dụng thực tế cao.

Mạch khóa số điện tử
Hình ảnh minh hoạ: Mạch khóa số điện tử dùng Arduino

FEATURED TOPIC

hihi