Arduino筆記(23):無線射頻 RFID 控制電磁閥開關

在今年二月時,買了 RFID RC522的模組,使用樹莓派進行連接,測試無線射頻的模組正常後,就沒有再找時間測試一下 Arduino 如何作為門禁系統使用。透過電磁閥控制門栓,當授權的通行卡感應,就會亮起綠燈,同時電磁閥也會作動縮入,門就可以開啟。如果是非授權的卡片,則亮紅燈,電磁閥不動作。以下就來看看如何連接。下圖綠燈亮,表示感應正確,電磁閥縮入。


[材料]

• Arduino Uno x 1
• RFID-RC522模組 (含讀卡機及卡片)
• LED x 2個 (紅、綠各 1個 )
• 220 歐姆 x 2
• 1路繼電器 x 1
• 麵包板 x 1
• 5V電磁閥 x 1
• 連接線 x 若干條

[接線]

將 RC522模組,依照下列表連接到 Arduino。Arduino Pin2接到繼電器 IN,繼電器的VCC及GND,分別接 Arduino 5V及 GND。6V電池組正極接在繼電器另一端,電池組負極接電磁閥一腳,另一腳接在繼電器,與電池組並排。紅色及綠色 LED 負極接地,正極分別接 220歐姆電阻一端,電阻另一端分別接 Arduino Pin3(紅色LED)及 Pin4(綠色LED)。

RFID-RC522模組
Arduino接腳
SDA
Pin 10
SCK
Pin 13
MOSI
Pin 11
MISO
Pin 12
IRQ
None
GND
GND
RST
Pin 9
3.3V
3.3V




[安裝 RC522 函式庫]

如果 Arduino 的匯入程式庫中沒有MFRC522這個項目,表示沒有安裝相關函式庫,可以到 github/miguelbalboa 下載,解壓縮,放在 Arduino 主程式資料夾內的 libraries目錄內,名為 RFID。

測試一下功能是否正常,可以開啟檔案( File) ➔ 範例(Examples) ➔ MFRC522 ➔  DumpInfo ,然後上傳到 Arduino,打開序列埠監控視窗,拿出感應卡靠近讀卡機,可以看到以下資訊:

畫面中Card UID後面的 4 個 16進位數,就是這張卡的卡號,要抄寫來,等一下程式中需修改成這個卡號。


[程式]

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

#define SS_PIN 10
#define RST_PIN 9

// 設定電磁閥開關及紅綠燈Pin 值
int mSwitch = 2;
int LEDRed = 3;
int LEDGreen = 4;

MFRC522 mfrc522(SS_PIN, RST_PIN);   // 建立 MFRC522.

void setup()
{
  pinMode(LEDRed, OUTPUT);
  pinMode(LEDGreen, OUTPUT);
  pinMode(mSwitch, OUTPUT);

  Serial.begin(9600);   // 設定串列通訊速率
  SPI.begin();      // 設定  SPI bus
  mfrc522.PCD_Init();   // 設定 MFRC522
  Serial.println(" Put your card close to the reader...");
  Serial.println();
}
void loop()
{
  digitalWrite(LEDGreen, LOW);
  digitalWrite(LEDRed, LOW);
  digitalWrite(mSwitch, LOW);
  // 是否為新卡?
  if ( ! mfrc522.PICC_IsNewCardPresent())
  {
    return;
  }
  // 選擇一張卡
  if ( ! mfrc522.PICC_ReadCardSerial())
  {
    return;
  }
  //Show UID on serial monitor
  Serial.print("Card No. :");
  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) == "60 1D 81 7A")
  {
    Serial.println(" Pass... ");
    Serial.println();
    // 亮綠燈, 電磁閥開
    digitalWrite(LEDGreen, HIGH);
    digitalWrite(LEDRed, LOW);
    digitalWrite(mSwitch, HIGH);
    delay(3000);
  }

  else   {
    Serial.println(" Stop...");
    // 亮紅燈, 電磁閥關
    digitalWrite(LEDGreen, LOW);
    digitalWrite(LEDRed, HIGH);
    digitalWrite(mSwitch, LOW);
    delay(3000);
  }
}

[執行結果]



測試過程的影片如下:

[參考資料]

• github.com:miguelbalboa 
• Random nerd Tutorials:Security Access using MFRC522 RFID Reader with Arduino


3 留言

  1. 您好,不好意思想請問一下,文中寫說『6V電池組正極接在繼電器另一端』
    但我看圖片是 6V電池組負極接在繼電器另一端,還是是我搞錯條線呢?
    我是看圖片最上方電池的那條黑線

    回覆刪除
  2. 我只能開啟一次,之後就無法感應到了

    回覆刪除
  3. 我想問一下為什麼PASS一次之後就沒辦法再讀第二次卡了

    回覆刪除

張貼留言

較新的 較舊