본문 바로가기

메이커 이야기/아두이노

[아두이노 RFID 기초] RFID로 UID 읽어오기

반응형

RFID 태그의 UID 읽어오기

 

 사용 부품

 

1) 아두이노 UNO 

2) RFID 센서

 

 

 적용 회로

 

 적용 코드

 

#include <SPI.h>

#include <MFRC522.h>

 

#define SS_PIN 10

#define RST_PIN 9

 

MFRC522 rfid(SS_PIN, RST_PIN);

MFRC522::MIFARE_Key key;

byte uidPICC[4];

 

void setup() {

  // put your setup code here, to run once:

  Serial.begin(9600);

  SPI.begin();

  rfid.PCD_Init();

  for (byte i = 0; i < 6; i++){

    key.keyByte[i] = 0xFF;

  }

  Serial.println(F("This cod scan the MIFARE Classic NUID."));

  Serial.print(F("Using the following key : "));

  printHex(key.keyByte, MFRC522::MF_KEY_SIZE);

  Serial.println();

}

 

void loop() {

  // put your main code here, to run repeatedly:

  if( ! rfid.PICC_IsNewCardPresent()){

    return;

  }

  if( ! rfid.PICC_ReadCardSerial()){

    return;

  }

 

  Serial.print(F("PICC type: "));

  MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);

  Serial.println(rfid.PICC_GetTypeName(piccType));

  printHex(rfid.uid.uidByte, rfid.uid.size);

}

void printHex(byte *buffer, byte bufferSize) {

  for (byte i = 0; i < bufferSize; i++) {

    Serial.print(buffer[i] < 0x10 ? " 0" : " ");

    Serial.print(buffer[i], HEX);

  }

  Serial.println("\n");

  delay(1000);

}

 

 

 코드 뜯어보기

‘ :: ’연산자와 ‘ . ‘연산자

스케치의 기반 언어인 C++에는 클래스와 객체라는 개념이 존재한다.

클래스는 객체를 만들어 내기 위한 설계도 혹은 틀이며, 객체는 클래스의 모양대로 생성된 실체라고 부른다.

객체를 통해 클래스 메서드를 불러오는 연산자는 ‘ . ‘( 객체 멤버 연산자 )이며 객체를 통해 클래스 메서드를 불러오는 경우에는 ‘ :: ‘( 클래스 멤버 메서드 연산자 ) 사용한다.

 

 

 

  알아보기

RC522 예제 DumpInfo 실행해 보면 읽어오는 속도가 상당히 느린 것을 있다.

읽는 중간에 조금만 틀어지더라도 정보 읽기에 실패하는 경우가 발생하는데

짧은 시간 안에 RFID태그의 정보를 읽어오려면 보드레이트를 높이는 것으로 해결이 가능하다.

다만 일정 보드레이트 이상부터는 시간이 오히려 늘어나거나, 한참 낮은 보드레이트와 차이가 없는 경우를 마주하게 된다. 최적의 보드레이트는 115200이라 생각됩니다.

아래는 표와 확인하는데 코드이다.

 

 

 

BoardRate

MilliSeconds

Unefficiency

9,600

5324

 

19,200

2691

 

38,400

1374

 

57,600

947

 

74,880

822

 

115,200

814

 

230,400

824

O

250,000

827

O

500,000

815

O

1,000,000

797

O

2,000,000

792

O

 

사용 코드

 

#include <SPI.h>

#include <MFRC522.h>

 

#define RST_PIN         9          // Configurable, see typical pin layout above

#define SS_PIN          10         // Configurable, see typical pin layout above

 

#define BR1 9600

#define BR2 19200

#define BR3 38400

#define BR4 57600

#define BR5 74880

#define BR6 115200

#define BR7 230400

#define BR8 250000

#define BR9 500000

#define BR10 1000000

#define BR11 2000000

 

unsigned long time1;

unsigned long time2;

MFRC522 mfrc522(SS_PIN, RST_PIN);

 

void setup() {

Serial.begin(BR);  //    <---- BR을 위에 정의된 상수로 고쳐쓸 것

while (!Serial);

SPI.begin();

mfrc522.PCD_Init();                              

delay(4);                                                                   

mfrc522.PCD_DumpVersionToSerial();

Serial.println(F("Scan PICC to see UID, SAK, type, and data blocks..."));

}

 

void loop() {

if ( ! mfrc522.PICC_IsNewCardPresent()) {

return;

}

 

 

if ( ! mfrc522.PICC_ReadCardSerial()) {

return;

}

  time1 = millis();

                 

                  mfrc522.PICC_DumpToSerial(&(mfrc522.uid));

  time2 = millis();

  unsigned long diff = time2 - time1;

  Serial.println(diff);

}

 

 

이걸로 어떤 프로젝트를 만들어 볼까요?~

서버를 연동해 출퇴근 체크

버스카드 만들기

 

 

 

반응형