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

davisl
发布于 2020-12-4 18:28
浏览
0收藏

想实现一卡通代替钥匙开启电动车。

 

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

对于识别通过的卡号第一次开启继电器,第二次断开继电器……(实现上下车开关)

 

一、先晒图:

 

1、开启电源,Arduino,RFID RC522模块运行。

Arduino+RFID来实现一卡通代替钥匙开启电动车-鸿蒙开发者社区

2、一卡通靠近RC522 识别成功!信号灯亮,继电器工作导通被控制端。Arduino+RFID来实现一卡通代替钥匙开启电动车-鸿蒙开发者社区

3、一卡通靠近RC522 识别成功!信号灯熄灭,被控端断开。

Arduino+RFID来实现一卡通代替钥匙开启电动车-鸿蒙开发者社区

 

二、连线部分

 

  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 <SPI.h>
#include <RFID.h>

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 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=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);
  }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.

晚上不错应用实际了,看图。Arduino+RFID来实现一卡通代替钥匙开启电动车-鸿蒙开发者社区

work!Arduino+RFID来实现一卡通代替钥匙开启电动车-鸿蒙开发者社区

 

标签
RFID.zip 8.89K 37次下载
已于2020-12-4 18:28:36修改
收藏
回复
举报


回复
    相关推荐