15 C
Hanoi
Thứ Sáu, Tháng Mười Hai 3, 2021
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:

2 COMMENTS

LEAVE A REPLY

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Tắt kính lúp hình vuông trong Altium

Tắt kính lúp của sổ PCB  trên Altium Sử dụng phím tắt: Shift+M Tham khảo thêm một số phím tắt khác trên phần mềm Altium Designer: Thiết...

Tổng hợp trang web liên quan thiết kế phần cứng điện tử

4 trang web tải thư viện SCH/PCB và 3D https://www.ultralibrarian.com/ https://componentsearchengine.com/ https://octopart.com/ https://www.snapeda.com/ https://componentsearchengine.com/ 2 trang tìm 3D cho thư viện của các bạn bao gồm: https://www.3dcontentcentral.com/ https://grabcad.com/library 4 trang cung cấp các...

Mạch đóng ngắt Relay sử dụng Transistor

Giới thiệu về Relay Rơ le (Relay) là một công tắc chuyển đổi hoạt động bằng điện. Dòng điện chạy qua cuộn dây của rơ...

Nạp Bootloader cho Arduino Pro Micro

Bootloader là một chương trình nhỏ được nạp sẵn vào chip vi điều khiển trên Arduino, nhờ đó bạn lập trình cho Arduino một...

Recent Comments