Создание портативного RFID-замка на Arduino — пошаговое руководство
Необходимые компоненты
- Arduino UNO — 1 шт.
- Модуль RFID-считывателя RC522 (MFRC522) — 1 шт.
- Провода перемычки (набор) — 1 шт.
- USB-кабель (Type-A — Micro-USB) — 1 шт.
- 4-канальный релейный модуль с интерфейсом I2C (ControlEverything.com) — 1 шт.
Программное обеспечение
- Arduino IDE
О проекте
В этом руководстве мы подробно разберем, как собрать портативный RFID-замок для двери на базе Arduino UNO и модуля RC522. Устройство считывает уникальный идентификатор (UID) RFID-метки (карты или брелока) и, если он совпадает с заданным в коде, активирует реле для открытия замка. Проект подходит для начинающих: схема простая, код понятный, а компоненты доступны и недороги.
Принцип работы RFID
RFID (Radio Frequency Identification) — это технология бесконтактной идентификации по радиочастоте. Система состоит из считывателя (ридера) и пассивной метки (тега). Модуль RC522 на чипе MFRC522 (NXP) работает на частоте 13,56 МГц, питается от 3,3 В и поддерживает чтение и запись данных в память метки (1 КБ). Метка не имеет собственного питания: она получает энергию от электромагнитного поля считывателя.
Схема подключения RC522 к Arduino UNO
| Вывод RC522 | Вывод Arduino UNO |
|---|---|
| SDA (SS) | Digital 10 |
| SCK | Digital 13 |
| MOSI | Digital 11 |
| MISO | Digital 12 |
| IRQ | Не подключен |
| GND | GND |
| RST | Digital 9 |
| 3.3V | 3.3V (ни в коем случае не 5V!) |
Получение UID метки
- Установите библиотеку
MFRC522через менеджер библиотек Arduino IDE. - Откройте пример: Файл → Примеры → MFRC522 → DumpInfo.
- Загрузите скетч, откройте монитор порта (9600 бод).
- Приложите карту или брелок к считывателе. В мониторе появится информация, включая UID (выделен жёлтым на скриншоте). Запишите его — он понадобится для настройки доступа.
Основной скетч
Ниже приведён полный код с комментариями. В строке if (content.substring(1) == "89 18 79 63") замените UID на свой (без ведущего пробела, в верхнем регистре, байты через пробел).
#include <SPI.h>
#include <MFRC522.h>
#define RELAY_PIN 8
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);
void setup() {
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, HIGH); // реле выключено (активный низкий уровень)
Serial.begin(9600);
SPI.begin();
mfrc522.PCD_Init();
Serial.println(F("Приложите карту к считывателю..."));
Serial.println();
}
void loop() {
if (!mfrc522.PICC_IsNewCardPresent()) return;
if (!mfrc522.PICC_ReadCardSerial()) return;
Serial.print(F("UID метки:"));
String content = "";
for (byte i = 0; i < mfrc522.uid.size; i++) {
Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(mfrc522.uid.uidByte[i], HEX);
content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
content.concat(String(mfrc522.uid.uidByte[i], HEX));
}
Serial.println();
Serial.print(F("Сообщение: "));
content.toUpperCase();
// ЗДЕСЬ ПОДСТАВЬТЕ СВОЙ UID (без первого пробела)
if (content.substring(1) == "89 18 79 63") {
Serial.println(F("Доступ разрешён"));
Serial.println(F("Реле ВКЛ"));
digitalWrite(RELAY_PIN, LOW); // активируем реле
delay(1000); // держим 1 секунду
digitalWrite(RELAY_PIN, HIGH); // выключаем реле
} else {
Serial.println(F(" Доступ запрещён"));
Serial.println(F(" Реле ВЫКЛ"));
digitalWrite(RELAY_PIN, HIGH);
}
delay(500); // небольшая пауза перед следующим чтением
}
Как это работает
- При обнаружении новой карты считываем её UID.
- Сравниваем с эталонным значением в коде.
- При совпадении: подаём низкий уровень на реле (замыкаем контакты замка) на 1 секунду.
- При несовпадении: реле остаётся разомкнутым, в мониторе порта выводится сообщение об отказе.
Советы и улучшения
- Используйте реле с опторазвязкой для защиты Arduino от скачков напряжения.
- Добавьте светодиодную индикацию (зелёный — доступ разрешён, красный — запрещён).
- Для нескольких пользователей храните список разрешенных UID в массиве или EEPROM.
- Монтируйте считыватель за 얇ой пластиковой панелью — радиоволны 13,56 МГц проходят через диэлектрики.
Схемы и документация
В разделе «Schematics» исходного проекта приведены фото сборки и принципиальная схема. Обратите внимание: питание RC522 строго 3,3 В!
Производственный процесс
- Ретро-часы на индикаторах Numitron с Arduino: просто, надёжно, экономно
- Надёжный RFID-замок на Arduino с RC522 (MIFARE 13.56 МГц) и сервоприводом
- Создание надежного RFID-замка на Arduino — пошаговое руководство
- Надежная система учета рабочего времени на Arduino с RFID и Python
- Умная копилка: управление монетоприёмником на Arduino Nano
- Управление светодиодом по Bluetooth с Arduino: простой DIY-гид
- Сборка вольтметра на Arduino с дисплеем Nokia 5110 — Пошаговое руководство
- Сборка точного измерительного колеса на Arduino Nano и вращательном энкодере
- Точный монитор качества воздуха на датчике Sharp GP2Y1010AU0F
- Измерение солнечной радиации на Arduino UNO с Ethernet Shield