Study of RFID
Study of RFID
Objectives:
To study the concept of the RFID system.
To study the different types of RFID tags.
To interface the RFID reader with the Arduino board.
To write a program to read the RFID tag and display its Unique ID on the Serial
monitor. Also, compare the Unique ID with the Unique ID which is stored in the
program and if they match, turn the led ON
Software:
Arduino IDE 1.6.9 or higher
Hardware Modules:
Arduino Board
PC / Laptop
RFID Reader
RFID Tag (2)
Theory:
The full form of the RFID is Radio Frequency Identification.
In the RFID system, the wireless communication takes place between the RFID
reader and RFID tag.
For wireless communication, radio waves of different frequencies are used.
Depending on the frequency used, the RFID system is classified into three
different types as
o Low Frequency RFID system
o High Frequency RFID system
o Ultra-high frequency RFID system
We are using the High Frequency RFID system with 13.56 megahertz (MHz) frequency
RFID Tags are classified into three types as
o Active RFID Tag
o Passive RFID Tag
o Semi-passive RFID Tag
We are going to study the Passive RFID tag
This passive RFID tag works on 13.56 mega hertz frequency
So in this system, the RFID readers and RFID tags are tuned to the 13.56 mega
hertz frequency.
Each RFID tag contains a unique ID. The size of this ID is 4 bytes
The RFID Reader contains an IC named MFRC522
The RFID Reader requires only maximum 3.3 volt supply. If more than 3.3 volts supply is
given, then the RFID Reader will be damaged
The range of this RFID reader to read the tag is 3 cm.
This is a passive RFID system. So when the tag comes in the range of the RFID Reader,
the tag gets power from the reader and becomes active. Then the tag sends its
unique ID to the RFID Reader.
RFID Reader reads the unique Id (UID) and sends it to the Arduino board.
To establish the proper communication between the RFID Reader and the
Arduino board, the SPI protocol is used.
This protocol is also called as ‘four wires protocol’ because it requires four wires for
communication
On each microcontroller board, the SPI protocol pins are fixed
So when the SPI protocol is to be used for the communication between the Arduino
UNO board and the any SPI device then the Arduino UNO board pin and the SPI device
pins must be connected as follows,
o The MOSI pin must be connected to the digital pin number 11 of the
Arduino UNO board.
o The MISO pin must be connected to the digital pin number 12 of the
Arduino UNO board.
o The SCK pin must be connected to the digital pin number 13 of the
Arduinov board.
o The CS (SS) pin must be connected to the digital pin number 10 of the
Arduino UNO board. If more slaves are there then more CS pin will be
required.
Safety precautions:
First, make all the connections as per steps given below
Then connect Arduino board to PC/Laptop
Procedure:
Write the program as per the algorithm given below.
Save and compile the program.
Connect the Arduino board to PC/Laptop using USB cable.
Upload the program and check the output.
Algorithm:
Start IDE.
Firstly, download the ‘rfid master’ library from the website, ‘github.com’. This library is
downloaded in the zip format. It contains the file MFRC522.h. So include the MFRC522.h
library.
Include the SPI.h library. It is given in the Arduino IDE. So no need to download it.
Declare three variables to store the pin numbers of SDA, RST, and led pins.
Create an object of the class MFRC522. Pass the SDA and RST pins as the parameters to
this object.
Declare an integer variable to use in the ‘For loop’.
In the void setup(),
Set the baud rate as 9600 to use the Serial monitor.
Call the SPI.begin() function to initialize the SPI communication.
Use the function , “mfrc522.PCD_Init()” to initialize the RFID Reader.
Set the mode of the ledpin as OUTPUT.
In the void loop() function,
Use the function, “!mfrc522.PICC_IsNewCardPresent” in the ‘if’ condition to check if
the RFID tag is present near the RFID reader.
When the tag is detected, again use the if condition and the,
“!mfrc522.PICC_ReadCardSerial()” in it to read all the 4 bytes of the tag.
Use the ‘For loop’ to display all the 4 bytes on the Serial monitor.
In the for loop, compare the integer variable with “mfrc522.uid.size” to print all the
4 bytes.
In the Serial.print function, pass the parameter. ‘mfrc522.uid.uidByte*i+’.
After displaying each byte give space so as to separate two bytes.
For example, the Unique ID of the RFID Tag will be displayed as follows,
220 space 182 space 122 space 37
In the next program, compare the each byte with the bytes of your tag.
If all the bytes match then turn the LED ON for 5 seconds and then make it OFF.
Observation:
See the UID of your RFID Tag on the Serial monitor.
Compare multiple RFID tags and check for which tag the led turns ON.
Programs
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 rfid(SS_PIN, RST_PIN);
byte a, b, c, d;
void setup()
{
Serial.begin(9600);
SPI.begin();
rfid.PCD_Init(); //Proximity Coupling Device (Reader)
Serial.println("Take your Tag near the reader...");
}
void loop()
{
//Proximity Integrated Circuit Card (Tag)
if ( ! rfid.PICC_IsNewCardPresent())
{
return;
}
if ( ! rfid.PICC_ReadCardSerial())
{
return;
}
a = rfid.uid.uidByte[0];
b = rfid.uid.uidByte[1];
c = rfid.uid.uidByte[2];
d = rfid.uid.uidByte[3];
Serial.println("UID tag :");
Serial.print(" ");
Serial.print(a, DEC);
Serial.print(" ");
Serial.print(b, DEC);
Serial.print(" ");
Serial.print(c, DEC);
Serial.print(" ");
Serial.print(d, DEC);
Serial.println();
Serial.println();
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 rfid(SS_PIN, RST_PIN);
int i;
int buzzPin = 5;
byte a, b, c, d;
void setup()
{
Serial.begin(9600);
SPI.begin();
rfid.PCD_Init();//Proximity Coupling Device (Reader)
Serial.println("Take your Tag near the reader...");
pinMode(buzzPin, OUTPUT);
}
void loop()
{
//Proximity Integrated Circuit Card (Tag)
if ( ! rfid.PICC_IsNewCardPresent())
{
return;
}
if ( ! rfid.PICC_ReadCardSerial())
{
return;
}
a = rfid.uid.uidByte[0];
b = rfid.uid.uidByte[1];
c = rfid.uid.uidByte[2];
d = rfid.uid.uidByte[3];