设为首页收藏本站

极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 4724|回复: 56

【占坑】抛弃钥匙,寝室RFID门禁系统进化史...

[复制链接]

8

主题

3

好友

999

积分

高级会员

Rank: 4

发表于 2014-1-2 17:11:48 |显示全部楼层
本帖最后由 code-AR 于 2014-4-7 15:26 编辑

       不知道大家是否在学校生活中常常会有忘带钥匙的情况出现,每当忘带钥匙,室友不在寝室的话,站在寝室外等待各种尴尬。同时不知道是不是学校门锁老旧,开门比较纠结花时间。那时候就有制作自动门锁的想法。后来入手了RFID读卡器,可以正常读取市面上的Mifare S50,S70非接触智能卡,像学校的饭卡就可以读取。就构想了这个基于RFID的寝室门禁系统。
        系统原理是基于非接触式卡的序列号是唯一的,制造厂家在产品出厂前已将此序列号固化,不可再更改。这样不同的卡都是唯一的存在,可以利用读卡器读取卡的序列号,来判断卡的拥有者(像我的室友)。基本原理可以参考下图:

原理

原理

           
寝室RFID门禁系统1.0
        首先来一张全景图吧。
         

全图

全图

        
(1)        准备工作
制作材料:
        Arduino UNO
        NOKIA 5110液晶屏
        RFID-RC522读卡器
        MG-996R舵机
        移动电源

器件

器件


舵机

舵机
   

移动电源

移动电源


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

(2)        软件部分
主控部分用的的是Arduino Uno,使用了arduino IDE 1.04。
代码如下:
ARDUINO 代码复制打印
  1. #include <SPI.h>
  2. #include <RFID.h>
  3. #include <LCD5110_CN.h>
  4. #define servopin 7
  5. #define sensor 0
  6. #define BL 9
  7. LCD5110 myGLCD(2,3,4,5,6);//CLk-SCK,Din-MOSI,DC,RST-IO,CS-CE
  8. extern uint8_t SmallFont[];
  9.  
  10. RFID rfid(10,8);    //D10--读卡器SDA引脚、D8--读卡器RST引脚
  11.  
  12. //4字节卡序列号,第5字节为校验字节
  13. unsigned char serNum[5];
  14.  
  15. void servopulse(int angle)//定义一个脉冲函数
  16.  
  17. {
  18.  
  19.   int pulsewidth=(angle*11)+500;  //将角度转化为500-2480的脉宽值
  20.  
  21.   digitalWrite(servopin,HIGH);    //将舵机接口电平至高
  22.  
  23.   delayMicroseconds(pulsewidth);  //延时脉宽值的微秒数
  24.  
  25.   digitalWrite(servopin,LOW);     //将舵机接口电平至低
  26.  
  27.   delayMicroseconds(20000-pulsewidth);
  28.  
  29. }
  30. void setup()
  31. {
  32.    myGLCD.InitLCD();
  33.   Serial.begin(9600);
  34.   pinMode(BL,OUTPUT);
  35.   pinMode(servopin,OUTPUT);
  36.   myGLCD.setFont(SmallFont);
  37.   SPI.begin();
  38.   rfid.init();
  39. }
  40.  
  41. void loop()
  42. {
  43. /* int val1=analogRead(sensor);
  44.  if(val1>200)
  45.   {analogWrite(BL,512);}
  46.   else
  47.   {digitalWrite(BL,LOW);}*/
  48. //通过光敏,控制5110的背光
  49.  
  50.   long randNumber = random(0, 20);
  51.  
  52.  
  53.   unsigned char i,tmp;
  54.   unsigned char status;
  55.   unsigned char str[MAX_LEN];
  56.   unsigned char RC_size;
  57.  
  58.   //找卡
  59.   rfid.isCard();
  60.   //读取卡序列号
  61.   if (rfid.readCardSerial())
  62.   {
  63.     Serial.print("The card's number is  : ");
  64.     Serial.print(rfid.serNum[0]);
  65.     Serial.print(" , ");
  66.     Serial.print(rfid.serNum[1],BIN);
  67.     Serial.print(" , ");
  68.     Serial.print(rfid.serNum[2],BIN);
  69.     Serial.print(" , ");
  70.     Serial.print(rfid.serNum[2],BIN);
  71.     Serial.print(" , ");
  72.     Serial.print(rfid.serNum[4],BIN);
  73.     Serial.println(" ");
  74.  
  75.     if(rfid.serNum[0]==205||rfid.serNum[0]==170||rfid.serNum[0]==219||rfid.serNum[0]==117||rfid.serNum[0]==155){
  76.       for(int i=0;i<100;i++)
  77.       {
  78.         servopulse(45);
  79.         if(rfid.serNum[0]==205||rfid.serNum[0]==117||rfid.serNum[0]==155)
  80.         {
  81.           myGLCD.clrScr();
  82.           Serial.println("Welcome Mr.Xiao");
  83.           myGLCD.print("Welcome",int(randNumber)+20,int(randNumber));
  84.           myGLCD.print("Mr.Xiao",int(randNumber)+20,int(randNumber)+20);
  85.           analogWrite(BL,HIGH);
  86.         }
  87.         if(rfid.serNum[0]==219)
  88.         {
  89.           myGLCD.clrScr();
  90.           Serial.println("Welcome Mr.Yang");
  91.            myGLCD.print("Welcome",int(randNumber)+20,int(randNumber));
  92.           myGLCD.print("Mr.Yang",int(randNumber)+20,int(randNumber)+20);
  93.           digitalWrite(BL,HIGH);
  94.         }
  95.         if(rfid.serNum[0]==170)
  96.         {
  97.           myGLCD.clrScr();
  98.           Serial.println("Welcome Mr.Huang");
  99.         myGLCD.print("Welcome",int(randNumber)+20,int(randNumber));
  100.           myGLCD.print("Mr.Huang",int(randNumber)+20,int(randNumber)+20);
  101.           digitalWrite(BL,HIGH);
  102.         }
  103.  
  104.       }      //引用脉冲函数
  105.     delay(3000);
  106.     for(int i=0;i<100;i++)
  107.       {
  108.         servopulse(0);
  109.       }
  110.   }
  111.   }  
  112.     if (!rfid.readCardSerial()){
  113.  
  114.       digitalWrite(servopin,LOW);
  115.       digitalWrite(BL,LOW);
  116.   }
  117.     rfid.halt();                //指挥卡进入睡眠模式            
  118.   }

      
这里有两个库文件
LCD5110_Graph.zip (404.98 KB, 下载次数: 80)             RFID.zip (8.89 KB, 下载次数: 141)

(3)        试验品1.0
电路连接的部分结束后,我使用了比较简陋的纸壳将整个装置包装起来,将电路部分固定在了里面。然后将整个包装粘合在门后,其中读卡器是在门缝走线(还好是木门O(∩_∩)O哈哈~)。

走线

走线
    IMG_1023.JPG


这里有个效果视频


这里有几个问题,希望可以和大家探讨下:
1.电源供电部分?不知道有没有更好的供电方案,那个舵机供电太烦恼了,不得不用有两头供电的移动电源。
2.有没有自动激活好方法?希望能够实现晚上系统断电,早上系统激活工作。这样可以增强系统续航力。
3.更好的用户界面,像欢迎,查询。用点阵还是液晶屏?

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

使用道具 举报

8

主题

3

好友

999

积分

高级会员

Rank: 4

发表于 2014-1-2 17:12:41 |显示全部楼层
占楼备用...
回复

使用道具 举报

13

主题

1

好友

905

积分

高级会员

Rank: 4

发表于 2014-1-2 17:38:07 |显示全部楼层
哈哈,小心读卡模块被人偷走哦~~~~~
回复

使用道具 举报

5

主题

1

好友

1365

积分

金牌会员

Rank: 6Rank: 6

发表于 2014-1-2 17:53:28 |显示全部楼层
读卡器放在门里边读不到卡吗?如果被人拿走不哭死,移动电源多长时间充次电?
回复

使用道具 举报

8

主题

3

好友

999

积分

高级会员

Rank: 4

发表于 2014-1-2 18:59:50 |显示全部楼层
Cupid 发表于 2014-1-2 17:53
读卡器放在门里边读不到卡吗?如果被人拿走不哭死,移动电源多长时间充次电?

一般可以支持3-4天,所以希望改进供电部分。
回复

使用道具 举报

1

主题

0

好友

240

积分

中级会员

Rank: 3Rank: 3

发表于 2014-1-2 19:20:20 来自手机 |显示全部楼层
Damn_intuition 发表于 2014-1-2 17:38
哈哈,小心读卡模块被人偷走哦~~~~~

嗯嗯,直接拿走好了
回复

使用道具 举报

0

主题

0

好友

83

积分

注册会员

Rank: 2

发表于 2014-1-2 22:12:59 |显示全部楼层
几十块买个磁性门锁,控制电路依然是你那套东西,完美了
回复

使用道具 举报

31

主题

4

好友

2039

积分

金牌会员

Rank: 6Rank: 6

发表于 2014-1-2 23:03:27 |显示全部楼层
pipapi 发表于 2014-1-2 22:12
几十块买个磁性门锁,控制电路依然是你那套东西,完美了

有道理 这个应该是个比较好的方案 我也看一下比如下面这个

http://item.taobao.com/item.htm? ... &id=18770053569
回复

使用道具 举报

8

主题

3

好友

999

积分

高级会员

Rank: 4

发表于 2014-1-3 00:06:10 |显示全部楼层
pipapi 发表于 2014-1-2 22:12
几十块买个磁性门锁,控制电路依然是你那套东西,完美了

这个是寝室,还不太敢拆门锁
回复

使用道具 举报

7

主题

0

好友

186

积分

注册会员

Rank: 2

发表于 2014-1-3 09:29:45 |显示全部楼层
门是铁的吗?隔着铁不是RC522不能用了吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

Archiver|联系我们|极客工坊 ( 浙ICP备09023225号 )  

GMT+8, 2014-11-1 00:14 , Processed in 0.235050 second(s), 31 queries , Gzip On.

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部