Урок 6. Arduino считываем метки (RFID-модуль RC522)
Для начала необходимо установить библиотеку RFID Library for MFRC522.
Контакты на модуле RFID-модуль RC522 необходимо подключить к Ардуине. Для подключения удобно использовать провода папа-мама.

Описание контактов у RFID-модуля RC522:
- VCC — Питание. Необходимо 3.3V;
- RST — Reset. Линия сброса. Ни в коем случае не подключать к пину RESET на CraftDuino! Данный пин цепляется на цифровой порт с PWM;
- GND — Ground. Земля
- MISO — Master Input Slave Output — данные от ведомого к ведущему, SPI;
- MOSI — Master Output Slave Input — данные от ведущего к ведомому, SPI;
- SCK — Serial Clock — тактовый сигнал, SPI;
- NSS — Slave Select — выбор ведомого, SPI;
- IRQ — линия прерываний;
| MFRC522 | Arduino Uno | Arduino Mega | Arduino Nano v3 | Arduino Leonardo/Micro | Arduino Pro Micro |
| RST | 9 | 5 | D9 | RESET/ICSP-5 | RST |
| SDA(SS) | 10 | 53 | D10 | 10 | 10 |
| MOSI | 11 (ICSP-4) | 51 | D11 | ICSP-4 | 16 |
| MISO | 12 (ICSP-1 ) | 50 | D12 | ICSP-1 | 14 |
| SCK | 13 (ICSP-3) | 52 | D13 | ICSP-3 | 15 |
| 3.3V | 3.3V | 3.3V | Стабилизатор 3,3В | Стабилизатор 3,3В | Стабилизатор 3,3В |
| GND | GND | GND | GND | GND | GND |
В комплекте с модулем RFID-RC522 идут две метки, одна в виде пластиковой карточки, а вторая в виде брелка. При необходимости их можно докупить отдельно.
После того как все будет подключено на модуле будет гореть индикатор, это говорит о том что питание поступает на RFID . Пришло время запустить пробный скетч который находится в библиотеке которую мы установили.
Необходимо проверить правильность заданных констант:
#define SS_PIN 10 #define RST_PIN 9 // Данные константы соответствуют
Теперь загружаем скетч в ардуину и включаем Мониторинг последовательного порта.
Подносим метку к ридеру и модуль считает все данные с данной метки, например уникальный идентификатор метки UID.

Видео работы RFID-RC522:
Урок 10. Контроль доступа. RFID-rc522 + Servo + Arduino
В данном уроке мы научимся делать простую систему, которая будет отпирать замок по электронному ключу (Метке).

В дальнейшем Вы можете доработать и расширить функционал. Например, добавить функцию «добавление новых ключей и удаления их из памяти». В базовом случае рассмотрим простой пример, когда уникальный идентификатор ключа предварительно задается в коде программы.
В этом уроке нам понадобится:
- Arduino
- RFID-модуль RC522
- Сервопривод
- Провода Папа-Мама
- Провода Папа-Папа или Набор проводов для макетирования 65 шт.
- Зуммер пьезоэлектрический
- Breadboard
Для реализации проекта нам необходимо установить библиотеки:
Сборка:
1) RFID-модуль RC522 подключается к arduino проводами Папа-Мама в следующей последовательности:
| MFRC522 | Arduino Uno | Arduino Mega | Arduino Nano v3 | Arduino Leonardo/Micro | Arduino Pro Micro |
| RST | 9 | 5 | D9 | RESET/ICSP-5 | RST |
| SDA(SS) | 10 | 53 | D10 | 10 | 10 |
| MOSI | 11 (ICSP-4) | 51 | D11 | ICSP-4 | 16 |
| MISO | 12 (ICSP-1 ) | 50 | D12 | ICSP-1 | 14 |
| SCK | 13 (ICSP-3) | 52 | D13 | ICSP-3 | 15 |
| 3.3V | 3.3V | 3.3V | Стабилизатор 3,3В | Стабилизатор 3,3В | Стабилизатор 3,3В |
| GND | GND | GND | GND | GND | GND |
2) Теперь нужно подключить Зуммер, который будет подавать сигнал, если ключ сработал и замок открывается, а второй сигнал, когда замок закрывается.
Зуммер подключаем в следующей последовательности:
| Arduino | Зуммер |
|---|---|
| 5V | VCC |
| GND | GND |
| pin 5 | IO |
3) В роли отпирающего механизма будет использоваться сервопривод. Сервопривод может быть выбран любой, в зависимости от требуемых вам размеров и усилий, который создает сервопривод. У сервопривода имеется 3 контакта:
| Arduino | Сервопривод |
|---|---|
| 5V * | Красный (Центральный) |
| GND | Черный или Коричневый (Левый) |
| pin 6 | Белый или Оранжевый (Правый) |
*Сервопривод рекомендуется питать от внешнего источника питания, если запитать сервопривод от ардуины, то могут возникнуть помехи и перебои в работе arduino. Организовать это можно с помощью источника питания 9V и комбинированного стабилизатора 5V ,3.3V.
Более наглядно Вы можете посмотреть, как мы подключили все модули на картинке ниже:
Теперь, если все подключено, то можно переходить к программированию.
Скетч:
#include #include #include // библиотека "RFID". #define SS_PIN 10 #define RST_PIN 9 MFRC522 mfrc522(SS_PIN, RST_PIN); unsigned long uidDec, uidDecTemp; // для храниения номера метки в десятичном формате Servo servo; void setup() < Serial.begin(9600); Serial.println("Waiting for card. "); SPI.begin(); // инициализация SPI / Init SPI bus. mfrc522.PCD_Init(); // инициализация MFRC522 / Init MFRC522 card. servo.attach(6); servo.write(0); // устанавливаем серву в закрытое сосотояние >void loop() < // Поиск новой метки if ( ! mfrc522.PICC_IsNewCardPresent()) < return; >// Выбор метки if ( ! mfrc522.PICC_ReadCardSerial()) < return; >uidDec = 0; // Выдача серийного номера метки. for (byte i = 0; i < mfrc522.uid.size; i++) < uidDecTemp = mfrc522.uid.uidByte[i]; uidDec = uidDec * 256 + uidDecTemp; >Serial.println("Card UID: "); Serial.println(uidDec); // Выводим UID метки в консоль. if (uidDec == 3763966293) // Сравниваем Uid метки, если он равен заданому то серва открывает. < tone(5, 200, 500); // Делаем звуковой сигнал, Открытие servo.write(90); // Поворациваем серву на угол 90 градусов(Отпираем какой либо механизм: задвижку, поворациваем ключ и т.д.) delay(3000); // пауза 3 сек и механизм запирается. tone(5, 500, 500); // Делаем звуковой сигнал, Закрытие >servo.write(0); // устанавливаем серву в закрытое сосотояние >
Разберем скетч более детально:
Для того, что бы узнать UID карточки(Метки), необходимо записать данный скетч в arduino, собрать схему, изложенную выше, и открыть Консоль (Мониторинг последовательного порта). Когда вы поднесете метку к RFID, в консоли выведется номер

Полученный UID необходимо ввести в следующую строчку:
if (uidDec == 3763966293) // Сравниваем Uid метки, если он равен заданному то сервопривод открывает задвижку.
У каждой карточки данный идентификатор уникальный и не повторяется. Таком образом, когда вы поднесете карточку, идентификатор которой вы задали в программе, система откроет доступ с помощью сервопривода.
Видео:
Ардуино RFID модуль RC522, как подключить

RFID Arduino (Radio Frequency IDentification) — это бесконтактная идентификация транспондера (метки) с помощью радиочастотного канала связи. Система широко используется во многих отраслях: для контроля доступа по пропускам, отслеживания товаров в логистических цепочках поставок, создания систем вознаграждения и т.д. Рассмотрим, как подключить считыватель меток RFID-RC522 к плате Ардуино.
Необходимые компоненты:
- Arduino Uno / Arduino Nano / Arduino Mega
- модуль RC522 и ключ RFID
- светодиоды и резисторы
- макетная плата
- коннекторы
- скачать библиотеку MFRC522.h и SPI.h
- Как подключить сенсорную кнопку к Ардуино
- Подключение WiFi модуля ESP-12E к Ардуино
- Подключение WiFi модуля ESP-01 к Ардуино
Система RFID для плат Arduino состоит из двух элементов: метки в виде пластиковой карты или брелка и считывателя меток. Идентификация меток основана на уникальном идентификаторе UID (стандарт Epc-96 на 96 бит), который есть у каждой rfid-метки. Модуль RC522 Arduino излучает электромагнитные волны, а RFID метки отправляют обратно свой идентификационный номер (UID) и сохраненные данные из памяти чипа.
RFID модуль RC522 распиновка, характеристики

Характеристики RFID RC522 Arduino (datasheet)
- Источник питания: 3,3 В
- Частота: 13,56 МГц
- Оптимальное расстояние: 10 мм
- Интерфейс: SPI
- Протокол: Mifare
- Размеры: 61 мм x 40 мм
Метки RFID могут быть активными или пассивными (пассивные метки работают без источника питания, поэтому они автономны и не изнашиваются) и работать на различных частотах: НЧ (125-134 кГц), ВЧ (13,56 МГц), УВЧ (860-960 МГц). Модули, которые считывают и записывают информацию на метки, называются считывателями. Модули RC522 на базе чипа MFRC522 используют электромагнитные поля для передачи данных на карту.
Как подключить RFID модуль RC522 к Arduino

| MFRC522 | 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 (Nano) и Mega 2560 находится на разных портах. Вам необходимо скачать библиотеки SPI, MFRC522 и распаковать архив с файлами в директории libraries в папке Arduino. После подключения модуля RC522, загрузите следующий пример программы, чтобы получить тип метки и UID (уникальный идентификатор брелка или карты).
Скетч для считывания RFID метки на Ардуино
#include "SPI.h" #include "MFRC522.h" #define RST_PIN 9 // пин RES #define SS_PIN 10 // пин SS MFRC522 mfrc522(SS_PIN, RST_PIN); 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() < // сброс цикла, если на rc модуле нет карты if ( ! mfrc522.PICC_IsNewCardPresent()) < return; >if ( ! mfrc522.PICC_ReadCardSerial()) < return; >// вывод на монитор порта идентификатора ключа mfrc522.PICC_DumpToSerial(&(mfrc522.uid)); >
Контроль доступа с помощью Arduino RFID-RC522

Рассмотрим пример, который можно использовать для создания системы доступа (например, открывание двери). Программа сканирует уникальный идентификатор метки, если UID карты совпадает со значением, определенным в программе (cardID), доступ будет предоставлен (загорится зеленый светодиод). Если к кардридеру RC522 поднести неизвестную метку, доступ будет запрещен (загорится красный светодиод).
Скетч для контроль доступа с помощью RFID-RC522
#include "SPI.h" #include "MFRC522.h" #define RST_PIN 9 // пин RES #define SS_PIN 10 // пин SS byte readCard[4]; String cardID = "20C3935E"; // замените на UID своей карты String tagID = ""; MFRC522 mfrc522(SS_PIN, RST_PIN); 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; >
Заключение. Модуль rc522 Arduino предназначен для генерации электромагнитного поля, которое используется для связи с метками (ключами) RFID. Считыватель может взаимодействовать с микроконтроллером Arduino с максимальной скоростью передачи данных 10 Мбит в секунду через интерфейс SPI или протокол связи I2C (порты sda scl), через который можно одновременно подключить до 127 ведомых устройств.
● Проект 28: Считыватель RFID на примере RC522. Принцип работы, подключение
В этом эксперименте мы покажем, как плата Arduino получает доступ к данным RFID-карт и брелоков Mifare с помощью RFID-считывателя RC522C.
Необходимые компоненты:
Радиочастотная идентификация (RFID) – это технология автоматической бесконтактной идентификации объектов при помощи радиочастотного канала связи. Базовая система RFID состоит из:
• радиочастотной метки;
• считывателя информации (ридера);
• компьютера для обработки информации.
Идентификация объектов производится по уникальному цифровому коду, который считывается из памяти электронной метки, прикрепляемой к объекту идентификации. Считыватель содержит в своем составе передатчик и антенну, посредством которых излучается электромагнитное поле определенной частоты. Попавшие в зону действия считывающего поля радиочастотные метки «отвечают» собственным сигналом, содержащим информацию (идентификационный номер товара, пользовательские данные и т. д.). Сигнал улавливается антенной считывателя, информация расшифровывается и передается в компьютер для обработки. Подавляющее большинство современных систем контроля доступа (СКД) использует в качестве средств доступа идентификаторы, работающие на частоте 125 кГц. Это проксимити-карты доступа (только чтение), самыми распространенными являются карты EM-Marin, а также HID, Indala. Карты этого стандарта являются удобным средством открывания дверей и турникетов. Но не более. Эти карты не обладают никакой защищенностью, легко копируются и подделываются и, соответственно, ничего не дают для защиты объекта от несанкционированного проникновения.
Настоящую защиту от копирования и подделки обеспечивают такие идентификаторы, в чипах которых реализована криптографическая защита. Это бесконтактные смарт-карты, работающие на частоте 13,56 МГц, наиболее распространенными из них являются карты Mifare®. В картах этих стандартов криптозащита организована на высоком уровне, и подделка таких карт практически невозможна.
Модуль RC522 – RFID-модуль 13,56 МГц с SPI-интерфейсом. В комплекте к модулю идут 2 RFID-метки – в виде карты и брелока.
Основные характеристики:
• основан на микросхеме MFRC522;
• напряжение питания: 3,3 В;
• потребляемый ток: 13–26 мА;
• рабочая частота: 13,56 MГц;
• дальность считывания: 0~60 мм;
• интерфейс: SPI, максимальная скорость передачи 10 МБит/с;
• размер: 40×60 мм;
• чтение и запись RFID-меток.

Схема подключения модуля к плате Arduino показана на рис. 28.1.
Рис. 28.1. Схема подключения модуля RFID-считывателя RC522C к Arduino
Напишем скетч считывания с карты и вывода в последовательный порт Arduino UID (уникальный идентификационный номер) RFID-метки (карты или брелока). При написании скетча будем использовать библиотеку MFRC522 (https://github.com/miguelbalboa/rfid). Содержимое скетча показано в листинге 28.1.
// Подключение библиотек #include #include // константы подключения контактов SS и RST #define RST_PIN 9 #define SS_PIN 10 // Инициализация MFRC522 MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance. void setup() < Serial.begin(9600); // инициализация последовательного порта SPI.begin(); // инициализация SPI mfrc522.PCD_Init(); // инициализация MFRC522 > void loop() < if ( ! mfrc522.PICC_IsNewCardPresent()) return; // чтение карты if ( ! mfrc522.PICC_ReadCardSerial()) return; // показать результат чтения UID и тип метки Serial.print(F("Card UID:")); dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size); Serial.println(); Serial.print(F("PICC type: ")); byte piccType = mfrc522.PICC_GetType(mfrc522.uid.sak); Serial.println(mfrc522.PICC_GetTypeName(piccType)); delay(2000); > // Вывод результата чтения данных в HEX-виде void dump_byte_array(byte *buffer, byte bufferSize) < for (byte i = 0; i < bufferSize; i++) < Serial.print(buffer[i] < 0x10 ? " 0" : " "); Serial.print(buffer[i], HEX); > >
Порядок подключения:
1. Подключаем модули RFID-считывателя RC522 к плате Arduino по схеме на рис. 28.1.
2. Загружаем в плату Arduino скетч из листинга 28.1. Открываем монитор последовательного порта.
3. Подносим метку (карту или брелок) к считывателю и видим вывод в последовательный порт данных метки UID и тип (рис. 28.2).

Рис. 28.2. Вывод в последовательный порт информации о метках
Метки Mirafe позволяют записывать на них информацию. В следующем скетче мы организуем на карте счетчик, который будет инкрементироваться при поднесении карты к считывателю. В последовательный порт будем выводить показания счетчика. Содержимое скетча показано в листинге 28.2.
// Подключение библиотек #include #include // константы подключения контактов SS и RST #define RST_PIN 9 #define SS_PIN 10 // Инициализация MFRC522 MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance. MFRC522:MIFARE_Key key; byte sector = 1; byte blockAddr = 4; byte dataBlock[] = 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0>; byte trailerBlock = 7; byte status; byte buffer[18]; byte size = sizeof(buffer); void setup( ) < Serial.begin(9600); // инициализация последовательного порта SPI.begin(); // инициализация SPI mfrc522.PCD_Init(); // инициализация MFRC522 // Значение ключа (A или B) – FFFFFFFFFFFFh значение с завода for (byte i = 0; i < 6; i++) key.keyByte[i] = 0xFF; > void loop( ) < if ( ! mfrc522.PICC_IsNewCardPresent()) return; // чтение карты if ( ! mfrc522.PICC_ReadCardSerial()) return; // показать результат чтения UID и тип метки Serial.print(F("Card UID:")); dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size); Serial.println(); Serial.print(F("PICC type: ")); byte piccType = mfrc522.PICC_GetType(mfrc522.uid.sak); Serial.println(mfrc522.PICC_GetTypeName(piccType)); // Чтение данных из блока 4 Serial.print(F("Reading data from block ")); Serial.print(blockAddr); Serial.println(F(" . ")); Serial.print(F("Data for count ")); Serial.print(blockAddr); Serial.println(F(":")); dump_byte_array(buffer, 2); Serial.println(); Serial.println(); for (byte i = 0; i < 16; i++) // запись в buffer[] dataBlock[i]=buffer[i]; // получение байт счетчика (0 и 1) int count1=(buffer[0]<8)+buffer[1]; Serial.print("count1 hljs-number">1; // инкремент счетчика dataBlock[0]=highByte(count1); dataBlock[1]=lowByte(count1); // Аутентификация key B Serial.println(F("Authenticating again using key B. ")); // Запись данных в блок Serial.print(F("Writing data into block ")); Serial.print(blockAddr); Serial.println(F(" . ")); dump_byte_array(dataBlock, 2); Serial.println(); > // Вывод результата чтения данных в HEX-виде void dump_byte_array(byte *buffer, byte bufferSize) < for (byte i = 0; i < bufferSize; i++) < Serial.print(buffer[i] < 0x10 ? " 0" : " "); Serial.print(buffer[i], HEX); > >
Порядок подключения: