-
-
-
Tổng tiền thanh toán:
-
Khóa điện tự bấm số sử dụng Keypad 4x3
16/06/2019
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
- Keypad 4x3 (Cũng có thể sử dụng 4x4)
- Arduino Uno, Mega, Nano (tùy chọn)
- Động cơ Servo Sg90
- LCD1602
- I2C LCD. Kết nối với LCD để giảm bớt số chân cắm vào Arduino
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;
- }
- }