Магнитный ключ RFID-RC522

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

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

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

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

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

Характеристики модуля RC522:

1. Потребляемый ток в активном состоянии:13-26mA/DC 3.3V;
2. Потребляемый ток в состоянии ожидания:10-13mA/DC 3.3V;
3. Ток в режиме сна:<80uA;
4. Пиковое потребление:<30mA;
5. Рабочая частота:13.56MHz;
6. Поддержвиаемые типы карт: MIFARE S50, MIFARE S70, MIFARE UltraLight, MIFARE Pro, MIFARE DESfire;
7. Размер: 40mm?60mm;
8. Температура, при которой работает модуль: от -20 до +80 С*;
9. Температура, в которой надо хранить модуль: от -40 до +85 С*;
10 .Относительная влажность воздуха: от 5% до 95%;
11. Модуль интерфейсов и параметров SPI;
12. Скорость передачи данных: максимум 10Мбит/с;
13. Основан на микросхеме MFRC522.

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

Подключение модуля:

Модуль RC имеет 8 выводов (написаны по порядку расположения на модуле):

  • SDA (NSS) — выбор ведомого SPI;
  • SCK — тактовый сигнал, SPI;
  • MOSI — данные от ведущего к ведомому, SPI;
  • MISO — данные от ведомого к ведущему, SPI;
  • IRQ — линия прерываний;
  • GND — Земля;
  • RST — Линия сброса. Ни в коем случае не подключать к пину RESET на Arduino! Данный пин цепляется на цифровой порт с PWM;
  • VCC — Питание. Необходимо 3.3V;

Для подключения к Arduino Uno необходимо воспользоваться следующей распиновкой:

  • SDA — 10 pin;
  • SCK — 13 pin;
  • MOSI — 11 pin;
  • MISO — 12 pin;
  • IRQ — N/C;
  • Gnd — Gnd;
  • RST — 9 pin;
  • 3.3v — 3.3v.

Распиновка.

В первую очередь подключим его к Arduino:
1. SDA — 10 цифровой
2. SCK — 13 цифровой
3. MOSI — 11 цифровой
4. MISO — 12 цифровой
5. IRQ — не подключаем
6. GND — GND
7. RST — 9 цифровой
8. VCC — 3.3V
Далее качаем библиотеку для работы с ним: RFID library
Для начала просто считаем адрес поднесенной карты и выведем его в порт. Скоро в статью добавится пример чтения и записи данных.

#include SPI.h
#include RFID.h

#define SS_PIN 10
#define RST_PIN 9

RFID rfid(SS_PIN, RST_PIN);

int serNum0;
int serNum1;
int serNum2;
int serNum3;
int serNum4;

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

void loop()
{
// Если обнаружена карта
if (rfid.isCard()) {
// Считываем адрес
if (rfid.readCardSerial()) {
// Выводим его в порт в десятичном представлении
Serial.println("Card number:");
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(" ");
}
}
rfid.halt();
}

Вот что у нас получилось:

Программный код включения и выключения светодиода при подносе ключа:

#include SPI.h
#include RFID.h

#define SS_PIN 10
#define RST_PIN 9

RFID rfid(SS_PIN, RST_PIN);

int count=0;
// Setup variables:
int serNum0;
int serNum1;
int serNum2;
int serNum3;
int serNum4;

void setup()
{
Serial.begin(9600);
SPI.begin();
rfid.init();
pinMode(8,OUTPUT);
}

void loop()
{

if (rfid.isCard()) {
if (rfid.readCardSerial()) {
if ((rfid.serNum[0] == 18
    rfid.serNum[1] == 130
    rfid.serNum[2] == 144
    rfid.serNum[3] == 85
    rfid.serNum[4] == 85
)
     (count==0)) {
digitalWrite(8,HIGH);
count=1;
delay(1500);
}
else if((rfid.serNum[0] == 18
     rfid.serNum[1] == 130
     rfid.serNum[2] == 144
     rfid.serNum[3] == 85
     rfid.serNum[4] == 85
)
    (count==1)){
digitalWrite(8,LOW);
count=0;
delay(1500);
}
}
}

rfid.halt();
}

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

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