Arduino+RFID RC522 +繼電器

博客園的第一篇博文就獻給Arduino了。不知道能不能堅持本身喜歡的而且記錄下來。git

起碼是個好的開始。oop

 

想實現一卡通代替鑰匙開啓電動車。ui

簡單的原理,經過RC522模塊讀取一卡通的序列號,在程序中進行判斷決定(繼電器的控制端輸出狀態),繼電器的被控端接電門鎖。spa

對於識別經過的卡號第一次開啓繼電器,第二次斷開繼電器……(實現上下車開關)3d

 

1、先曬圖:code

一、開啓電源,Arduino,RFID RC522模塊運行。blog

二、一卡通靠近RC522 識別成功!信號燈亮,繼電器工做導通被控制端。ip

三、一卡通靠近RC522 識別成功!信號燈熄滅,被控端斷開。get

 

2、連線部分博客

  Arduino                                               RC522 (工做電壓3.3V)

· D5                   <------------->             RST    (這個腳不接貌似也能夠)

· D10                 <------------->             SDA   (RC522中即爲CS)

· D11                 <------------->             MOSI

· D12                 <------------->             MISO

· D13                 <------------->             SCK

· VCC                 <------------->             VCC

· GND                 <------------->             GND

 

                                                            繼電器模塊控制端

· D7                 <------------->              In1

· VCC               <------------->             VCC

· GND               <------------->             GND

保留做者或是譯者。

  1 //整理者:極客工坊bg1lsy (lsy@sogou.com)
  2 //整理時間:2013.05.25
  3 #include <SPI.h>
  4 #include <RFID.h> 
  5 
  6 RFID rfid(10,5);   //D10--讀卡器MOSI引腳、D5--讀卡器RST引腳
  7 
  8 int led = 9;
  9 int relay=7;
 10 
 11 bool state=true;
 12 void setup()
 13 {
 14   Serial.begin(9600);
 15   SPI.begin();
 16   rfid.init();
 17   pinMode(led, OUTPUT);  
 18   pinMode(relay,OUTPUT);
 19   digitalWrite(relay,HIGH);
 20 }
 21 
 22 void loop()
 23 {
 24   unsigned char type[MAX_LEN];
 25   //找卡
 26   if (rfid.isCard( type)) {
 27     Serial.println("Find the card!"); 
 28     ;
 29     // Show card type
 30     ShowCardType(type);
 31     //讀取卡序列號
 32     if (rfid.readCardSerial()) {
 33       Serial.print("The card's number is  : ");
 34       Serial.print(rfid.serNum[0],HEX);
 35       Serial.print(rfid.serNum[1],HEX);
 36       Serial.print(rfid.serNum[2],HEX);
 37       Serial.print(rfid.serNum[3],HEX);
 38       Serial.print(rfid.serNum[4],HEX);
 39       Serial.println(" ");
 40       ShowUser(rfid.serNum);
 41     }
 42     //選卡,可返回卡容量(鎖定卡片,防止多數讀取),去掉本行將連續讀卡
 43     Serial.println(rfid.selectTag(rfid.serNum));
 44   }
 45 
 46   rfid.halt();
 47 }
 48 
 49 void ShowCardType( unsigned char* type)
 50 {
 51   Serial.print("Card type: ");
 52   if(type[0]==0x04&&type[1]==0x00) 
 53     Serial.println("MFOne-S50");
 54   else if(type[0]==0x02&&type[1]==0x00)
 55     Serial.println("MFOne-S70");
 56   else if(type[0]==0x44&&type[1]==0x00)
 57     Serial.println("MF-UltraLight");
 58   else if(type[0]==0x08&&type[1]==0x00)
 59     Serial.println("MF-Pro");
 60   else if(type[0]==0x44&&type[1]==0x03)
 61     Serial.println("MF Desire");
 62   else
 63     Serial.println("Unknown");
 64 }
 65 
 66 void ShowUser( unsigned char* id)
 67 {
 68   //EE 9B 9C 38 D1 
 69   if( id[0]==0xEE && id[1]==0x9B && id[2]==0x9C && id[3]==0x38 ) {
 70     Serial.println("Hello Mary!");
 71     state=RelayStatus(state);
 72   } 
 73   else if(id[0]==0x24 && id[1]==0x12 && id[2]==0xE0 && id[3]==0x13) {
 74     Serial.println("Hello MicroHao!");
 75     state=RelayStatus(state);
 76   }
 77   else{
 78     Serial.println("Hello unkown guy!");
 79     BlinkLED();
 80 
 81   }
 82 }
 83 bool RelayStatus(bool status)
 84 {
 85   if(status)
 86   {
 87     digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
 88 
 89     digitalWrite(relay,LOW);
 90     return false;
 91   } 
 92   digitalWrite(led, LOW);   // turn the LED on (HIGH is the voltage level)
 93 
 94   digitalWrite(relay,HIGH);
 95   return true;
 96 }
 97 void BlinkLED()
 98 { 
 99   digitalWrite(relay,HIGH);
100   for(int i=0;i<3;i++)
101   {
102     digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
103     delay(1000); 
104     digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
105     delay(1000);
106   } 
107 }

 


 

 竟然不懂怎麼加入附件!!汗。


http://files.cnblogs.com/MicroHao/RFID.zip


新的一天啦,

晚上不錯應用實際了,看圖。

work!

不錯,哈哈!

相關文章
相關標籤/搜索