相关商品

  • Arduino Leonardo 莱昂纳多控制器 原装进口
  • Arduino 水蒸气传感器 雨水探测器 液位开关 湿度传感器 电子积木
  • Arduino 双H桥直流电机驱动板 步进电机驱动板 机器人配件
  • 1602液晶显示器 蓝白屏 LCD1602液晶Arduino互动界面 机器人配件
  • Arduino 12864点阵液晶 51单片机 带字库 带教程讲解 液晶显示屏
  • Arduino LCD12864 点阵液晶扩展板 12864液晶屏 送Arduino库文件
  • Arduino 磁感应传感器 磁力开关 数字传感器 电子积木
  • Arduino UNO R3 控制器 ATmega328P-PU+ATmega16U2 arduino 原装进口
  • 基于Arduino 双路大功率 电机驱动板 驱动器 6WD 越野机器人用
  • Arduino RFID 串口模块 电子标签 近场通信 IC卡感应 送卡和线
  • LCD2004字符液晶显示器 2004液晶屏 Arduino力荐显示 超越LCD1602
  • Arduino IIC LCD2004 I2C接口字符液晶显示器 带库文件 电子积木
  • Arduino Mini 05 Sparkfun原装进口 ATmega328 控制器
  • A-Star 32u4 Mini LV 可编程模块 ATmega32U4开发板 pololu原装
  • A-Star 32U4 Mini ULV 可编程模块 ATmega32U4开发板 Pololu原装
  • Arduino 直流电机驱动板 MiniMoto DRV8830 IIC/I2C Sparkfun原装
  • RoboClaw 2x7A 电机驱动板 (V5) 直流电机控制器 Pololu原装进口
  • RoboClaw 电机驱动板 2x30A 控制器 智能小车 Pololu 原装进口
  • Starduino UNO R3 控制器 ATmega328P-PU+ATmega32U2 (直插) 兼容Arduino
  • Starduino 透明亚克力外壳 控制器 Arduino 保护盒子 奥松机器人
  • 动手玩转 Arduino 爱上 Arduino 互动电子入门套件 Arduino必备教材
  • 4WD机器人调试助手v2.0软件 智能小车 Arduino 履带 WiFi蓝牙小车
  • SparkFun原装进口 Block for Intel® Edison 扩展板 Arduino扩展
  • 机智云开发板 Arduino UNO 传感器扩展板 GoKit智能硬件
  • 42BYGHW609步进电机 42HYGHW 步进电机 1.7A 3D 打印机 NEMA17
  • 学Arduino玩转机器人制作 爱上 Arduino套件 爱上制作图书 机器人制作知识大全 爱上机器人
  • Arduino 电流传感器 电流检测模块 过流保护模块 交流电检测
  • Arduino Yun Mini 控制器 ATmega32U4开发板 WIFI Linux原装限量
  • Arduino 9 Axes Motion Shield 9轴运动扩展板 三轴加速度计
  • Arduino M0 Pro 电路板 ATSAMD21G18 Arduino UNO 升级 原装
  • Arduino 条形LED模块 10段条状数码管 发光模块 梯度显示 短光条
  • Arduino UNO R3 配套亚克力外壳 拼装外壳 透明盒子 专用保护盒子
  • Arduino Steven 控制器 ATMEGA32U4 Arduino mini 控制器
  • Arduino 完全实战 arduino硬件学习 提供教学视频 现货
  • 原装进口 Arduino M0 开发板 ATSAMD21G1 ARM 控制器 A000103
  • 原装进口 Arduino Mega 2560 控制器板 Arduino uno升级 A000067
  • 基于Arduino UNO R3开发板 乐高外壳 UNO保护外壳 透明盒子 注塑外壳
  • 官方版 完美图解物联网IoT实操第二册:ESP8266 Arduino Cordova物联网书籍
  • 当前位置: 首页 > 应用教程 > 【创客学堂】借助Arduino做一个RFID门禁系统

    【创客学堂】借助Arduino做一个RFID门禁系统

    编辑:Jason2014-12-15 浏览次数:4253

    在学校生活中偶尔会遇到忘带钥匙的情况出现,如果室友碰巧也不在寝室的话,自己只能站在寝室外等待。同时不知道是否宿舍门锁老旧的原因,开门比较纠结花时间,时常有制作自动门锁的想法。后来入手了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

    #include

    #include

    #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[i]=comdata[i];

    }

    //找卡

    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.h, LCD5110_CN.h)

    总装实验

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

    介绍视频如下:


    后记

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

    相关文章:

    Arduino兼容的3D手势控制器


    用Arduino做一个简单的音乐播放器


    玩转Arduino-脉宽调制(PWM)实例


    玩转Arduino-脉宽调制


    玩转Arduino-串口通信


    玩转Arduino-编程语言


    玩转Arduino-闪烁的LED


    什么是Arduino?今天开始学!


    • 用户评价

    暂时还没有任何用户评论

    总计 0 个记录,共 1 页。 第一页 上一页 下一页 最末页
    用户名: 匿名用户
    E-mail:
    评价等级:
    评论内容:
    验证码:
    captcha

    Hi,大家好,我是小奥!

    欢迎来到奥松机器人的世界!

    需要咨询服务请点小奥哦!

    • 销售咨询: 销售咨询
    • 销售咨询: 销售咨询
    • 技术支持: 技术支持
    • 咨询电话:
      0451-86628691
    Top