2018年2月6日 星期二

Arduino (18) 無線識別裝置RFID-RC522。


無線識別裝置RFID,採用TTL數位訊號傳遞資料,頻率大概在125K~13.56MHz。

上圖是RFID讀卡機,啟動後會不停的發送電磁波,當卡片接近時,卡片的線圈會和讀卡機的

電磁場產生共振,即可傳遞資料。























這東西就是所謂的卡片鎖,公司打卡(左)、電梯解鎖(右)都很普遍在運用。























配置先這樣,因為RFID程式本身很長,就簡單一上一顆LED燈就好了。

功能就是記憶兩組編碼(卡片式、鈕扣式),接觸到讀卡機時,點亮LED燈,再接觸時關閉。



卡片式的和鈕扣式的都來玩一下。


程式如下 :

#include <MFRC522.h>   
#define RST_PIN      A0
#define SS_PIN       10 
#define LED 2

bool lockerSwitch = false;
//先預設關閉。

struct RFIDTag {
   byte uid[4];
   char *name;
};
//RFID編碼結構(4組十進位+名稱)。

struct RFIDTag tags[] = {
  {{64,97,93,89}, "Card_Type"},
  {{27,70,222,35}, "Button_Type"}
};
//卡片和鈕扣的編碼。

byte totalTags = sizeof(tags) / sizeof(RFIDTag);
MFRC522 mfrc522(SS_PIN, RST_PIN);

void locker(bool toggle) {
  if (toggle) {
      digitalWrite(LED,HIGH);
      delay(100);
  } else {
      digitalWrite(LED,LOW);
      delay(100);
  }
//開&關LED的函式。

}
void setup() {
  Serial.begin(9600);
  Serial.println();
  Serial.print("size of RFIDTag:");
  Serial.println(sizeof(RFIDTag));
  Serial.print("size of tag:");
  Serial.println(sizeof(tags));
  Serial.println("RFID reader is ready!");

  SPI.begin();
  mfrc522.PCD_Init();   
  pinMode(LED,OUTPUT);
  locker(lockerSwitch);
}
void loop() {

    if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial()) {
      byte *id = mfrc522.uid.uidByte;
      byte idSize = mfrc522.uid.size; 
      bool foundTag = false; 
   
      for (byte i=0; i<totalTags; i++) {
        if (memcmp(tags[i].uid, id, idSize) == 0) {
          Serial.println(tags[i].name);
          foundTag = true;
       
          lockerSwitch = !lockerSwitch;
          locker(lockerSwitch);       
          break;
          //讀到編碼資料且開、關鎖。

        }
      }
      if (!foundTag) {
        Serial.println("Wrong card!");
        //如果卡片編碼錯誤就顯示錯誤。

        if (lockerSwitch) {
          lockerSwitch = false;
          locker(lockerSwitch);
        }
      }
   
      mfrc522.PICC_HaltA();
    }
    //停止卡片狀態。

}

好用的東西,可以搭配任何開關模組,像是風扇和馬達等等...。





沒有留言:

張貼留言

8051 (6) 紅外線避障模組控制LED七段顯示器。

這篇要做的Project就是感測器測到訊號時,LED七段顯示器會開始計算偵測次數, 到第5次時會讓紅色LED燈發光。 程式如下: #include <reg52.h> unsigned char seg[5]={0xf9,...