KKM: RFID reader MFRC-522

Početnik si s Croduinom. Ili s elektronikom? Za oko ti je zapeo određeni modul, ali ne znaš kako ga koristiti? Bez brige, tu je KKM! Kako Koristiti Module (KKM) je serija blog tutorijala e-radionice na kojoj ćeš pronaći sve što ti treba kako bi započeo rad sa svojim omiljenim modulom. Tutorijali obuhvaćaju: tehničke karakteristike, princip rada, upute kako povezati modul s Croduinom te osnovni kod. Sve ostalo prepuštamo tebi na maštu.

UVOD

U ovoj lekciji upoznat ćemo se s još jednom tehnologijom koja omogućava bežičan prijenos informacije. Iako se koristi na vrlo malim udaljenostima, zbog svoje pouzdanosti i otpornosti na kvar nalazi svoju ulogu u mnogim dijelovima modernog života. Od praćenja dobara u transportu sve do kontroliranja pristupa objektima.

13.56 MHz RFID tehnologija
• IC : Philips MF RC522
• Napon : 3.3V
• Struja : 10mA(idle), 26mA(active)
• Daljina očitanja od senzora : <5cm (s tagovima koji dolaze uz ovaj čitač)
• Dolazi s pasivnom RFID karticom i privjeskom
• Dolazi s ravnim i savijenim headerima, nezalemljenim.

KAKO RADI?

MFRC522 je integrirani IC za beskontaktnu komunikaciju na 13.56 MHz. Ovaj čip upravlja antenom koja je dizajnirana za čitanje i slanje podataka. Bazna stanica, tj. RFID čitač sastoji se od antene, RF modula te kontrolne jedinice. RFID tagovi i kartice imaju sličnu konstrukciju, no bez aktivnih komponenti, što znači da ne sadrže nikakve baterije niti izvore napajanja. Sastoje se samo od antene i mikročipa.
Komunikacija se odvija na sljedeći način. Bazna stanica (antena) konstantno odašilje elektromagnetske valove. Kada se RFID kartica ili tag približi bazi na udaljenost od 10-ak cm, utjecajem elektromagnetskog polja na prijemnoj anteni će se inducirati napon koji služi kao izvor napajanja ugrađenom mikročipu. Sada kada kartica ili tag imaju energiju potrebnu za normalan rad, ugrađeni čipovi manipuliraju teretom tako da bazna stanica može čitati niz jedinica i nula.

KAKO POVEZATI?

Modul jednostavno povežite s vašim Croduinom preko SPI komunikacije. RST i SS je moguće u kodu izmijeniti po potrebi. Bitno je napomenuti da modul radi na 3.3 V. Također, LEDicama dodajte otpornike manje vrijednosti (npr 470 Ohma) i pazite na polaritet!.
RST ====> 9
SDA(SS) ====> 10
MOSI ====> 11
MISO ====> 12
SCK ====> 13
Vcc ====> +3V3
GND ====> GND
crvena LEDica ====> 8
zelena LEDica ====> 7


ARDUINO KOD

Nakon što smo uspješno povezali modul potrebno je skinuti MFRC522 library i instalirati ga u Arduino IDE. Ovaj library dolazi sa nekoliko dobrih primjera iz kojih možemo naučiti kako koristiti modul. Ako trebate pomoć pri instalaciji librarija, pogledajte upute na linku.
Kako svaki RFID tag ili kartica imaju svoj jedinstveni identifikacijski set znamenaka, poznat kao UID (engl. Unique Identifier) možemo to iskoristiti u projektu da na primjer, otključavamo vrata i omogućavamo korisniku ulaz, a neregistriranim korisnicima zabranjuje ulaz. To ćemo u primjeru pokazati pomoću dvije LEDice. Kada korisnik prisloni važeću karticu ili tag zasvjetlit će zeleno, odnosno taj signal možemo iskoristiti za okidanje neke druge funkcije, npr. servo koji će otključavati bravu, a kada je prislonjen neregistrirani tag ili kartica signalizirat će se crvenim svjetlom, tj. zabrana pristupa.

#include "SPI.h"
#include "MFRC522.h"

#define RST_PIN 9   
#define SS_PIN  10  
#define rfid_green  7
#define rfid_red  8      

MFRC522 mfrc522(SS_PIN, RST_PIN); 

String read_rfid;

// ovdje dodajte kartice ili tagove koji omogućavaju pristup
// kako biste saznali UID kartice/taga isprobajte prvo sketch "DumpInfo" i prislonite karticu
// ili tag čitaču
// na serial monitoru će vam se između ostaloga ispisati i UID kartice/taga
String rfid_card = "70bf602b";  
String rfid_tag = "ccc94683";

void setup() {
    Serial.begin(9600);      
    while (!Serial);          
    SPI.begin();               
    mfrc522.PCD_Init();         
    pinMode(rfid_green, OUTPUT);
    pinMode(rfid_red, OUTPUT);
}

void dump_byte_array(byte *buffer, byte bufferSize) {
    read_rfid="";
    for (byte i = 0; i < bufferSize; i++) {
        read_rfid += String(buffer[i], HEX);
    }
}

void open_lock() {
  digitalWrite(rfid_red, LOW);
  digitalWrite(rfid_green, HIGH);
  delay(2000);
  digitalWrite(rfid_green,LOW);
}

void deny_access(){
  digitalWrite(rfid_green, LOW);
  digitalWrite(rfid_red, HIGH);
  delay(2000);
  digitalWrite(rfid_red,LOW);
}

void loop() {
  if ( ! mfrc522.PICC_IsNewCardPresent())
    return;
        
  if ( ! mfrc522.PICC_ReadCardSerial())
    return;

  dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size);
    
  Serial.println(read_rfid);
    
  if (read_rfid == rfid_card) {
    open_lock();
  }
  else{
    deny_access();
  }
}

Leave a Reply