Радиочастотная идентификация 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | #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) == "<strong>7E 56 37 D5</strong>") // Укажите <strong>здесь</strong> 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(); } } |