Khóa điện tự bấm số sử dụng Keypad 4x3

Xin chào mọi người!

Mục đích nhằm chia sẻ kiến thức và học hỏi thêm kinh nghiệm từ các Pro. Bài viết này mình xin giới thiệu một sản phẩm liên quan đến khóa (khóa cửa, khóa két sắt...).

Mong rằng có được nhiều ủng hộ và đóng góp nhé. Xin cảm ơn!

1. Phần cứng

2. Code

#include <Servo.h> // Khai báo thư viện sử dụng cho động cơ
#include <LiquidCrystal_I2C.h>      // Khai báo thư viện LCD sử dụng I2C
LiquidCrystal_I2C lcd(0x27, 16, 2); // 0x27 địa chỉ LCD, 16 cột và 2 hàng
#include <Keypad.h>                 // Khai báo thư viện Keypad

const byte ROWS = 4; // Bốn hàng
const byte COLS = 3; // Ba cột
char keys[ROWS][COLS] = {
    {'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}, {'*', '0', '#'}};
byte rowPins[ROWS] = {5, 4, 3, 2};
byte colPins[COLS] = {8, 7, 6};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
Servo myServo;

char STR[4] = {'2', '0', '1', '8'}; // Cài đặt mật khẩu tùy ý
char str[4] = {' ', ' ', ' ', ' '};
int i, j, count = 0;

void setup() {
  myServo.attach(9); // Khai báo chân điều khiển động cơ
  lcd.init();        // Khai báo sử dụng LCD
  lcd.begin(16, 2);
  lcd.backlight();
  lcd.clear();
  lcd.print(" Enter Password");
}

void loop() {
  char key = keypad.getKey(); // Ký tự nhập vào sẽ gán cho biến Key

  if (key) // Nhập mật khẩu
  {
    if (i == 0) {
      str[0] = key;
      lcd.setCursor(6, 1);
      lcd.print(str[0]);
      delay(1000); // Ký tự hiển thị trên màn hình LCD trong 1s
      lcd.setCursor(6, 1);
      lcd.print("*"); // Ký tự được che bởi dấu *
    }
    if (i == 1) {
      str[1] = key;
      lcd.setCursor(7, 1);
      lcd.print(str[1]);
      delay(1000);
      lcd.setCursor(7, 1);
      lcd.print("*");
    }
    if (i == 2) {
      str[2] = key;
      lcd.setCursor(8, 1);
      lcd.print(str[2]);
      delay(1000);
      lcd.setCursor(8, 1);
      lcd.print("*");
    }
    if (i == 3) {
      str[3] = key;
      lcd.setCursor(9, 1);
      lcd.print(str[3]);
      delay(1000);
      lcd.setCursor(9, 1);
      lcd.print("*");
      count = 1;
    }
    i = i + 1;
  }

  if (count == 1) {
    if (str[0] == STR[0] && str[1] == STR[1] && str[2] == STR[2] &&
        str[3] == STR[3]) {
      lcd.clear();
      lcd.print("    Correct!");
      delay(3000);
      myServo.write(180); // Mở cửa
      lcd.clear();
      lcd.print("      Opened!");
      i = 0;
      count = 0;
    } else {
      lcd.clear();
      lcd.print("   Incorrect!");
      delay(3000);
      lcd.clear();
      lcd.print("   Try Again!");
      delay(3000);
      lcd.clear();
      lcd.print(" Enter Password");
      i = 0;
      count = 0;
    }
  }

  switch (key) {
  case '#':
    lcd.clear();
    myServo.write(90);
    Đóng cửa lcd.print("     Closed!");
    delay(10000);
    lcd.clear();
    lcd.print(" Enter Password");
    i = 0;
    break;
  }
}
Youtube: 
lên
8 thành viên đã đánh giá bài viết này hữu ích.
Chuyên mục: 
Các dự án được truyền cảm hứng

Vòng đeo tay hỗ trợ người mù

Dự án là một vòng đeo tay hỗ trợ cho người mù có trọng lượng khá nhẹ chỉ khoảng 65g, có thể sạc pin khi hết, sử dụng cảm biến khoảng cách hc-sr04 và những thứ sẵn có xung quanh chúng ta. Mình mong muốn đóng góp sản phẩm này với hy vọng, nó sẽ sẽ giúp người mù đi lại được tốt hơn bằng việc thông báo cho họ âm thanh hoặc rung động khi đến gần vật cản. Với một chút kiến thức về Arduino bất cứ ai cũng có thể làm được điều này. Thiết bị dễ dàng đeo và tháo ra khỏi tay một cách nhanh chóng. Các bạn cùng chiêm ngưỡng nhé!

lên
14 thành viên đã đánh giá bài viết này hữu ích.