아두이노

아두이노 RFID 모듈

IT아메리카노 2021. 8. 15. 21:51

안녕하세요~ 기본적인 RFID 모듈을 이용한 도어락 입니다.

준비물 : 아두이노우노,RFID모듈,버저,스위치,서브모터,LCD

 

스케치 구성
1. LiquidCrystal_I2C를 이용 lcd에 내용 출력
2.#include <SPI.h> SPI (Serial Peripheral Interface)는 짧은 거리에서 하나 이상의 주변 장치와 신속하게 통신하기 위해 마이크로 컨트롤러가 사용하는 동기 직렬 데이터 프로토콜입니다또한 두 개의 마이크로 컨트롤러 간의 통신에도 사용할 수 있습니다.
#include <MFRC522.h>
3.라이브러리에서 RFID를 연결해서 쓰기위해 SPI 및 지정된 경로에 따라 다운로드 후 추가한다.    
4. #include <Servo.h>. 서브 모터를 연결해서 쓰기위해 라이브러리를 추가한다.
5.switchPin을 추가하여 사용한다.
6buzzer핀을 추가하여 도어락이 작동할떄 소리가 나도록한다.

각종 모듈을 결합한 모습.... 
RFID 등록 정보

--코드--

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

#include <Servo.h>




//SS 핀을 10번 핀으로 설정한다.
 #define SS_Pin 10 //Arduino Uno
 //Reset 핀을 9번 핀으로 설정한다.
 #define RST_Pin 9

 #define buzzerPin 5

 #define servoMoterPin 3 

 #define switchPin 2

 #define OPEN 1

 #define CLOSE 0

 #define doorCloseAngle 0;
 #define doorOpenAngle 90;

 //mfrc522란 이름의 RFID 판독기를 설정한다.
 MFRC522 mfrc522(SS_Pin,RST_Pin);

 Servo doorMotor;
LiquidCrystal_I2C lcd(0x27,16,2);
 int doorOpenTimer=0;
 byte rfidDoorBuff[8]={0,0,0,0,0,0,0,0};
 byte rfidDoor[8]={0,0,0,0,0,0,0,0};

boolean doorState = OPEN;
boolean rfidIsOK=0;
 void setup(){
  //시리얼 통신을 설정한다.
  Serial.begin(9600);
   lcd.init(); 
   lcd.begin(16,2) ;                    
  lcd.backlight();
  //SPI통신을 시작한다.
  SPI.begin();
  //앞서 설정한 mrfc522란 이름의 RFID 판독기를 시작한다.
  mfrc522.PCD_Init(); //Init MFRC522 card

doorMotor.attach(servoMoterPin,600,2400);
  pinMode(switchPin,INPUT_PULLUP);
  pinMode(buzzerPin,OUTPUT);
  Serial.println("*********************************");
  Serial.println("RFID DOOR LOCK");
   Serial.println("*********************************");
   lcd.setCursor(0,0);
  lcd.print("RFID DOOR LOCK");
  delay(1000);
  doorClose();
  lcd.clear();
 }
void loop(){

  //새로운 카드를  기다린다.
  if(mfrc522.PICC_IsNewCardPresent()){
    rfidCardRead();
  };

  //카드를 읽는다.
   
  if(doorState == OPEN){
    delay(100);
    ++doorOpenTimer;
    if(doorOpenTimer >= 50) doorClose();
  }
  else doorOpenTimer = 0;
 }
void rfidCardRead(){
  if(!mfrc522.PICC_ReadCardSerial())return;

  for(byte i = 0;i<mfrc522.uid.size;i++){
    rfidDoorBuff[i]=mfrc522.uid.uidByte[i];
  }
  for(byte i=mfrc522.uid.size; i<8;i++){
    rfidDoorBuff[i]=0;
  }
  Serial.println();
  Serial.print("CARD UID    :");
  lcd.setCursor(0,0);
  lcd.print("CARD UID:");
  for(byte i =0; i<8; i++){
    Serial.print(rfidDoorBuff[i],HEX);
     lcd.setCursor(9,0);
  lcd.print(rfidDoorBuff[i],HEX);
  }
Serial.println();
  Serial.print("Door Lock UID    :");
  lcd.setCursor(0,0);
  lcd.print("Door Lock UID:");
  for(byte i =0; i<8; i++){
    Serial.print(rfidDoor[i],HEX);
  lcd.setCursor(9,0);
  lcd.print(rfidDoor[i],HEX);
}
  Se
if(digitalRead(switchPin)){
    Serial.println("SW OFF");
    lcd.setCursor(10,1);
  lcd.print("SW OFF");
    for(byte i=0;i<8; i++){
      if(rfidDoor[i] == rfidDoorBuff[i]){

        ++rfidIsOK;
      };
    }
    if(rfidIsOK = 8){
      doorOpen();
      rfidIsOK=0;
    }
    else rfidIsOK = 0;
  }
  else{
    Serial.println("SW ON");
      lcd.setCursor(10,1);
  lcd.print("SW OFF");
   for(byte i =0; i<8; i++){
    rfidDoor[i]=rfidDoorBuff[i];
   }
    rfidSaveBuzzer();
   }
   mfrc522.PICC_HaltA();
   mfrc522.PCD_StopCrypto1();
  }rial.println();
void doorOpen(){
    if(doorState == CLOSE){
      Serial.println("Door is OPENED");
         lcd.setCursor(10,1);
  lcd.print("SW OFF");
      doorMotor.write(90);
      openBuzzer();
      doorState=OPEN;
    };
  }

  void doorClose(){
    if(doorState == OPEN){
      Serial.println("Door is CLOSED");
         lcd.setCursor(10,1);
  lcd.print("SW OFF");
      doorMotor.write(0);
      closeBuzzer();
      doorState=CLOSE;  
  };
  }

 void openBuzzer(){
  tone(buzzerPin,262,200);
  delay(200);
    tone(buzzerPin,294,200);
  delay(200);
    tone(buzzerPin,330,200);
  delay(200);
  noTone(buzzerPin);  
  }

 void closeBuzzer(){
  tone(buzzerPin,330,200);
  delay(200);
   tone(buzzerPin,294,200);
  delay(200);
   tone(buzzerPin,262,200);
  delay(200);
  noTone(buzzerPin);
 }

 void rfidSaveBuzzer(){
    tone(buzzerPin,523,200);
  delay(200);
  tone(buzzerPin,523,200);
  delay(200);
  noTone(buzzerPin);
 }

728x90
반응형
LIST