查看: 26006|回复: 33

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

  [复制链接]
  • TA的每日心情
    奋斗
    2014-7-16 09:10
  • 签到天数: 361 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2013-12-11 09:09:51 | 显示全部楼层 |阅读模式
    分享到:

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

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

    07-07-47-8.png


    07-10-52-75.jpg
    门禁系统1.0
    制作材料:

    Arduino UNO

    NOKIA 5110液晶屏

    RFID-RC522读卡器

    MG-996R舵机

    移动电源


    07-17-28-8.jpg

    首先,是将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)

    回复

    使用道具 举报

  • TA的每日心情
    开心
    2019-4-2 16:02
  • 签到天数: 257 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2013-12-11 12:24:56 | 显示全部楼层
    设计神人啊,这样的门还可以安门禁,佩服哦
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2021-3-15 10:18
  • 签到天数: 1027 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2013-12-12 15:08:06 | 显示全部楼层
    木头门表示很光彩照人呀!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2021-3-15 10:18
  • 签到天数: 1027 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2013-12-12 15:09:14 | 显示全部楼层
    木头门表示很光彩照人呀!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2020-1-4 12:47
  • 签到天数: 150 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2013-12-14 11:20:17 | 显示全部楼层
    本帖最后由 kmdyc 于 2013-12-14 11:22 编辑

    高手啊~不过这样安全不?还有舵机多长时间换一个?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2014-12-12 19:36
  • 签到天数: 45 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2013-12-15 21:43:59 | 显示全部楼层
    挺有创新性的              
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2014-12-12 19:36
  • 签到天数: 45 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2013-12-15 21:46:33 | 显示全部楼层
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2014-7-16 09:10
  • 签到天数: 361 天

    连续签到: 1 天

    [LV.8]以坛为家I

     楼主| 发表于 2013-12-16 08:44:03 | 显示全部楼层
    dushanwu 发表于 2013-12-12 15:09
    木头门表示很光彩照人呀!

        你的点儿还真奇怪~~~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2014-7-23 22:20
  • 签到天数: 96 天

    连续签到: 1 天

    [LV.6]常住居民II

    发表于 2013-12-18 16:29:43 | 显示全部楼层
    呵呵 只是个样机嘛,何必较真呢,以后会越做越好越稳定的,赞一个。可惜没看清是哪个大学的宿舍楼,哈哈。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2014-7-16 09:10
  • 签到天数: 361 天

    连续签到: 1 天

    [LV.8]以坛为家I

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

    你的点很牛歪歪呀,话说你都能了解别的大学宿舍楼吗?
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-3-29 18:26 , Processed in 0.192115 second(s), 33 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.