RFID замок на Arduino: RC522, доступ по карте, сигнализация

RFID замок на Arduino — второй урок цикла «Всё про RFID». Простая система доступа: поднёс карту/брелок — зелёный свет, замок открыт. Чужая карта — красный свет, пищалка, доступ запрещён. Модуль RC522 + Arduino + реле 5В + RGB LED + buzzer. Управление электромагнитным замком 12В через MOSFET. Простая схема, минимум деталей. Идеально для двери, шкафа, сейфа, гаража, умного дома. Уроки Arduino, RC522, MIFARE, доступ, сигнализация.

RFID замок Arduino RC522 подключение реле

Зачем нужен RFID замок

Обычный ключ теряется, ломается, дублируется. RFID карта/брелок — удобно, безопасно. Поднёс — открыл. Чужая карта — сигнализация. Можно добавить: время доступа, количество попыток, блокировку. RC522 считывает UID MIFARE Classic 1K. Простая схема: транзистор + диод для защиты. Управление 220В или 12В. Проект для новичков: минимум деталей, понятный код. Умный дом, офис, гараж, сейф, шкаф.

Компоненты

  • Arduino Uno/Nano
  • Модуль RC522 RFID (MFRC522)
  • Карта/брелок MIFARE Classic 1K
  • Реле 5В (1 канал) или MOSFET + диод
  • RGB LED + резисторы 220 Ом
  • Buzzer (пищалка)
  • Электромагнитный замок 12В
  • БП 5В и 12В
  • Провода, макетная плата

Подключение RC522

  • SDA → D10
  • SCK → D13
  • MOSI → D11
  • MISO → D12
  • RST → D9
  • 3.3V → 3.3V
  • GND → GND
Менеджер библиотек Arduino MFRC522

Библиотека MFRC522

Установка: Arduino IDE → Скетч → Подключить библиотеку → Управление библиотеками → MFRC522. Примеры: DumpInfo, CardInfo.

Скетч RFID замка

#include <SPI.h>
#include <MFRC522.h>

#define RST_PIN 9
#define SS_PIN 10
#define RELAY_PIN 6
#define RED_PIN 3
#define GREEN_PIN 4
#define BUZZER_PIN 2

MFRC522 rfid(SS_PIN, RST_PIN);

String allowed[] = {"04A1B2C3", "04D5E6F7"}; // UID карт

void setup() {
  Serial.begin(9600);
  SPI.begin();
  rfid.PCD_Init();
  pinMode(RELAY_PIN, OUTPUT);
  pinMode(RED_PIN, OUTPUT);
  pinMode(GREEN_PIN, OUTPUT);
  pinMode(BUZZER_PIN, OUTPUT);
  digitalWrite(RELAY_PIN, LOW);
}

void loop() {
  if (!rfid.PICC_IsNewCardPresent()) return;
  if (!rfid.PICC_ReadCardSerial()) return;

  String uid = "";
  for (byte i = 0; i < rfid.uid.size; i++) {
    uid += String(rfid.uid.uidByte[i] < 0x10 ? "0" : "");
    uid += String(rfid.uid.uidByte[i], HEX);
  }
  uid.toUpperCase();

  bool access = false;
  for (String key : allowed) {
    if (uid == key) {
      access = true;
      break;
    }
  }

  if (access) {
    digitalWrite(RELAY_PIN, HIGH);
    digitalWrite(GREEN_PIN, HIGH);
    tone(BUZZER_PIN, 1000, 500);
    delay(5000);
    digitalWrite(RELAY_PIN, LOW);
    digitalWrite(GREEN_PIN, LOW);
  } else {
    digitalWrite(RED_PIN, HIGH);
    tone(BUZZER_PIN, 200, 1000);
    delay(1000);
    digitalWrite(RED_PIN, LOW);
  }

  rfid.PICC_HaltA();
}
Считывает UID RFID-карты с помощью MFRC522, формирует UID в виде строки и сравнивает его со списком разрешённых карт.
При совпадении включается реле, загорается зелёный светодиод и подаётся звуковой сигнал, после чего доступ закрывается.
При отсутствии совпадения загорается красный светодиод и звучит сигнал отказа.
В конце корректно останавливается работа с картой через PICC_HaltA().
Установка библиотеки MFRC522 Arduino

Процесс работы

  1. Поднеси карту → RC522 считывает UID
  2. Сравнивает с массивом allowed
  3. Разрешено: зелёный, реле 5 сек, звук
  4. Запрещено: красный, пищалка 1 сек
Примеры библиотеки MFRC522 Arduino

Расширение

Время доступа. Количество попыток. OpenHAB MQTT. Wi-Fi ESP8266. Блокировка. Запись на карту. Копирование. Интеграция с замком.

Заключение

RFID замок — простой и надёжный проект. RC522 + Arduino: доступ по карте, сигнализация. Зелёный/красный, реле, пищалка. Умный дом своими руками.

FAQ — RFID замок Arduino

Карта не читается?

3.3В питание. RST → D9, SS → D10. MFRC522 библиотека. Карта MIFARE Classic 1K.

Реле не срабатывает?

RELAY_PIN → D6. Реле 5В. Нагрузка 12В через MOSFET. digitalWrite(HIGH).

UID не совпадает?

allowed[] — UID в HEX. String(uid, HEX). toUpperCase().

OpenHAB интеграция?

ESP8266 + MQTT. Топики /access. Items Switch. Доступ по UID.

Звук пищалки?

tone(BUZZER_PIN, 1000, 500). 1000 — частота, 500 — длительность.

Добавить время?

DS3231 + RTClib. Проверка времени доступа.

Блокировка попыток?

Переменная attempts. Если >3 — delay(600000) 10 мин.