1赞

33回答

6收藏

还用钥匙开门?DIY一个RFID门禁系统吧!

 

#开源分享 #开源分享 29689 人阅读 | 33 人回复 | 2013-12-11

在学校生活中偶尔会遇到忘带钥匙的情况出现,如果室友碰巧也不在寝室的话,自己只能站在寝室外等待。同时不知道是否宿舍门锁老旧的原因,开门比较纠结花时间,时常有制作自动门锁的想法。后来入手了RFID读卡器,可以正常读取市面上的Mifare S50,S70非接触智能卡(学校的饭卡就可以读取),于是就构想了这个基于RFID的寝室门禁系统。

本系统原理是基于非接触式卡的序列号是唯一的,制造厂家在产品出厂前已将此序列号固化,不可再更改。这样不同的卡都是唯一的存在,可以利用读卡器读取卡的序列号,来判断卡的拥有者(像我的室友)。基本原理可以参考下图:





门禁系统1.0
制作材料:

Arduino UNO

NOKIA 5110液晶屏

RFID-RC522读卡器

MG-996R舵机

移动电源



首先,是将RFID-RC522和UNO连接起来,这个读卡器是基于SPI通讯。但这里有一个封装比较好的库文件支持RC522,可以自定义SPI针脚位。NOKIA 5110液晶屏也有库文件——支持画图,中文显示,可以自定义针脚位。因为开启门锁需要较强拉力,这样MG-996R所需电量比较大,实际使用时,需要给舵机单独供电。

软件部分

主控部分用的的是Arduino Uno,使用了arduino IDE 1.04,部分代码如下:

//端口定义
#include <SPI.h>
#include <RFID.h>
#include <LCD5110_CN.h>
#define servopin 7
#define sensor 0
#define BL 9
LCD5110 myGLCD(2,3,4,5,6);//CLk-SCK,Din-MOSI,DC,RST-IO,CS-CE
extern uint8_t SmallFont[];

RFID rfid(10,8); //D10–读卡器MOSI引脚、D5–读卡器RST引脚

//4字节卡序列号,第5字节为校验字节
unsigned char serNum[5];
//写卡数据
unsigned char writeDate[16];
String comdata = “”;
……
//舵机驱动定义
void servopulse(int angle)//定义一个脉冲函数

{

int pulsewidth=(angle*11)+500; //将角度转化为500-2480的脉宽值

digitalWrite(servopin,HIGH); //将舵机接口电平至高

delayMicroseconds(pulsewidth); //延时脉宽值的微秒数

digitalWrite(servopin,LOW); //将舵机接口电平至低

delayMicroseconds(20000-pulsewidth);

}
//工作使能
long randNumber = random(0, 20);
unsigned char i,tmp;
unsigned char status;
unsigned char str[MAX_LEN];
unsigned char RC_size;

while (Serial.available() > 0)
{
comdata += char(Serial.read());
delay(2);
}
for(int i=0;i<16;i++)
{
writeDate=comdata;
}
//找卡
rfid.isCard();
//读取卡序列号
if (rfid.readCardSerial())
{
Serial.print(“The card’s number is : “);
Serial.print(rfid.serNum[0]);
Serial.print(” , “);
Serial.print(rfid.serNum[1],BIN);
Serial.print(” , “);
Serial.print(rfid.serNum[2],BIN);
Serial.print(” , “);
Serial.print(rfid.serNum[2],BIN);
Serial.print(” , “);
Serial.print(rfid.serNum[4],BIN);
Serial.println(” “);
if(rfid.serNum[0]==205||rfid.serNum[0]==21||rfid.serNum[0]==85||rfid.serNum[0]==117){
for(int i=0;i<100;i++)
{
servopulse(45);
if(rfid.serNum[0]==205||rfid.serNum[0]==117)
{
myGLCD.clrScr();
Serial.println(“Welcome Mr.Xiao”);
myGLCD.print(“Welcome”,int(randNumber)+20,int(randNumber));
myGLCD.print(“Mr.Xiao”,int(randNumber)+20,int(randNumber)+20);
analogWrite(BL,HIGH);
}
if(rfid.serNum[0]==85)
{
myGLCD.clrScr();
Serial.println(“Welcome Mr.Yang”);
myGLCD.print(“Welcome”,int(randNumber)+20,int(randNumber));
myGLCD.print(“Mr.Yang”,int(randNumber)+20,int(randNumber)+20);
digitalWrite(BL,HIGH);
}
if(rfid.serNum[0]==21)
{
myGLCD.clrScr();
Serial.println(“Welcome Mr.Huang”);
myGLCD.print(“Welcome”,int(randNumber)+20,int(randNumber));
myGLCD.print(“Mr.Huang”,int(randNumber)+20,int(randNumber)+20);
digitalWrite(BL,HIGH);
}

} //引用脉冲函数
delay(3000);
for(int i=0;i<100;i++)
{
servopulse(0);
}
}
}
if (!rfid.readCardSerial()){

digitalWrite(servopin,LOW);
digitalWrite(BL,LOW);
}
rfid.halt(); //指挥卡进入睡眠模式
}

这里有两个库文件。(

RFID.zip (8.89 KB, 下载次数: 90)
  、
LCD5110_CN.zip (14.94 KB, 下载次数: 52)
)

总装实验

电路连接的部分结束后,我使用了比较简陋的纸壳将整个装置包装起来。电路部分固定在了里面,再将整个包装粘合在门后,其中读卡器是在门缝走线(幸亏是木门)。


介绍视频如下:

后记

以上只是我想法的最基础版本,可以说是系统1.0版吧,但这样已经完成了最初的预想。我想这个基础版还是有很大的发展空间,完全可以基于此,进一步使整个寝室智能化。下一步我想加强系统的稳定性,以及增加密码键功能,开发出后续版本。也希望有兴趣的朋友那个给出宝贵的建议,大家一起分享快乐


爱板  爱板  爱板     https://www.cirmall.com
分享到:
回复

使用道具 举报

回答|共 33 个

倒序浏览

沙发

xiaopaohu123

发表于 2013-12-11 12:24:56 | 只看该作者

设计神人啊,这样的门还可以安门禁,佩服哦
板凳

dushanwu

发表于 2013-12-12 15:08:06 | 只看该作者

木头门表示很光彩照人呀!
MMA7660加速度传感器,不错,可以读取啦,哈哈,很有意思呀!
地板

dushanwu

发表于 2013-12-12 15:09:14 | 只看该作者

木头门表示很光彩照人呀!
MMA7660加速度传感器,不错,可以读取啦,哈哈,很有意思呀!
5#

kmdyc-1898696

发表于 2013-12-14 11:20:17 | 只看该作者

本帖最后由 kmdyc 于 2013-12-14 11:22 编辑

高手啊~不过这样安全不?还有舵机多长时间换一个?
6#

三少爷

发表于 2013-12-15 21:43:59 | 只看该作者

挺有创新性的              
7#

三少爷

发表于 2013-12-15 21:46:33 | 只看该作者

8#

GY@艳

发表于 2013-12-16 08:44:03 | 只看该作者

dushanwu 发表于 2013-12-12 15:09
木头门表示很光彩照人呀!

    你的点儿还真奇怪~~~
爱板  爱板  爱板     https://www.cirmall.com
9#

yingkongshi_3001387

发表于 2013-12-18 16:29:43 | 只看该作者

呵呵 只是个样机嘛,何必较真呢,以后会越做越好越稳定的,赞一个。可惜没看清是哪个大学的宿舍楼,哈哈。
10#

GY@艳

发表于 2013-12-19 09:00:13 | 只看该作者

yingkongshi 发表于 2013-12-18 16:29
呵呵 只是个样机嘛,何必较真呢,以后会越做越好越稳定的,赞一个。可惜没看清是哪个大学的宿舍楼,哈哈。 ...

你的点很牛歪歪呀,话说你都能了解别的大学宿舍楼吗?
爱板  爱板  爱板     https://www.cirmall.com
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条