前言
出于兴趣,本人自己采用上网查询以及自己动脑做出了一个用IC卡开门的小实验,也是本人做出的第一个成品把。特地将如何做出ic卡的方法记录在这里,以后会继续更新本人做的别的实验。敬请关注哈
提示:以下是本篇文章正文内容,下面案例可供参考
一、准备物品?
一块Arduino的板子, 一块RC522的感应模块,一个12V的电子锁,一个继电器,一个可以提供12v电压的装置(本人采用的是8块1.5V的电池串联在一起)
二、使用步骤
1.加载库
在Arduino打开这个界面,然后点开管理库,会有如下的界面
安装第二个MFRC522.如果在这个库安装器找不到MFRC522的话,可以去GITHUB里下载库安装包进行下载库。
油管地址:https://www.youtube.com/watch?v=KQiVLEhzzV0
代码地址:https://www.viralsciencecreativity.com/post/arduino-rfid-sensor-mfrc522-tutorial
2.寻找源代码
本人是在老师一个博客找到了关于门禁卡的油管视频,然后在视频下找到了这个源代码。当然门禁卡源代码还有好多,我列出的只是其中一种。
油管地址
代码如下(示例):
//RFID
#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>
#define SS_PIN 10
#define RST_PIN 9
#define LED_G 4 //define green LED pin因为我的实验中没有用到LED灯,所以把继电器寄到了4端口
#define LED_R 5 //define red LED 同理没有用到LED所以之后程序中的LED_R对程序结果没有影响
#define BUZZER 2 //buzzer pin 2口是定义的蜂鸣器,依然是没有用到蜂鸣器,所以BUZZER对程序结果无影响。
为了检测卡是否被检测到,因为本人在做的过程中经常有卡不被检测的情况出现
int i=0;
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.
Servo myServo; //define servo name 控制舵机
void setup()
{
Serial.begin(9600); // Initiate a serial communication
SPI.begin(); // Initiate SPI bus
mfrc522.PCD_Init(); // Initiate MFRC522
// myServo.attach(3); //servo pin
// myServo.write(0); //servo start position
pinMode(LED_G, OUTPUT);
digitalWrite(LED_G, HIGH);
pinMode(LED_R, OUTPUT);
//pinMode(BUZZER, OUTPUT);
//noTone(BUZZER);
Serial.println("Put your card to the reader...");
Serial.println();
}
void loop()
{
//为了检测卡是否被检测到,因为本人在做的过程中经常有卡不被检测的情况出现
i++;
Serial.print(i);
Serial.print(LED_G);
// Look for new cards
if ( ! mfrc522.PICC_IsNewCardPresent())
{
return;
}
// Select one of the cards
if ( ! mfrc522.PICC_ReadCardSerial())
{
return;
}
//Show UID on serial monitor
Serial.print("UID tag :");
String content= "";
byte letter;
for (byte i = 0; i < mfrc522.uid.size; i++)
{
Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(mfrc522.uid.uidByte[i], HEX);
content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
content.concat(String(mfrc522.uid.uidByte[i], HEX));
}
Serial.println();
Serial.print("Message : ");
content.toUpperCase();
if (content.substring(1) == "27 42 90 B4") //change here the UID of the card/cards that you want to give access
{
Serial.println("Authorized access");
Serial.println();
delay(500);
digitalWrite(LED_G, LOW);
// tone(BUZZER, 500);
delay(300);
// noTone(BUZZER);
// myServo.write(180);
delay(2000);
// myServo.write(0);
digitalWrite(LED_G, HIGH);
}
else {
Serial.println(" Access denied");
// digitalWrite(LED_R, HIGH);
// tone(BUZZER, 300);
// delay(1000);
//digitalWrite(LED_R, LOW);
//noTone(BUZZER);
}
}
3.硬件连线
根据上图将Arduino与RC522连接起来。连接后实物如下图。
4读取卡号
将连接好的硬件连到电脑上,读取IC卡的卡号。
上传时注意选对开发板和端口
将程序上传到Arduino后将卡片放置RC522后,打开端口监视器,会出现一串字符如图所示
将27 42 90 B4(不同的卡该处的号也可能不同)替换到程序如图位置
将标黄的地方换成刚才端口监视器显示的数字
4连接继电器和电子锁
如图所示连接电子锁与继电器(图中更改为IN-Digital4)
连接后实物如图(可能有些凌乱,哈哈哈,不要在意)
5最后一步了
将连接好的硬件连接到电脑上,将程序上传到Arduino里,将IC卡贴近RC522,门锁的锁头会进去。
7成品展示
b站地址:https://www.bilibili.com/video/BV18b4y187Yn?spm_id_from=333.851.dynamic.content.click
8温馨提示
1、如果IC卡没办法检测到可以将电子锁断开,再检测一遍。可能是电子锁的连接有问题
2、一定要分清继电器的作用。继电器就是一个开关,并且分清继电器的各个口的作用。
3、如果有问题,一定一定一定要耐下心来将程序读一下子,搞明白程序中的逻辑关系,如果遇到没有放卡锁头进去,放卡锁头出来,必定是因为逻辑搞错了,只需要在程序中将逻辑换一下就可。