티스토리 뷰

728x90

1. RFID-RC522

  


  위와 같이 생긴 NFC 모듈입니다. 혹시나 구매하시기전 글을 보고 계신다면 납땜이 되어 있지 않는 제품을 파는 곳이 많으니 주의하시기 바랍니다.



2. 라이브러리 및 셈플코드

  

1. RFID 라이브러리 파일 

AddicoreRFID.zip


2. RFID Master 라이브러리 파일

rfid-master.zip


압축파일을 아두이노 라이브러리 폴더(C:\Program Files (x86)\Arduino\libraries) 안에 압축을 풉니다. 



3. 회로 구성 및 동작 테스트

  

  우선 센서 동작 여부를 확인하는 셈플을 돌려보겠습니다. 우선 아래와 같이 회로를 구성합니다.



위 사진과 같이 모듈을 두었다 하였을 시 위쪽부터 아래표와 같습니다.


신호 

 핀

 SPI SDA

 10 

 SPI SCK

 13 

 SPI MISO

 12 

 SPI MOSI

 11 

 SPI IRQ

 --- 

 GND

 GND 

 Reset

 9 

 VCC

 3.3V 

위 사진처럼 회로를 구성하셨다면 이전에 다운받았던 rfid-master 폴더안의 examples폴더의DumpInfo.ino를 실행시킵니다. 아두이노 툴에서 바로 불러오셔도 되고 직접 파일을 실행시키셔도 됩니다.

위와 같이 동작을 한다면 모듈에 아무런 문제가 없이 잘 동작한다는 뜻입니다.



4. 셈플코드(Addicore_RFID_Example.ino)

  

  NFC모듈의 주기능은 카드를 확인하고 승인해 주는 것입니다. 아래 코드는 해당 기능을 구현한 Sample 코드이며 AddicoreRFID 폴더안의 Sample입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include <AddicoreRFID.h>
#include <SPI.h>
 
#define uchar   unsigned char
#define uint    unsigned int
 
//4 bytes tag serial number, the first 5 bytes for the checksum byte
uchar serNumA[5];
 
uchar fifobytes;
uchar fifoValue;
 
AddicoreRFID myRFID; // create AddicoreRFID object to control the RFID module
 
/////////////////////////////////////////////////////////////////////
//set the pins
/////////////////////////////////////////////////////////////////////
const int chipSelectPin = 10;
const int NRSTPD = 9;
 
//Maximum length of the array
#define MAX_LEN 16
 
void setup() {               
   Serial.begin(9600);                        // RFID reader SOUT pin connected to Serial RX pin at 9600bps
  
  // start the SPI library:
  SPI.begin();
   
  pinMode(chipSelectPin,OUTPUT);              // Set digital pin 10 as OUTPUT to connect it to the RFID /ENABLE pin
    digitalWrite(chipSelectPin, LOW);         // Activate the RFID reader
  pinMode(NRSTPD,OUTPUT);                     // Set digital pin 10 , Not Reset and Power-down
    digitalWrite(NRSTPD, HIGH);
 
  myRFID.AddicoreRFID_Init(); 
}
 
void loop()
{
  uchar i, tmp, checksum1;
    uchar status;
  uchar str[MAX_LEN];
  uchar RC_size;
  uchar blockAddr;  //Selection operation block address 0 to 63
  String mynum = "";
  str[1] = 0x4400;
   
    //Find tags, return tag type
    status = myRFID.AddicoreRFID_Request(PICC_REQIDL, str);
    if (status == MI_OK)
    {
          Serial.println("RFID tag detected");
            Serial.print(str[0],BIN);
          Serial.print(" , ");
            Serial.print(str[1],BIN);
          Serial.println(" ");
    }
 
    //Anti-collision, return tag serial number 4 bytes
    status = myRFID.AddicoreRFID_Anticoll(str);
    if (status == MI_OK)
    {
      checksum1 = str[0] ^ str[1] ^ str[2] ^ str[3];
      Serial.println("The tag's number is  : ");
      //Serial.print(2);
      Serial.print(str[0]);
      Serial.print(" , ");
      Serial.print(str[1],BIN);
      Serial.print(" , ");
      Serial.print(str[2],BIN);
      Serial.print(" , ");
      Serial.print(str[3],BIN);
      Serial.print(" , ");
      Serial.print(str[4],BIN);
      Serial.print(" , ");
      Serial.println(checksum1,BIN);
       
      //이 아래 코드를 수정하여 자기 카드인지 아닌지 확인합니다.
      if(str[0] == 156)  //현재 코드에서는 가장 첫번째(str[0])만으로 비교하는데 늘리셔도 됩니다.                    
      {                  //또한 코드에는 '156'으로 되어있지만 자신의 카드를 확인하여 변경하시면 됩니다.
        Serial.print("Hello Craig!\n");
      } else if(str[0] == 244) {           
        Serial.print("Hello Erin!\n");
      }
      Serial.println();
      delay(1000);
    }
         
        myRFID.AddicoreRFID_Halt();        //Command tag into hibernation             
 
}

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함