2015年9月15日 星期二

Arduino - RFID 應用及可能會遇到的問題

這篇文章是介紹我在大學最後一個作品時所做出來的成品,還有講解遇到的問題和如何透過軟體的方式來解決。

RFID 一般常見就是運用在門禁卡上,而在我的畢業展 Casink 中,RFID 的白卡是一個籌碼卡的存在,它會紀錄3項資訊:
  1. 使用者ID
  2. 使用者名稱
  3. 卡片內的點數
我所使用的 RFID 白卡本身有其限制,這樣做起來才有挑戰性!
  1. 存取資料的位置有限,原本是16個位置,但有1個位置已經被占用,所以實際可以用的只有15個位置。
  2. 每個位置存的資料也有限,型態是Byte,所以是存0~255的資料。

總結上面要達成的功能和限制,所以我遇到了下面幾個問題:

  • 如果我要讓ID具唯一性,可是一個位置不夠存怎麼辦(使用者超過255個)?
    • 進位
    • 假設我在第7個位置是記0~255,如果到了第256個使用者,我就會在第6個位置記1,第7個位置記1,用簡單的公式就可以得知是第幾個使用者。這樣也可以記錄到6萬多個使用者ID。

(第6個位置的數字*255) + 第7個位置的數字 = 使用者ID

  • 如果我要顯示使用者名稱要怎麼做?
    • 轉換ASCII
    • 每個符號、數字及英文字都可以對應到一個ASCII值,如果是顯示英文名字足以堪用,中文字還找不到方法可以存在卡片內。
    • ASCII 維基 及 對照表
    • 另外還要對Arduino的 Char 和 Byte 的轉換多研究才行。

  • 卡片點數不可能只是0~255吧,這樣應該就不好玩,數字也不人性化,怎麼辦?
    • 進位 及 換算
    • 我們是將紀錄的值乘上500,就是使用者所擁有的點數,使點數變大,可以增加娛樂性。我們一樣是運用1個位置儲存點數,所以點數範圍是 0 ~ 127500。

  • 如果真的遇到不能處理的資料怎麼辦,像是金額超過127500?
    • 透過遊戲規則的限制避免
    • 事先告知玩家最高金額就是127500,看是請他重新新的一輪賭局,或是其他方式彌補。
    • 或者使用更多位置儲存,但只是增加上限,賭局仍有Bug,一樣會有輕易超過上限的問題。

  • 如果我要紀錄更多使用者資料要怎麼做?
    • 透過 ID 來從外地取得更多資料
    • 我們網路上有個資料庫會紀錄每個使用者的 ID 、名稱、系級和最終金額,就是利用ID來取得其他無法存在卡片內的資料。

  • 還要再建立一個伺服器來做為資料庫,好像有點麻煩,有沒有什麼方便的解法?
    • 推薦使用Parse
      • 因為若是Arduino本身具有連上網路的功能,可以不必自己架設伺服器來存取資料,Parse本身提供Arduino的API,而資料庫建置方式也很適合沒有相關背景的人。
      • (尚未實作)
      • Parse
    • 設置專門讀取資料庫的機器
      • 我們是採用Parse及這個方法實作,只要讓Arudino連上桌上型電腦或筆電,就可以讀取電腦內的本地資料。

沒有留言 :

張貼留言