24 C
Hanoi
Thứ Bảy, Tháng Năm 21, 2022
Home LẬP TRÌNH VI ĐIỀU KHIỂN ARDUINO Hệ thống khóa số Arduino dùng bàn phím 4x4

Hệ thống khóa số Arduino dùng bàn phím 4×4

Đâ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.

Hệ thống khóa cửa dựa trên mật khẩu sử dụng Arduino

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:

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)

Bàn Phím Ma Trận Mềm 4x4 - Nshop

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:

LEAVE A REPLY

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Lựa chọn Stack-up cho PCB

Bước 1: Chọn số lượng lớp dự định ban đầu 1 hoặc 2 lớp – Đối với mạch thử nghiệm Sử dụng 1 hoặc 2 lớp...

Via và khả năng mang dòng điện trên PCB

Via bao gồm 3 thành phần: Conductive barrel: Lỗ khoan được mạ dẫn điện Pad: Phần đồng dẫn điện ở 2 đầu của một lỗ via. Antipad:...

Các vấn đề thiết kế PCB mật độ cao HDI

PCB kết nối mật độ cao (High-density interconnect HDI) thể hiện sự tiên tiến của ngành công nghiệp bảng mạch in ngày nay, do...

Ground và vấn đề thiết kế PCB

Các nhà thiết kế layout PCB luôn quan tâm đến những câu hỏi nổi bật này, như làm thế nào để lập kế hoạch...

Recent Comments