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

Система контроля доступа на 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. Сам код получился объёмным и в исходной статье не приводится; автор отмечает, что постарался подробно прокомментировать ключевые места, чтобы программу было проще дорабатывать под себя.

← Все статьи