Arduino Uno 以及 RC522 複製磁扣 UID

Programming

事前準備

  • 在網路上購買能夠改寫 UID 的磁扣或是卡片,接下來我們叫他黑魔法小卡。
    • UID card(Unique Identifier Card)原本是指整個宇宙不會出現第二張相同辨識碼的卡片,但是我們需要的是有後門的 UID card,這種卡片的特性是第 0 區塊(Block 0)能夠被重複改寫。
    • 平均一個磁扣的價格大約落在9~13元的新台幣,非常便宜。
  • Arduino Uno 開發板(網路上買會比較便宜,大概 300 元之內就能夠買到囉。不一定要原廠的 Arduino Uno,那實在是太貴了)
  • RC522 模組(需要先將腳位焊接好,網路上大概是賣 100 元上下)
  • USB-B to USB-A 傳輸線一條,這條線用來連接電腦與 Uno 開發板。
  • 公對母跳線(杜邦線)數條,若是只有公對公的跳線則還需要麵包板

操作步驟

  • 首先要去下載 Arduino IDE

  • 將 Arduino Uno 與 RC522 按照下列指示用跳線接再一起,再使用 USB-B to USB-A 傳輸線將Uno板接上電腦,你可以透過 Random Nerd Tutorials 取得更多的資訊。 connection.png

RC522 接腳 Arduino UNO 接腳
SDA Digital 10
SCK Digital 13
MOSI Digital 11
MISO Digital 12
IRQ 不連線
GND GND
RST Digital 9
3.3V 3.3V
  • 因為 Arduino 已經有供下載的控制 RC522 的程式範本了,我們可以直接下載

    1. 點開sketch選單,在 Include Library中找到 Manage Libraries 並點擊 downloadLib_1.png

    2. 再搜尋欄位中尋找「RC522」後,再搜尋結果找到「MFRC522」並且點擊下載, 因為我已經有下載了所以我顯示的是「REMOVE」。此時,Library就已經下載成功了。 downloadLib_2.png

    3. 我們必須要再次確認我們的Uno開發板已經讓電腦連上對的埠號 boardConnected.png

  • 我們有一張門禁卡,因為門禁系統資料庫有這張門禁卡的 UID,因此此門禁卡能夠自由進出宿舍。換句話說,我們只要能將一張黑魔法小卡的 UID 改成與門禁卡相同,我們就能利用這張黑魔法小卡進出宿舍了。

    • 現在我們要來查看這張門禁卡的UID,並且將這4組16進位的數字記下來
      • 步驟一:依照下圖找到Dumpinfo intoDumpinfo.png
      • 步驟二:
        1. 點擊上傳按鈕,將範例程式上傳到開發板上
        2. 等待程式碼編譯,若 output 沒有出現紅色字體的字就表示程式碼是沒有問題的
        3. 點擊serial monitor 觀察與開發板的互動 uploadAndMonitor.png
      • 步驟三:將門禁卡放在 RC522 上讀取,透過觀察 serial monitor 我們可以知道我的門禁卡 UID 是 F2 F4 8A 1B swipeStuID.png uidMain.png
  • 現在我們要將這組門禁卡上的 UID 寫進黑魔法小卡裡面

    • 步驟一:依照下圖找到 ChangeUID intoChangeuid.png
    • 步驟二: 將我們剛才得知的門禁卡 UID 輸入到程式碼 36 行的 define,請注意這是16進位的數字,因此前面要加「0x」。 insertNewUID.png
      1. 點擊上傳按鈕,將範例程式上傳到開發板上
      2. 等待程式碼編譯,若 output 沒有出現紅色字體的字就表示程式碼是沒有問題的
      3. 點擊 serial monitor 觀察與開發板的互動 newUploadAndMonitor.png
    • 步驟三:將黑魔法小卡放在 RC522 上完成寫入,透過觀察 serial monitor 我們會發現我們黑魔法小卡的 UID 變得與我們的門禁卡一樣了 swipeToCopy.png uidChanged.png
  • 最後,你就可以去試試看門禁系統能不能接受這個磁扣了。切記帶上原本的門禁卡,不要被鎖在門外了!

註:如果沒辦法正確上傳程式碼但是你非常確定你沒有動到程式碼其他的地方,你可以去確認一下定義的腳位是否正確。 checkPin.png

26~33行的註解是告訴使用者不同開發板有不同腳位的定義,如Uno板的 RST 是 9 號腳位;SS 是 10 號腳位。因此我們要確認程式碼中第41~42行中是否符合上表,若不符合則更正。