RFID для Arduino ( RFID RC522 )

RFID в названии этой штуки означает технологию радиоидентификации, то есть ничего конкретно не означает. Зато из спецификаций следует, что железка совместима с распространенными RFID карточками с протоколом MIFARE.

Скорее всего, вы неоднократно встречались с такими карточками. Чаще всего — в виде офисного пропуска. Другой яркий пример — бесконтактные билеты для прохода в метро.

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

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

Подробнее про  технологию можно посмотреть здесь и здесь.

RFID-модуль 13.56 МГц с SPI-интерфейсом. В комплекте к модулю идет 2 RFID-метки — в виде карты и брелока.

VUPN6326-5Информация с  сайта продавца:

  • Working current(Потребляемый ток в активном состоянии) :13-26mA/DC 3.3V
  • Idle currentПотребляемый ток в состоянии ожидания:10-13mA/DC 3.3V
  • Sleep current(Ток в режиме сна): <80uA
  • Peak current(Пиковое потребление): <30mA
  • Operating Frequency(Рабочая частота): 13.56MHz
  • Supported card types(Поддержвиаемые типы карт): MIFARE S50, MIFARE S70, MIFARE UltraLight, MIFARE Pro, MIFARE DESfire
  • Product physical characteristics: size: 40mm×60mm
  • Environmental Operating temperature: -20-80 degrees Celsius
  • Environmental Storage Temperature: -40-85 degrees Celsius
  • Relative humidity: relative humidity 5% -95%
  • Module interfaces SPI Parameter
  • Data transfer rate: maximum 10Mbit/s
  •  Основан на микросхеме MFRC522;

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

ПОДКЛЮЧЕНИЕ
RC522 имеет интерфейс SPI, а это значит, что костылей в этой статье не будет, т.к. Arduino имеет его из коробки.

Модуль RC имеет 8 выводов (написаны по порядку расположения на модуле):
SDA (NSS — Slave Select — выбор ведомого SPI)

SCK — Serial Clock — тактовый сигнал, SPI;

MOSI — Master Output Slave Input — данные от ведущего к ведомому, SPI;

MISO — Master Input Slave Output — данные от ведомого к ведущему, SPI;

IRQ — линия прерываний;
GNDGround. Земля=));

RSTReset. Линия сброса.

Ни в коем случае не подключать к пину RESET на Arduino! Данный пин цепляется на цифровой порт с PWM;

VCCПитание. Необходимо 3.3V;
Для подключения к Arduino Uno необходимо воспользоваться следующей распиновкой:
RC522 —> пин Uno
RFID     Arduino Uno
SDA      10
SCK      13
MOSI    11
MISO    12
IRQ       N/C
Gnd       Gnd
RST       9
3.3v       3.3v

ТЕСТОВЫЙ СКЕТЧ

Я бы хотел разделить подключение на софт и хард, но все так тесно переплелось — и вылилось в не очень интересную проблему.

Одним словом, все знают самую распространенную библиотеку RFID для RC522.

Два пина (SS и RST) допускают произвольное подключение и конфигурируются в коде. При этом по умолчанию в коде примера забита конфигурация для Arduino Uno, а если у вас Mega и вы подключали по агитке из ридми или таблички в начале примера, то, разумеется, промахнетесь.

Иными словами, подключение ни по первому, ни по второму варианту, указанному в описании библиотеки, не помогло. Сначала я подумал, что у меня «мертвая плата». Поэтому, несмотря на позднее время, взял себя в руки и распаял гребенку на вторую (я запасливый и купил сразу три). Результат оказался аналогичным, несмотря на то, что я неоднократно проверял подключение по имеющимся на руках «распиновкам».
Для работы с данным модулем есть 2 разных пути:
1. Изучить работу микросхемы, форматы команд и запросов и написать свой софт;
2. Не заморачиваться на первом этапе и воспользоваться готовой библиотекой и примерами.

Первый путь мы отложим до последующих статей, а пока воспользуемся готовой библиотекой, установим ее в Arduino IDE с помощью копирования в папку %путь установки%/libraries/RFID  либо папки с проектом и зальем тестовый скетч:

#include <SPI.h>
#include "RFID.h"

#define SS_PIN 10
#define RST_PIN 9

RFID rfid(SS_PIN, RST_PIN); 

// Setup variables:
 int serNum0;
 int serNum1;
 int serNum2;
 int serNum3;
 int serNum4;

void setup()
{ 
 Serial.begin(9600);
 SPI.begin(); 
 Serial.println("12");
 rfid.init();
 
}

void loop()
{
 
 if (rfid.isCard()) {
 if (rfid.readCardSerial()) {
 if (rfid.serNum[0] != serNum0
 && rfid.serNum[1] != serNum1
 && rfid.serNum[2] != serNum2
 && rfid.serNum[3] != serNum3
 && rfid.serNum[4] != serNum4
 ) {
 /* With a new cardnumber, show it. */
 Serial.println(" ");
 Serial.println("Card found");
 serNum0 = rfid.serNum[0];
 serNum1 = rfid.serNum[1];
 serNum2 = rfid.serNum[2];
 serNum3 = rfid.serNum[3];
 serNum4 = rfid.serNum[4];
 
 //Serial.println(" ");
 Serial.println("Cardnumber:");
 Serial.print("Dec: ");
 Serial.print(rfid.serNum[0],DEC);
 Serial.print(", ");
 Serial.print(rfid.serNum[1],DEC);
 Serial.print(", ");
 Serial.print(rfid.serNum[2],DEC);
 Serial.print(", ");
 Serial.print(rfid.serNum[3],DEC);
 Serial.print(", ");
 Serial.print(rfid.serNum[4],DEC);
 Serial.println(" ");
 
 Serial.print("Hex: ");
 Serial.print(rfid.serNum[0],HEX);
 Serial.print(", ");
 Serial.print(rfid.serNum[1],HEX);
 Serial.print(", ");
 Serial.print(rfid.serNum[2],HEX);
 Serial.print(", ");
 Serial.print(rfid.serNum[3],HEX);
 Serial.print(", ");
 Serial.print(rfid.serNum[4],HEX);
 Serial.println(" ");
 } else {
 /* If we have the same ID, just write a dot. */
 Serial.print(".");
 }
 }
 }
 
 rfid.halt();
}

РезультатСкриншот 2014-06-18 01.16.16

Карта выводит последовательность: 173 , 83 , 182 , 118 , 62, пишем его в обратном порядке :62, 118, 182, 83, 173. Убираем первое число, (контрольная сумма) и остальные переводим в НЕХ и получаем: 76, B6, 53, AD. Соединяем: 76B653AD, инвертируем в DEC и получаем номер карты: 1991660461.

По материалам:

  1. http://mysku.ru/blog/aliexpress/23114.html
  2. http://arduino.ru/forum/apparatnye-voprosy/mifare-rc522-rfid-modul
  3. http://robocraft.ru/blog/3004.html
  4. http://mysku.ru/blog/aliexpress/23114.html
Метки: , , . Закладка Постоянная ссылка.

Комментарии запрещены.