Опубликовано

RFID-модуль RC522

По материалам руководства к набору “Умный дом на базе Arduino. Большой набор + КНИГА

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

Внешний вид, назначение контактов

Система RFID состоит из двух основных компонентов: RFID-метки (тега), которая находится у объекта, который мы хотим идентифицировать, и RFID-считывателя (рис. M2.1).

RFID

Рис. 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

Рис. M2.2. Схема подключения RFID-модуля RC522 к Arduino Uno


Примечание

Для подключения модуля RFID вы также можете использовать контактную группу ISCP на плате Arduino Uno, подключив туда контакты MISO (ICSP-1), SCK (ICSP-3) и MOSI (ICSP-4).


Получаем UID метки RFID

  1. Загрузите специализированную библиотеку MFRC522 (https://github.com/miguelbalboa/rfid/archive/master.zip).
  2. Подключите библиотеку в среду разработки Arduino IDE: Скетч | Подключить библиотеку | Добавить .ZIP библиотеку…
  3. Загрузите скетч DumpInfo из папки примеров библиотеки MFRC522: Файл | Примеры | MFRC522 | DumpInfo.
  4. Запустите монитор порта.

Программа считывает информацию с поднесенной 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();

}

}