TA的每日心情 | 擦汗 2014-7-18 09:38 |
---|
签到天数: 6 天 连续签到: 1 天 [LV.2]偶尔看看I
|
本帖最后由 ITEAD创易工作室 于 2014-12-19 09:49 编辑
RDM6300是一款能读125K RFID卡的模块,我们可以利用此身份识别功能结合舵机完成门禁的设计。今天就详细介绍其具体实现方法。
所需配件:
电源方面还需要一根micro数据线和一个移动电源。
步骤:
烧写固件:
下面开始进入主题了!
先给Nano烧写此次的门禁代码,因为我们的是micro的接口,所以要用micro的USB数据线。
纯代码,无需调用库,请给我们新来的小小工程师一点掌声,谢谢!
当然代码方面还可以优化,这个就交给大家来完善吧。
- 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[i]=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[i]>64) Num+=((Code[i])-55);
- else Num+=((Code[i])-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
|
-
|