Arduino:Примеры/Гайд по использованию RFID-ридера MFRC522 вместе с Arduino

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

Перевод: Максим Кузьмин (Cubewriter) Контакты:</br>* Skype: cubewriter</br>* E-mail: cubewriter@gmail.com</br>* Максим Кузьмин на freelance.ru
Проверка/Оформление/Редактирование: Мякишев Е.А.


Pixel Art Mini Meow Animated.gif Черновик


Гайд по использованию RFID-ридера MFRC522 вместе с Arduino[1]

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

Описание

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

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

RFID-система состоит из следующих компонентов:

  • Теги (метки). Они встраиваются в объект, который нужно идентифицировать. К примеру, в брелок или электромагнитную карту. У каждого тега есть собственный UID (расшифровывается как «user identifier», т.е. «идентификатор пользователя»)
Tags 1.png
  • Ридер. Это двусторонний радио-приемопередатчик. Он отправляет сигнал тегу, а затем считывает ответ.
Reader 2.png

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

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

Библиотека

Для этого проекта вам понадобится библиотека RFID (создатель – miguelbalboa).

  • Скачайте архив библиотеки отсюда
  • Распакуйте скачанный архив
  • Установите библиотеку в IDE Arduino
  • Перезапустите IDE Arduino

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

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

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

Цепь

RFID-ридер нужно подключить к Arduino следующим образом:

Mifare bb 3.png

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

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

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

Serial-monitor1 4.png

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

Serial-monitor2 5.png

Это информация, считанная с RFID-тега, включая UID, который высвечен желтым цветом. Информация хранится в памяти, которая поделена на сегменты и блоки, которые можно наблюдать на картинке выше. Общий объем памяти составляет 1024 байта, которые поделены на 16 секторов, и каждый сектор защищен двумя разными ключами, A и B.

Запишите где-нибудь UID свой карты – позже он вам понадобится.

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

 1 /*
 2  * 
 3  * Более подробно о проекте на: http://randomnerdtutorials.com/
 4  * Модифицирован Руи Сантосом (Rui Santos)
 5  * 
 6  * Написан FILIPEFLOP
 7  * 
 8  */
 9  
10 #include <SPI.h>
11 #include <MFRC522.h>
12  
13 #define SS_PIN 10
14 #define RST_PIN 9
15 MFRC522 mfrc522(SS_PIN, RST_PIN);   // создаем экземпляр MFRC522 instance.
16  
17 void setup() 
18 {
19   Serial.begin(9600);   // запускаем последовательную коммуникацию
20   SPI.begin();          // инициализируем шину SPI
21   mfrc522.PCD_Init();   // инициализируем MFRC522
22   Serial.println("Approximate your card to the reader...");
23   //  "Приложите карту к ридеру... "
24   Serial.println();
25 
26 }
27 void loop() 
28 {
29   // ищем новые карты:
30   if ( ! mfrc522.PICC_IsNewCardPresent()) 
31   {
32     return;
33   }
34   // выбираем одну из карт:
35   if ( ! mfrc522.PICC_ReadCardSerial()) 
36   {
37     return;
38   }
39   // показываем UID на мониторе порта: 
40   Serial.print("UID tag :");  //  "UID тега: "
41   String content= "";
42   byte letter;
43   for (byte i = 0; i < mfrc522.uid.size; i++) 
44   {
45      Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
46      Serial.print(mfrc522.uid.uidByte[i], HEX);
47      content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
48      content.concat(String(mfrc522.uid.uidByte[i], HEX));
49   }
50   Serial.println();
51   Serial.print("Message : ");  //  "Сообщение: "
52   content.toUpperCase();
53   if (content.substring(1) == "BD 31 15 2B")
54   //  впишите здесь UID тега, которому вы хотите дать доступ 
55   {
56     Serial.println("Authorized access");  //  "Доступ открыт"
57     Serial.println();
58     delay(3000);
59   }
60  
61  else   {
62     Serial.println(" Access denied");  //  "Запрос на доступ отклонен"
63     delay(3000);
64   }
65 }

В этом скетче вам нужно поменять строчку...

if (content.substring(1) == "BD 31 15 2B")

...вписав вместо BD 31 15 2B значение для UID, которое ранее было показано в мониторе порта.

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

Теперь загружаем скетч на Arduino и открываем монитор порта.

Видео

Приложите карту к ридеру, чтобы получить доступ, и вы увидите...

Serial-monitor3 6.png

Но если приложить к ридеру другую карту с другим UID, появится сообщение об отказе в доступе...

Serial-monitor4 7.png

См.также

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