讀卡距離最大5CM。線圈電感47~68uH
RDM6300 是一款能讀125K RFID卡的模塊,我們可以利用此身份識別功能結合舵機完成門禁的設計。今天就詳細介紹其具體實現方法。
所需配件:
步驟
1.燒寫固件:
先給Nano燒寫此次的門禁代碼,因為我們的是micro的接口,所以要用micro的USB數據線。
純代碼,無需調用庫,當然代碼方面還可以優化,這個就交給大家來完善吧。
long Password1=1111111;//稍後要改為讀取到的卡號1
long Password2=2222222;//稍後要改為讀取到的卡號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度開門狀態,關上門,磁傳感器感應到磁力,延時一秒舵機歸位鎖門。
使用時需將代碼的最前面兩行的卡號修改為正確的卡號,可自行添加多個可識別的卡號。
2.硬件連接:
按圖鏈接主控板Iteaduino NANO和RDM6300模塊及舵機,如圖1所示,用硬件串口讀取RDM6300所識別的卡號,用數字輸出腳7腳輸出PWM波控制舵機,A0取磁傳感器的值。Nano剛好有3對電源腳。
下面是uno的接線示意圖,可以不用到磁開關,看個人實際應用吧。
打開arduino IDE即可使用串口監視器查看讀取到的卡號:
複製該卡號,黏貼到程序的最前面的卡號。多張卡,就添加多個號。再把正確的代碼燒寫一次到主控板即可。
最終效果如圖: