Đây là một dự án rất thú vị và có thể được sử dụng trong học tập hoặc bạn cũng có thể tạo một hệ thống khóa cửa dựa trên mật khẩu cho ngôi nhà của mình.

Trong dự án này, bạn sẽ học cách giao diện bàn phím hex với Arduino. Bàn phím 4 × 4 còn được gọi là bàn phím hex. bàn phím sử dụng nguyên tắc ma trận để tìm ra phím được nhấn. Có tổng cộng 16 khóa, 4 hàng và 4 cột.
Các thành phần cần thiết để tạo hệ thống khóa cửa dựa trên Mật khẩu bằng Arduino
Sơ đồ mạch Arduino bàn phím:

Ở đây chúng ta đang sử dụng nguồn điện 12v và chúng ta cần cấp nguồn cho Arduino bằng nguồn điện 5v hoặc chúng ta có thể sử dụng cùng một nguồn cung cấp nhưng đối với Arduino, chúng ta có thể sử dụng bộ chuyển đổi buck. Và nếu bạn đang sử dụng nguồn điện khác thì bạn cần phải nối chung chân nối đất của cả hai nguồn. Đảm bảo rằng nguồn điện đã tắt trong quá trình kết nối.
Giới thiệu Bàn phím ma trận 4×4 (matrix keypad 4×4)

Trên đây là hình ảnh sơ đồ nguyên lý của module bàn phím 4×4. Tuy có đến 16 nút nhấn, nghĩa là nếu làm một cách thông thường (dùng chân digital) thì chúng ta phải cần đến 16 chân Arduino để đọc. Nhưng với bàn phím này, chúng ta chỉ cần dùng 8 chân (4 chân hàng ngang (row), và 4 chân cột dọc (column)).
Để kiểm tra một nút có được nhấn hay không? Họ sẽ sử dụng phương pháp quét được mô tả bằng đoạn mã giả như sau:
Với mỗi hàng (R1 đến R4), Chọn ra hàng Ri
- Cấp cực âm (0v) cho hàng Ri
- Nếu điện áp ở chân Cj bất kì là dương (INPUT PULLUP) => chưa nhấn
- Nếu điện áp ở chân Cj bất kì là âm (INPUT PULLUP) => đang nhấn
Bàn phím 4 × 4 Mã Arduino
#include <Keypad.h>
#include<LiquidCrystal.h>
#include<EEPROM.h>
#define led A3
#define buzzer A4
LiquidCrystal lcd(7,6,5,4,3,2);
char password[4];
char pass[4],pass1[4];
int i=0;
char customKey=0;
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
char hexaKeys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {A0, A1, 8, 9}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {10, 11, 12, 13}; //connect to the column pinouts of the keypad
//initialize an instance of class NewKeypad
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
void setup()
{
lcd.begin(16,2);
pinMode(led, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(1, OUTPUT);
// pinMode(m12, OUTPUT);
lcd.print(" Electronic ");
lcd.setCursor(0,1);
lcd.print(" Keypad Lock ");
delay(2000);
lcd.clear();
lcd.print("Enter Ur Passkey:");
lcd.setCursor(0,1);
for(int j=0;j<4;j++)
EEPROM.write(j, j+49);
for(int j=0;j<4;j++)
pass[j]=EEPROM.read(j);
}
void loop()
{
customKey = customKeypad.getKey();
if(customKey=='#')
change();
if (customKey)
{
password[i++]=customKey;
lcd.print(customKey);
beep();
}
if(i==4)
{
delay(200);
for(int j=0;j<4;j++)
pass[j]=EEPROM.read(j);
if(!(strncmp(password, pass,4)))
{
digitalWrite(1, HIGH
);
digitalWrite(led, HIGH);
beep();
lcd.clear();
lcd.print("Passkey Accepted");
delay(2000);
lcd.setCursor(0,1);
lcd.print("#.Change Passkey");
delay(2000);
lcd.clear();
lcd.print("Enter Passkey:");
lcd.setCursor(0,1);
i=0;
digitalWrite(led, LOW);
digitalWrite(1, LOW);
}
else
{
digitalWrite(buzzer, HIGH);
lcd.clear();
lcd.print("Access Denied...");
lcd.setCursor(0,1);
lcd.print("#.Change Passkey");
delay(2000);
lcd.clear();
lcd.print("Enter Passkey:");
lcd.setCursor(0,1);
i=0;
digitalWrite(buzzer, LOW);
}
}
}
void change()
{
int j=0;
lcd.clear();
lcd.print("UR Current Passk");
lcd.setCursor(0,1);
while(j<4)
{
char key=customKeypad.getKey();
if(key)
{
pass1[j++]=key;
lcd.print(key);
beep();
}
key=0;
}
delay(500);
if((strncmp(pass1, pass, 4)))
{
lcd.clear();
lcd.print("Wrong Passkey...");
lcd.setCursor(0,1);
lcd.print("Better Luck Again");
delay(1000);
}
else
{
j=0;
lcd.clear();
lcd.print("Enter New Passk:");
lcd.setCursor(0,1);
while(j<4)
{
char key=customKeypad.getKey();
if(key)
{
pass[j]=key;
lcd.print(key);
EEPROM.write(j,key);
j++;
beep();
}
}
lcd.print(" Done......");
delay(1000);
}
lcd.clear();
lcd.print("Enter Ur Passk:");
lcd.setCursor(0,1);
customKey=0;
}
void beep()
{
digitalWrite(buzzer, HIGH);
delay(20);
digitalWrite(buzzer, LOW);
}
Nhấp vào đây để tải xuống thư viện bàn phím Arduino.
Code khóa điện tự bấm số sử dụng Keypad 4×3 sử dụng động cơ Servo: