你的位置:首頁 > 測試測量 > 正文

極客DIY:射頻卡流量管理系統(tǒng),竟然這么玩?!

發(fā)布時間:2013-12-20 責(zé)任編輯:mikeliu

【導(dǎo)讀】相信許多上學(xué)的小朋友們都知道學(xué)校澡堂的按時間收費的不公平性,洗澡又不是打電話,好不合理!而按流量收費就基本是公平了好多,于是乎,有極客的DIY大神在飲水機(jī)上做了實驗,真的是奇思妙想無極限!快來看看吧!

先來個全家福?。?!

極客DIY:射頻卡流量管理系統(tǒng),竟然這么玩?!

IC卡的特點:

a、存儲容量大。磁卡的存儲容量大約在200個字符;IC卡的存儲容量根據(jù)型號不同,小的幾百個字符,大的上百萬個字符。

b、安全保密性好,不容易被復(fù)制,IC卡上的信息能夠隨意讀取、修改、擦除,但都需要密碼。

c、CPU卡具有數(shù)據(jù)處理能力。在與讀卡器進(jìn)行數(shù)據(jù)交換時,可對數(shù)據(jù)進(jìn)行加密、解密,以確保交換數(shù)據(jù)的準(zhǔn)確可靠;而磁卡則無此功能。

d、使用壽命長,可以重復(fù)充值。

e、IC卡具有防磁、防靜電、防機(jī)械損壞和防化學(xué)破壞等能力,信息保存年限長,讀寫次數(shù)在數(shù)萬次以上。

思路:

首先讀取IC卡,將IC卡存儲的信息顯示出來,如果顯示成功,則打開電磁閥,開啟外部中斷計數(shù)脈沖,根據(jù)脈沖個數(shù)進(jìn)行相應(yīng)的扣款操作。比如每10個脈沖扣相應(yīng)的金額,完成扣款后同時返回余額,并顯示出來。寫一個上位機(jī)對姓名,錢包,學(xué)號等進(jìn)行更改。
[page]

材料:

2個EHY射頻卡讀寫模塊     串口協(xié)議    用于讀寫射頻卡

2個STC12C5A60S2單片機(jī)    選他是因為是雙串口,并且速度還不

繼電器                      控制電磁閥
若干三極管 8050 8550          

若干驅(qū)動蜂鳴器,繼電器   LED          

2個7805穩(wěn)壓           

2個12864液晶          

2個流量計               一熱一冷(熱的是銅材質(zhì)的)

2個電磁閥               一熱一冷(熱的是銅材質(zhì)的)

原理圖以及PCB圖

首先設(shè)計電路圖,IO口其實沒幾個

以及PCB圖

極客DIY:射頻卡流量管理系統(tǒng),竟然這么玩?!

圖里面的錯誤:

1、驅(qū)動繼電器的三極管大家用8050,

2、PCB上,液晶倒數(shù)第二腳沒接VCC,導(dǎo)致液晶有數(shù)據(jù)不顯示,后來發(fā)現(xiàn),原理圖里面沒有接,可以重畫。

驅(qū)動12864

沒有用戶,等待模式。

極客DIY:射頻卡流量管理系統(tǒng),竟然這么玩?!
[page]

讀到卡了,顯示姓名,學(xué)號,錢包。

極客DIY:射頻卡流量管理系統(tǒng),竟然這么玩?!

隨著流量計脈沖個數(shù)增長,單片機(jī)進(jìn)行計費,同時進(jìn)行扣款操作,操作完畢顯示當(dāng)前余額。


用戶移走卡,蜂鳴器長鳴一聲,提示卡已移走。

極客DIY:射頻卡流量管理系統(tǒng),竟然這么玩?!

上位機(jī)(改變姓名,充值,初始化等操作,依賴于模塊) 用C#寫語言編寫。
[page]

沒選擇串口前所有的都是灰色,表示不可操作。

極客DIY:射頻卡流量管理系統(tǒng),竟然這么玩?!

選擇串口后,按鈕可操作,更改框可以進(jìn)行改寫。

極客DIY:射頻卡流量管理系統(tǒng),竟然這么玩?!

單擊讀卡按鈕后的顯示。

極客DIY:射頻卡流量管理系統(tǒng),竟然這么玩?!
[page]

程序部分

//        search card and get card serial number
uchar xdata ComSearchCard[5]  = {0xAA,0xBB,0x02,0x20};//尋卡,返回AA BB 06 20 92 BF 72 59 20
//        read block No.x
uchar xdata ComReadBlock[13]  = {0xAA, 0xBB, 0x0a, 0x21, 0x00, 0x08, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};//讀哪一塊第六位就是0x0幾。
//        read block No.8
//uchar ComReadBlock6[13]  = {0xAA, 0xBB, 0x0a, 0x21, 0x00, 0x06, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
//        write block No.8 with 0x01 to 0x0f
uchar xdata ComWriteBlock[29] = {0xAA, 0xBB, 0x1a, 0x22, 0x00, 0x08, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,//0xff是密碼
                                                   0x02, 0x00, 0x01, 0x01, 0x00, 0x07, 0x00, 0x01,//
                                                   0x04, 0x02, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00};//要寫的數(shù)據(jù)
//         initialize block No.8 as a purse with value: 0x12345678
uchar xdata ComIntiPurse[17]  = {0xAA, 0xBB, 0x0e, 0x23, 0x00, 0x05, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,//初始化錢包。分區(qū)5為錢包                            
                                                   0xff, 0xff, 0x00, 0x00};
//        read purse value of block No.5
uchar xdata ComReadPurse[13]  = {0xAA,0xBB,0x0a, 0x24, 0x00, 0x05, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};//讀取分區(qū)5的錢包  返回四字節(jié)的數(shù)據(jù)
//        purse in block No.5 increase with value "2"
uchar xdata ComIncrPurse[17]  = {0xAA,0xBB,0x0e, 0x25, 0x00, 0x05, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, //增加錢包的余額
                                                   0x01, 0x00, 0x00, 0x00};//要增加的值
//        purse in block No.5 decrease with value "1"
uchar xdata ComDecrPurse[17]  = {0xAA,0xBB,0x0e, 0x26, 0x00, 0x05, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,//扣費
                                                   0x01, 0x00, 0x00, 0x00};//要減少的值
//  halt the card selected
uchar xdata ComHaltCard[5]    = {0xAA,0xBB,0x02,0x28};//
//  the purse final value after INC & DEC
/********************************************************************
*
*   接收從IC卡返回的數(shù)據(jù) 。用數(shù)組存儲

***********************************************************************/
uchar xdata ICSearchCard[9]={0};//5-7位是卡的序列號
uchar xdata ICReadBlock[21]={0};
uchar xdata ICWriteBlock[5]={0};
uchar xdata ICIntiPurse[5]={0};
uchar xdata ICReadPurse[9]={0};
uchar xdata ICIncrPurse[5]={0};
uchar xdata ICDecrPurse[5]={0};
uchar xdata ICHaltCard[5]={0};
/*****************************提取數(shù)據(jù)的數(shù)組*********************/
uchar xdata user_block8[12]={0}; //學(xué)號
uchar xdata user_card[4]={0};  //卡號
uchar xdata user_cash[4]={0}; //現(xiàn)金
uchar xdata user_name[6]={0}; //姓名

以上是要用到命令數(shù)組,處理數(shù)組,顯示數(shù)組等.。

極客DIY:射頻卡流量管理系統(tǒng),竟然這么玩?!

這個是命令選擇入口函數(shù),注釋寫得很詳細(xì),大家自己去看哈。然后就是12864顯示的函數(shù),還有串口什么的初始化。

扣費的時候需要注意下。
***************************************************
EX0 = 0;
countflag = 0;//脈沖標(biāo)志清零
feetemp = 0x01;//這里是扣的金額
feecount = feecount + feetemp;//計算使用總額,需要顯示也可以顯示的
ComDecrPurse[12] = feetemp;//寫入扣錢金額
j = Command_choic(7);//100個脈沖減少一分錢
*******************************************************************************
然后個數(shù)的問題,在外部中斷里面去修改下就好,建議大家使用宏定義直接可以在頂部修改即可
**************************************************************************
   count++;
   if (count == 1) //                更改脈沖個數(shù)
   {                                        
      countflag = 1;
          count = 0;
   }
*********************************************************************
[page]

為什么使用雙串口單片機(jī)?

因為一邊要和模塊通信,一邊要打印數(shù)據(jù)出來觀察是否正確,所以要使用兩個串口.

為什么用12C5A60S2的原因:

用串口2和模塊去通信.

搭建管道系統(tǒng),對飲水機(jī)進(jìn)行改裝模擬,(實際上淋浴系統(tǒng)應(yīng)該比飲水機(jī)好改)

熱水管道系統(tǒng),前面是流量計,后面是電磁閥。

極客DIY:射頻卡流量管理系統(tǒng),竟然這么玩?!

極客DIY:射頻卡流量管理系統(tǒng),竟然這么玩?!
[page]

熱水冷水搭建即將結(jié)束。

極客DIY:射頻卡流量管理系統(tǒng),竟然這么玩?!

極客DIY:射頻卡流量管理系統(tǒng),竟然這么玩?!

冷水管道也好了,拐了幾道彎。
極客DIY:射頻卡流量管理系統(tǒng),竟然這么玩?!

極客DIY:射頻卡流量管理系統(tǒng),竟然這么玩?!

極客DIY:射頻卡流量管理系統(tǒng),竟然這么玩?!
[page]

接上控制系統(tǒng),那個小的是射頻卡讀寫模塊。

最后就是這個樣子。

極客DIY:射頻卡流量管理系統(tǒng),竟然這么玩?!

不足與缺陷:

1.流量計選用的四分,建議改成2分,但是電磁閥一定要4分的。

2.如您所見,丑陋之極,表示找不到地方安裝。

3.程序?qū)懙糜行﹣y。

建議:
          
a、建議大家寫程序注意部分

b、寫程序多用枚舉和結(jié)構(gòu)體,方便,高效

c、飲水機(jī)壓強(qiáng)和電磁閥里面的軟墊子需要一定的壓力才可以開啟,需要考慮周全。

相關(guān)閱讀:

DIY:自制車用超級電容器【附原理圖】
告別黑暗,牛人自制“搖一搖”手電筒
實用DIY:將USB鼠標(biāo)集成到PCI接口里


特別推薦
技術(shù)文章更多>>
技術(shù)白皮書下載更多>>
熱門搜索
壓控振蕩器 壓力傳感器 壓力開關(guān) 壓敏電阻 揚(yáng)聲器 遙控開關(guān) 醫(yī)療電子 醫(yī)用成像 移動電源 音頻IC 音頻SoC 音頻變壓器 引線電感 語音控制 元件符號 元器件選型 云電視 云計算 云母電容 真空三極管 振蕩器 振蕩線圈 振動器 振動設(shè)備 震動馬達(dá) 整流變壓器 整流二極管 整流濾波 直流電機(jī) 智能抄表
?

關(guān)閉

?

關(guān)閉