반응형

 

아두이노, RFID 모듈 RS 522 예제

 

글. 오상문 sualchi@daum.net

 

1. RFID 리더 RS 522 

 

RFID는 근거리 무선 통신을 지원합니다. 교통카드는 신분증, 상품 태그 등에 활용됩니다. RS 522는 RFID 카드(신분증), 태그 등을 읽는 역할을 합니다. 신분증이나 태그에는 신호 발신 회로가 존재하는데 리더기에 가까이 대면 전기를 공급받아서 회로가 동작하는 구조이고 10cm 이내 근접시 동작합니다.

 

아두이노 킷트에는 일반적으로 리더기와 카드형 태그, 열쇠고리형 태그가 제공됩니다.  

 

 

 

2. 라이브러리 설치

 

아두이노 IDE 메뉴서 '툴' > '라이브러리 관리'를 선택하고 'MFRC522'를 검색하여 설치 합니다.

 

3. 아두이노와 RFID-RC522 모듈 연결

 

RFID-RC522 모듈에는 보조 핀을 추가로 납땜해서 사용하거나 직접 배선을 납땜해야 합니다. 연결 그림은 다음과 같습니다.

 

 

 

[RC 522]                          [아두이노]

SDA    ------------------------  D 10

SCK    ------------------------  D 13

MOSI  ------------------------  D 11

MISO  ------------------------  D 12

GND   ------------------------  GND

3.3V   ------------------------  3.3V

 

[그림] 실제로 연결한 모습

 

 

4. 예제 작성 및 업로드

 

아래 예제를 작성하고 아두이노에 업로드합니다.

 

/* RFID 예제 */
/* 참조:  https://Rasino.tistory.com  */

#include <MFRC522.h>

#define SS_PIN 10
#define RST_PIN 9
MFRC522 rfid(SS_PIN, RST_PIN);  // rfid 객체 생성

 

void setup()
{
  Serial.begin(9600);   // 시리얼 통신 시작
  SPI.begin();             // SPI 통신 시작
  rfid.PCD_Init();         // rfid(MFRC522) 초기화
  Serial.println("Approximate your card to the reader...");
  Serial.println();
}

 

void loop()
{
  // 새 카드 접촉이 없으면 돌아감
  if ( ! rfid.PICC_IsNewCardPresent()) {
    delay(500);  // 0.5초 대기
    return;
  }
  // 카드 태그를 읽지 못했으면 돌아감
  if ( ! rfid.PICC_ReadCardSerial()) {
    delay(500);    // 읽지 못했으면 0.5초 대기
    return;
  }
  // UID 값을 16진 값으로 읽어서 시리얼 모니터에 표시함
  Serial.print("UID tag :");
  String content= "";
  byte letter;
 
  for (byte i = 0; i < rfid.uid.size; i++)
  {
     Serial.print(rfid.uid.uidByte[i] < 0x10 ? " 0" : " ");
     Serial.print(rfid.uid.uidByte[i], HEX);
     content.concat(String(rfid.uid.uidByte[i] < 0x10 ? " 0" : " "));
     content.concat(String(rfid.uid.uidByte[i], HEX));
  }
 
  Serial.println();
  Serial.print("Message : ");
  content.toUpperCase();
 
  if (content.substring(1)="A0 CB 62 80" || content.substring(1)=="D6 20 C3 C7" )// 승인할 UID들 비교
  {
   // 인증 성공하면...
    Serial.println("Authorized access");
    Serial.println();
    delay(2000);    // 카드 인증 성공 시 2초 대기    
  }
  else { // 인증 실패하면...  
    Serial.println(" Access denied"); // 그외 UID는 승인 거부 표시
    delay(1000);  // 카드 인증 실패 시 1초 대기
  }
}

 

5. 태그 등록 

 

아두이노 IDE 우측 상단 돋보기 아이콘을 클릭하여 시리얼 모니터 창을 엽니다. 예제를 실행하고 처음 태그를 리더기에 대면인증 실패와 함께 UID가 나옵니다. 그 UID를 예제에서 UID 비교하는 부분에 적어주고 다시 아두이노에 업로드 합니다. 제 예제에서는 카드 태그와 열쇠고리형 태그 두 개를 등록했습니다. 

 

6. 다시 인증 테스트

 

예제 코드에 UID를 잘 등록했으면 아래처럼 인증 성공 메시지가 나타납니다.

 

Approximate your card to the reader...

UID tag : D6 20 C3 C7

Message : Authorized access

UID tag : A0 CB 62 80
Message : Authorized access

 

<이상>

 

 

 

 

 

반응형

+ Recent posts