СОДЕРЖАНИЕ ►
RFID Arduino (Radio Frequency IDentification) — это бесконтактная идентификация транспондера (метки) при помощи радиочастотного канала связи. Система широко используется во многих отраслях: для контроля доступа, отслеживания товаров в цепочках поставок, создания системы начисления бонусов и т.д. Рассмотрим подключение устройства для считывания меток RFID-RC522 к плате Ардуино.
Модуль RFID-RC522 характеристики, распиновка
RFID система для плат Ардуино состоит из двух компонентов: транспондера (метки) в виде пластиковой карточки или брелка и кардридера (устройства для считывания меток). Идентификация производится по уникальному идентификатору, который имеет каждая rfid метка. Модуль RC522 излучает электромагнитные волны, а метки отправляют в ответ свой идентификационный номер, данные из памяти и т.д.

Характеристики RFID RC522
- Рабочее напряжение: 3.3 Вольт
- Потребляемый ток: 13-26 мкА
- Рабочая частота: 13.56 MHz
- Дальность считывания: 0 — 60 мм
- Интерфейс: SPI
- Размер: 40 мм х 60 мм
RFID-метки бывают активные и пассивные (без встроенного источника энергии), работают они на разной частоте: LF (125 — 134 кГц), HF (13.56 МГц), UHF (860 — 960 МГц). Модули, которые читают и записывают информацию на метки называются ридерами (считывателями). Модуль RFID MFRC522 Arduino выполнен на основе микросхемы MFRC522, которая обеспечивает работу с метками HF (13,56 МГц).
Подключение RFID к Ардуино с помощью RC522
Для этого занятия потребуется:

| RC522 | Arduino Uno | Arduino Nano | Arduino Mega |
| GND | GND | GND | GND |
| VCC | 3,3V | 3,3V | 3,3V |
| MOSI | 11 | 11 | 51 |
| MISO | 12 | 12 | 50 |
| SCK | 13 | 13 | 52 |
| SDA | 10 | 10 | 10 |
| RST | 9 | 9 | 9 |
Модуль подключается к Ардуино по интерфейсу SPI, схема подключения представлена на рисунке выше. Напомним, что шина SPI на платах Arduino Uno и Mega размещена на разных портах. Для работы с модулем RC522 используется популярная библиотека MFRC522.h. После подключения кардридера к микроконтроллеру, загрузите следующий код для получения типа и UID метки (уникального идентификатора ключа).
Скетч для получения UID (уникального идентификатора)
#include "SPI.h" #include "MFRC522.h" #define RST_PIN 9 // RES pin #define SS_PIN 10 // SDA (SS) pin MFRC522 mfrc522(SS_PIN, RST_PIN); // создание объекта mfrc522 void setup() { Serial.begin(9600); SPI.begin(); mfrc522.PCD_Init(); delay(4); mfrc522.PCD_DumpVersionToSerial(); Serial.println(F("Scan PICC to see UID, SAK, type, and data blocks...")); } void loop() { // сброс цикла, если на считывателе нет карты if ( ! mfrc522.PICC_IsNewCardPresent()) { return; } if ( ! mfrc522.PICC_ReadCardSerial()) { return; } // вывод информации о карте на монитор порта mfrc522.PICC_DumpToSerial(&(mfrc522.uid)); }
Пояснения к коду:
- на мониторе порта будет отображаться идентификатор UID метки, когда вы поднесете карту или брелок с меткой к картридеру;
- для работы скетча необходимо также установить библиотеку SPI.h
Считывание RFID меток с помощью модуля RC522

Рассмотрим пример, с помощью которого можно будет создать полноценную систему доступа. Программа будет сканировать с метки уникальный идентификатор, если UID карточки соответствует установленному в скетче значению (cardID), то доступ будет предоставлен. Если к ридеру будет поднесена неизвестная метка, то доступ будет запрещен, и при этом будет включаться красный или зеленый светодиод.
Скетч для определения RFID меток с модулем RC522 Arduino
#include "SPI.h" #include "MFRC522.h" #define RST_PIN 9 // RES pin #define SS_PIN 10 // SDA (SS) pin byte readCard[4]; String cardID = "20C3935E"; // замените на ID своей метки String tagID = ""; MFRC522 mfrc522(SS_PIN, RST_PIN); // создание объекта mfrc522 void setup() { Serial.begin(9600); SPI.begin(); mfrc522.PCD_Init(); pinMode(5, OUTPUT); pinMode(6, OUTPUT); } void loop() { while (getID()) { if (tagID == cardID) { Serial.println("Access Granted!"); digitalWrite(5, LOW); digitalWrite(6, HIGH); } else { Serial.println("Access Denied!"); } Serial.print("ID: "); Serial.println(tagID); delay(2000); digitalWrite(6, LOW); } } boolean getID() { if (! mfrc522.PICC_IsNewCardPresent()) { return false; } if (! mfrc522.PICC_ReadCardSerial()) { return false; } tagID = ""; for (uint8_t i = 0; i < 4; i++) { tagID.concat(String(mfrc522.uid.uidByte[i], HEX)); } tagID.toUpperCase(); mfrc522.PICC_HaltA(); return true; }
Пояснения к коду:
- вместо зеленого светодиода, к Ардуино можно подключить твердотельное реле и управлять с его помощью, например, дверным звонком;
- значение cardID в скетче следует поставить свое, которое получено было от метки в первой программе.
Заключение. Модуль RC522 Arduino предназначен для создания электромагнитного поля, которое используется для связи с RFID метками. Ридер может общаться с микроконтроллером Ардуино с максимальной скоростью передачи данных до 10 Мбит в секунду через последовательный периферийный интерфейс SPI или протокол связи I2C (порты SDA и SCL) по которому можно подключить одновременно до 128 устройств.










mfrc522.PCD_DumpVersionToSerial(); ошибка, что делать?
Надо скачать библиотеку.
как добавить еще UID метки?
что делать если пишет redefinition of ‘boolean getID()’
Чтобы добавить несколько меток закомментируйте строку:
//String cardID = «20C3935E»; // замените на ID своей метки
В блоке loop скетча измените строку:
if (tagID == cardID) следующим образом:
if(tagID == «20C3935E» || tagID == «FD24565Y» || tagID == «12DF45GJE») // сколько угодно меток
Код на вторую схему неправильный он не задействует красный.
Ну, это гораздо сложнее, нужно массивы использовать
а что за 2 коричневых провода
ошибка: Compilation error: MFRC522.h: No such file or directory
Установи библиотеку и будет щастье:)
Compilation error: redefinition of ‘MFRC522 mfrc522’ что делать
Что делать если модуль не видит метку ( типа как от домофона, в комплекте шла ) зато видит мой телефон?
Попробуй нажать кнопку ресет на ардуино, мне помогло
пишет Compilation error: stray ‘\’ in program чо делать
Подключил RC522 к Ардуино UNO. Установил библиотеку MFRC522. Запускаю пример Dumpinfo из библиотеки. Монитор порта выдает — Firmware Version: 0x18 = (unknown)
Scan PICC to see UID, SAK, type, and data blocks… Как это можно исправить?
Так это и должно быть. Поднесите метку или карту которая обычно идёт в комплекте с модулем и если в мониторе порта будет печататься что-то большое, то всё работает. Если же нет, значит что-то не так. У меня такое было, и проблема была в подключении модуля.