赞
踩
无线射频识别即射频识别技术(Radio Frequency Identification,RFID),是自动识别技术的一种,通过无线射频方式进行非接触双向数据通信,利用无线射频方式对记录媒体(电子标签或射频卡)进行读写,从而达到识别目标和数据交换的目的。
MF RC522 是应用于13.56MHz 非接触式通信中高集成度读写卡系列芯片中的一员。是NXP公司针对“三表”应用推出的一款低电压、低成本、体积小的非接触式读写卡芯片,是智能仪表和便携 式手持设备研发的较好选择
硬件 | 数量 |
---|---|
Arduino UNO | 1 |
USB串口线 | 1 |
RFID-RC522 | 1 |
标准S50空白卡 | 1 |
异型卡 | 1 |
杜邦线 | 若干 |
RC522模块各引脚功能
RC522模块引脚 | 功能 |
---|---|
SDA | 串行数据线(IIC接口时的I/O线);在SPI接口中为NSS(从机标志管脚) |
SCK | 连接MCU的SCK信号 |
MOSI | MCU输出,RC522接收(即主设备输出,从设备输入) |
MISO | MCU输出,RC522接收(即主设备输出,从设备输入) |
IRQ | 中断请求输出 |
GND | 接地 |
RST | 复位 |
3.3V | VCC,工作电 |
RC522射频模块 | Arduino | I2C_LCD1602 | Arduino | |
---|---|---|---|---|
3.3V | 3.3V | VCC | 5V | |
RST | 2 | GND | GND | |
GND | GND | SDA | A4 | |
IRQ | 7 | SCL | A5 | |
MISO | 3 | |||
MOSI | 4 | |||
SCK | 5 | |||
SDA | 6 |
https://download.csdn.net/download/weixin_43757283/11727332
LCD1602_I2C转接口的库文件(LiquidCrystal_I2C.h) ↓↓↓
#include <rfid.h> //射频模块 #include <LiquidCrystal_I2C.h> //I²C接口 #include <Wire.h> //LCD #include <Servo.h> //舵机 LiquidCrystal_I2C lcd(0x27,16,2); //0x27:I2C接口的地址 16,2:可显示16*2的字符串 Servo myservo; //创建一个伺服对象"myservo" RFID rfid; //创建一个可变类型的RFID uchar serNum[5]; //创建一个数组来储存ID void setup() { lcd.init(); //初始化 LCD lcd.backlight(); //打开LCD的背光 Serial.begin(9600); rfid.begin(7, 5, 4, 3, 6, 2); //rfid.begin(IRQ_PIN,SCK_PIN,MOSI_PIN,MISO_PIN,NSS_PIN,RST_PIN) delay(100); rfid.init(); //初始化 RFID lcd.setCursor(0,0); //把光标定在显示屏的第0列第0行 lcd.print(" Welcome! "); //在LCD" Welcome! " myservo.attach(8); //说明8号针脚的舵机连接到伺服对象上 myservo.write(0); //舵机归位0° delay(2000); //delay 2s } void loop() { uchar status; uchar str[MAX_LEN]; //检测是否有ID卡,返回ID卡的类型 status = rfid.request(PICC_REQIDL, str); if (status != MI_OK) //检测是否有卡 { return; } //显示卡的类型 rfid.showCardType(str); //防止冲突,返回4字节的序列号的卡片 status = rfid.anticoll(str); if (status == MI_OK) { Serial.print("The card's number is: "); lcd.setCursor(0,0); //LCD的坐标:0列,0行 lcd.print(" ID: "); memcpy(serNum, str, 5); rfid.showCardID(serNum); //show the card ID Serial.println(); //确认IC卡的ID是否为 3AA9EA0B uchar* id = serNum; if(id[0]==0x3A && id[1]==0xA9 && id[2]==0xEA && id[3]==0x0B) { //该卡号可以更改为自己的IC卡号,包括校园卡等 myservo.write(180); //舵机旋转至180° Serial.println("Hello Arduino!"); lcd.setCursor(0,1); //显示的坐标:0列,1行 lcd.print(" Hello Arduino! "); delay(2000); lcd.clear(); //LCD清屏 myservo.write(0); } else { //若卡号与上述不符 Serial.println("Hello unkown guy!"); lcd.setCursor(0,1); lcd.print("Hello unkown guy"); delay(2000); lcd.clear(); } } lcd.setCursor(0,0); lcd.print(" Welcome! "); delay(2000); rfid.halt(); //让IC卡进入休眠状态、防抖 }
由于本实验代码中的ID号是套件中的白卡的ID号,需要将其中的卡号换成自己的IC卡的ID号才能识别成功
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。