2017년 3월 31일 금요일

23. 모형 출입문 개폐기


Step 0.개요.

 실생활에서 RFID는 많이 사용됩니다. 교통카드, 신용카드, 사무실,아파트 건물 출입카드등에 사용됩니다. 아두이노를 이용하여 RFID를 활용해보겠습니다. 권한이 부여된 카드를 RFID에 접근하면 초록색LED가 불이켜면서 부저가 울립니다. 그러면 서보모터가 180도 움직입니
다. 5초후에 다시 원위치로 갑니다. 만약 권한이 없는 카드를 RFID에 접근시키면 빨간 LED가 켜지면서 부저만 움직입니다. 여기서 카드는 일종에 우리가 사용하는 카드,서보모터는 현관출입문,부저는 적당한 안내멘트소리라고 생각할 수 있습니다.


Step1.

준비물은 Bread Board 2개, Aduino UNO, Servo Motor, RFID-RC522, GREEN LED, RED LED, BUZZER, Jumper Line 입니다.
서보모터

부저


점페케이블


캡션 추가






RFID-RC522
아두이노(UNO)



























Step 2. 

연결은 다음 회로도와 같이 연결합니다.

 먼저 서보 모터를 점퍼선을 이용하여 연결합니다. 서보모터(오른쪽 위 검은색)의 노란색, 빨간색, 갈색선은 아두이노의 Pin 3,  5V, GND 차례로 연결합니다.

  다음 RFID-RC522기판(위 회로도 오른 쪽 빨간색기판)의 가장 자리에 있는 각각의 핀은  아두이노에 아래 표와 같이 연결합니다.

















연두색 LED는 +극, 빨간색 LED +극은 아두이노의 digital 5 Pin, digital 4 Pin에 각각 연결하고 -극들은 빵판의 -표시된 곳에 연결합니다.(끝에서 바로 안쪽)

끝으로 부저는 +극은 아두이노 digital Pin 2에 -극은 빵판(Bread Board)의 -극에 연결합니다.

Step3.

source code는 다음과 같습니다.


#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>

#define SS_PIN 10
#define RST_PIN 9
#define LED_G 5   //define green LED pin
#define LED_R 4   //define red LED pin
#define BUZZER 2  // define buzzer pin
MFRC522 mfrc522(SS_PIN, RST_PIN);  // Create MFRC522 instance.
Servo myServo;
void setup() {
  Serial.begin(9600); // Initialize serial communications with the PC
  SPI.begin();     // Init SPI bus
  mfrc522.PCD_Init();  // Init MFRC522 card
  myServo.attach(3);   //servo
  myServo.write(0);
  pinMode(LED_G,OUTPUT);
  pinMode(LED_R, OUTPUT);
  pinMode(BUZZER,OUTPUT);
  noTone(BUZZER);
  Serial.println("Put your card to the reader...");
  Serial.println();
}

void loop() {
  // Look for new cards
  if ( ! mfrc522.PICC_IsNewCardPresent()) {
         // digitalWrite(ledPin,LOW);  
    return;
  }

  // Select one of the cards
  if (!mfrc522.PICC_ReadCardSerial())
  {
      return;
  }

  // Dump debug info about the card. PICC_HaltA() is automatically called.
 // mfrc522.PICC_DumpToSerial(&(mfrc522.uid));


// Show UID on serial moniter
Serial.print("UID tag :");
String content= "";
byte letter;
for (byte  i = 0; i < mfrc522.uid.size; i++)
{
    Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
    Serial.print(mfrc522.uid.uidByte[i],HEX);
    content.concat(String(mfrc522.uid.uidByte[i]  < 0x10 ? " 0" : " "));
    content.concat(String(mfrc522.uid.uidByte[i],HEX));
}
Serial.println();
Serial.print("Message : ");
content.toUpperCase();
if (content.substring(1) =="16 82 6A 85") //change here the UID of the car/cars that you want to give access
{
    Serial.println("Authorized access");
    Serial.println();
    delay(500);
    digitalWrite(LED_G, HIGH);
    tone(BUZZER, 500);
    delay(3000);
    noTone(BUZZER);
    myServo.write(180);
    delay(5000);
    myServo.write(0);
    digitalWrite(LED_G, LOW);
 }

else   {
    Serial.println(" Access denied");
    digitalWrite(LED_R,HIGH);
    tone(BUZZER, 300);
    delay(1000);
    digitalWrite(LED_R,LOW);
    noTone(BUZZER);
    delay(3000);
  }
}

참고로 위 코드에서 빨간색(16 82 6A 85)코드는 카드마다 고유코드가 다릅니다. 이 코드는 다음 코드를 입력하여 알아낼 수 있습니다.
#include <SPI.h>
#include <MFRC522.h>

#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);  // Create MFRC522 instance.

void setup() {
  Serial.begin(9600); // Initialize serial communications with the PC
  SPI.begin();      // Init SPI bus
  mfrc522.PCD_Init(); // Init MFRC522 card
   Serial.println("Scan PICC to see UID and type...");
}

void loop() {
  // Look for new cards
  if ( ! mfrc522.PICC_IsNewCardPresent()) {
     
    return;
  }

  // Select one of the cards
  if (!mfrc522.PICC_ReadCardSerial())
  {
     return;
  }
  // Dump debug info about the card. PICC_HaltA() is automatically called.
  mfrc522.PICC_DumpToSerial(&(mfrc522.uid));
}
위소스를 upload하여  켜고 카드를 RFID에 갖다대면 위 화면처럼 Serial Moniter에 보여집니다. 위에서 2째줄에 보면 Card UID: 16 82 6A 85라는 것을 알 수 있습니다. 이 UID를 처음 코드에 삽입하면 됩니다.











라벨:

0개의 덧글:

댓글 쓰기

에 가입 댓글 [Atom]

<< 홈