반응형

【 아두이노모듈#13 RFID #3(RC522) 도어락 만들기!

 

 RFID(Radio Frequancy Identification)는 무선 주파수를 이용하여 RFID 태그와 RFID리더간 데이터를 교환하는 장치이다.

 교통카드, 학생신분증 겸용카드, 연구실 및 회사 출입문카드, 구내식당 카드, 마트 등의 상품 진열 및 관리 등등 다방면에서 이용되고 있다. 

 지난 실습에서 아두이노와 RFID모듈을 연결하고 특정 ID카드의 ID를 등록하여 시리얼모니터를 통해 승인 또는 거부 표시를 해보았다.  이번에는 좀더 실제적으로 응용이 가능하도록 서보모터와 LED를 이용해서 도어락 기능을 구현해보려 한다. 선수학습을 잘 따라왔다면, 크게 어렵지않고 더욱 흥미가 생길 것이다. 

 

▶ 선수 학습 :

      1. [아두이노 기초#30] 서보모터 제어하기 응용 ☜ (클릭)

      2. [아두이노 센서#3] TMP36 온도센서 #1 (RGB LED 부분 참조) ☜ (클릭)

      3. [아두이노 모듈#11] RFID(RC522) 사용하기 #1 ☜ (클릭)

      4. [아두이노 모듈#12] RFID(RC522) 사용하기 #2 ☜ (클릭)

 

 RFID 모듈 (RC522) 세부 스팩

   세부스팩은 위 선수학습 내용을 참조.

 

▶ 실습 목표 :  

 1. [ RFID 구동원리, 통신 방식에 대해 이해할 수 있다. 

 2. [ SPI통신과 회로 연결에 대해 이해 할 수 있다.]

 3. [ 카드별 고유넘버(UID)를 알아 낼 수 있다.]

 4. [ 특정 UID를 지정하여 승인 및 거부 처리를 할 수 있다.]

 5. [ '서보 모터'와 , 'RGB LED'를 적용하여 RFID모듈 제어를 할 수 있다.] 

 

▶ 실습 회로도면 :
  (이미지 클릭하면 확대 가능)

RFID Rc522모듈을 활용한 도어락 회로도

▶ 실습 절차  : 

 

1.   부품을 준비하여 위와 같은 회로를 구성한다. 

2.   아두이노IDE에서 MFRC522 라이브러리를 검색후 설치한다. 

     ( 라이브러리 설치는 위 선수학습내용 참조)

3.  첨부된 아두이노 파일을 다운 받아 코드를 실행시킨다. 

4.  문으로 사용될 미이어쳐나 모형 등을 준비한다.  (RGB LED가 없으면 일반 LED를 사용)

5. 동작확인이 되면(실제 도어 등에 적용할 방법에 대해 고민해본다, 릴레이 사용 등등)

 

▶ 프로그램 코드 및 설명 : 

/* RFID 도어락 만들어 보기 */

#include <SPI.h>
#
include <MFRC522.h>
#
define SS_PIN 10    // spi 통신을 위한 SS(chip select)핀 설정
#define RST_PIN 9    // 리셋 핀 설정 
MFRC522 
rfid(SS_PIN, RST_PIN); // 'rfid' 이름으로 클래스 객체 선언

#include <Servo.h>    // 서보 라이브러리를 지정

#define servoPin 8     // 서보 모터핀을 지정

Servo servo;      // 서보 라이브러리 변수를 선언

int pos=0;      // 현재 각도를 저장할 변수를 지정한다

int RLED=7;     // 빨간색 LED단자를 아두이노 7번과 연결

int GLED=6;     // 초록색 LED단자를 아두이노 6번과 연결

 

void setup ( ) {  

  pinMode(RLED, OUTPUT);      // RED LED를 출력으로 지정

  pinMode(GLED, OUTPUT);      // GREEN LED를 출력으로 지정

  servo.attach(servoPin);     // 서보모터 핀을 설정한다

  servo.write(0);                // 서보모터 0도 위치로 초기화

  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())
  {

      return;

  }

 // 카드 읽힘이 제대로 되면 다음으로 넘어감
  if ( ! rfid.PICC_ReadCardSerial())

  {

      return;

  }

  // 현재 접촉 되는 카드 타입을 읽어와 모니터에 표시함  

  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();
  // UID값이 아래 값과 같으면 승인 처리
  if (content.substring(1) == "85 7C FB D1") // 승인 하고자하는 UID 기록

  {

   // 인증이 되면 Green LED와 함께 서보모터를 작동시킨다.
    Serial.println("Authorized access");
   
Serial.println();

    digitalWrite(GLED,HIGH);

    servo.write(180);   // 서보모터의 각도를 변경한다     

    delay(3000);  // 서보 모터의 각도가 변하는 것을 기다려 준다

    servo.write(0);     // 시간지연 후 문을 닫는다 

    digitalWrite(GLED,LOW);   // 시간지연 후 LED 끈다

  }

 

   // 승인 목록에 없는 UID 처리는

   // 서보모터의 작동 없이 Red LED만 켜고 끈다

  else   {

    Serial.println(" Access denied");
    digitalWrite(RLED,HIGH);

    delay(3000);

    digitalWrite(RLED,LOW);

   }

}

 

▶ 실행영상 :  

(전체화면 보기로 보세요)

RFID 도어락 만들어 보기

(아래는 유튜브로 시청하기)

https://youtu.be/6nBu0obCx5Q

▶ 아두이노 파일다운 :

(다운받아서 압축을 풀어 사용하세요)

 

ko_arduino_code_Servo_LED.zip
0.00MB

 

 

 

 컴파일 에러 발생시 해결 방법 참고 :  아래 최신글을 참고해 보세요.

rasino.tistory.com/321

 

【 MFRC522 RFID with Nano 33 iot #1】 아두이노 나노(33 IoT) 보드에 RFID 카드 모듈 사용해 보기!( feat. RFID

【 MFRC522 RFID with Nano 33 iot #1】 아두이노 나노(33 IoT) 보드에 RFID 카드 모듈 사용해 보기! ( feat. RFID 컴파일 오류 있는 경우도 보세요! ) Nano 33 every(또는 33 iot 등)에서 RFID를 사용해보려 하..

rasino.tistory.com

 

반응형
반응형

【 아두이노모듈#12 RFID (RC522) 사용하기 #2

 

 RFID(Radio Frequancy Identification)는 무선 주파수를 이용하여 RFID 태그와 RFID리더간 데이터를 교환하는 장치이다.

 교통카드, 학생신분증 겸용카드, 연구실 및 회사 출입문카드, 구내식당 카드, 마트 등의 상품 진열 및 관리 등등 다방면에서 이용되고 있다. 

 지난 실습에서 아두이노와 연결하는 기본회로 만들어 보았는데, 시리얼모니터를 통해 특정 ID카드의 고유값(UID)을 확인한 승인 처리 및 거부 처리 해보는 실습을 진행하려고 한다. 

 

▶ 선수 학습 :

      1. [아두이노 모듈#11] RFID(RC522) 사용하기 #1 ☜ (클릭)

 

 RFID 모듈 (RC522) 세부 스팩

※ RFID 모듈 개요 

 - RC522모듈은 RFID 범주에 속하는 NFC통신 방식을 사용한다. NFC는 13.56MHz의 주파수 대역을 사용하고 10cm 이내 가까운 거리의 비첩촉 통신을 뜻한다.

 - RC522의 모듈 구성은 RFID 데이터를 잃고 기록 할 수 있는 본체가 있으며, RFID 고유데이터(UID) 코드가 저장되어 있는 카드키와 열쇠고리형키가 포함 되어 있다. 

 - 본 실습에서는 아두이노와 통신하기 위해 SPI통신 방식으로 연결하여 사용한다.

 

▶ 실습 목표 :  

 1. [ RFID 구동원리, 통신 방식에 대해 이해할 수 있다. 

 2. [ SPI통신과 회로 연결에 대해 이해 할 수 있다.]

 3. [ 카드별 고유넘버(UID)를 알아 낼 수 있다.]

 4. [ 특정 UID를 지정하여 승인 및 거부 처리를 할 수 있다.]

 

▶ 실습 회로도면 :
  (이미지 클릭하면 확대 가능)

RFID RC522 모듈 연결 회로도

▶ 실습 절차  : 

 

1.   부품을 준비하여 위와 같은 회로를 구성한다. 

2.   아두이노IDE에서 MFRC522 라이브러리를 검색후 설치한다. 
  (메뉴 : 스케치 》 라이브러리 포함하기 》 라이브러리 관리 》 라이브러리 메니저 )
  

3.  첨부된 아두이노 파일을 다운 받아 코드를 실행시킨다. 

 

4. 프로그램을 동작시키고 승인처리할 카드키 값을 읽어 프로그램에 적용한다.

5. 승인 및 거부 처리가 잘 되는지 확인한다. 

 

▶ 프로그램 코드 및 설명 : 

/* ID 카드의 UID값에 따라 승인 또는 거부 처리하기 */

#include <SPI.h>
#
include <MFRC522.h>
#
define SS_PIN 10    // spi 통신을 위한 SS(chip select)핀 설정
#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())
    
return;

 // 카드 읽힘이 제대로 되면 다음으로 넘어감
  if ( ! rfid.PICC_ReadCardSerial())

    return;

  // 현재 접촉 되는 카드 타입을 읽어와 모니터에 표시함  

  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();
  // UID값이 아래 값과 같으면 승인 처리
  if (content.substring(1) == "85 7C FB D1") // 승인 하고자하는 UID 기록
 {
   
Serial.println("Authorized access");
   
Serial.println();
   
delay(3000);      // 카드 접촉 및 연속체크 시간에 대한 딜레이 주기
  }
 // UID값이 다르다면 엑세스 거부 처리
  else   {
   
Serial.println(" Access denied");
   
delay(3000);     // 카드 접촉 및 연속체크 시간에 대한 딜레이 주기
  }

}

 

▶ 실행영상 :  

(전체화면 보기로 보세요)

(아래는 유튜브로 시청하기)

https://youtu.be/I9uYJHTNAzA

 

▶ 아두이노 파일다운 :

(다운받아서 압축을 풀어 사용하세요)

RFID_Access_Denaied_ok.zip
0.00MB

 

 

 컴파일 에러 발생시 해결 방법 참고 :  아래 최신글을 참고해 보세요.

rasino.tistory.com/321

 

【 MFRC522 RFID with Nano 33 iot #1】 아두이노 나노(33 IoT) 보드에 RFID 카드 모듈 사용해 보기!( feat. RFID

【 MFRC522 RFID with Nano 33 iot #1】 아두이노 나노(33 IoT) 보드에 RFID 카드 모듈 사용해 보기! ( feat. RFID 컴파일 오류 있는 경우도 보세요! ) Nano 33 every(또는 33 iot 등)에서 RFID를 사용해보려 하..

rasino.tistory.com

 

반응형
반응형

【 아두이노모듈#11RFID (RC522) 사용하기 #1

 

 RFID(Radio Frequancy Identification)는 무선 주파수를 이용하여 RFID 태그와 RFID리더간 데이터를 교환하는 장치이다.

 교통카드, 학생신분증 겸용카드, 연구실 및 회사 출입문카드, 구내식당 카드, 마트 등의 상품 진열 및 관리 등등 다방면에서 이용되고 있다. 

 이번 실습에서는 아두이노와 연결하는 기본회로를 구성하고 시리얼 모니터를 통해 카드별로 UID를 확인해보는 실습을 진행하려고 한다. 

 

▶ 선수 학습 :

   없음.

 

RFID 모듈 (RC522) 세부 스팩

 RFID 모듈 개요 

 - RC522모듈은 RFID 범주에 속하는 NFC통신 방식을 사용한다. NFC는 13.56MHz의 주파수 대역을 사용하고 10cm 이내 가까운 거리의 비첩촉 통신을 뜻한다.

 - RC522의 모듈 구성은 RFID 데이터를 읽고 기록 할 수 있는 본체가 있으며, RFID 고유데이터(UID) 코드가 저장되어 있는 카드키와 열쇠고리형키가 포함 되어 있다. 

 - 본 실습에서는 아두이노와 통신하기 위해 SPI통신 방식으로 연결하여 사용한다.

 

▶ 실습 목표 :  

 1. [ RFID 구동원리, 통신 방식에 대해 이해할 수 있다. 

 2. [ SPI통신과 회로 연결에 대해 이해 할 수 있다.]

 3. [ 카드별 고유넘버(UID)를 알아 낼 수 있다.]

 

▶ 실습 회로도면 :
  (이미지 클릭하면 확대 가능)

RFID 기본 회로도

 

▶ 실습 절차  : 

 

1.   부품을 준비하여 위와 같은 회로를 구성한다. 

2.   아두이노IDE에서 MFRC522 라이브러리를 검색후 설치한다.
  (메뉴 : 스케치 》 라이브러리 포함하기 》 라이브러리 관리 》 라이브러리 메니저 )
  

3.  설치된 라이브러리가 제공하는 예제파일을 열어 실행시킨다. (ReadNUD : UID 스캔 프로그램)

  (메뉴 : 파일 》 예제 》 MFRC522 》 ReadNUD 클릭)  

라이브러리 설치후 제공되는 예제파일 실행

4. 프로그램을 동작시키고 카드키를 RC522본체에 접촉시킨 후 시리얼 모니터창을 통해 UID값을 확인한다.

 

▶ 프로그램 코드 및 설명 : 

/* RC522.h 라이브러리에 포함된 ReadNUID 예제 참조 */

#include <SPI.h>
#
include <MFRC522.h>
#
define SS_PIN 10    // spi 통신을 위한 SS(chip select)핀 설정
#define RST_PIN 9    // 리셋 핀 설정
MFRC522
rfid(SS_PIN, RST_PIN); // 'rfid' 이름으로 클래스 객체 선언
MFRC522::MIFARE_Key key;
byte
nuidPICC[4];   // 카드 ID들을 저장(비교)하기 위한 배열(변수)선언

void setup ( ) {

  Serial.begin(9600);
 
SPI.begin();           // SPI 통신 시작

  rfid.PCD_Init();       // RFID(MFRC522) 초기화

  // ID값 초기화 

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

    key.keyByte[i] = 0xFF;

  }

// MIFARE 타입의 카드키 종류들만 인식됨을 표시

  Serial.println(F("This code scan the MIFARE Classsic NUID."));

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

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

}

void loop ( )  {

 // 새카드 접촉이 있을 때만 다음 단계로 넘어감

  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));

  // MIFARE 방식의 카드인지 확인 루틴

  if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI && 

    piccType != MFRC522::PICC_TYPE_MIFARE_1K &&

    piccType != MFRC522::PICC_TYPE_MIFARE_4K) {

    Serial.println(F("Your tag is not of type MIFARE Classic."));

    return;

  }

 // 이전 인식된 카드와 다른, 혹은 새카드가 인식되면

  if (rfid.uid.uidByte[0] != nuidPICC[0] ||

    rfid.uid.uidByte[1] != nuidPICC[1] ||

    rfid.uid.uidByte[2] != nuidPICC[2] ||

    rfid.uid.uidByte[3] != nuidPICC[3] ) {

    Serial.println(F("A new card has been detected."));

 // 고유아이디(UID) 값을 저장한다.

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

      nuidPICC[i] = rfid.uid.uidByte[i];

    }

 // 그 UID 값을 16진값으로 출력 한다.

    Serial.println(F("The NUID tag is:"));

    Serial.print(F("In hex: "));

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

    Serial.println();

 // 그 UID 값을 10진값으로 출력 한다.

    Serial.print(F("In dec: "));

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

    Serial.println();

  }

 // 연속으로 동일한 카드를 접촉하면 다른 처리 없이

 // '이미 인식된 카드'라는 메세지를 출력한다.

  else Serial.println(F("Card read previously."));

  rfid.PICC_HaltA();

  rfid.PCD_StopCrypto1();

}

// 16진 값으로 변환 해주는 함수 정의

void printHex(byte *buffer, byte bufferSize) {

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

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

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

  }

}

// 10진 값으로 변환 해주는 함수 정의

void printDec(byte *buffer, byte bufferSize) {

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

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

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

  }

}

 

▶ 실행영상 :  

(전체화면 보기로 보세요)

(아래는 유튜브로 시청하기)

https://youtu.be/uwi1Uk9U64w

RFID 회로 조립과 최초 동작확인

 

▶ 아두이노 파일다운 :

(다운받아서 압축을 풀어 사용하세요)

01_ReadNUID.zip
0.00MB

 

 

컴파일 에러 발생시 해결 방법 참고 :  아래 최신글을 참고해 보세요.

rasino.tistory.com/321

 

【 MFRC522 RFID with Nano 33 iot #1】 아두이노 나노(33 IoT) 보드에 RFID 카드 모듈 사용해 보기!( feat. RFID

【 MFRC522 RFID with Nano 33 iot #1】 아두이노 나노(33 IoT) 보드에 RFID 카드 모듈 사용해 보기! ( feat. RFID 컴파일 오류 있는 경우도 보세요! ) Nano 33 every(또는 33 iot 등)에서 RFID를 사용해보려 하..

rasino.tistory.com

 

반응형