Rfid rc522. Датчики. Ардуино

rfid модуль Ардуино
Rfid модуль подключенный к Ардуино
Rfid модуль подключенный к Ардуино

Привет! В стартовом наборе для Ардуино есть еще несколько модулей, на которые нужно сделать обзоры. Сегодня это будет модуль rfid rc522.

RFID (Radio Frequency IDentification, радиочастотная идентификация) — способ автоматической идентификации объектов, в котором посредством радиосигналов считываются или записываются данные, хранящиеся в так называемых транспондерах, или RFID-метках.

Для выполнения этого урока нам понадобятся

  • Ардуино UNO
  • Макетная плата
  • Перемычки
  • Модуль rfid rc522
  • Несколько rfid меток
  • Кабель USB

Проект и схема

Для rfid модулей уже написана специальная библиотека. Так что сегодня мы просто соберем схему на макетной плате и посмотрим примеры скетчей для работы с метками и считывателем.

Но сначала соберем схему на макетной плате. Rfid модуль имеет 8 контактов. И работает от 3.3в. Контакт IRQ используется для прерываний, его мы использовать не будем.

Принципиальная схема подключения rfid модуля
Принципиальная схема подключения rfid модуля

RFID RC522

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

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

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

  • Основан на микросхеме MFRC522
  • Напряжение питания: 3,3 В
  • Потребляемый ток: 13–26 мА
  • Рабочая частота: 13,56 MГц
  • Дальность считывания: 0~60 мм
  • Интерфейс: SPI, максимальная скорость передачи 10 МБит/с
  • Размер: 40×60 мм

Контакты

  • VCC — Питание 3.3V
  • RST — Reset. Линия сброса. Данный пин цепляется на цифровой порт с PWM
  • GND — Ground
  • MISO — Master Input Slave Output — данные от ведомого к ведущему, SPI
  • MOSI — Master Output Slave Input — данные от ведущего к ведомому, SPI
  • SCK — Serial Clock — тактовый сигнал, SPI
  • NSS — Slave Select — выбор ведомого, SPI
  • IRQ — линия прерываний

Программа

Для работы с модулем нужно установить в IDE библиотеку MFRC522.h. Используйте менеджер библиотек для поиска.

После установки в библиотеке примеров будут доступны скетчи для примеров работы с модулем. Используем один из этих примеров.

Откроем меню File -> Examples -> RC522 -> ReadNUID

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

Информация с rfid карты
Информация с rfid карты

Здесь мы видим тип rfid метки и уникальный код.

Полный текст программы

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

#define SS_PIN 10
#define RST_PIN 9
 
MFRC522 rfid(SS_PIN, RST_PIN); // Instance of the class

MFRC522::MIFARE_Key key; 

// Init array that will store new NUID 
byte nuidPICC[4];

void setup() { 
  Serial.begin(9600);
  SPI.begin(); // Init SPI bus
  rfid.PCD_Init(); // Init MFRC522 

  for (byte i = 0; i < 6; i++) {
    key.keyByte[i] = 0xFF;
  }

  Serial.println(F("This code scan the MIFARE Classsic NUID."));
  Serial.print(F("Using the following key:"));
  printHex(key.keyByte, MFRC522::MF_KEY_SIZE);
}
 
void loop() {

  // Reset the loop if no new card present on the sensor/reader. This saves the entire process when idle.
  if ( ! rfid.PICC_IsNewCardPresent())
    return;

  // Verify if the NUID has been readed
  if ( ! rfid.PICC_ReadCardSerial())
    return;

  Serial.print(F("PICC type: "));
  MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
  Serial.println(rfid.PICC_GetTypeName(piccType));

  // Check is the PICC of Classic MIFARE type
  if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&  
    piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
    piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
    Serial.println(F("Your tag is not of type MIFARE Classic."));
    return;
  }

  if (rfid.uid.uidByte[0] != nuidPICC[0] || 
    rfid.uid.uidByte[1] != nuidPICC[1] || 
    rfid.uid.uidByte[2] != nuidPICC[2] || 
    rfid.uid.uidByte[3] != nuidPICC[3] ) {
    Serial.println(F("A new card has been detected."));

    // Store NUID into nuidPICC array
    for (byte i = 0; i < 4; i++) {
      nuidPICC[i] = rfid.uid.uidByte[i];
    }
   
    Serial.println(F("The NUID tag is:"));
    Serial.print(F("In hex: "));
    printHex(rfid.uid.uidByte, rfid.uid.size);
    Serial.println();
    Serial.print(F("In dec: "));
    printDec(rfid.uid.uidByte, rfid.uid.size);
    Serial.println();
  }
  else Serial.println(F("Card read previously."));

  // Halt PICC
  rfid.PICC_HaltA();

  // Stop encryption on PCD
  rfid.PCD_StopCrypto1();
}
void printHex(byte *buffer, byte bufferSize) {
  for (byte i = 0; i < bufferSize; i++) {
    Serial.print(buffer[i] < 0x10 ? " 0" : " ");
    Serial.print(buffer[i], HEX);
  }
}
void printDec(byte *buffer, byte bufferSize) {
  for (byte i = 0; i < bufferSize; i++) {
    Serial.print(buffer[i] < 0x10 ? " 0" : " ");
    Serial.print(buffer[i], DEC);
  }
}

Клонирование ключа от домофона

Мой rfid ключ от домофона, к сожалению, не считывается данным модулем. Вероятно, он более старой модели Em Marin и работает на частоте 125КГц. Но ключи Mifare можно клонировать и перезаписывать.

Заключение

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

Где купить

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

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