Умный замок на Arduino

1. Введение

В эпоху цифровых технологий и автоматизации все больше людей интересуется созданием умных устройств для повседневного использования. Одним из таких устройств является умный замок, управляемый с помощью матричной клавиатуры и сервопривода, с отображением введенного кода на дисплее LCD1602. В данной статье мы рассмотрим, как создать такой замок, используя Arduino и популярные библиотеки для работы с клавиатурами и дисплеями.

2. Необходимые компоненты

Для реализации проекта «Умный замок» нам понадобятся следующие компоненты:

  • Arduino (любая модель, например, Arduino Uno)

  • Матричная клавиатура 4x4

  • LCD дисплей 1602 с I2C интерфейсом

  • Сервопривод

  • Провода и макетная плата

3. Шаги по установке библиотек

Скачайте обе библиотеки с официального сайта или из репозитория GitHub:

Откройте программу Arduino IDE и перейдите в меню «Скетч» → «Подключить библиотеку» → «Добавить .ZIP библиотеку…».

В открывшемся окне выберите скачанный .zip файл и нажмите «Открыть».

Снизу Arduino IDE появится сообщение «Библиотека добавлена. Проверьте меню «Подключить библиотеку» «. Теперь библиотека будет доступна для использования в ваших проектах.

4. Подключение компонентов

  • LCD дисплей: Подключите SDA и SCL пины дисплея к соответствующим пинам на Arduino (A4 и A5 для Arduino Uno).

  • Матричная клавиатура: Подключите пины строк и столбцов клавиатуры к цифровым пинам Arduino (например, строки к пинам 6-9, столбцы к пинам 2-5).

  • Сервопривод: Подключите сигнал сервопривода к PWM пину на Arduino (например, пин 10), питание к 5V и GND.

Схема подключения LCD дисплея к Arduino

5. Программирование Arduino

Откройте Arduino IDE и создайте новый скетч. Перепишите следующий код:

#include <LiquidCrystal_I2C.h>
#include <AlashKeypadMatrix.h>
#include <Servo.h>
// Настройки для LCD1602
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Настройки для клавиатуры
const byte ROWS = 4; // четыре строки
const byte COLS = 4; // четыре столбца
char keys[ROWS][COLS] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6}; // Подключение строк к пинам Arduino
byte colPins[COLS] = {5, 4, 3, 2}; // Подключение столбцов к пинам Arduino
AlashKeypadMatrix keypad = AlashKeypadMatrix(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
// Настройки для сервопривода
Servo myservo;
const int servoPin = 10;
const int closedPosition = 0; // Закрытая позиция серво
const int openPosition = 90;  // Открытая позиция серво
// Переменные для хранения введенного кода
String inputCode = "";
const String correctCode = "1234"; // Правильный код
void setup() {
  lcd.init();
  lcd.backlight();
  lcd.setCursor(0, 0);
  lcd.print("Enter Code:");
  myservo.attach(servoPin);
  myservo.write(closedPosition); // Начальное состояние серво - закрытое
}
void loop() {
  char key = keypad.getKey();
  if (key) {
    if (key == '#') {
      checkCode();
    } else if (key == '*') {
      inputCode = "";
      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Enter Code:");
    } else {
      inputCode += key;
      lcd.setCursor(0, 1);
      lcd.print(inputCode);
    }
  }
}
void checkCode() {
  if (inputCode == correctCode) {
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Access Granted");
    myservo.write(openPosition);
    delay(5000); // Открыто на 5 секунд
    myservo.write(closedPosition);
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Enter Code:");
  } else {
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Access Denied");
    delay(2000); // Показать сообщение 2 секунды
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Enter Code:");
  }
  inputCode = "";
}

6. Объяснение кода

  • Инициализация библиотек и компонентов: В начале кода мы подключаем необходимые библиотеки и инициализируем объекты для работы с LCD, клавиатурой и сервоприводом.

  • Настройки дисплея и сервопривода: В функции setup() мы настраиваем начальные параметры дисплея и устанавливаем начальное положение сервопривода в закрытое состояние.

  • Обработка ввода с клавиатуры: В функции loop() мы обрабатываем ввод с клавиатуры, отображаем введенные цифры на дисплее и проверяем код по нажатию кнопки #.

  • Проверка правильности кода: В функции checkCode() мы сравниваем введенный код с правильным. Если код совпадает, замок открывается на 5 секунд, затем закрывается. В противном случае, отображается сообщение об ошибке.

7. Заключение

Проект «Умный замок» является отличным примером применения Arduino для создания умных устройств. Используя простые компоненты и библиотеки, можно создать надежный и удобный в использовании электронный замок. Надеемся, что данное руководство поможет вам в реализации ваших проектов и вдохновит на дальнейшие эксперименты с электроникой и автоматизацией.