小白的RFID宿舍智能锁

作者太菜,只能给你们🐟。

小白的RFID宿舍智能锁

感谢https://blog.csdn.net/ling3ye/article/details/71036479作者。

背景故事


由于作者患有十级懒癌
经常忘带钥匙,故在各大论坛上搜寻攻略以盼早日实现回寝自由

想起了那些个坐在楼梯口被冷风吹的日子
为你我受冷风吹,忘带钥匙流眼泪

终于终于在某一天小菜鸡下了这个蛋,为寝室建设了一个民生工程

(听说有小黑盒能暴力破解RFID,故我的这个项目只能防君子,但话说人家买小黑盒还不如对着我这82年的老门踹一脚见效快。)


成品展示

正视图
(项目核心就是下面那个充电宝)
在这里刷卡!
(用电工胶带封装后的RFID模块)

开锁过程,忽略随便的封面

粗略流程


1.RFID读卡模块读入UID
2.验证成功
3.驱动舵机旋转
4.舵机把门栓拉开
5.舵机复位

材料准备


1.RFID读卡模块
某宝搜索MFRC-522,几块钱搞定,像我一样不会焊板子的记得让小二帮焊针脚!
2.Arduino开发板
某宝直接搜索,UNO R3 15-25块搞定
3.舵机
某宝搜索,作者用的是MG996R,十来块钱搞定
4.热熔胶枪
用于固定舵机,某宝直接搜索,十来块搞定
5.杜邦线-公对母
用于延长数据线,某宝直接搜索,长短自取
6.绳子,胶带
到处找找,或某宝随意
核心:充电宝
也可以直接插上充电器,但充电宝自带电源保护芯片更安全。(会焊电源保护芯片的大佬应该也不会看我这篇文章吧,哈哈哈)

制作过程


一.连接线路

1.舵机

舵机一共有3根线
红色-电压 接5v端口
棕色-地线 接GND
橙色-信号线 接8号口(可在代码中修改)

如果线的颜色不同百度其功能后正常接线

2.RFID模块
转载自文首链接
Arduino Uno <------> RFID-RC522

       10        <------>       SDA

       13        <------>       SCK

       11        <------>       MOSI

       12        <------>       MISO

       NULL不接  <------>       IRQ

       GND       <------>       GND

       9         <------>       RST

       3.3V      <------>       3.3V
二.上传代码

1.安装arduino IDE
官方论坛下载地址
不会安装可百度、csdn、哔哩哔哩

2.新建项目

导入MFRC522.h库 见文首链接程序部分,推荐第二种方法

a.打开Arduino编译器,上方导航栏 - 文件 - 新建。
b.将下列代码复制进去

#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>  
#define SS_PIN 10  //定义RC522的SDA引脚的接线位置。
#define RST_PIN 9  //定义RC522的RST引脚的接线位置。
#define PIN_SERVO 8 //定义舵机信号线的接线位置,这里定义的是8号口。

String refid1="";//先声明一个空的字符串全局变量。以便后面存储nuidPICC里面的数据。

Servo myservo;  //实例化类-舵机
MFRC522 rfid(SS_PIN, RST_PIN); //实例化类-RFID读卡模块
 
// 初始化数组用于存储读取到的NUID 
byte nuidPICC[4];
 
void setup() { 
  Serial.begin(9600);
  SPI.begin(); // 初始化SPI总线
  rfid.PCD_Init(); // 初始化 MFRC522 
  myservo.attach(PIN_SERVO); 
  myservo.write(0);   
}
 
void loop() {
 
  // 找卡
  if ( ! rfid.PICC_IsNewCardPresent())
    return;
 
  // 验证NUID是否可读
  if ( ! rfid.PICC_ReadCardSerial())
    return;
 
  MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
 
  // 检查是否MIFARE卡类型
  /*if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&  
    piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
    piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
    Serial.println("不支持读取此卡类型");
    return;
  }*/
  
  // 将NUID保存到nuidPICC数组
  for (byte i = 0; i < 4; i++) {
    nuidPICC[i] = rfid.uid.uidByte[i];
  }   
  Serial.print("十进制UID:");
  printHex(rfid.uid.uidByte, rfid.uid.size);
  Serial.println();
  
  //对读取的卡号“xxx”进行比较,注意数据类型。
  check();
  
  // 使放置在读卡区的IC卡进入休眠状态,不再重复读卡
  rfid.PICC_HaltA();
 
  // 停止读卡模块编码
  rfid.PCD_StopCrypto1();
  refid1="";
}
void unlock()
{
  myservo.write(180);//旋转角度
  delay(2200);//舵机复位延时,单位ms
  myservo.write(0);  //复位
}//这是驱动舵机的函数
void check()
{
  if(refid1=="这里填刷卡后控制台输出的UID"||refid1=="以此类推"||refid1=="有几张卡写几个"||refid1=="例如"||refid1=="123456789"||refid1=="987654")    
  {
    //判断为真,执行需要的程序。
    Serial.println("已验证");
    unlock();
  }
  else
  {
    //判断为假,执行需要的程序。
    Serial.println("验证失败");
    Serial.println(refid1);//打印不匹配的UID
  }
}//验证函数
void printHex(byte *buffer, byte bufferSize) {
  for (byte i = 0; i < bufferSize; i++) {
    Serial.print(buffer[i] < 0x10 ? " 0" : "");
    
 //这里对nuidPICC进行存储 
    refid1+=nuidPICC[i];
    


  }
   //这里对nuidPICC打印,看是是自己需要的数据。 
  Serial.print(refid1);
}

c.点击上方导航栏下面的那个 Nike (√) 进行编译。
d.编译完成后将Arduino开发板连接线插上电脑usb接口
e.连接成功后点击导航栏下面的那个右箭头 → 上传代码到开发板
f.按下图提示绑定端口(USB接口不同对应端口号不同)
绑定端口
g.打开上图工具列表中的串口显示器
h.将你需要添加的卡放在RFID模块上,串口监视器输出如下图
串口监视器
i.check()函数的位置,下图
check()函数位置
j.数据修改完毕后,重复一次c、e步骤即可完成

三.上门!

用热熔胶将舵机和开发板固定门上即可。

RFID模块推荐使用双面胶+巨型大胶带+电工胶固定。我刚好都有,haha

核心模块充电宝推荐使用双面胶+大胶带+塑料袋 制作收纳袋固定

大功告成

把钥匙全都丢掉[狗头]

  • 4
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值