Moduł rejestratora RFID RC522


Tomasz Bartuś



2020-02-15
Moduł rejestratora RFID RC522

1. Odczyt kodów RFID

Wstęp

Coraz częściej w życiu codziennym korzystamy z urządzeń regulujących dostęp do różnych usług za pomocą kart zbliżeniowych PICC czy różnego rodzaju breloczków (Fig. 1). Urządzenia takie nazywane są w skrócie RFID. Urządzenia te do przekazywania danych między sobą wykorzystują pole elektromagnetyczne. Aby doszło do komunikacji musimy mieć jakieś przenośne urządzenie elektroniczne (najczęściej kartę wielkości dowodu osobistego) z układem scalonym wyposarzonym w pamięć z zapisanym identyfikatorem etykiety RFID oraz urządzenie odczytujące te identyfikatory, które możemy nazwać czytnikami RFID. Większość etykiet RFID nie jest wyposażonych w żadne źródło zasilania. Ich uruchomienie następuje po zbliżeniu do czytnika RFID, który jest wyposażony w cewkę generującą pole elektromagnetyczne. Zasięg tego pola jest niewielki i z reguły nie przekracza kilka centymetrów. Wystarcza to jednak aby przekazać energię do zbliżonej etykiety, co pozwala na jej chwilowe uruchomienie. Wspomniana cewka jest jednocześnie anteną, która potrafi odebrać dane z numerem identyfikatora RFID przekazywanym z karty bądź breloka do czytnika. Układy takie doskonale nadają się np. do weryfikacji i kontroli osób wchodzących i wychodzących z pomieszczeń, otwierania zamków itp.

Autoryzacja za pomocą karty RFID
Fig. 1. Autoryzacja za pomocą karty RFID

Współcześnie jednym z najbardzej popularnych urządzeń RFID jest moduł RC522 (Fig. 2). Jest on zbudowany na układzie NXP RC522. Jest zasilany jest napięciem 3,3 V. Komunikuje się poprzez interface I2C (SDA, SCL) i SPI (MOSI, MISO, SCK i SS/CS). Moduł może odczytywać identyfikatory RFID przypisane do kart i breloczków działających na częstotliwości 13,56 MHz i zgodnych ze standardami ISO/IEC 14443 A/MIFARE, MF1xxS20, MF1xxS70, MF1xxS50. Wbudowana antena pozwala na komunikację w zasięgu do 10 cm nawet przez niemetalowe osłony czy obudowy. Aby doszło do komunikacji pomiędzy układem z zapisaną etykietą RFID a czytnikiem, brelok lub karta muszą zostać przyłożone w sposób równoległy do anteny.

Moduł rejestratora RFID RC522 z kartą elektroniczną i brelokiem
Fig. 2. Moduł rejestratora RFID RC522 z kartą elektroniczną i brelokiem

Części

  1. platforma Arduino Nano,
  2. moduł rejestratora RFID RC522 z kartami zbliżeniowymi i brelokami,
  3. moduł przetwornicy impulsowej 2-5V Step-up 5V 2A,
  4. płytka prototypowa,
  5. przewody/mostki.
  6. LCD 16 × 2,
  7. konwerter I2C LCM1602.

Montaż układu

Moduł RFID RC522 jest zasilany napięciem 3,3V ale toleruje logikę 5-voltową i w większości dostępnych aplikacji nie wymaga konwertera poziomów stanów logicznych. Zmontujmy układ korzystając z tabeli połączeń Tab. 1 i schematu z Fig. 3.

Tab. 1. Podłączenie modułu RFID RC522 do mikrokonrolera Arduino Nano
RC522 Arduino Nano
SDA D10
SCK D13
MOSI D11
MISO D12
IRQ -
GND GND
RST D9
3,3V 3,3V

Schemat montażowy rejestratora RFID RC522
Fig. 3. Schemat montażowy rejestratora RFID RC522

Zmontowany układ przedstawia Fig. 4.

Układ rejestratora RFID RC522
Fig. 4. Układ rejestratora RFID RC522

Obsługa układu przez środowisko Arduino wymaga zainstalowania biblioteki MFRC522.

Kod 1. Odczyt kodu RFID

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

#define RST_PIN 9
#define SS_PIN 10

MFRC522 mfrc522(SS_PIN, RST_PIN);

void setup() {
  Serial.begin(9600);
  SPI.begin();
  mfrc522.PCD_Init();
  Serial.println("Odczyt kodu RFID");
}

void loop() {

  if ( mfrc522.PICC_IsNewCardPresent()) {
    if ( mfrc522.PICC_ReadCardSerial()) {
      Serial.print("UID: ");
      for (byte i = 0; i < mfrc522.uid.size; i++) {
        Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
        Serial.print(mfrc522.uid.uidByte[i], HEX);
      }
      Serial.println();
      mfrc522.PICC_HaltA();
    }
  }
}

Działanie

Po przyłożeniu do czytnika przenośnego urządzenia RFID, w oknie monitora portu szeregowego pojawia się 4 liczbowy kod UID (Fig. 5). W oparciu o weryfikację wykrywanych kodów można zbudować pełnowartościowe urządzenie dostępowe do pomieszczeń czy mebli.

Okno monitora portu szeregowego z zarejestrowanymi identyfikatorami urządzeń RFID
Fig. 5. Okno monitora portu szeregowego z zarejestrowanymi identyfikatorami urządzeń RFID

2. Odczyt kodu RFID z wyjściem na LCD

W kolejnym przykładzie wykonano drobną modyfikację pierwszego układu polegającą na dołożeniu do niego wyświetlacza LCD (Fig. 6). Będzie się na nim pojawiał odczytany kod UID.

Układ rejestratora RFID RC522 z wyświatlaniem etykiety UID na ekranie LCD
Fig. 6. Układ rejestratora RFID RC522 z wyświatlaniem etykiety UID na ekranie LCD

Wykorzystamy wyświetlacz LCD 16×2. Aby ograniczyć liczbę połączeń kabelkowych, dodatkowo zastosowano konwerter sygnałów sterujących wyświetlaczem na standard I2C - LCM1602. Magistrala I2C wykorzystuje sygnał danych (SDA) i sygnał zegarowy (SCL). W mikrokontrolerze Arduino Nano są one odpowiednio przypisane do pinów A4 i A5 (Fig. 7). Wykorzystanie magistrali I2C wymaga dołączenia do skryptu obsługującego urządzenie biblioteki Wire.h. Obsługą LCD w standardzie I2C zajmie się z kolei biblioteka LiquidCrystal_I2C.h. W odróżnieniu od poprzedniego przykładu liczby kodu wyświetlane na LCD zostaną przekonwertowane z układu heksadecymalnego na dziesiętny.

Schemat montażowy rejestratora RFID RC522 z LCD
Fig. 7. Schemat montażowy rejestratora RFID RC522 z LCD

Kod 2. Odczyt kodu RFID z wyjściem na wyświetlacz LCD

#include <SPI.h>
#include <MFRC522.h>                        // RC522 module library

#include <Wire.h>                           // I2C interface library
#include <LiquidCrystal_I2C.h>              // LCD I2C library
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

#define RST_PIN 9                           // Define connection of the RST_PIN of the RFID module
#define SS_PIN 10                           // Define connection of the SS_PIN of the RFID module

MFRC522 mfrc522(SS_PIN, RST_PIN);           // Set up mfrc522 on the Arduino

void setup() {
  lcd.begin(16, 2);                         // Initialization the interface to the LCD screen and specify the dimensions (width and height)
  lcd.backlight();                          // Turning on I2C backlight
  lcd.setCursor(0, 0);                      // Set cursor position to the 0 collumn and 0 row
  lcd.print("RFID controler");              // Write the text on LCD
  delay(500);
  lcd.setCursor(0, 1);                      // Set cursor position to the 0 collumn and 1 row
  lcd.print("by Tomek Bartus");             // Write the text on LCD

  SPI.begin();                              // Initialization of the SPI interface
  mfrc522.PCD_Init();                       // Initialize Proximity Coupling Device
  delay(2000);
  lcd.clear();                              // Clear the screen
  lcd.noBacklight();                        // Turning off I2C backlight
}

void loop() {

  if ( mfrc522.PICC_IsNewCardPresent()) {   // True, if RFID tag/card is present 
    if ( mfrc522.PICC_ReadCardSerial()) {   // True, if RFID tag/card was read
      lcd.backlight();                      // Turning on I2C backlight
      lcd.setCursor(0, 0);                  // Set cursor position to the 0 collumn and 0 row
      lcd.print("UID: ");                   // Write the text on LCD
      lcd.setCursor(0, 1);                  // Set cursor position to the 0 collumn and 1 row
      for (byte i = 0; i < mfrc522.uid.size; i++) {             // read id (in parts)
        lcd.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
        lcd.print(mfrc522.uid.uidByte[i], DEC);                 // print uid as dec values
      }
      delay(1000);
      lcd.clear();                          // Clear the screen
      lcd.noBacklight();                    // Turning off I2C backlight
      mfrc522.PICC_HaltA();                 // Stop the reading process
    }
  }
}

Wykorzystane materiały

Botland, 2016. #9 Moduł RFID MF RC522 - obsługa i przykład użycia z Arduino
Boxal J., 2013. Arduino. 65 praktycznych projektów. Wydawnictwo Helion, Gliwice.
swistak, 2018. Arduino - Odczyt tagów RFID RC-522.
 
 

Doktorat

Spis treści
Rozdzialy
Abstrakt [pl]
Abstract [eng]