你好!欢迎来到深圳市品慧电子有限公司!
语言
当前位置:首页 >> 技术中心 >> DIY >> 极客DIY:射频卡流量管理系统,竟然这么玩?!

极客DIY:射频卡流量管理系统,竟然这么玩?!


品慧电子讯相信许多上学的小朋友们都知道学校澡堂的按时间收费的不公平性,洗澡又不是打电话,好不合理!而按流量收费就基本是公平了好多,于是乎,有极客的DIY大神在饮水机上做了实验,真的是奇思妙想无极限!快来看看吧!

先来个全家福!!!

极客DIY:射频卡流量管理系统,竟然这么玩?!
IC卡的特点:

a、存储容量大。磁卡的存储容量大约在200个字符;IC卡的存储容量根据型号不同,小的几百个字符,大的上百万个字符。

b、安全保密性好,不容易被复制,IC卡上的信息能够随意读取、修改、擦除,但都需要密码。

c、CPU卡具有数据处理能力。在与读卡器进行数据交换时,可对数据进行加密、解密,以确保交换数据的准确可靠;而磁卡则无此功能。

d、使用寿命长,可以重复充值。

e、IC卡具有防磁、防静电、防机械损坏和防化学破坏等能力,信息保存年限长,读写次数在数万次以上。

思路:

首先读取IC卡,将IC卡存储的信息显示出来,如果显示成功,则打开电磁阀,开启外部中断计数脉冲,根据脉冲个数进行相应的扣款操作。比如每10个脉冲扣相应的金额,完成扣款后同时返回余额,并显示出来。写一个上位机对姓名,钱包,学号等进行更改。
12345678下一页>
  • 第一页:极客创意DIY(一);
  • 第二页:极客创意DIY(二);
  • 第三页:极客创意DIY(三);
  • 第四页:极客创意DIY(四);
  • 第五页:极客创意DIY(五);
  • 第六页:极客创意DIY(六);
  • 第七页:极客创意DIY(七);
  • 第八页:极客创意DIY(八);


材料:

2个EHY射频卡读写模块 串口协议 用于读写射频卡

2个STC12C5A60S2单片机 选他是因为是双串口,并且速度还不

继电器 控制电磁阀
若干三极管 8050 8550

若干驱动蜂鸣器,继电器 LED

2个7805稳压

2个12864液晶

2个流量计 一热一冷(热的是铜材质的)

2个电磁阀 一热一冷(热的是铜材质的)

原理图以及PCB图

首先设计电路图,IO口其实没几个

以及PCB图
极客DIY:射频卡流量管理系统,竟然这么玩?!
图里面的错误:

1、驱动继电器的三极管大家用8050,

2、PCB上,液晶倒数第二脚没接VCC,导致液晶有数据不显示,后来发现,原理图里面没有接,可以重画。

驱动12864

没有用户,等待模式。

极客DIY:射频卡流量管理系统,竟然这么玩?!<上一页12345678下一页>
  • 第一页:极客创意DIY(一);
  • 第二页:极客创意DIY(二);
  • 第三页:极客创意DIY(三);
  • 第四页:极客创意DIY(四);
  • 第五页:极客创意DIY(五);
  • 第六页:极客创意DIY(六);
  • 第七页:极客创意DIY(七);
  • 第八页:极客创意DIY(八);


读到卡了,显示姓名,学号,钱包。

极客DIY:射频卡流量管理系统,竟然这么玩?!
随着流量计脉冲个数增长,单片机进行计费,同时进行扣款操作,操作完毕显示当前余额。


用户移走卡,蜂鸣器长鸣一声,提示卡已移走。

极客DIY:射频卡流量管理系统,竟然这么玩?!
上位机(改变姓名,充值,初始化等操作,依赖于模块) 用C#写语言编写。
<上一页12345678下一页>
  • 第一页:极客创意DIY(一);
  • 第二页:极客创意DIY(二);
  • 第三页:极客创意DIY(三);
  • 第四页:极客创意DIY(四);
  • 第五页:极客创意DIY(五);
  • 第六页:极客创意DIY(六);
  • 第七页:极客创意DIY(七);
  • 第八页:极客创意DIY(八);


没选择串口前所有的都是灰色,表示不可操作。

极客DIY:射频卡流量管理系统,竟然这么玩?!
选择串口后,按钮可操作,更改框可以进行改写。

极客DIY:射频卡流量管理系统,竟然这么玩?!
单击读卡按钮后的显示。

极客DIY:射频卡流量管理系统,竟然这么玩?!<上一页12345678下一页>
  • 第一页:极客创意DIY(一);
  • 第二页:极客创意DIY(二);
  • 第三页:极客创意DIY(三);
  • 第四页:极客创意DIY(四);
  • 第五页:极客创意DIY(五);
  • 第六页:极客创意DIY(六);
  • 第七页:极客创意DIY(七);
  • 第八页:极客创意DIY(八);


程序部分

// 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};//要写的数据
// 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,//初始化钱包。分区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};//读取分区5的钱包 返回四字节的数据
// 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卡返回的数据 。用数组存储
*
***********************************************************************/
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};
/*****************************提取数据的数组*********************/
uchar xdata user_block8[12]={0}; //学号
uchar xdata user_card[4]={0}; //卡号
uchar xdata user_cash[4]={0}; //现金
uchar xdata user_name[6]={0}; //姓名

以上是要用到命令数组,处理数组,显示数组等.。

极客DIY:射频卡流量管理系统,竟然这么玩?!
这个是命令选择入口函数,注释写得很详细,大家自己去看哈。然后就是12864显示的函数,还有串口什么的初始化。

扣费的时候需要注意下。
***************************************************
EX0 = 0;
countflag = 0;//脉冲标志清零
feetemp = 0x01;//这里是扣的金额
feecount = feecount + feetemp;//计算使用总额,需要显示也可以显示的
ComDecrPurse[12] = feetemp;//写入扣钱金额
j = Command_choic(7);//100个脉冲减少一分钱
*******************************************************************************
然后个数的问题,在外部中断里面去修改下就好,建议大家使用宏定义直接可以在顶部修改即可
**************************************************************************
count++;
if (count == 1) // 更改脉冲个数
{
countflag = 1;
count = 0;
}
*********************************************************************
<上一页12345678下一页>
  • 第一页:极客创意DIY(一);
  • 第二页:极客创意DIY(二);
  • 第三页:极客创意DIY(三);
  • 第四页:极客创意DIY(四);
  • 第五页:极客创意DIY(五);
  • 第六页:极客创意DIY(六);
  • 第七页:极客创意DIY(七);
  • 第八页:极客创意DIY(八);


为什么使用双串口单片机?

因为一边要和模块通信,一边要打印数据出来观察是否正确,所以要使用两个串口.

为什么用12C5A60S2的原因:

用串口2和模块去通信.

搭建管道系统,对饮水机进行改装模拟,(实际上淋浴系统应该比饮水机好改)

热水管道系统,前面是流量计,后面是电磁阀。

极客DIY:射频卡流量管理系统,竟然这么玩?!
极客DIY:射频卡流量管理系统,竟然这么玩?!<上一页12345678下一页>
  • 第一页:极客创意DIY(一);
  • 第二页:极客创意DIY(二);
  • 第三页:极客创意DIY(三);
  • 第四页:极客创意DIY(四);
  • 第五页:极客创意DIY(五);
  • 第六页:极客创意DIY(六);
  • 第七页:极客创意DIY(七);
  • 第八页:极客创意DIY(八);


热水冷水搭建即将结束。

极客DIY:射频卡流量管理系统,竟然这么玩?!
极客DIY:射频卡流量管理系统,竟然这么玩?!
冷水管道也好了,拐了几道弯。
极客DIY:射频卡流量管理系统,竟然这么玩?!
极客DIY:射频卡流量管理系统,竟然这么玩?!
极客DIY:射频卡流量管理系统,竟然这么玩?!<上一页12345678下一页>
  • 第一页:极客创意DIY(一);
  • 第二页:极客创意DIY(二);
  • 第三页:极客创意DIY(三);
  • 第四页:极客创意DIY(四);
  • 第五页:极客创意DIY(五);
  • 第六页:极客创意DIY(六);
  • 第七页:极客创意DIY(七);
  • 第八页:极客创意DIY(八);


接上控制系统,那个小的是射频卡读写模块。

最后就是这个样子。

极客DIY:射频卡流量管理系统,竟然这么玩?!
不足与缺陷:

1.流量计选用的四分,建议改成2分,但是电磁阀一定要4分的。

2.如您所见,丑陋之极,表示找不到地方安装。

3.程序写得有些乱。

建议:

a、建议大家写程序注意部分

b、写程序多用枚举和结构体,方便,高效

c、饮水机压强和电磁阀里面的软垫子需要一定的压力才可以开启,需要考虑周全。

用户评论

发评论送积分,参与就有奖励!

发表评论

评论内容:发表评论不能请不要超过250字;发表评论请自觉遵守互联网相关政策法规。

深圳市品慧电子有限公司