thomas 发表于 2012-5-7 17:10:08

Arduino读取RFID卡

本帖最后由 thomas 于 2012-5-7 18:39 编辑

很随意的从tb买了个RF读卡模块,串口的,准备以后加在饮水机上或者改良一下考勤机。
公司的考勤卡都是125k的ID卡,应该可以直接用。


因为是成熟模块,过于简单,半小时就全部搞定了。

补充一个重要信息:由于RX TX口被占用,下一次更新程序时,可能需要断开模块的连接,否则可能会出现程序无法更新的错误。先上模块:

(公司名隐去)

说明:

管脚定义:(从上到下)

GND
VCC(3-5V)
天线1
天线2
EN卡有效信号输出
TXD串口输出
RXD串口输入
性能参数:

输入电压:3~5.5V
输入电流:刷卡电流<25mA
通讯格式:9600-8-1串口输出卡号
(格式:1bit:start、8bit:data、1bit:stop)

有效刷卡高度:3-20cm(视天线、卡和周围环境而定)
使用环境:-25~70摄氏度
尺寸:28mm*20mm(2010最mini版)
发货清单:模块一个,天线一个



Arduino连接方式:

RF模块                  Arduino
1脚                            GND
2脚                            +5v
3脚天线            
4脚天线
5脚                            D2
6脚                            RX0
7脚                            TX0

测试代码
//RFID test by Thomas 2012.05.07
int incomingByte = 0;        // for incoming serial data
const int ENPin = 2;   // the number of the EN pin
int ENState = 1;//default EN state was HIGH

void setup() {
Serial.begin(9600);        // opens serial port, sets data rate to 9600 bps
pinMode(ENPin, INPUT);   
}

void loop() {

// read the state of the EN value:
ENState = digitalRead(ENPin);

// check if the EN is LOW,the output the data.
if (ENState == LOW&&Serial.available() > 0) {   
    // read the incoming byte:
    incomingByte = Serial.read();
    // say what you got:
    Serial.print("I received: ");
    Serial.println(incomingByte, DEC);
}

}

读出数据输出




说下以后的想法:考勤机,一个当日过生日的员工刷考勤卡上班时,如果能给他奏上一曲《生日快乐》,是多么惬意的事情。
饮水机,做成缩小版加油机形式,刷卡饮水,记录每人用水量。(看看谁喝水太少,就应该督促一下。这个纯属无聊,公司肯定不会收水费)

悠然小调 发表于 2012-5-7 17:24:52

沙发:lol
incomingByte =incomingByte+= Serial.read();这句的语法不太懂
原理是不是有卡放在附近,模块的5脚就会出现低电平,自动在串口输出卡里的数据?
这个能把数据写到卡里的吗?

lionelg 发表于 2012-5-7 17:24:56

强,程序再麻烦点儿就能取代考勤机了

thomas 发表于 2012-5-7 17:30:12

本帖最后由 thomas 于 2012-5-7 17:32 编辑

悠然小调 发表于 2012-5-7 17:24 static/image/common/back.gif
沙发
incomingByte =incomingByte+= Serial.read();这句的语法不太懂
原理是不是有卡放在附近,模块的 ...

嘿嘿,这句是改着玩儿忘了改回来了。

卡在读取范围内,就会输出低电平,然后输出 读出的卡号。

ID卡是最基础的卡,好像只能读,不能写入。

做考勤机,配套个时钟电路,Flash存储应该就可以了。

txmg 发表于 2012-5-7 17:31:54

本帖最后由 txmg 于 2012-5-7 17:34 编辑

为什么不能读取卡号????
另外私信 模块地址!!

thomas 发表于 2012-5-7 17:34:13

本帖最后由 thomas 于 2012-5-7 17:41 编辑

txmg 发表于 2012-5-7 17:31 static/image/common/back.gif
为什么不能读取卡号????

能读啊, 02218289这个 我在变亮用了int,所以输出就这样了。
默认功能是输出hex的
--------------------------------------------

操作说明:
当在有效的刷卡范围内有卡出现时,LED 灯点亮,并串口输出4
个字节十六进制卡号。如果卡一直检测有效,LED 灯一直点亮,EN
脚一直输出低电平,但串口只输出一次有效的数据。移开卡后,灯熄
灭,管脚恢复到高电平,重新刷卡后继续送出卡号。

txmg 发表于 2012-5-7 17:35:29

thomas 发表于 2012-5-7 17:34 static/image/common/back.gif
能读啊, 02218289这个

哦!是分开来的啊!可以pm模块地址吗???

thomas 发表于 2012-5-7 17:44:52

http://s.taobao.com/search?q=125k+%B4%AE%BF%DA+%C4%A3%BF%E9&searcy_type=item&s_from=newHeader&source=&ssid=s5-e&search=y&initiative_id=itemz_20120507

随便搜下关键字就行了

悠然小调 发表于 2012-5-7 17:46:49

要把这些数字合并存到一个变量里,怎么写呢?

thomas 发表于 2012-5-7 18:35:20

悠然小调 发表于 2012-5-7 17:46 static/image/common/back.gif
要把这些数字合并存到一个变量里,怎么写呢?

我还没想好最简洁的方法,目前可以用数组赋值的形式。
u8glib库可以直接显示数组在12864屏上

thomas 发表于 2012-5-7 19:42:01

改进了一下,以数组的形式显示卡号。这次是以16进制显示的,比较合理。
//RFID test by Thomas 2012.05.07

char Str1;
int i=0;
const int ENPin = 2;   // the number of the EN pin
int ENState = 1;//default EN state was HIGH


void setup(void) {
Serial.begin(9600);
pinMode(ENPin, INPUT);   
}
void loop(void) {
// read the state of the EN value:
ENState = digitalRead(ENPin);

// check if the EN is LOW,the output the data.

if (ENState == LOW&&Serial.available() > 0) {   
    // read the incoming byte:
    Str1 = Serial.read();
    if(i>=3){
      i=0;
      Serial.println(" ");
    }
    else{
      Serial.print(Str1, HEX);
      i++;
    }
}
else{
    i=0;
}
}

thomas 发表于 2012-5-7 19:46:50

自带的卡号是02246681 ,读数是:016FFFFFFB6
公司的某个考勤卡号是12601058 ,读数是:07E4
还有个考勤卡号是13129568, 读数是:0FFFFFF8373

用计算器算了半天都没发现关联,不求甚解的话,还是读十进制吧;P

悠然小调 发表于 2012-5-7 21:06:51

转化为字符型,把这几个数连起来存到一个字符型变量里可以吗?不知道怎么写?

Randy 发表于 2012-5-7 23:08:13

这东西也可以玩玩,但是最近在学画图,没有时间!

cnkids 发表于 2012-7-31 00:46:09

thomas 发表于 2012-5-7 19:46 static/image/common/back.gif
自带的卡号是02246681 ,读数是:016FFFFFFB6
公司的某个考勤卡号是12601058 ,读数是:07E4
还有个考勤卡 ...

如果我预先将一个卡号放进一个数组里,然后在读卡的时候进行两个数组匹配,来判断是否是有效的卡,应该如何弄呢,倒腾一晚上都没个头绪。。
页: [1] 2
查看完整版本: Arduino读取RFID卡