RFID замок на Arduino: RC522, доступ по карте, сигнализация
RFID замок на Arduino — второй урок цикла «Всё про RFID». Простая система доступа: поднёс карту/брелок — зелёный свет, замок открыт. Чужая карта — красный свет, пищалка, доступ запрещён. Модуль RC522 + Arduino + реле 5В + RGB LED + buzzer. Управление электромагнитным замком 12В через MOSFET. Простая схема, минимум деталей. Идеально для двери, шкафа, сейфа, гаража, умного дома. Уроки Arduino, RC522, MIFARE, доступ, сигнализация.
Зачем нужен 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
Библиотека 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();
}
При совпадении включается реле, загорается зелёный светодиод и подаётся звуковой сигнал, после чего доступ закрывается.
При отсутствии совпадения загорается красный светодиод и звучит сигнал отказа.
В конце корректно останавливается работа с картой через PICC_HaltA().
Процесс работы
- Поднеси карту → RC522 считывает UID
- Сравнивает с массивом allowed
- Разрешено: зелёный, реле 5 сек, звук
- Запрещено: красный, пищалка 1 сек
Расширение
Время доступа. Количество попыток. 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 мин.