Как подключить RFID-модуль RC522 к Arduino

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

Модуль RFID-RC522 характеристики, распиновка

RFID система для плат Ардуино состоит из двух компонентов: транспондера (метки) в виде пластиковой карточки или брелка и кардридера (устройства для считывания меток). Идентификация производится по уникальному идентификатору, который имеет каждая rfid метка. Модуль RC522 излучает электромагнитные волны, а метки отправляют в ответ свой идентификационный номер, данные из памяти и т.д.

Модуль RFID-RC522 Arduino распиновка
Модуль RFID-RC522 Arduino распиновка, характеристики

Характеристики 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

Для этого занятия потребуется:

  • Arduino Uno / Arduino Nano / Arduino Mega;
  • модуль RFID RC522;
  • светодиоды и резисторы;
  • макетная плата;
  • провода «папа-мама»;
  • библиотека MFRC522.h и SPI.h
Подключение RFID к Ардуино с помощью RC522
Подключение метки 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));
}

Пояснения к коду:

  1. на мониторе порта будет отображаться идентификатор UID метки, когда вы поднесете карту или брелок с меткой к картридеру;
  2. для работы скетча необходимо также установить библиотеку SPI.h



Считывание RFID меток с помощью модуля RC522

Считывание RFID меток с помощью RC522
Считывание 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;
}

Пояснения к коду:

  1. вместо зеленого светодиода, к Ардуино можно подключить твердотельное реле и управлять с его помощью, например, дверным звонком;
  2. значение cardID в скетче следует поставить свое, которое получено было от метки в первой программе.

Заключение. Модуль RC522 Arduino предназначен для создания электромагнитного поля, которое используется для связи с RFID метками. Ридер может общаться с микроконтроллером Ардуино с максимальной скоростью передачи данных до 10 Мбит в секунду через последовательный периферийный интерфейс SPI или протокол связи I2C (порты SDA и SCL) по которому можно подключить одновременно до 128 устройств.



16 Replies to “Как подключить RFID-модуль RC522 к Arduino”

  1. Чтобы добавить несколько меток закомментируйте строку:
    //String cardID = «20C3935E»; // замените на ID своей метки
    В блоке loop скетча измените строку:
    if (tagID == cardID) следующим образом:
    if(tagID == «20C3935E» || tagID == «FD24565Y» || tagID == «12DF45GJE») // сколько угодно меток

  2. Код на вторую схему неправильный он не задействует красный.

  3. Что делать если модуль не видит метку ( типа как от домофона, в комплекте шла ) зато видит мой телефон?

  4. Подключил RC522 к Ардуино UNO. Установил библиотеку MFRC522. Запускаю пример Dumpinfo из библиотеки. Монитор порта выдает — Firmware Version: 0x18 = (unknown)
    Scan PICC to see UID, SAK, type, and data blocks… Как это можно исправить?

    1. Так это и должно быть. Поднесите метку или карту которая обычно идёт в комплекте с модулем и если в мониторе порта будет печататься что-то большое, то всё работает. Если же нет, значит что-то не так. У меня такое было, и проблема была в подключении модуля.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.