博客园的第一篇博文就献给Arduino了。不知道能不能坚持自己喜欢的并且记录下来。
起码是个好的开始。
想实现一卡通代替钥匙开启电动车。
简单的原理,通过RC522模块读取一卡通的序列号,在程序中进行判断决定(继电器的控制端输出状态),继电器的被控端接电门锁。
对于识别通过的卡号第一次开启继电器,第二次断开继电器……(实现上下车开关)
一、先晒图:
1、开启电源,Arduino,RFID RC522模块运行。
2、一卡通靠近RC522 识别成功!信号灯亮,继电器工作导通被控制端。
3、一卡通靠近RC522 识别成功!信号灯熄灭,被控端断开。
二、连线部分
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
保留作者或是译者。
//整理者:极客工坊bg1lsy (lsy@sogou.com)
//整理时间:2013.05.25
#include <SPI.h>
#include <RFID.h> RFID rfid(,); //D10--读卡器MOSI引脚、D5--读卡器RST引脚 int led = ;
int relay=; bool state=true;
void setup()
{
Serial.begin();
SPI.begin();
rfid.init();
pinMode(led, OUTPUT);
pinMode(relay,OUTPUT);
digitalWrite(relay,HIGH);
} void loop()
{
unsigned char type[MAX_LEN];
//找卡
if (rfid.isCard( type)) {
Serial.println("Find the card!");
;
// Show card type
ShowCardType(type);
//读取卡序列号
if (rfid.readCardSerial()) {
Serial.print("The card's number is : ");
Serial.print(rfid.serNum[],HEX);
Serial.print(rfid.serNum[],HEX);
Serial.print(rfid.serNum[],HEX);
Serial.print(rfid.serNum[],HEX);
Serial.print(rfid.serNum[],HEX);
Serial.println(" ");
ShowUser(rfid.serNum);
}
//选卡,可返回卡容量(锁定卡片,防止多数读取),去掉本行将连续读卡
Serial.println(rfid.selectTag(rfid.serNum));
} rfid.halt();
} void ShowCardType( unsigned char* type)
{
Serial.print("Card type: ");
if(type[]==0x04&&type[]==0x00)
Serial.println("MFOne-S50");
else if(type[]==0x02&&type[]==0x00)
Serial.println("MFOne-S70");
else if(type[]==0x44&&type[]==0x00)
Serial.println("MF-UltraLight");
else if(type[]==0x08&&type[]==0x00)
Serial.println("MF-Pro");
else if(type[]==0x44&&type[]==0x03)
Serial.println("MF Desire");
else
Serial.println("Unknown");
} void ShowUser( unsigned char* id)
{
//EE 9B 9C 38 D1
if( id[]==0xEE && id[]==0x9B && id[]==0x9C && id[]==0x38 ) {
Serial.println("Hello Mary!");
state=RelayStatus(state);
}
else if(id[]==0x24 && id[]==0x12 && id[]==0xE0 && id[]==0x13) {
Serial.println("Hello MicroHao!");
state=RelayStatus(state);
}
else{
Serial.println("Hello unkown guy!");
BlinkLED(); }
}
bool RelayStatus(bool status)
{
if(status)
{
digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level) digitalWrite(relay,LOW);
return false;
}
digitalWrite(led, LOW); // turn the LED on (HIGH is the voltage level) digitalWrite(relay,HIGH);
return true;
}
void BlinkLED()
{
digitalWrite(relay,HIGH);
for(int i=;i<;i++)
{
digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
delay();
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay();
}
}
居然不懂怎么加入附件!!汗。
http://files.cnblogs.com/MicroHao/RFID.zip
新的一天啦,
晚上不错应用实际了,看图。
work!
不错,哈哈!