Подключение RFID к Arduino с помощью RC522 и RDM3600

Что такое rfid

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

Все RFID-системы можно разделить по дальности действия:

  • Ближней идентификации – расстояние не более 20 см;
  • Средней идентификации – расстояние от 20 см до 5 м;
  • Дальней идентификации – максимум 300 м.

С точки зрения частот можно выделить:

  • Системы, работающие в низкочастотном диапазоне (125 кГц, 134 кГц);
  • Работающие в среднечастотном диапазоне (13,56 МГц);
  • Работающие в высокочастотном диапазоне (800 МГц – 2, 4 ГГц).

Наиболее популярным диапазоном является среднечастотным – он широко используется в транспортных приложениях и других проектах, где требуется перезаписывание карт. Основными стандартами являются ISO 14443, ISO 15693 и EPC. На основе стандарта ISO 14443 изготавливаются смарт-карты. ISO 15693 используется для перезаписывания меток. EPC – аналог штрихкодов, имеет более простую и понятную структуру.

ВЧ диапазон начали использовать недавно, в основном его применяют для складских приложений. Для этого диапазона используются стандарты ISO 18000 и EPC. Стандарты ISO 18000 вызывают наибольший интерес, они используются в приложениях с метками с увеличенной дальностью. Для ISO 18000 также можно выделить несколько стандартов, различающихся по  частоте:

  • ISO 18000-1 (определение тех параметров, которые необходимо стандартизировать);
  • ISO 18000-2 (для параметров с бесконтактным интерфейсом связи менее 135 кГц);
  • ISO 18000-3 (для бесконтактного интерфейса на частоте 13,56 МГц);
  • ISO 18000-4 (для частоты 2, 45 ГГц);
  • ISO 18000-6 (для частоты 860-930МГц);
  • ISO 18000-7 (для частоты 433 МГц).

Что такое технология rfid и как она работает?

RFID или система радиочастотной идентификации состоит из двух основных компонентов: транспондера или метки, прикрепленной к идентифицируемому объекту, и приемопередатчика, также известного как интеррогатор (interrogator) или считыватель.

Рисунок 1 Как работает технология RFID
Рисунок 1 – Как работает технология RFID

Считыватель состоит из радиочастотного модуля и антенны, которая генерирует высокочастотное электромагнитное поле. Метка, напротив, обычно является пассивным устройством, то есть она не содержит батареи. Вместо этого она содержит микрочип, который хранит и обрабатывает информацию, и антенну для приема и передачи сигнала.

Для считывания информации, закодированной в метке, она размещается в непосредственной близости от считывателя (она не обязательно должна находиться в пределах прямой видимости от считывателя). Считыватель генерирует электромагнитное поле, которое заставляет электроны проходить через антенну метки и обеспечивать чип питанием.

Рисунок 2 Как работает технология RFID
Рисунок 2 – Как работает технология RFID

Обеспеченная питанием микросхема внутри метки затем отвечает отправкой своей сохраненной информации обратно считывателю в виде другого радиосигнала. Это называется обратным рассеянием (backscatter). Обратное рассеяние или изменение электромагнитной/радиочастотной волны обнаруживается и интерпретируется считывателем, который затем отправляет данные на компьютер или микроконтроллер.

Arduino — rfid/nfc | arduino tutorial

In this tutorial, we are going to learn how to use RFID/NFC with Arduino. The RFID/NFC system includes two components: reader and tag. There are two popular RFID/NFC readers: RC522 and PN532 RFID/NFC reader. This tutorial focuses on RC522 RFID/NFC reader. PN532 RFID/NFC reader will be presented in an upcoming tutorial.

RC522 RFID/NFC reader (also called RFID-RC522 Module) can:

In above capabilities, for Arduino, reading the UID is the most widely-used. This tutorial focuses on reading the UID of RFID/NFC tag. The other will be present in next tutorials

We are considering to make the video tutorials. If you think the video tutorials are essential, please subscribe to our YouTube channel to give us motivation for making the videos.

Nfc reader arduino на алиэкспресс — купить онлайн по выгодной цене

Перед покупкой сравните цены на nfc reader arduino, прочитайте реальные отзывы покупателей, ознакомьтесь с техническими характеристиками.

Закажите nfc reader arduino онлайн с доставкой по России: товары с пометкой Plus доступны с ускоренной доставкой и улучшенными условиями возврата.

На Алиэкспресс nfc reader arduino всегда в наличии в большом ассортименте: на площадке представлены как надежные мировые бренды, так и перспективные молодые.

Rfid система контроля доступа для дверного замка

Давайте создадим небольшой проект на Arduino, чтобы продемонстрировать, как простой модуль RFID считывателя RC522 можно использовать для создания RFID системы контроля доступа для дверного замка. Наша программа будет сканировать уникальный идентификатор каждой RFID метки, когда она достаточно близко, чтобы запитываться от считывателя RC522.

Так выглядит результат.

Рисунок 13 Демонстрация работы RFID системы контроля доступа для дверного замка
Рисунок 13 – Демонстрация работы RFID системы контроля доступа для дверного замка

Конечно, этот проект можно привязать к открытию дверей, включению реле, включению светодиода или к чему-то еще.

Если вы не знакомы с символьными LCD дисплеями размером 16×2, то взгляните на эту статью.

Прежде чем мы перейдем к загрузке кода и сканированию меток, давайте посмотрим на принципиальную схему проекта.

Рисунок 14 RFID система контроля доступа для дверного замка. Подключение RFID считывателя RC522 и LCD дисплея к Arduino
Рисунок 14 – RFID система контроля доступа для дверного замка. Подключение RFID считывателя RC522 и LCD дисплея к Arduino

Всё! Теперь попробуйте приведенный ниже скетч в работе.

#include <SPI.h>
#include <MFRC522.h>
#include <LiquidCrystal.h>

#define RST_PIN 9
#define SS_PIN 10

byte readCard[4];
String MasterTag = "20C3935E";	// ЗАМЕНИТЕ этот ID метки на ID своей метки!!!
String tagID = "";

// Создание объектов
MFRC522 mfrc522(SS_PIN, RST_PIN);
LiquidCrystal lcd(7, 6, 5, 4, 3, 2); //Параметры: (rs, enable, d4, d5, d6, d7) 

void setup() 
{
  // Инициализация
  SPI.begin();        // SPI шина
  mfrc522.PCD_Init(); // MFRC522
  lcd.begin(16, 2);   // LCD дисплей

  lcd.clear();
  lcd.print(" Access Control ");
  lcd.setCursor(0, 1);
  lcd.print("Scan Your Card>>");
}

void loop() 
{
  
  // Ждем, пока не будет доступна новая метка
  while (getID()) 
  {
    lcd.clear();
    lcd.setCursor(0, 0);
    
    if (tagID == MasterTag) 
    {
      lcd.print(" Access Granted!");
      // Вы можете написать здесь любой код, например, открывание дверей,
      // включение реле, зажигание светодиода или что-то другое, что взбредет вам в голову.
    }
    else
    {
      lcd.print(" Access Denied!");
    }
    
    lcd.setCursor(0, 1);
    lcd.print(" ID : ");
    lcd.print(tagID);
      
    delay(2000);

    lcd.clear();
    lcd.print(" Access Control ");
    lcd.setCursor(0, 1);
    lcd.print("Scan Your Card>>");
  }
}

// Чтение новой метки, если она доступна
boolean getID() 
{
  // Получение готовности для чтения PICC карт
  if ( ! mfrc522.PICC_IsNewCardPresent()) 
  { // Продолжать, если к RFID считывателю поднесена новая карта
    return false;
  }
  
  if ( ! mfrc522.PICC_ReadCardSerial()) 
  { // Когда карта поднесена, считать серийный номер и продолжить
    return false;
  }
  
  tagID = "";
  for ( uint8_t i = 0; i < 4; i  ) 
  { // Карты MIFARE, кторые мы используем, содержат 4-байтовый UID
    //readCard[i] = mfrc522.uid.uidByte[i];
    tagID.concat(String(mfrc522.uid.uidByte[i], HEX)); // Сложить эти 4 байта в одну переменную String
  }
  tagID.toUpperCase();
  mfrc522.PICC_HaltA(); // остановить чтение
  return true;
}

Программа довольно проста. Сначала мы включаем необходимые библиотеки, определяем выводы Arduino, создаем объекты LCD и MFRC522 и определяем главную метку.

#include <SPI.h>
#include <MFRC522.h>
#include <LiquidCrystal.h>

#define RST_PIN 9
#define SS_PIN 10

byte readCard[4];
String MasterTag = "20C3935E";	// ЗАМЕНИТЕ этот ID метки на ID своей метки!!!
String tagID = "";

// Создание объектов
MFRC522 mfrc522(SS_PIN, RST_PIN);
LiquidCrystal lcd(7, 6, 5, 4, 3, 2); //Параметры: (rs, enable, d4, d5, d6, d7) 

В функции setup() мы инициализируем интерфейс SPI, объект MFRC522 и LCD дисплей. После этого мы печатаем на LCD дисплее приветственное сообщение.

void setup() 
{
  // Инициализация
  SPI.begin();        // SPI шина
  mfrc522.PCD_Init(); // MFRC522
  lcd.begin(16, 2);   // LCD дисплей

  lcd.clear();
  lcd.print(" Access Control ");
  lcd.setCursor(0, 1);
  lcd.print("Scan Your Card>>");
}

В функции loop() мы ждем, пока не будет отсканирована новая метка. Как только это будет сделано, мы сравним неизвестную метку с мастер-меткой, определенной в функции setup(). Всё! Если ID метки совпадает с ID мастера, доступ предоставляется, в противном случае в доступе будет отказано.

void loop() 
{
  
  // Ждем, пока не будет доступна новая метка
  while (getID()) 
  {
    lcd.clear();
    lcd.setCursor(0, 0);
    
    if (tagID == MasterTag) 
    {
      lcd.print(" Access Granted!");
      // Вы можете написать здесь любой код, например, открывание дверей,
      // включение реле, зажигание светодиода или что-то другое, что взбредет вам в голову.
    }
    else
    {
      lcd.print(" Access Denied!");
    }
    
    lcd.setCursor(0, 1);
    lcd.print(" ID : ");
    lcd.print(tagID);
      
    delay(2000);

    lcd.clear();
    lcd.print(" Access Control ");
    lcd.setCursor(0, 1);
    lcd.print("Scan Your Card>>");
  }
}

Ключевым моментом в проекте является пользовательская функция getID(). Как только она просканирует новую карту, внутри цикла for она преобразует 4 байта UID в строки и объединяет их для создания одной строки.

boolean getID() 
{
  // Получение готовности для чтения PICC карт
  if ( ! mfrc522.PICC_IsNewCardPresent()) 
  { // Продолжать, если к RFID считывателю поднесена новая карта
    return false;
  }
  
  if ( ! mfrc522.PICC_ReadCardSerial()) 
  { // Когда карта поднесена, считать серийный номер и продолжить
    return false;
  }
  
  tagID = "";
  for ( uint8_t i = 0; i < 4; i  ) 
  { // Карты MIFARE, кторые мы используем, содержат 4-байтовый UID
    //readCard[i] = mfrc522.uid.uidByte[i];
    tagID.concat(String(mfrc522.uid.uidByte[i], HEX)); // Сложить эти 4 байта в одну переменную String
  }
  tagID.toUpperCase();
  mfrc522.PICC_HaltA(); // остановить чтение
  return true;
}

Испытания

Как говориться, лучше один раз увидеть, чем тысячу раз прочитать. Специально для вас записал кино о работе этого эмулятора. Хотел его протестировать на реальном железе, и попробовать пробраться в офис с помощью Arduino, но с проклятой пандемией туда не пускают. Поэтому натурные испытания придётся смотреть на столе, в лабораторных условиях.

Как читать/писать метку mifare с arduino в nfc?

//This example reads a MIFARE memory block. It is tested with new MIFARE 1K cards.
//Uses default keys.
//Contributed by Seeed Technology Inc (www.seeedstudio.com)

#include <PN532.h>

#define SCK 52
#define MOSI 51
#define SS 10
#define MISO 50

PN532 nfc(SCK, MISO, MOSI, SS);

void setup(void) {
Serial.begin(9600);
Serial.println(«Hello!»);

nfc.begin();

uint32_t versiondata = nfc.getFirmwareVersion();
if (! versiondata) {
Serial.print(«Didn’t find PN53x board»);
while (1); // halt
}
// Got ok data, print it out!
Serial.print(«Found chip PN5»); Serial.println((versiondata>>24) & 0xFF, HEX);
Serial.print(«Firmware ver. «); Serial.print((versiondata>>16) & 0xFF, DEC);
Serial.print(‘.’); Serial.println((versiondata>>8) & 0xFF, DEC);
Serial.print(«Supports «); Serial.println(versiondata & 0xFF, HEX);

// configure board to read RFID tags and cards
nfc.SAMConfig();
}

void loop(void) {
uint32_t id;
// look for MiFare type cards
id = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A);

if (id != 0) {
Serial.print(«Read card #»); Serial.println(id);

uint8_t keys[]= {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
if(nfc.authenticateBlock(1, id ,0x08,KEY_A,keys)) { //authenticate block 0x08
Serial.print(«giris tmm #»);
//if authentication successful
uint8_t block[16];
//read memory block 0x08
if(nfc.readMemoryBlock(1,0×08,block)) {
Serial.print(«Read tmm #»);
//if read operation is successful
for(uint8_t i=0;i<16;i ) {
//print memory block
Serial.print(block[i],HEX);
Serial.print(» «);
}
Serial.println();
}
}
}

delay(500);
}

Код arduino. запись в rfid метку

Учитывая, что вы успешно прочитали RFID метку, пора перейти к следующему эксперименту. В следующем скетче будет показана простая демонстрация записи пользовательских данных в RFID метку. Протестируйте скетч, прежде чем мы начнем его подробный разбор.

Комплектация

  • 1x Модуль RFID-модуль PN532;
  • 1x Метка брелок;
  • 1x Метка карточка;
  • 1x Штыревой соединитель;

Модуль arduino rfid rc522

Модуль RFID RC522 выполнен на основе схемы MFRC522, которая обеспечивает беспроводную коммуникацию на частоте 13,56 МГц. Подключать микросхему можно по интерфейсу SPI, I2c и UART. Стандарт протокола NFC Reader ISO 14443.

Обзор аппаратного обеспечения — модуль чтения / записи rf522 rfid

RFID модуль RC522 на основе микросхемы MFRC522 от NXP – это один из самых недорогих вариантов RFID, который вы можете найти в интернете менее чем за четыре доллара. Обычно он поставляется с картой RFID метки и брелоком с объемом памяти 1 КБ. И что лучше всего, он может записать метку, чтобы вы могли хранить в ней свое секретное сообщение.

Рисунок 3 Модуль RFID считывателя RC522 с меткой-картой и меткой-ключом
Рисунок 3 – Модуль RFID считывателя RC522 с меткой-картой и меткой-ключом

Модуль считывателя RFID RC522 предназначен для создания электромагнитного поля на частоте 13,56 МГц, которое он использует для связи с метками RFID (стандартные метки ISO 14443A). Считыватель может взаимодействовать с микроконтроллером через 4-контактный последовательный периферийный интерфейс (SPI) с максимальной скоростью передачи данных 10 Мбит/с. Он также поддерживает связь по протоколам I2C и UART.

У модуля имеется вывод прерывания. Это удобно потому, что вместо того, чтобы постоянно опрашивать RFID модуль «есть ли карта в поле зрения?», модуль сам предупредит нас, когда метка окажется рядом.

Рабочее напряжение модуля составляет от 2,5 до 3,3 В, но хорошая новость заключается в том, что логические выводы допускают напряжение 5 вольт, поэтому мы можем легко подключить его к Arduino или любому микроконтроллеру с 5-вольтовой логикой без использования какого-либо преобразователя логических уровней.

Характеристики RFID модуля RC522
Частотный диапазон13,56 МГц, ISM диапазон
ИнтерфейсSPI / I2C / UART
Рабочее напряжение питанияот 2,5 В до 3,3 В
Максимальный рабочий ток13-26 мА
Минимальный ток (отключение питания)10 мкА
Логические входыдопускают 5 В
Расстояние считывания5 см

Общие сведения

RFID-модуль PN532 NFC — модуль для бесконтактной связи, работающий на частоте 13,56 МГц.

Объяснение кода:

Скетч начинается с включения библиотек MFRC522 и SPI, определения выводов Arduino, к которым подключен RC522, и создания объекта считывателя MFRC522.

#include <SPI.h>      // включить библиотеку шины SPI
#include <MFRC522.h>  // включить библиотеку считывателя RFID

#define SS_PIN 10  //slave select pin
#define RST_PIN 5  //reset pin

MFRC522 mfrc522(SS_PIN, RST_PIN);  // создание объекта считывателя MFRC522
MFRC522::MIFARE_Key key;           // создать структуру MIFARE_Key с именем 'key', которая будет хранить информацию о карте

Далее нам нужно определить блок, в котором мы собираемся хранить наши данные. Здесь выбран сектор 0, блок 2. Помните, никогда не выбирайте блок 3 в любом секторе. Запись в блок Sector Trailer может сделать блок непригодным для использования.

Ответ на пост «эмулятор rfid на arduino»

void setupTimer1() {
noInterrupts();
// Clear registers
TCCR1A = 0;
TCCR1B = 0;
TCNT1 = 0;
// 3906.25 Hz (16000000/((4095 1)*1))
OCR1A = 4095;
// Prescaler 1
TCCR1B |= (1 << CS10);
// Output Compare Match A Interrupt Enable
TIMSK1 |= (1 << OCIE1A);
interrupts();
}

ISR(TIMER1_COMPA_vect) {
TCNT1=0;
if (((data[byte_counter] << bit_counter)&0x80)==0x00) {
if (half==0) digitalWrite(ANTENNA, LOW);
if (half==1) digitalWrite(ANTENNA, HIGH);
}
else {
if (half==0) digitalWrite(ANTENNA, HIGH);
if (half==1) digitalWrite(ANTENNA, LOW);
}
half ;
if (half==2) {
half=0;
bit_counter ;
if (bit_counter==8) {
bit_counter=0;
byte_counter=(byte_counter 1)%8;
}
}
}

Читайте ещё про NFC:  Система nfc в телефоне что это

#define CARD_ID 0xABCDF
uint8_t data[8];
void data_card_ul() {
uint64_t card_id = (uint64_t)CARD_ID;
uint64_t data_card_ul = (uint64_t)0x1FFF; //first 9 bit as 1
int32_t i;
uint8_t tmp_nybble;
uint8_t column_parity_bits = 0;
for (i = 9; i >= 0; i—) { //5 bytes = 10 nybbles
tmp_nybble = (uint8_t) (0x0f & (card_id >> i*4));
data_card_ul = (data_card_ul << 4) | tmp_nybble;
data_card_ul = (data_card_ul << 1) | ((tmp_nybble >> 3 & 0x01) ^ (tmp_nybble >> 2 & 0x01) ^
(tmp_nybble >> 1 & 0x01) ^ (tmp_nybble & 0x01));
column_parity_bits ^= tmp_nybble;
}
data_card_ul = (data_card_ul << 4) | column_parity_bits;
data_card_ul = (data_card_ul << 1); //1 stop bit = 0
for (i = 0; i < 8; i ) {
data[i] = (uint8_t)(0xFF & (data_card_ul >> (7 — i) * 8));
}
}

Подключение

Для удобства подключения к Arduino воспользуйтесь Trema Shield, Trema Power Shield, Motor Shield или Trema Set Shield.

Модуль поддерживает работу по нескольким интерфейсам. для того, чтобы подключить модуль по шине I2C, измените положение переключателя согласно таблице возле него.

Подключение по I2C:

  • SDA — к выводу A4;
  • SCL — к выводу A5;
  • VCC — 5V;
  • GND — GND;
  • IRQ — к цифровому выводу 2;
  • RSTO — к цифровому выводу 3;

Подключение по SPI:

  • SS — 10;
  • MOSI — 11;
  • MISO — 12;
  • SCK — 13;
  • VCC — 5V;
  • GND — GND;

Подключение rc522 к ардуино

Для подключения понадобятся плата Ардуино, считыватель RC522, компьютер, провода и беспроводная RFID метка.

Подключается модуль RC522 к ардуино по следующей схеме:

Напряжение питания обеспечивается от 2,5 до 3,3 В. Выход RST подключается к D9 пину на ардуино, SDA – к D10, MOSI – D11, MISO – D12, SCK – D13. В данном случае рассмотрены платы Arduino Nano v3 и Arduino Uno. После того как все будет подключено, на RC522 загорится индикатор.

Плата Ардуино оснащена дополнительным разъемом ICSP, который используется для работы по интерфейсу  SPI. Распиновка для него изображена на рисунке, выводы с модуля RC522 можно подключить к этому разъему.

Для работы с модулем нужно установить библиотеку RFID Library for MFRC522. После установки нужно загрузить тестовый скетч для считывания номера карты cardRead, включить мониторинг последовательного порта. Затем метку нужно поднести к ридеру, произойдет инициализация метки и на мониторе появится следующее:

В данном примере произведено считывание трех различных меток.

Можно выбрать другой пример – DumpInfo, который также считает данные с карты. В результате на экране появятся тип карты и информация, которая состоит из 16 сектором памяти по 4 блока.

Подключение rfid модуля rc522 к arduino uno

Теперь, когда мы знаем всё о модуле, мы можем подключить его к нашей плате Arduino!

Для начала подключите вывод VCC на модуле к выводу 3,3V на Arduino, а вывод GND — к земле Arduino. Вывод RST может быть подключен к любому цифровому выводу на Arduino. В нашем случае он подключен к цифровому выводу 5. Вывод IRQ не подключен, так как библиотека Arduino, которую мы собираемся использовать, не поддерживает его.

Теперь у нас остаются выводы, которые используются для связи по SPI. Поскольку модуль RC522 требует передачи больших данных, то наилучшая производительность будет обеспечена при использовании аппаратного модуля SPI в микроконтроллере. Использование выводов аппаратного SPI модуля намного быстрее, чем «дергание битов» в коде при взаимодействии через другой набор выводов.

Обратите внимание, что у плат Arduino выводы SPI различаются. Для плат Arduino, таких как UNO/Nano V3.0, это цифровые выводы 13 (SCK), 12 (MISO), 11 (MOSI) и 10 (SS).

Если у вас Arduino Mega, выводы отличаются! Вы должны использовать цифровые выводы 50 (MISO), 51 (MOSI), 52 (SCK) и 53 (SS). В таблице ниже приведен список выводов для связи по SPI для разных плат Arduino.

Список выводов для связи по SPI для разных плат Arduino
 MOSIMISOSCKCS
Arduino Uno11121310
Arduino Nano11121310
Arduino Mega51505253

В случае если вы используете плату Arduino, отличную от приведенных выше, рекомендуется проверить официальную документацию Arduino, прежде чем продолжить.

Рисунок 5 Подключение модуля RFIDсчитывателя RC522 к Arduino UNO
Рисунок 5 – Подключение модуля RFIDсчитывателя RC522 к Arduino UNO

Как только вы всё подключите, вы готовы к работе!

Подробнее о модуле

Для более удобной работы с модулем предлагаем вам воспользоваться библиотекой Adafruit_PN532.

Преимущества rfid

  • Не требуется прямая видимость;
  • Практически 100% идентификация сигнала;
  • Возможность применения в агрессивной среде;
  • Долгий срок службы;
  • RFID-метку трудно подделать;
  • Возможность хранения и передачи большого объема информации.

Области применения RFID идентификации

RFID-технология часто используется в розничной торговле, библиотеках и архивах, логистике, системах контроля и управления доступом (СКУД), инициализации людей, удостоверении подлинности товаров.

Для идентификации персонала самым популярным форматом являются пластиковые бесконтактные карты и бесконтактные брелки. С их помощью можно регистрировать вход/выход объектов на территории через точки прохода – ворота, КПП. Основной задачей СКУД является управление доступом – например, ограничение в доступе на какую-либо территорию, идентификация лиц, которые могут попадать на территорию.

RFID-брелки используются и для подъездных домофонов. Для открытия дверей чаще всего используются брелки Proximity, то есть брелки ближнего действия, работающие на расстоянии 10-15 см.  Proximity также делятся на несколько форматов – наиболее популярные на сегодняшний день EM-Marin, HID для бесконтактных ключей и MIFARE, к которым относятся бесконтактные смарт карты.

Распиновка rfid модуля rc522

Модуль RC522 имеет всего 8 контактов, соединяющих его с внешним миром.

Рисунок 4 Распиновка RFID модуля считывателя RC522
Рисунок 4 – Распиновка RFID модуля считывателя RC522

VCC обеспечивает питание для модуля. Напряжение питания может быть в диапазоне от 2,5 до 3,3 вольт. Вы можете подключить его к выходу 3.3V вашей платы Arduino. Помните, что подключение его к выводу 5V, скорее всего, выведет модуль из строя!

Читайте ещё про NFC:  Почему сенсор на айфоне не реагирует. Устраняем неисправность сенсора iPhone своими руками

RST – вход для сброса и отключения питания. Когда на этот вывод подается низкий логический уровень, запускается жесткое отключение питания. Оно отключает всех внутренних потребителей тока, включая генератор, и входные выводы отключаются от внешних цепей. Во время нарастающего фронта на этом выводе модуль сбрасывается.

GND вывод земли, должен быть подключен к выводу GND на Arduino.

IRQ – вывод прерывания, который может предупредить микроконтроллер, когда поблизости будет RFID метка.

Вывод MISO / SCL / Tx действует либо как Master-In-Slave-Out (вход ведущего – выход ведомого) при включенном интерфейсе SPI, либо как последовательный тактовый сигнал при включенном интерфейсе I2C, либо как выход последовательных данных при включенном интерфейсе UART.

MOSI (Master Out Slave In) – вход SPI для модуля RC522.

SCK (Serial Clock) принимает тактовые импульсы, предоставляемые мастером на шине SPI, то есть Arduino.

Вывод SS / SDA / Rx действует либо как вход, когда включен интерфейс SPI, либо как линия последовательных данных, когда включен интерфейс I2C, либо как вход последовательных данных, когда включен интерфейс UART.

Распределение памяти mifare classic 1k

Память метки 1 КБ организована в 16 секторов (от 0 до 15). Каждый сектор дополнительно делится на 4 блока (блоки 0–3). Каждый блок может хранить 16 байтов данных (от 0 до 15).

Это говорит нам, что у нас точно

16 секторов x 4 блока x 16 байтов данных = 1024 байта = 1 КБ памяти

Весь 1 килобайт памяти с секторами, блоками и данными показан ниже.

Рисунок 9 Вывод скетча DumpInfo. Структура памяти
Рисунок 9 – Вывод скетча DumpInfo. Структура памяти

Блок 3 каждого сектора называется Sector Trailer и содержит информацию, называемую Access Bits (биты доступа), для предоставления доступа на чтение и запись к остальным блокам в секторе. Это означает, что в каждом секторе на самом деле для хранения данных доступны только 3 нижних блока (блоки 0, 1 и 2), а это означает, что в 64 байтовом секторе у нас есть только 48 байтов, доступных для нашего собственного использования.

Технические характеристики rdm6300:

  • Максимальный потребляемый ток 50 мА;
  • Напряжение питания 5 В;
  • Рабочая частота 125 кГц;
  • Рабочие температуры от -10С до 70 С.

Распиновка изображена на рисунке.

Пин TX отвечает за передачу данных, RX – за прием. 3 выход не используется.

Для P2 выходы ANT1 и ANT2 используются для подключения антенны.

Технические характеристики модуля rfid rc522:

  • Напряжение питания 3,3 В;
  • Максимальный потребляемый ток 30 мА;
  • Частотная полоса 13,55-13,57 МГц;
  • Расстояние считывания до 25 мм;
  • Рабочая температура от -20С до 80 С.

Распиновка модуля изображена на рисунке. Контакт SDA (SS, CS, NSS) отвечает за выбор ведомого устройства. Выход SCK является тактовым сигналом SPI. MOSI – отвечает за передачу данных от мастера к ведомому, MISO – от ведомого к мастеру. IRQ – выполняет прерывание. RST – выполняет прерывание.

RDM6300 – бесконтактный считыватель, который используется для дистанционного считывания номера RFID брелка и передачи номера через UART на микроконтроллер, управляющий замком в системах доступа. Устройство обладает несколькими преимуществами – невысокая цена и простота в установке.

Чаще всего используется в системах контроля доступа в дома, гаражи, офисы, квартиры и другие здания с электромеханическим замком.  Считыватель используется для чтения карт EM4100/TK4100. RDM6300 может монтироваться в стену или в корпус. В качестве микроконтроллера обычно применяется Ардуино.

Характеристики

  • Микросхема: PN532
  • Логика: КМОП, 3.3В
  • Напряжение питания: 3.3-5В
  • Максимальный потребляемый ток: 150 мА
  • Потребляемый ток в режиме ожидания: 100 мА
  • Потребляемый ток в режиме считывания: 120 мА
  • Потребляемый ток в режиме записи: 120 мА
  • Дальность считывания: 5 — 7 см
  • Антенна: встроенная, на плате
  • Размеры: 42.7 х 40.4 мм
  • Поддержка интерфейсов: I2C / SPI / HSU (High Speed UART — 115200 kbps);
  • Поддерживаемые режимы работы:
    • RFID (чтение/запись)
    • P2P соединения
    • NFC для работы со смартфонами на платформе Android
  • Поддержка чипов:
    • ISO 14443 Type A — NXP Mifare 1k, 4k, Ultralight, Desfire
    • ISO 14443 Type B
    • ISO/IEC 14443-4-совместимые чипы
    • FeliCa
    • Jewel
    • TopaZ

Интерфейсы и назначение выводов

Микросхема MFRC522 поддерживает интерфейсы SPI, UART и I2C (см. рисунок 2). Выбор интерфейса осуществляется установкой логических уровней на определенных выводах микросхемы. На данном модуле выбран интерфейс SPI.


Рисунок 2. RFID модуль RC522 – назначение выводов

Назначение выводов интерфейса SPI:

Сигнал сброса RST – это сигнал, поступающий от цифрового выхода контроллера. При поступлении сигнала LOW происходит перезагрузка считывателя. Также ридер установкой на RST низкого уровня  сообщает, что находится в режиме сна, для вывода модуля из режима сна необходимо подать на данный вывод сигнал HIGH.

Выводы

Очень надеюсь, что подобные статьи подстегнуть новичков изучать программирование и электронику. А так же они поспособствуют уходу с рынка такого типа карт, как самых незащищённых и небезопасных, поскольку теперь их может скопировать и эмулировать даже ребёнок.

Выражаю благодарность Michal Krumnikl за его терпение много-много лет назад, когда он мне по icq разъяснял работу подобного эмулятора, а так же помощь с разработкой кода. В некотором смысле это его идеи и наработки 13-ти летней давности.

Считывание карты и вывод номера в монитор последовательного порта.

Подключим модуль по шине I2C.

#include <Wire.h>                                                                               // подключаем библиотеку для работы по I2C
#include <Adafruit_PN532.h>                                                                     // подключаем библиотеку для работы с модулем
#define PN532_IRQ   (2)                                                                         // указываем вывод, к которому подключен контакт IRQ
#define PN532_RESET (3)                                                                         // указываем вывод, к которому подключен контакт RST
Adafruit_PN532 nfc(PN532_IRQ, PN532_RESET);                                                     // назначаем имя модулю

void setup() {
  Serial.begin(115200);                                                                         // инициируем передачу данных в монитор последовательного порта на скорости 115200 бод
  Serial.println("Hello!");                                                                     // выводим в монитор порта текст
  nfc.begin();                                                                                  // инициируем работу с модулем
  uint32_t versiondata = nfc.getFirmwareVersion();                                              // считываем версию прошивки модуля в переменную
  if (! versiondata) {                                                                          // если переменная пуста, то
    Serial.print("Didn't find PN53x board");                                                    // выводим текст в монитор порта
    while (1);                                                                                  // прерываем дальнейшее выполнение блока setup
  }
  Serial.print("Found chip PN5"); Serial.println((versiondata >> 24) & 0xFF, HEX);              // если версия прочитана, то выводим текст и версию чипа в монитор порта
  Serial.print("Firmware ver. "); Serial.print((versiondata >> 16) & 0xFF, DEC);                // выводим текст и версию прошивки до запятой в монитор порта
  Serial.print(','); Serial.println((versiondata >> 8) & 0xFF, DEC);                            // выводим запятую и версию прошивки после запятой
  nfc.setPassiveActivationRetries(0xFF);                                                        // указываем количество попыток на считывание карты
  nfc.SAMConfig();                                                                              // настраиваем модуль на чтение RFID-меток
  Serial.println("Waiting for an ISO14443A card");                                              // выводим текст в монитор порта
}
void loop() {
  boolean success;                                                                              // задаём переменную для считывания номера карты
  uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 };                                                      // задаём переменную для хранения номера считанной карты
  uint8_t uidLength;                                                                            // длина номера карты (4 или 7 байт в зависимости от типа карты)
  success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, &uid[0], &uidLength);               // считываем первую карту для определения размера и назначения типа карты
  if (success) {                                                                                // если номер считан, то
    Serial.println("Found a card!");                                                            // выводим текст в монитор порта о том, что карта найдена
    Serial.print("UID Length: "); Serial.print(uidLength, DEC); Serial.println(" bytes");       // выводим текст и значение длины карты в байтах
    Serial.print("UID Value: ");                                                                // выводим текст в монитор порта
    for (uint8_t i = 0; i < uidLength; i  ) {                                                   // выводим номер карты (в зависимости от длины номера будет меняться и количество раз, которые должен выполнить цикл)
      Serial.print(" 0x"); Serial.print(uid[i], HEX);                                           // выводим текст и побитовый номер карты
    }
    Serial.println("");                                                                         // добавляем символ новой строки
    delay(1000);                                                                                // ждём 1 секунду
  }
  else  {                                                                                       // если карта была не прочитана, то
    Serial.println("Timed out waiting for a card");                                             // выводим текст в монитор порта о том, что время ожидания карты истекло
  }
}

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

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

Adblock
detector