


Привет! В стартовом наборе для Ардуино есть еще несколько модулей, на которые нужно сделать обзоры. Сегодня это будет модуль rfid rc522.
RFID (Radio Frequency IDentification, радиочастотная идентификация) — способ автоматической идентификации объектов, в котором посредством радиосигналов считываются или записываются данные, хранящиеся в так называемых транспондерах, или RFID-метках.
Содержание
Для выполнения этого урока нам понадобятся
- Ардуино UNO
- Макетная плата
- Перемычки
- Модуль rfid rc522
- Несколько rfid меток
- Кабель USB
Проект и схема
Для rfid модулей уже написана специальная библиотека. Так что сегодня мы просто соберем схему на макетной плате и посмотрим примеры скетчей для работы с метками и считывателем.
Но сначала соберем схему на макетной плате. Rfid модуль имеет 8 контактов. И работает от 3.3в. Контакт IRQ используется для прерываний, его мы использовать не будем.



RFID RC522
Любая RFID-система состоит из считывающего устройства (считыватель, ридер или интеррогатор) и транспондера (он же RFID-метка, иногда также применяется термин RFID-тег).
Идентификация производится по цифровому коду, который записан на метку. Считыватель содержит передатчик и антенну, посредством которых излучается электромагнитное поле. Метки, попавшие в зону действия поля, отвечают собственным сигналом, содержащим идентификационную информацию.
Характеристики
- Основан на микросхеме MFRC522
- Напряжение питания: 3,3 В
- Потребляемый ток: 13–26 мА
- Рабочая частота: 13,56 MГц
- Дальность считывания: 0~60 мм
- Интерфейс: SPI, максимальная скорость передачи 10 МБит/с
- Размер: 40×60 мм
Контакты
- VCC — Питание 3.3V
- RST — Reset. Линия сброса. Данный пин цепляется на цифровой порт с PWM
- GND — Ground
- MISO — Master Input Slave Output — данные от ведомого к ведущему, SPI
- MOSI — Master Output Slave Input — данные от ведущего к ведомому, SPI
- SCK — Serial Clock — тактовый сигнал, SPI
- NSS — Slave Select — выбор ведомого, SPI
- IRQ — линия прерываний
Программа
Для работы с модулем нужно установить в IDE библиотеку MFRC522.h. Используйте менеджер библиотек для поиска.
После установки в библиотеке примеров будут доступны скетчи для примеров работы с модулем. Используем один из этих примеров.
Откроем меню File -> Examples -> RC522 -> ReadNUID
После прошивки скетча в плату можно ставить эксперимент. В комплекте с модулем у нас есть одна пластиковая карта и один брелок на ключи. Считаем информацию с них. Откроем монитор последовательного порта и приложим карту к считывателю.



Здесь мы видим тип rfid метки и уникальный код.
Полный текст программы
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 rfid(SS_PIN, RST_PIN); // Instance of the class
MFRC522::MIFARE_Key key;
// Init array that will store new NUID
byte nuidPICC[4];
void setup() {
Serial.begin(9600);
SPI.begin(); // Init SPI bus
rfid.PCD_Init(); // Init MFRC522
for (byte i = 0; i < 6; i++) {
key.keyByte[i] = 0xFF;
}
Serial.println(F("This code scan the MIFARE Classsic NUID."));
Serial.print(F("Using the following key:"));
printHex(key.keyByte, MFRC522::MF_KEY_SIZE);
}
void loop() {
// Reset the loop if no new card present on the sensor/reader. This saves the entire process when idle.
if ( ! rfid.PICC_IsNewCardPresent())
return;
// Verify if the NUID has been readed
if ( ! rfid.PICC_ReadCardSerial())
return;
Serial.print(F("PICC type: "));
MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
Serial.println(rfid.PICC_GetTypeName(piccType));
// Check is the PICC of Classic MIFARE type
if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&
piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
Serial.println(F("Your tag is not of type MIFARE Classic."));
return;
}
if (rfid.uid.uidByte[0] != nuidPICC[0] ||
rfid.uid.uidByte[1] != nuidPICC[1] ||
rfid.uid.uidByte[2] != nuidPICC[2] ||
rfid.uid.uidByte[3] != nuidPICC[3] ) {
Serial.println(F("A new card has been detected."));
// Store NUID into nuidPICC array
for (byte i = 0; i < 4; i++) {
nuidPICC[i] = rfid.uid.uidByte[i];
}
Serial.println(F("The NUID tag is:"));
Serial.print(F("In hex: "));
printHex(rfid.uid.uidByte, rfid.uid.size);
Serial.println();
Serial.print(F("In dec: "));
printDec(rfid.uid.uidByte, rfid.uid.size);
Serial.println();
}
else Serial.println(F("Card read previously."));
// Halt PICC
rfid.PICC_HaltA();
// Stop encryption on PCD
rfid.PCD_StopCrypto1();
}
void printHex(byte *buffer, byte bufferSize) {
for (byte i = 0; i < bufferSize; i++) {
Serial.print(buffer[i] < 0x10 ? " 0" : " ");
Serial.print(buffer[i], HEX);
}
}
void printDec(byte *buffer, byte bufferSize) {
for (byte i = 0; i < bufferSize; i++) {
Serial.print(buffer[i] < 0x10 ? " 0" : " ");
Serial.print(buffer[i], DEC);
}
}
Клонирование ключа от домофона
Мой rfid ключ от домофона, к сожалению, не считывается данным модулем. Вероятно, он более старой модели Em Marin и работает на частоте 125КГц. Но ключи Mifare можно клонировать и перезаписывать.
Заключение
Мы рассмотрели модуль rfid rc522. С его помощью вы можете считывать информацию с rfid меток, записывать метки и использовать их для контроля доступа или любых других проектов где важна идентификация пользователя.