No003. 基于Arduino的射频卡控制功能

1| 功能介绍

射频卡控制模块主要是对IC/ID卡进行识别,并将接收到的信息传输给Arduino开发板,再由Arduino开发板对其进行认证,此部分编译环境为Arduino IDE,在信息认证匹配后控制舵机开始工作,打开门锁,实现自动开门。在此已经设定好了相应的IC/ID卡,进行多次启动后,使舵机旋转一个适合的角度,恰好打开门锁。元件包括MFRC522模块、Arduino开发板和舵机。

2| 模块

Adruino UNO

RFID-RC522

舵机
器件名 引脚名 Arduino开发板引脚
MFRC522 RST 9
MFRC522 SDA 10
MFRC522 MOSI 11
MFRC522 MISO 12
MFRC522 SCK 13
MFRC522 VCC 3.3V
MFRC522 GND GND
舵机(SG90) URXD 8
舵机(SG90) VCC 5V
舵机(SG90) GND GND

3| 代码实现

需要加载MFRC522.h函数库

// --------------
// 射频卡控制模块
//----------------
# include 
# include 
# define USER_NUM 4


byte servoRun = 0;   //舵机是否运行
MFRC522 rfid(10, 9); /*此处引用了库文件RFID, Arduino开发板引脚10接RFID中的SDA、引脚8接RST、引脚13接SCK、引脚11接MOSI、引脚12接MISO,RQ不接 */
int userCard[USER_NUM][4] ={
// RFID定义库
  {170,128,31,63},
  {170,128,31,63},
  {170,128,31,63},
  {170,128,31,63}
  };
  
void setup() {   //初始化
  Serial.begin(9600);      // 
  SPI.begin();      
  rfid.PCD_Init();           // RFID 初始化
  pinMode(8,OUTPUT);   //舵机定义引脚及工作模式 
}

void loop() {
  if(servoRun == 1){            // 舵机运行变量若为1,则运行。
    servoControl();             // 舵机控制函数。
  }
  
  
  if (!rfid.PICC_IsNewCardPresent()) return;       // 找卡
  if (!rfid.PICC_ReadCardSerial())   return;       // 验证NUID是否可读
  MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
  if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI 
  && piccType != MFRC522::PICC_TYPE_MIFARE_1K 
  && piccType != MFRC522::PICC_TYPE_MIFARE_4K){// 检查是否MIFARE卡类型
    Serial.println("不支持读取此卡类型");
    return;
  }
  
  byte i;
  for (i=0; i

补充:

  1. SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,越来越多的芯片集成了这种通信协议,比如AT91RM9200。

利用SPI可以在软件的控制下构成各种系统。如一个主控制器和几个从控制器、几个从控制器相互连接构成多主机系统(分布式系统)、一个主控制器和一个或几个从I/O设备所构成的各种系统等。在大多数应用场合,可以使用一个主控制器作为主控机来控制数据,并向一个或几个从外围器件传送该数据。从器件只有在主控机发命令时才能接收或发送数据,其数据的传输格式是高位(MSB)在前,低位(LSB)在后。单主系统只有一台主控制器,其他均为从控制器。

你可能感兴趣的:(No003. 基于Arduino的射频卡控制功能)