Система контроля доступа на Arduino Nano и RFID-модуле RC-522

Электрозамок открывается картой или паролем, а настройки и база ключей хранятся в EEPROM. Разбираем логику работы, схему и карту памяти проекта.
Состав и назначение
Системы контроля доступа — от простых электрозамков до пропускных комплексов на предприятиях — решают одну задачу: не пустить посторонних на охраняемый объект. Описанный проект реализует её на Arduino Nano. Открыть замок можно двумя способами: приложить зарегистрированную RFID-карту или набрать пароль. В устройстве используются RFID-приёмник RC-522, матричная клавиатура, LCD-дисплей 16х2 с интерфейсом I2C, модуль реле для управления электрозамком и пьезоэлектрический излучатель. Ключами служат пластиковые карты из комплекта RC-522.
Рабочий режим
После включения устройство подаёт звуковой сигнал, реле остаётся обесточенным, а на дисплее три секунды держится стартовая надпись.

Затем система переходит в рабочий режим и предлагает приложить карту или ввести пароль. Цифры набираются на клавиатуре, клавиша [#] подтверждает ввод, [*] отменяет его.

Если карта есть в базе или пароль верен, раздаётся сигнал и на реле подаётся питание на время от 1 до 9 секунд — оно задаётся в настройках. Дисплей сообщает об успешном доступе и показывает, сколько ещё замок будет открыт. При неверном пароле или незнакомой карте выводится мигающее сообщение об ошибке со своим звуковым сопровождением.

Меню администратора
Второй режим служит для регистрации и удаления карт, смены паролей и настройки. Чтобы попасть в него, в рабочем режиме вводят специальный пароль и нажимают [#]. По умолчанию это 1234567, позже его можно заменить. По пунктам меню перемещаются клавишами [A] и [B], [#] открывает подменю, [*] возвращает на уровень выше.

- EDIT RFID DATA — работа с базой ключей. В неё помещается до 30 кодов (число при необходимости можно увеличить). На экране виден номер ячейки и код привязанной карты либо надпись «empty». По нажатию [#] ячейку можно заполнить или перезаписать, очистить либо оставить как есть. При регистрации на поднесение карты отводится 5 секунд, после чего сообщается, удалась ли запись. Удаление подтверждается надписью «CARD DELETED».
- ACCESS PASSWORD — смена пароля, которым открывается замок.
- ADMIN PASSWORD — смена пароля входа в меню администратора.
- SET OPEN TIME — время удержания замка открытым, от 1 до 9 секунд; задаётся нажатием нужной цифры.
Перед написанием программы полезно свести все экраны и переходы в единую карту меню — она служит шпаргалкой при разработке.
Особенности схемы
RC-522 работает по SPI, поэтому линии MISO, MOSI и SCK привязаны к аппаратным SPI-выводам Arduino Nano и переназначить их нельзя. Выводы SS и RST можно подключить к любым пинам, указав их номера в скетче. Дисплей общается по I2C: у Nano это A4 (SDA) и A5 (SCL). Клавиатура, излучатель и реле занимают ещё 10 выводов, и ресурсов платы на всё хватает.
- RC-522 питается от 3,3 В — более высокое напряжение может вывести его из строя.
- Реле в проекте управляется уровнем 5 В; встречаются и 12-вольтовые релейные модули, это нужно учитывать.
- Излучатель — пьезоэлектрический, без встроенного генератора, подключён к выводу A1. Обычный динамик с большой вероятностью сожжёт этот выход.
Карта памяти EEPROM
Все настройки должны переживать отключение питания, поэтому хранятся в энергонезависимой памяти. UID каждой RFID-метки состоит из 4 байт; перед ним записывается ещё один байт-признак: 1 — ключ зарегистрирован, 0 — ячейка свободна. Таким образом, одна запись занимает 5 байт, а 30 ключей — адреса с 0 по 149. Для Nano с её 1024 ячейками EEPROM это немного.
Оба пароля имеют длину 7 цифр, то есть по 7 байт. Отдельная ячейка отведена под время удержания реле. Ещё один байт по адресу 500 служит признаком первого запуска: при самом первом включении программа заполняет память значениями по умолчанию, а в дальнейшем её не трогает, чтобы не стереть пользовательские данные.
| Ключи №0–29 (признак + 4 байта UID) | 0–149 |
| Пароль доступа (7 байт) | 150–156 |
| Пароль администратора (7 байт) | 157–163 |
| Время удержания реле | 164 |
| Признак первого запуска | 500 |
Библиотеки
Скетч опирается на три библиотеки: New-LiquidCrystal-master для работы с LCD по шине I2C, Keypad-master для матричной клавиатуры и rfid-master для модуля RC-522. Сам код получился объёмным и в исходной статье не приводится; автор отмечает, что постарался подробно прокомментировать ключевые места, чтобы программу было проще дорабатывать под себя.