RFID RC522 на Arduino: учёт посещаемости, время прихода и ухода
RFID RC522 учёт посещаемости — простая система контроля времени прихода/ухода на Arduino. Модуль считывает UID карты, сравнивает с базой, фиксирует время (DS3231). Вывод на LCD 2004: «Добро пожаловать» или «Вы опоздали». Опоздание по заданному времени. Логи в Serial или SD-карту (вторая часть). Проект для офиса, школы, склада: статистика посещаемости, расчёт часов. Дешёвый MFRC522, стабильный, легко расширяемый реле/буззер. Русифицированный дисплей, нули в дате/времени.
Возможности системы учёта посещаемости RFID
Фиксация прихода/ухода по UID карты. Точное время DS3231. Опоздание по порогу (11:30). Вывод на LCD: приветствие, статус, время. База карт в массиве. Логи в Serial/SD. Расчёт часов работы. Расширение: реле турникет, buzzer опоздание, Excel/MySQL. Русификация дисплея. До 50+ карт на Nano.
Компоненты
- Arduino Uno/Nano
- RFID RC522
- DS3231 RTC
- LCD 2004 I2C
- Карты MIFARE
Подключение
- RC522: 3.3V, GND, RST D9, SDA D10, SCK D13, MOSI D11, MISO D12
- DS3231 + LCD I2C: SDA A4, SCL A5, VCC 5V, GND
Библиотеки
MFRC522, RTClib, LiquidCrystal_I2C (русификатор).
Этап 1: LCD 2004
Тест Hello World. Русификация пользовательскими символами.
Этап 2: DS3231 часы
Вывод даты/времени в Serial. Установка rtc.adjust(). Нули для 09:05.
Этап 3: Часы + LCD
Дата/время на дисплее, русификация дней недели.
Этап 4: RFID чтение
DumpInfo — UID карты в Serial.
Этап 5: Полная система
Массив разрешённых UID. При карте: время, «Добро пожаловать» или «Опоздали». Порог в коде (hour < 11 || (hour == 11 && minute <= 30)).
Скетч
#include <MFRC522.h>
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
MFRC522 mfrc522(10, 9);
LiquidCrystal_I2C lcd(0x27,20,4);
RTC_DS3231 rtc;
String allowed[] = {"AB CD EF 12", "34 56 78 90"};
int num = 2;
void setup() {
mfrc522.PCD_Init();
lcd.init(); lcd.backlight();
rtc.begin();
}
void loop() {
DateTime now = rtc.now();
// вывод времени на LCD
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) + " ";
uid.toUpperCase(); uid.trim();
lcd.clear();
lcd.print("Карта: " + uid);
if (now.hour() < 11 || (now.hour() == 11 && now.minute() <= 30)) lcd.print("Добро пожаловать!");
else lcd.print("Вы опоздали!");
delay(3000);
mfrc522.PICC_HaltA();
}
}
показывает время с DS3231 на LCD 20×4.
считывает UID карты MFRC522.
выводит UID и сообщение:
«Добро пожаловать!» до 11:30,
«Вы опоздали!» после 11:30.
Расширение
SD-лог прихода/ухода. Реле турникет. Буззер опоздание. MySQL/Wi-Fi ESP8266. Мастер-карта добавления.
Заключение
RFID RC522 — простая система учёта посещаемости на Arduino. Время прихода/ухода, опоздания, вывод на LCD. Готово к офису/школе.
FAQ — RFID учёт посещаемости
Опоздание не определяется?
Проверьте условие hour/minute в коде. Установите rtc.adjust() правильное время.
Карта не читается?
Питание 3.3V RC522, правильные пины SPI. DumpInfo для теста.
Добавление карт?
Считайте UID DumpInfo, добавьте в массив allowed[]. Перепрошейте.
Логи на SD?
SD библиотека, chipSelect отдельный пин. Запись uid + time в файл.
Приход/уход одной картой?
Два модуля RC522 (вход/выход). Флаг lastState для чередования.
Русификация LCD?
Пользовательские символы или LiquidCrystal_I2C_RUS библиотека.
ESP8266 вместо Arduino?
Да, те же библиотеки, другие пины SPI. Wi-Fi логи в облако.