RFID RC522 на Arduino: идентификация карт, доступ по пропуску
RFID RC522 — популярный модуль для систем контроля доступа на Arduino. Считывает UID карт MIFARE 13.56 МГц, сравнивает с базой, разрешает/запрещает доступ. Интеграция с LCD 1602 для вывода времени (DS3231), UID и статуса. При совпадении — «Доступ разрешён», иначе «Доступ запрещён». Проект для СКУД, турникетов, учёта посещаемости или замков. Поддержка нескольких карт, расширение до реле, buzzer или серво.
Возможности системы
Чтение UID карты/брелоков. Сравнение с массивом разрешённых. Вывод на LCD 1602: дата/время (DS3231), статус доступа, UID. Добавление нулей для однозначных чисел (09 вместо 9). Расширение: реле на дверь, buzzer, логи в Serial/Excel.
Компоненты
- Arduino Uno/Nano
- RFID RC522
- LCD 1602 I2C
- DS3231 RTC
- Карты MIFARE
Подключение
- RC522: 3.3V, GND, RST → D9, IRQ — не подключать, MISO → D12, MOSI → D11, SCK → D13, SDA → D10
- LCD I2C: VCC 5V, GND, SDA A4, SCL A5
- DS3231: VCC 5V, GND, SDA A4, SCL A5 (общий I2C)
Библиотеки
MFRC522, RTClib, LiquidCrystal_I2C.
Скетч идентификации
#include <MFRC522.h>
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
MFRC522 mfrc522(10, 9);
LiquidCrystal_I2C lcd(0x27,16,2);
RTC_DS3231 rtc;
String allowedUID[] = {"AB CD EF 12", "34 56 78 90" /* ... */};
int numCards = 5;
void setup() {
mfrc522.PCD_Init();
lcd.init(); lcd.backlight();
rtc.begin();
// rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // установить время
}
void loop() {
DateTime now = rtc.now();
lcd.setCursor(0,0);
lcd.print(now.day()<10?"0":""); lcd.print(now.day()); lcd.print(".");
lcd.print(now.month()<10?"0":""); lcd.print(now.month()); lcd.print(".");
lcd.print(now.year());
lcd.print(" ");
lcd.print(now.hour()<10?"0":""); lcd.print(now.hour()); lcd.print(":");
lcd.print(now.minute()<10?"0":""); lcd.print(now.minute());
if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial()) {
String uid = "";
for (byte i = 0; i < mfrc522.uid.size; i++) {
uid += String(mfrc522.uid.uidByte[i], HEX);
if (i < mfrc522.uid.size-1) uid += " ";
}
uid.toUpperCase();
bool access = false;
for (int i = 0; i < numCards; i++) {
if (uid == allowedUID[i]) { access = true; break; }
}
lcd.setCursor(0,1);
if (access) lcd.print("ДОСТУП РАЗРЕШЕН ");
else lcd.print("ДОСТУП ЗАПРЕЩЕН ");
delay(2000);
mfrc522.PICC_HaltA();
}
}
показывает дату и время с DS3231 на LCD 16×2.
считывает UID карты MFRC522.
сравнивает с массивом разрешённых UID.
при совпадении выводит «ДОСТУП РАЗРЕШЕН», иначе «ДОСТУП ЗАПРЕЩЕН».
Как работает
DS3231 даёт точное время. LCD показывает дату/часы с нулями. При карте считывается UID, сравнивается с массивом. Совпадение — разрешение доступа.
Расширение
Добавьте реле на дверь, buzzer, логи в Serial, несколько пользователей с именами.
Заключение
RFID RC522 — простая система контроля доступа на Arduino. Идентификация карт, вывод на LCD, интеграция с часами. Готово к СКУД или умному замку.
FAQ — RFID RC522 идентификация
Карта не читается?
Проверьте подключение SPI, питание 3.3V, библиотеку MFRC522. Карта MIFARE 1K/Classic.
Как добавить новые карты?
Сначала dumpinfo.ino для UID, добавьте в массив allowedUID[] в скетче.
Время сбивается?
Установите rtc.adjust(DateTime(...)) один раз или батарейку CR2032 в DS3231.
LCD не показывает русский?
Используйте LiquidCrystal_I2C с русификатором или символы латиницей.
Добавить реле на дверь?
Подключите реле к пину, digitalWrite при access = true.
Сколько карт в массиве?
До 50–100 на Uno. Для большего — EEPROM или SD-карта.
ESP8266 вместо Arduino?
Да, те же библиотеки, пины SPI другие.