Надёжный бесключевой электронный замок на Arduino с LCD и клавиатурой 4×4
Компоненты и материалы
| Компонент | Количество | Примечание |
|---|---|---|
| Arduino UNO | 1 | Основной контроллер |
| Матричная клавиатура 4×4 (с подсветкой) | 1 | Ввод пароля |
| LCD-дисплей 16×2 (белый на синем) | 1 | Индикация состояния |
| Релейный модуль (1 канал) | 1 | Управление электрозамком |
| Батарея 9В (Крона) | 1 | Питание замка |
| Подстроечный резистор 10 кОм | 1 | Контраст LCD |
| Резистор 10 кОм | 1 | Для подсветки/подтяжки |
Приложения и сервисы
- Arduino IDE
О проекте
Автор: Ali Hamza
В этом проекте создаём бесключевой электронный замок: ввод пароля на 4×4 клавиатуре, управление DC-замком через реле, индикация на 16×2 LCD. Пароль хранится в EEPROM (по умолчанию «1234»).
Принцип работы
- При нажатии клавиш они сравниваются с паролем в EEPROM. Совпадение → замок открывается («Pass Accepted»). Несовпадение → «Wrong Password», «Access Denied».
- Нажатие # — смена пароля: запрос текущего пароля, при верном вводе — ввод нового, запись в EEPROM.
Схема подключения
Клавиатура 4×4 → Arduino:
- Первые 6 выводов клавиатуры → A0–A5
- Последние 2 вывода → D3, D2
LCD 16×2 → Arduino:
- VSS (1) → GND
- VDD (2) → 5V
- V0 (3) → средний вывод потенциометра 10 кОм (крайние → 5V и GND) — контраст
- RS (4) → D7
- R/W (5) → GND
- E (6) → D6
- D4–D7 (11–14) → D5, D4, D3, D2
- LED+ (15) → 5V через резистор 220 Ом
- LED- (16) → GND
Электрозамок (DC Lock) через реле:
Замок работает от 7–12В, поэтому нужен реле и батарея 9В.
- Сигнальный пин реле → D10
- VCC/GND реле → 5V/GND Arduino
- На контактах реле: минус батареи → общий (COM), NO (нормально открытый) → один провод замка, другой провод замка → плюс батареи
Программный код
Основной скетч в разделе Code. Ключевые моменты:
- Библиотеки:
Keypad.h,LiquidCrystal.h,EEPROM.h - Инициализация: пин реле (D10) на выход, LCD 16×2, стартовый экран «DIYhacking.com / Electronic Lock», затем «Enter Password»
- В
loop(): опрос клавиатуры, на '#' вызовchange(), накопление 4 введённых символов в массивpassword, вывод на LCD - При вводе 4 символов: чтение эталонного пароля из EEPROM (4 байта), сравнение через
strncmp. Совпадение → реле LOW (открытие) на 2 сек, сообщение «Pres # to change». Несовпадение → «Wrong Password», «Pres # to Change» - Функция
change(): ввод текущего пароля (4 символа), проверка. Если верно → ввод нового пароля (4 символа), запись в EEPROM и вinitial_password, сообщение «Pass Changed». Если нет — «Wrong Password», «Try Again» - Функция
initialpassword()при первом запуске записывает в EEPROM «1234» (ASCII 49–52)
Разбор кода
- Подключение библиотек — Keypad, LiquidCrystal, EEPROM.
- Опрос клавиатуры —
key_pressed = keypad_key.getKey(), при '#' вызовchange(). - Накопление и проверка пароля — символы в массив
password, при i==4 сравнение с EEPROM. Успех → реле LOW, задержка 2 сек, сброс счётчика. Неуспех → сообщения об ошибке, сброс. - Смена пароля — функция
change(): ввод текущего (вnew_password), сравнение сinitial_password. При совпадении — ввод нового, запись в EEPROM побайтово черезEEPROM.write(j, key).
Исходный код
Полный скетч (5 фрагментов) доступен в разделе Code. Основной файл содержит весь функционал: ввод пароля, проверку, открытие замка, смену пароля с записью в EEPROM.
Схемы
Схема подключения соленоидного замка к Arduino через реле (изображение в разделе Schematics).
Производственный процесс
- Создание игры в реальном времени на Arduino Nano с гироскопом MPU-6050 и OLED-дисплеем
- Надежная система учета рабочего времени на Arduino с RFID и Python
- Проект с датчиком DHT11: индикация температуры светодиодами и пьезо-динамиком на Arduino
- Создание анимации и игр на LCD 16×2 с Arduino UNO
- Unopad: Бесшовный Arduino MIDI-контроллер для Ableton Live
- Логгер температуры и влажности на Arduino с DHT11 и Ethernet Shield
- Простой ИК-датчик препятствий на Arduino: ИК-светодиод и фотодиод
- Создание интерактивного 4x4x4 светодиодного куба на Arduino Uno и 1Sheeld
- Высокоскоростной тахометр на Arduino: новый алгоритм измерения RPM до 2 знаков после запятой
- Система учёта рабочего времени на RFID, Arduino и Google Таблицах