2016年3月30日 星期三

[Arduino] RFID 與 MIFARE






   RFID 以無線電波傳遞訊息,只要在電波範圍內,即可傳送訊號,不會有傳輸屏障之問題。這種設備的運作為一個讀卡設備會發出一個電磁場,而感應卡內部有線圈,當線圈靠近磁場時,會產生感應電流,就可以做為電力傳輸資訊。另外,感應卡平常沒有靠近電場時,內部晶片根本沒有電力可以工作,不用擔心卡片放在一起資料不見。

  不過,因RFID的運作是由無線電波傳送,所以在遇到金屬或是液體時,訊號的傳導會產生干擾與衰減,進而影響到資料讀取的可靠性與準確度(每個頻率間的干擾程度不同)。

  RFID設備所使用的頻段分為低頻(LF,125KHz)、高頻(HF,13.56MHz)、 超高頻(UHF,868~915MHz)、微波(Microwave,2.45 & 5.814GHz)各個頻 段的設備有不同的物理特性,如讀取的距離與讀取的速度,因此在不同應用情境中會採用不同頻段的設備。

  其中,現有門禁卡中的EM卡跟MIFARE卡長得很類似,常常會被搞混,悠遊卡為MIFARE卡。em卡無識別讀卡機的能力,當讀卡機感應時,感應卡就會回覆一組卡號,所以當得知卡號以後就可以在另一張可寫式em卡把卡號寫入,即能複製一張em卡;MIfare卡的卡片序號是在卡片產生時就已經寫死了,所以不會有複製相同卡片的問題,除非製造商刻意製造相同卡號的卡片,而mifare卡又具備加密與驗證機制,所以通常可以拿來做小額的消費,像是悠遊卡、一卡通或i-cASH。



  EM卡因不具防衝突的功能,所以當兩張同時感應時,無法感應,而MIFARE卡因為有防衝突功能,則是兩張都會感應到,不過這項特點如果沒注意到可能會造成困擾。之前曾經有民眾在捷運感應時,因為兩張卡放在一起,結果被重複扣款。



  我們今天要介紹的RFID感應器是頻率為13.56MHz的 RFID-RC522,而他的感應卡為MIFARE卡,MIFARE卡又有分不同儲存容量的卡。MIFARE S50 內部儲存容量1KbyteMIFARE S70 內部儲存容量 4Kbytes,各劃分為 16 區與 64 區,每區都有獨立的 A / B 兩層存取控制密碼,每區有4個BLOCK,每個BLOCK有16個字節。


  通常,以一個SECTOR為一組,前三個BLOCK為數據區,第四個BLOCK為驗證區,驗證區含有A/B兩組密碼,A做為讀取的密碼,B為修改資料的密碼,要比對成功才能做資料上的讀寫,比較特別的是BLOCK0為卡片與商業之資料,是不能更改的,而卡號寫在BLOCK0的前四個字結。

  RFID與ARDUINO UNO的腳位接法為: RST→9、SDA(SS)→10、MOSI→11、MISO→12、SCK→13,需要注意的是電源(VCC)要接3.3V不是5V
  範例碼中,卡片靠近感應時,只要進入感應範圍內,就會不停的作讀取,在程式設計上可能會因為他不停在讀取,所以感應速度太快,沒辦法好好去做判斷的動作,在門禁實作上也會造成重複感應。可以利用程式碼中的 mfrc522.PICC_HaltA(); 函式,來使得卡片靠近時只讀取一次,而不是在卡片靠近的範圍中一直讀取,再利用DELAY來讓讀取間隔時間久一點,來避免感應卡片時放下跟拿起的兩次重複感應,RFID的讀取就完成囉。



  以上程式碼,只用簡單的卡號讀取來做展示,範例碼中還有其他的讀寫範例。

參考: http://blog.davidou.org/archives/988

2016年3月26日 星期六

Matlab同時包含兩張圖表

好吧...有時候為了寫報告,會需要畫趨勢圖、長條圖等等,但是資料筆數太多,所以excel連讀取檔案都無法,這時候只能用matlab,偏偏matlab又不像excel那麼容易畫圖表,我遇到的問題就是我想要同時畫兩個趨勢圖在同一個figure上面,這時候就需要

>>figure,hold on;

上面這個指令,附上當時打的範例,再google一下應該就知道在幹嘛了,不是很重要

>>figure,hold on;
>>scatter(outputtest3(1,:),outputtest3(3,:), 50, 'filled', 'r'); grid on;
>>plot(outputtest3(1,:),outputtest3(2,:));
>>scatter(outputtest3(1,:),outputtest3(4,:), 50, 'filled', 'g'); grid on;

2016年3月23日 星期三

CentOS 7 firewalld設置

CentOS 7 初始並沒有安裝iptables(在以前的版本有,如果需要可以自己安裝),如果要開啟外部的訪問port的話,就要去設定firewalld

firewalld 執行指令
啟動
# service firewalld start
停止
# service firewalld stop
重新啟動
# service firewalld restart
重讀設定
# firewall-cmd --reload

查看狀態
# service firewalld status

# firewall-cmd --state

程式設定
目錄 /etc/firewalld
設定檔 /etc/firewalld/firewalld.conf

在public zone新增80TCP的服務(暫時生效,重新啟動firewalld之後就會不見)
# firewall-cmd --zone=public --add-port=80/tcp
移除在public zone上80埠的所有服務 tcp/udp
# firewall-cmd --zone=public --remove-port=80

要變成永久設定就在指令尾巴加上--permanent

參考資料:
http://note.tc.edu.tw/932.html

CentOS 7 環境變數設置範例

要新增環境變數讓所有使用者都適用,要以root權限去修改/etc/profile文件

以加入JAVA 1.8.0_60的安裝目錄為例
JAVA_HOME=/usr/java/jdk1.8.0_60
JRE_HOME=/usr/java/jdk1.8.0_60/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export JAVA_HOME JRE_HOME PATH CLASSPATH
再來就是讓它生效
source /etc/profile
查看目前的環境變數有哪些
echo $PATH

第二種是直接指定目錄的方式,以CUDA為例
PATH=/usr/local/cuda-7.5/bin:$PATH

參考資料:http://lolikitty.pixnet.net/blog/post/202825141-linux---centos-7-%3A-%E5%AE%89%E8%A3%9D-java

XAMPP on CentOS 7

1.設定XAMPP對外連線之port和網頁根目錄

WAMPP預設安裝位置於/opt/lampp之中(要移除就是直接打rm -rf /opt/lampp),如果要設定對外連線,去編輯/opt/lampp/etc/httpd.conf`。

先設定Lenten 80改成 8088(Tomcat預設的port是8080),然後找到Required all denied之類的,再注意一下<Directory XXXXX> 的XXXX是不是我要對外的資料夾,如果是,就改成Required all granted就行了。

如果要改變跟目錄的話,找到
DocumentRoot "/opt/lampp/htdocs"
<Directory "/opt/lampp/htdocs">
這就是預設的根目錄,改成自己想要的目錄即可(記得檢查更改的目錄權限是否足夠)