ITEAD创易工作室 发表于 2014-8-2 12:33:43

arduino 门禁完全教程

本帖最后由 ITEAD创易工作室 于 2014-12-19 09:48 编辑

http://player.youku.com/player.php/sid/XNzQ5Nzg2Mzg4/v.swf

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

所需配件:



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

步骤:

烧写固件:

下面开始进入主题了!

先给Nano烧写此次的门禁代码,因为我们的是micro的接口,所以要用micro的USB数据线。
纯代码,无需调用库,请给我们新来的小小工程师一点掌声,谢谢!当然代码方面还可以优化,这个就交给大家来完善吧。

long Password1=1111111;//稍后要改为读取到的卡号1
long Password2=2222222;//稍后要改为读取到的卡号2
int flag=0,RX_Flag=0;//串口标志
char Code; //用于存放读到串口数据
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;//数据清零
   }   
}
}



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

使用时需将待识别的卡号修改为自己的,可自行添加多个可识别的卡号。

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

3. 硬件连接:

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



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



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



相关产品资料下载:
RDM6300 ID读卡模块:http://pan.baidu.com/s/1kTytG7X
micro Nano资料及驱动:http://pan.baidu.com/s/1hqCDaq4











嵌入式linux 发表于 2014-8-2 16:13:54

这个挺好的,挺有意思的,这个在深圳的租房里面吧,呵呵:lol

学慧放弃 发表于 2014-8-2 21:56:31

希望完善一些

mjgzdnw 发表于 2014-8-2 22:13:28

没想到9克舵机能拖得动拉销。

Ansifa 发表于 2014-8-3 21:07:52

淘宝一个315无线遥控开关就可以完成了:lol

ITEAD创易工作室 发表于 2014-8-4 09:46:46

嵌入式linux 发表于 2014-8-2 16:13 static/image/common/back.gif
这个挺好的,挺有意思的,这个在深圳的租房里面吧,呵呵

教程已补充完善。你家的不是这种拉栓锁?那就不太合适了。

ITEAD创易工作室 发表于 2014-8-4 09:47:07

学慧放弃 发表于 2014-8-2 21:56 static/image/common/back.gif
希望完善一些

教程已补充完善。谢谢支持!

ITEAD创易工作室 发表于 2014-8-4 09:48:20

mjgzdnw 发表于 2014-8-2 22:13 static/image/common/back.gif
没想到9克舵机能拖得动拉销。

具体的拉力还要看门栓的摩擦力。教程已补充完善。

ITEAD创易工作室 发表于 2014-8-4 09:49:32

Ansifa 发表于 2014-8-3 21:07 static/image/common/back.gif
淘宝一个315无线遥控开关就可以完成了

作为一个超级版主,竟然公然让我们去淘宝买成品。我真的为极客和极客工坊感到伤心啊!

pandada 发表于 2014-8-4 09:51:59

非常有趣啊!!!!!!!

philhoo 发表于 2014-8-4 21:05:58

非常有创意,舵机拉动门锁,不错。

电子狂人 发表于 2014-8-4 21:34:03

这个挺有意思的

panqi 发表于 2014-8-4 23:03:04

谢谢分享。。。。。。。。。。

ITEAD创易工作室 发表于 2014-8-5 10:07:24

philhoo 发表于 2014-8-4 21:05 static/image/common/back.gif
非常有创意,舵机拉动门锁,不错。

很简单的原理。:lol

ITEAD创易工作室 发表于 2014-8-5 17:04:44

电子狂人 发表于 2014-8-4 21:34 static/image/common/back.gif
这个挺有意思的

谢谢支持!
页: [1] 2
查看完整版本: arduino 门禁完全教程