Умный замок на 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.

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 для создания умных устройств. Используя простые компоненты и библиотеки, можно создать надежный и удобный в использовании электронный замок. Надеемся, что данное руководство поможет вам в реализации ваших проектов и вдохновит на дальнейшие эксперименты с электроникой и автоматизацией.