Arduino:Примеры/Защищенный доступ с помощью RFID-ридера MFRC522 и Arduino

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.



Защищенный доступ с помощью RFID-ридера MFRC522 и Arduino[1]

Эта статья рассказывает, как использовать RFID-ридер MFRC522. Сначала я сделаю беглый обзор устройства, а потом покажу проект, использующий MFRC522 вместе с платой Arduino.

Описание

Аббревиатура RFID означает «radio-frequency identification», что переводится как «радиочастотная идентификация». Это технология, которая использует электромагнитные поля для передачи данных на короткие дистанции. Она применяется, к примеру, для идентификации людей, осуществления финансовых транзакций и т.д.

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

Система, работающая по технологии RFID, состоит из следующих элементов:

  • Теги. Ими оснащаются объекты, которые нужно идентифицировать. Это может быть, к примеру, брелок или электромагнитная карта. Каждый тег имеет собственный идентификатор (UID от «user identifier»).
  • Ридер. Это двухсторонний трансивер, который отправляет сигнал тегу и считывает ответ от него.

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

  • Входное напряжение: 3,3 вольта
  • Цена: 4 доллара
  • Частота: 13,56 МГц

Библиотека

Для этого проекта понадобится библиотека RFID. Чтобы установить ее, проделайте следующее:

  • Кликните здесь, чтобы скачать ZIP-архив с библиотекой (она написана пользователем miguelbalboa).
  • Распакуйте ZIP-архив
  • Установите библиотеку RFID в IDE Arduino
  • Перезапустите IDE Arduino

Подключение контактов

  • Контакт SDA на RFID-ридере – к цифровому контакту 10 на Arduino Uno
  • Контакт SCK – к цифровому контакту 13
  • Контакт MOSI – к цифровому контакту 11
  • Контакт MISO – к цифровому контакту 12
  • Контакт IRQ – не подключен
  • Контакт GND – к контакту GND
  • Контакт RST – к цифровому контакту 9
  • Контакт 3.3V – к контакту 3.3V

Внимание: RFID-ридер нужно питать 3,3 вольтами!

Схема

Считывание данных с RFID-тега

Подключив компоненты друг к другу, кликните в IDE Arduino по Файл > Примеры > MFRC522 > Dumpinfo (File > Examples > MFRC522 > Dumpinfo) и загрузите код на плату Arduino. После установки библиотеки «RFID» нужный скетч уже будет находиться в IDE Arduino.

Затем откройте монитор порта IDE Arduino. Вы должны увидеть примерно следующее:

Приложите RFID-карту или брелок к ридеру. Держите их близко друг к другу, пока монитор порта не покажет всю необходимую информацию:

Это информация, считанная с карты, включая UID, который выделен желтым цветом. Информация хранится в памяти, которая – как можно видеть на картинке выше – поделена на сегменты и блоки.

Всего у нас 1024 байта данных, хранящиеся в 16 сегментах, и каждый сегмент защищен двумя разными ключами – A и B.

Запишите или запомните UID карты, т.к. он нам еще понадобится.

Загрузите на Arduino код, показанный ниже:

/*
 * 
 * Более подробно о проекте на: http://randomnerdtutorials.com/
 * Модифицирован Руи Сантосом (Rui Santos)
 * 
 * Создан пользователем FILIPEFLOP
 * 
 */
 
#include <SPI.h>
#include <MFRC522.h>
 
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);   // создаем экземпляр MFRC522
 
void setup() 
{
  Serial.begin(9600);   // запускаем последовательную коммуникацию 
  SPI.begin();          // инициализируем шину SPI
  mfrc522.PCD_Init();   // инициализируем MFRC522
  Serial.println("Approximate your card to the reader...");
             //  "Приложите карту к ридеру..."
  Serial.println();

}
void loop() 
{
  // ищем новые карты:
  if ( ! mfrc522.PICC_IsNewCardPresent()) 
  {
    return;
  }
  // выбираем одну из карт:
  if ( ! mfrc522.PICC_ReadCardSerial()) 
  {
    return;
  }
  // показываем UID в мониторе порта:
  Serial.print("UID tag :");  //  "UID тега: " 
  String content= "";
  byte letter;
  for (byte i = 0; i < mfrc522.uid.size; i++) 
  {
     Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
     Serial.print(mfrc522.uid.uidByte[i], HEX);
     content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
     content.concat(String(mfrc522.uid.uidByte[i], HEX));
  }
  Serial.println();
  Serial.print("Message : ");
  content.toUpperCase();
  if (content.substring(1) == "ЗАМЕНИТЕ СВОИМ UID") 
  // впишите здесь UID одной или нескольких карт,
  // которым хотите дать доступ; например, "BD 31 15 2B"

  {
    Serial.println("Authorized access");  //  "Доступ разрешен"
    Serial.println();
    delay(3000);
  }
 
 else   {
    Serial.println(" Access denied");    //  " Доступ отклонен"
    delay(3000);
  }
}

Обратите внимание на эту строчку:

if (content.substring(1) == "ЗАМЕНИТЕ_СВОИМ_UID")

Вам нужно вписать вместо ЗАМЕНИТЕ_СВОИМ_ID собственный UID.

Демонстрация

Теперь загружаем код на Arduino и открываем монитор порта:

[Видео]

Приближаем карту к RFID-ридеру и видим...

Но если приблизить к RFID-ридеру карту с другим тегом, доступ будет отклонен:

См.также

Внешние ссылки