RFID RC522 на Arduino: учёт посещаемости, время прихода и ухода

RFID RC522 учёт посещаемости — простая система контроля времени прихода/ухода на Arduino. Модуль считывает UID карты, сравнивает с базой, фиксирует время (DS3231). Вывод на LCD 2004: «Добро пожаловать» или «Вы опоздали». Опоздание по заданному времени. Логи в Serial или SD-карту (вторая часть). Проект для офиса, школы, склада: статистика посещаемости, расчёт часов. Дешёвый MFRC522, стабильный, легко расширяемый реле/буззер. Русифицированный дисплей, нули в дате/времени.

RFID RC522 Arduino учёт посещаемости время прихода ухода опоздание

Возможности системы учёта посещаемости 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 логи в облако.