用RC522与arduino做一个简单的门禁系统

用RC522与arduino做一个简单的门禁系统

插本成功要去新学校了,结果发现新学校宿舍没有电梯没有电子门(虽然海景房很香)。这对于住惯养老院的我属实难受所所以打算自己也整一个IC卡的门禁系统。然后想着有没有前人的参考让我好借鉴一下(其实是偷懒)。然后在知乎看到了个高度契合的文章。

大家也可以参考下

https://zhuanlan.zhihu.com/p/66467989

然后按照大概思路我也买了些材料
一个UNO3 带线 16.8
一个MFRC-522 3.28
再来一个MFRC-522自带引脚版本(第一块参考了知乎的代码跑不动以为是芯片自己没焊好,重新焊坏了后含泪买了新板子,其实买个带引脚的会好点,方便自己焊还要烙铁焊锡啥的)
一个MG90S金属舵机 9.8
一包LED 3.9
杜邦线啥的 3.55
一个高中不好好学习玩手机留下来的旧电宝 四舍五入不要钱

材料图大概这个样子,去淘宝都能买到。成品大概这个样子
在这里插入图片描述
顺便贴下我焊接失败的522,其实没坏就是太丑了一点有点嫌弃在这里插入图片描述
好了让我们开始捋一下设计思路
在这里插入图片描述
当门外的芯片识别到了正确的卡就会通过UNO驱动舵机开门同时亮绿灯,如果是非法卡就不开门,同时亮红灯。

这里我们需要几个arduino的库。
#include <Servo.h> 控制舵机,直接在arduino安装库里面搜索就可以了
#include<RC522.h> RC522通信的库,可以直接在上面知乎的文章里引用他的库,百度什么都可以,反正库都一样的

话不多说直接看代码

/*
 Name:		门禁初稿.ino
 Created:	2021/8/24 21:06:23
 Author:	Evanglong
*/

//#include <Adafruit_Circuit_Playground.h>
//#include <Adafruit_CircuitPlayground.h>
#include <SPI.h>
#include "E:/Arduino/data/opendoor/src/RC522-1 .h"
#include <Servo.h>

#define servo 8//舵机控制
#define LED_1 7 //绿指示灯控制
#define LED_2 6 //红指示灯控制
#define Inductive 5 //感应开关判断

Servo myservo;  // 创建一个伺服电机对象
int angle = 0;//舵机初始角
unsigned char serNum[5]; //无符号数组

void setup()
{
   
    Serial.begin(57600);  //设置串口的波特率
    SPI.begin(); //总线初始化
    pinMode(chipSelectPin, OUTPUT);//设置引脚为输出
    digitalWrite(chipSelectPin, LOW); //设为低电平
    pinMode(NRSTPD, OUTPUT); //设置引脚为输出
    MFRC522_Init(); //串口通信初始化
    AntennaOff();	//关闭天线
    delay(20);  		  //延时2毫秒
    AntennaOn();		//开启天线
    Serial.println("Checkpoint 01");

    pinMode(servo, OUTPUT); //设置电机引脚为输出
    pinMode(LED_1, OUTPUT); //LED
    pinMode(LED_2, OUTPUT);
    pinMode(Inductive, INPUT); //设置感应开关

    myservo.attach(servo);  // 8号引脚输出电机控制信号
    Serial.println("checkpoint 02");
}

void loop()
 {
   
    uchar status;
    uchar str[MAX_LEN];

    status = MFRC522_Request(PICC_REQIDL, str);
    if (status != MI_OK)
     {
   
         return;
     }
    Serial.println("checkpoint 03");
    ShowCardType(str);  //查看卡的类型
    status = MFRC522_Anticoll(str); //防止冲突返回网卡的4字节序列号
    if (status == MI_OK)
     {
   
        Serial.print("The card's number is: ");
         memcpy(serNum, str, 5);
         ShowCardID(serNum);

         //ID卡的相关身份验证
         uchar * id = serNum;
         //把**替换成自己NFC的识别号就可以了,手机随便下个APP就能读取(手机自己有NFC功能),或者买RC522的时候送的白卡,在写入测试的时候可以在串口数据里面读取到卡的密码
         if (id[0] == 0x** && id[1] == 0x** && id[2] == 0x** && id[3] == 0x**) {
   
             Serial.println("The Host 1!");
             digitalWrite(LED_1, HIGH); //指示灯闪烁
             delay(200);
             digitalWrite(LED_1, LOW);
             for (angle = 0; angle 
  • 5
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值