查看: 22309|回复: 11

Arduino门禁完全教程

[复制链接]
  • TA的每日心情
    开心
    2016-1-27 11:13
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2014-8-2 12:32 | 显示全部楼层 |阅读模式
    本帖最后由 ITEAD创易工作室 于 2014-12-19 09:53 编辑



    RDM6300是一款能读125K RFID卡的模块,我们可以利用此身份识别功能结合舵机完成门禁的设计。今天就详细介绍其具体实现方法。

    所需配件:

    rdm6300-1.jpg

    电源方面还需要一根micro数据线和一个移动电源。

    步骤
    烧写固件:

    下面开始进入主题了!

    先给Nano烧写此次的门禁代码,因为我们的是micro的接口,所以要用micro的USB数据线。

    纯代码,无需调用库,请给我们新来的小小工程师一点掌声,谢谢!当然代码方面还可以优化,这个就交给大家来完善吧。

    kittenblock中小学创客名师推荐的图形化编程软件

    
    long Password1=11402124;//可识别卡号1,此处修改卡号
    long Password2=7927290;//可识别卡号2,此处修改卡号
    int flag=0,RX_Flag=0;//串口标志
    char Code[14]; //用于存放读到串口数据
    long Num=0;//解码数据
    int serpin=7;//舵机引脚定义
    int Door=0;
    
    void Read_ID(void)
    {
        int i=0;
        char temp;
        for(i=0;(Serial.available()>0);i++)// 串口空闲
        //while(Serial.available()>0)
        {
          temp=Serial.read();
          Serial.print(temp);
          delay(2);
          Serial.println(i);
          if(temp==0X02)  //接收起始位
            {
             flag=1;i=0;RX_Flag=0;//
            }
          if(flag==1)//检测到起始位,开始接收数据
          {
            if(temp==0X03)//检测到结束码,
            {
             flag=0;  //标志清零
             if(i==13) RX_Flag=1;//第13位为结束码,收到数据,标志置1
             else RX_Flag=0;
           break;
            }
             Code=temp;
          } 
        }       
         flag=0;//标志清零
    }
    
    void pulse( int serpin,int angle)
    {
      int width;//舵机输出脉宽
      width=(angle*11)+500;//将角度转化为500-2480的脉宽值
      digitalWrite(serpin,HIGH);//将舵机接口电平至高
      delayMicroseconds(width);//延时脉宽值的微秒数
      digitalWrite(serpin,LOW);//将舵机接口电平至低
      delay(20-width/1000);
    }
    
    void setup() 
    {
      pinMode(13,OUTPUT);
      pinMode(serpin,OUTPUT);
      Serial.begin(9600);
      Serial.println("This is a test for access control system");
      delay(100);
      Serial.println(Password1);
    }
    void loop()
    {
      int i;
      long temp=0,time=0;
      RX_Flag=0;
      while(1)
      {
       Read_ID();
      if(RX_Flag==1)
      {
        for(i=5;i<11;i++)//数据解码,6位字符转为十六进制数,对应十进制卡号
        {
          Num<<=4;
            if(Code>64)  Num+=((Code)-55);
            else Num+=((Code)-48);
            Serial.println(Num);
        }    
        Serial.println(Num);    
      if((Num==Password1)||(Num==Password2))//识别成功
      {
          digitalWrite(13,HIGH);
          delay(5);
          for(int i=0;i<=50;i++)//给予舵机足够的时间让它转到指定角度
         {
            pulse(serpin,20);//引用脉冲函数 
          }
          delay(2000);
          while(analogRead(Door)>400);
          delay(1000);
          digitalWrite(13,LOW);
          delay(5);
          for(int i=0;i<=50;i++)//给予舵机足够的时间让它转到指定角度
         {
            pulse(serpin,180);//引用脉冲函数
          }
       }
     //  else  识别失败
    //    {
    //      digitalWrite(13,LOW);
    //    for(int i=0;i<=50;i++)//给予舵机足够的时间让它转到指定角度
    //     {
    //        pulse(serpin,90);//引用脉冲函数
    //      }
    //     }  
        while(Serial.read()>0);//清除缓存区
        RX_Flag=0;//标志位清零
        Num=0;//数据清零
       }   
      }
    }



    QQ图片20140802104726.jpg

    复制卡号,记下来。多张卡,就记下多个号。

    使用时需将待识别的卡号修改为自己的,可自行添加多个可识别的卡号。重新烧写一遍即可。

    逻辑设计:RDM6300识别到正确的卡号后,舵机旋转180度开门,如果门没被推开,磁传感器还能感应到磁力,3秒后舵机归位锁门;如果读卡成功,推门进入,磁传感器感应不到磁力,舵机保持180度开门状态,关上门,磁传感器感应到磁力,延时一秒舵机归位锁门。

    3. 硬件连接:

    按图链接主控板Iteaduino NANO和RDM6300模块及舵机,如图1所示,用硬件串口读取RDM6300所识别的卡号,用数字输出脚7脚输出PWM波控制舵机,A0取磁传感器的值。Nano刚好有3对电源脚。

    接线.jpg

    下面是uno的接线示意图,可以不用到磁开关,看个人实际应用吧。

    uno rdm6300.jpg

    最终效果如图,当然小伙伴们可以用个盒子把配件都装起来。

    3333.jpg

    相关产品资料下载:
    RDM6300 ID读卡模块:http://pan.baidu.com/s/1kTytG7X
    micro Nano资料及驱动:http://pan.baidu.com/s/1hqCDaq4
    版主,我这篇能申请加精吗?

    duka.jpg
  • TA的每日心情
    奋斗
    2017-5-25 18:27
  • 签到天数: 47 天

    [LV.5]常住居民I

    发表于 2014-8-6 09:17 | 显示全部楼层
    不会只控制有拉扣那个锁头吧,其他几个锁头怎么控制。
  • TA的每日心情
    开心
    2016-1-27 11:13
  • 签到天数: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2014-8-6 10:48 | 显示全部楼层
    conquester 发表于 2014-8-6 09:17
    不会只控制有拉扣那个锁头吧,其他几个锁头怎么控制。

    这种拉扣锁头是最容易的了。其他什么球形锁、旋钮锁就需要更大的力了。

    该用户从未签到

    发表于 2014-8-6 13:33 | 显示全部楼层
    ITEAD创易工作室 发表于 2014-8-6 10:48
    这种拉扣锁头是最容易的了。其他什么球形锁、旋钮锁就需要更大的力了。 ...

    楼主可以试试电磁锁,通电就缩回去的那种,加一个继电器,设置成延时(因为不能一直给电磁锁通电,电流有点大),就不用舵机那么麻烦了,就是电磁锁需要的电压要大些(一般12V左右)。
  • TA的每日心情
    开心
    2016-1-27 11:13
  • 签到天数: 1 天

    [LV.1]初来乍到

     楼主| 发表于 2014-8-6 16:53 | 显示全部楼层
    原理都差不多的。用电磁锁就直接用220v降压供电了。高级教程
  • TA的每日心情
    开心
    2016-1-7 15:31
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2016-1-7 16:43 来自手机 | 显示全部楼层
    求教楼主,要是用IC卡模块RFID RC522呢?代码应该怎么样写?

    该用户从未签到

    发表于 2016-6-1 22:12 | 显示全部楼层
    你的卡号是十进制的还是十六进制的?我的是十六进制的,有字母,该怎么输入。

    该用户从未签到

    发表于 2016-6-3 09:33 来自手机 | 显示全部楼层
    我想问下可不可以用学校里的校园卡来识别,要怎样读取校园卡的代码呢?

    该用户从未签到

    发表于 2016-12-21 20:24 来自手机 | 显示全部楼层
    我'将代码传入arduino板怎么没有反应

    该用户从未签到

    发表于 2016-12-21 20:29 来自手机 | 显示全部楼层
    我将代码传入arduino板怎么没有反应'
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    Arduino lcd屏幕亮了但是不显示字符
    Arduino lcd屏幕亮了但是
    Arduino的lcd屏亮了但是上面没有字符显示,串进去的滑动变阻器也旋过了,但是还是没有
    【原创】全球最小口袋3D打印机mini one直播教程贴
    【原创】全球最小口袋3D打
    最近闲得蛋疼,没事搞个掌上3D打印机,先放效果图吧。 搞了半天,终于能正常打印,
    [限时福利]5分钟带你快速了解新一代开发板:M5STACK
    [限时福利]5分钟带你快速
    一、什么是M5Stack M5Stack是一种模块化、可堆叠扩展的开发板,每个模块
    【Arduino】108种传感器模块系列实验(98)---L298N电机驱动板
    【Arduino】108种传感器模
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
    两个ESP8266通过云端实现远程数据交互
    两个ESP8266通过云端实现
    原理简述:利用发布订阅模式。一个ESP8266作为消息发布者,另一个ESP8266作为消息订阅
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表