Lesson 29 RFID Entrance Guard System

Share for us

Introduction

RFID is short for radio frequency identification. It is a wireless application to transfer data in the purpose of identifying and tracking tags. In this experiment, we will use an RFID module, a relay, and an I2C LCD1602 to assemble an entrance guard system.

Components

– 1 * SunFounder Uno board

– 1 * USB data cable

– 1 * RFID module

– 1 * RFID key tag

– 1 * Relay

– 1 * I2C LCD1602

– Several jumper wires

– 1 * Breadboard

Experimental Principle

First, you need to know the ID of the RFID key tag and write the ID to the rfidTest file. Compile the code. We can see “Welcome!” display on the I2C LCD1602. Swipe the RFID key ring on the RFID module. If the password is correct, the normally open contact of the relay will be closed and the LCD will display a string “ID:5AE4C955” “hello SunFounder”, and then “Welcome!” two seconds later; if the password is incorrect, the normally open contact of the relay will be disconnected and the LCD will display a string “Hello unknown guy” , and then “Welcome!” two seconds later

Note: For this module, please use a 3.3V power supply, or it will get burnt.

Experimental Procedures

Step 1: Build the circuit

The wiring between RFID and SunFounder Uno is as follows:

RFIDSunFounder Uno
VCC3.3V
RST2
GNDGND
MISO3
MOSI4
SCK5
NSS6
IRQ7

The wiring between I2C LCD1602 and SunFounder Uno is as follows:

I2C LCD1602SunFounder Uno
GNDGND
VCC5v
SDAA4
SCLA5

The wiring between Relay Module and SunFounder Uno is as follows:

Relay ModuleSunFounder Uno
SIG8
VCC5V
GNDGND

Step 2: Open the getId file with Arduino IDE (Please refer to the example code in LEARN -> Get Tutorials on our website). Compile the code.

Note: Here you need to add a library. Refer to the description in Lesson 4 previously in the manual.

Step 3: Upload the sketch to the SunFounder Uno board

Then place the RFID key tag in the induction zone of the RFID module. You will see the following values printed on Serial Monitor:

Step 4: Now, you may know the ID of your RFID key tag (e.g. my magnetic card ID is 5AE4C955).

Open the rfidTest file and replace the ID in the sketch with the ID you just note down (divide the ID into four parts and fill them according to the following format), as follows:

Step 5: Upload the sketch into the SunFounder Uno board

Now, swipe the RFID key tag on the RFID module. If the password is correct, the LCD will display a string “ID:5AE4C955” “Hello SunFounder”, and then display “Welcome!” two seconds later. If the password is incorrect, the LCD will display a string “Hello unknown guy”, and then display “Welcome!” two seconds later.

Swipe the tag:

getId.ino

/*******************************************
* function:get the id of RFID key
* RFID   Uno r3
* VCC    3.3V
* RST    2
* GND    GND
* MISO   3
* MOSI   4
* SCK    5
* NSS    6
* IRQ    7
****************************************/#include”rfid1.h”
RFID1 rfid;//create a variable type of RFID1uchar serNum[5]; // array to store your IDvoid setup()
{
  Serial.begin(9600); //initialize the serial
  rfid.begin(7, 5, 4, 3, 6, 2);     //rfid.begin(IRQ_PIN,SCK_PIN,MOSI_PIN,MISO_PIN,NSS_PIN,RST_PIN)
  delay(100);//delay 1s
  rfid.init(); //initialize the RFID
}
void loop()
{
  uchar status;
  uchar str[MAX_LEN];
  // Search card, return card types
  status = rfid.request(PICC_REQIDL, str);
  if (status != MI_OK)
  {
    return;
  }
  // Show card type
  rfid.showCardType(str);
  //Prevent conflict, return the 4 bytes Serial number of the card
  status = rfid.anticoll(str);  if (status == MI_OK)
  {
    Serial.print(“The card’s number is: “);
    memcpy(serNum, str, 5);
    rfid.showCardID(serNum);//show the card ID
    Serial.println();
    Serial.println();
  }
  delay(500);  rfid.halt(); //command the card into sleep mode
}

rfidTest.ino

/*******************************************
* name:RFID Entrance Guard System
* function:first: get the id of RFID key by the getid.ino file ,then divide the ID into four parts and fill them in loop() function
* swipe the RFID key ring on the RFID module.
* If the password is correct, the normally open contact of the relay will be closed and the LCD will display a string “ID:5AE4C955” “hello SunFounder”,
* and then “Welcome!” two seconds later;
* if the password is incorrect, the normally open contact of the relay will be disconnected and the LCD will display a string “Hello unknown guy” ,
* and then “Welcome!” two seconds later
* connection:
* RFID   SunFounder Uno
* VCC     3.3V
* RST     2
* GND     GND
* MISO    3
* MOSI    4
* SCK     5
* NSS     6
* IRQ     7
****************************************/
//Email:support@sunfounder.com
//Website:www.sunfounder.com#include”rfid.h”
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
LiquidCrystal_I2C lcd(0x27,16,2);
RFID rfid; //create a variable type of RFID
#define relayPin 8 //relay module attach to pin8uchar serNum[5]; // array to store your IDvoid setup()
{
  lcd.init(); //initialize lcd
  lcd.backlight(); //turn on the backlight
  Serial.begin(9600);
  rfid.begin(7,5,4,3,6,2); //IRQ_PIN,SCK_PIN,MOSI_PIN,MISO_PIN,NSS_PIN,RST_PIN
  delay(100);
  rfid.init(); //initialize the RFID
  pinMode(relayPin, OUTPUT); //set relayPin as OUTPUT
  digitalWrite(relayPin,LOW); //and high level
  //Serial.begin(9600);
  lcd.setCursor(0,0);
  lcd.print(” Welcome! “); //print” Welcome! “
  delay(2000); //delay 2s}
void loop()
{
  uchar status;
  uchar str[MAX_LEN];
  // Search card, return card types
  status = rfid.request(PICC_REQIDL, str);
  if (status != MI_OK)
  {
    return;
  }
  // Show card type
  rfid.showCardType(str);
  //Prevent conflict, return the 4 bytes Serial number of the card
  status = rfid.anticoll(str);  if (status == MI_OK)
  {
    //Serial.print(“The card’s number is: “);
    lcd.setCursor(0,0);
    lcd.print(” ID: “);
    memcpy(serNum, str, 5);
    rfid.showCardID(serNum); //show the card ID
    // Serial.println();    // Check people associated with card ID
    uchar* id = serNum;
    if( id[0]==0x4B && id[1]==0xE6 && id[2]==0xD1 && id[3]==0x3B )
    {
      digitalWrite(relayPin,HIGH);
      // Serial.println(“Hello Dannel!”);
      lcd.setCursor(0,1);
      lcd.print(” Hello Dannel! “);
      delay(2000);
      lcd.clear();
      digitalWrite(relayPin,LOW);
    }
    //if the card id is 5AE4C955,then relay connect
    else if(id[0]==0x5A && id[1]==0xE4 && id[2]==0xC9 && id[3]==0x55)
    {
      digitalWrite(relayPin,HIGH);
      //Serial.println(“Hello SunFounder”);
      lcd.setCursor(0,1);
      lcd.print(“Hello SunFounder”);
      delay(2000);
      lcd.clear();
      digitalWrite(relayPin,LOW);
    }
    else
    {      //Serial.println(“Hello unkown guy!”);
      lcd.setCursor(0,1);
      lcd.print(“Hello unkown guy”);
      delay(2000);
      lcd.clear();
    }
  }
  lcd.setCursor(0,0);
  lcd.print(” Welcome! “);
  delay(2000);
  rfid.halt(); //command the card into sleep mode
}