Радиочастотная идентификация RFID (от англ. Radio Frequency IDentification) представляет собой бесконтактную технологию, которая широко используется в системах контроля доступа, аутентификации персонала, в логистике, в розничной торговле и др. Для идентификации людей наиболее популярным является формат бесконтактной пластиковой карточки, по размеру совпадающей с банковской. Такую карточку для запроса доступа как правило нужно осознанно подносить к считывающему устройству на расстояние порядка 10 см.
Внешний вид, назначение контактов
Система RFID состоит из двух основных компонентов: RFID-метки (тега), которая находится у объекта, который мы хотим идентифицировать, и RFID-считывателя (рис. M2.1).

Рис. M2.1. RFID-модуль RC522
RFID-считыватель состоит из радиочастотного модуля, блока управления и антенной катушки, которая генерирует высокочастотное электромагнитное поле. RFID-метка является пассивным компонентом, в состав которого входит антенна и электронный микрочип. Когда микрочип приближается к электромагнитному полю считывателя на расстояние около 2 см, в катушке его антенны благодаря индукции генерируется напряжение, которое включает микрочип. Поссле этого RFID-метка может обмениваться информацией с RFID-считывателем.
В проектах мы воспользуемся RFID-считывателем RC522 на базе популярной микросхемы MFRC522 производства фирмы NXP Semiconductors. В комплект поставки считывателя RC522 входят две RFID-метки типа Mifare Classic с памятью объемом 1 Кбайт: карточка и брелок. Каждая метка имеет уникальный идентификационный ключ (UID).
Основные характеристики
| Наименование | Значение |
| Напряжение, В | 3,3 |
| Потребляемый ток в активном состоянии, мА | 13 ÷ 26 |
| Потребляемый ток в состоянии ожидания мА | 10 ÷ 13 |
| Рабочая частота, МГц | 13,56 |
| Поддерживаемые типы карт | MIFARE S50, MIFARE S70, MIFARE UltraLight, MIFARE Pro, MIFARE DESfire |
| Размеры, мм | 40×60 |
Схема подключения

Рис. M2.2. Схема подключения RFID-модуля RC522 к Arduino Uno
Примечание
Для подключения модуля RFID вы также можете использовать контактную группу ISCP на плате Arduino Uno, подключив туда контакты MISO (ICSP-1), SCK (ICSP-3) и MOSI (ICSP-4).
Получаем UID метки RFID
- Загрузите специализированную библиотеку MFRC522 (https://github.com/miguelbalboa/rfid/archive/master.zip).
- Подключите библиотеку в среду разработки Arduino IDE: Скетч | Подключить библиотеку | Добавить .ZIP библиотеку…
- Загрузите скетч DumpInfo из папки примеров библиотеки MFRC522: Файл | Примеры | MFRC522 | DumpInfo.
- Запустите монитор порта.
Программа считывает информацию с поднесенной RFID-метки и выводит ее в терминал. Для RFID-меток из комплекта RC522 она будет иметь примерно следующий вид:
Card UID: 7E 56 37 D5
Card SAK: 08
PICC type: MIFARE 1KB
- первая строка — уникальный идентификатор RFID-метки (UID) для этого типа меток (4 байта);
- вторая строка — поле SAK (Select Acknowledge), содержащее информацию о типе метки и производителе. Значение 08 означает, что это метка типа Mifare Classic 1K производства NXP;
- третья строка — расшифровка типа метки, извлеченная из поля SAK: Mifare 1KB.
Внимание!
Запишите уникальный идентификатор (UID) вашей RFID-метки! Он понадобится вам в следующем примере.
Программный код
Загрузите скетч из листинга M2.1. При поднесении метки к считывателю на мониторе порта будет появляться надпись Access granted, а на плате загораться встроенный светодиод.
Листинг M2.1. Подключение модуля RFID
#include <SPI.h>
#include <MFRC522.h>
// Настраиваем пины SS и RST для нашей платы - Arduino Uno
#define SS_PIN 10
#define RST_PIN 9
#define LED13 13 //Встроенный светодиод.
//Зажигается когда доступ разрешен
MFRC522 mfrc522(SS_PIN, RST_PIN); // Создаем объект MFRC522
void setup() {
pinMode(LED13, OUTPUT);
Serial.begin(9600);
SPI.begin(); // Инициализируем интерфейс SPI
mfrc522.PCD_Init(); // Инициализируем MFRC522
Serial.println("Approximate your card to the reader...");
Serial.println();
}
void loop(){
if (!mfrc522.PICC_IsNewCardPresent()) // Ожидаем RFID-метку
return;
// При обнаружении RFID-метки пытаемся считать ее данные
if (!mfrc522.PICC_ReadCardSerial())
return;
// Извлекаем уникальный идентификатор RFID-метки (UID)
String content = "";
// Преобразуем поле UID в строку типа "XX XX XX XX"
for (byte i = 0; i < mfrc522.uid.size; i++)
{
content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
content.concat(String(mfrc522.uid.uidByte[i], HEX));
}
content.toUpperCase();
// Выводим UID в терминал
Serial.print("Tag UID:");
Serial.println(content);
// Сравниваем UID с заданным
if (content.substring(1) == "7E 56 37 D5") // Укажите здесь UID
//RFID-метки, которой
//разрешен доступ
{
// Если UID совпал с заданным - доступ разрешен
Serial.println("Access granted");
Serial.println();
// Включаем встроенный на плате светодиод на 3 секунды
digitalWrite(LED13, HIGH);
delay(3000);
digitalWrite(LED13, LOW);
}
else // Если UID не совпал с заданным - доступ запрещен
{
Serial.println("Access denied");
Serial.println();
}
}



