资讯详情

Arduino+RFID来实现一卡通代替钥匙开启电动车

打开电动通代替钥匙开电动车。

简单的原理,通过RC522模块读取一卡通序列号,在程序中判断决定(继电器控制端输出状态),继电器控制端接电门

第一次打开继电器,第二次断开继电器……(实现上下车开关)

一、先晒图:

1.打开电源,Arduino,RFID RC522模块运行。

e27611d11fa1528596e6183ba3f1566f.png

二、一卡通靠近RC522 成功识别!信号灯亮,继电器工作导通被控制端。

三、一卡通靠近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

//整理时间:2013年.05.25

#include

#include

RFID rfid(10,5); //D10--读卡器MOSI引脚、D5--读卡器RST引脚

int led = 9;

int relay=7;

bool state=true;

void setup()

{

Serial.begin(9600);

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[0],HEX);

Serial.print(rfid.serNum[1],HEX);

Serial.print(rfid.serNum[2],HEX);

Serial.print(rfid.serNum[3],HEX);

Serial.print(rfid.serNum[4],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[0]==0x04&&type[1]==0x00)

Serial.println("MFOne-S50");

else if(type[0]==0x02&&type[1]==0x00)

Serial.println("MFOne-S70");

else if(type[0]==0x44&&type[1]==0x00)

Serial.println("MF-UltraLight");

else if(type[0]==0x08&&type[1]==0x00)

Serial.println("MF-Pro");

else if(type[0]==0x44&&type[1]==0x03)

Serial.println("MF Desire");

else

Serial.println("Unknown");

}

void ShowUser( unsigned char* id)

{

//EE 9B 9C 38 D1

if( id[0]==0xEE && id[1]==0x9B && id[2]==0x9C && id[3]==0x38 ) {

Serial.println("Hello Mary!");

state=RelayStatus(state);

}

else if(id[0]==0x24 && id[1]==0x12 && id[2]==0xE0 && id[3]==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 fals;

}

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=0;i<3;i++)

{

digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)

delay(1000);

digitalWrite(led, LOW); // turn the LED off by making the voltage LOW

delay(1000);

}

}

晚上不错应用实际了,看图。

work!

标签: 钥匙开关继电器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台