物联网 单片机
回帖(1)
2022-1-20 14:14:30
寝室自制智能NFC门禁
起因
暑假申请了返校准备比赛,感觉疫情一个学期没有怎么锻炼了,晚上准备跑回宿舍。但是跑步的时候带钥匙太慢了,于是忙里抽闲,做了一个NFC的门禁(这样我就有理由买小米手环了hhh)
结果图
原理比较简单,寝室是老式的插销,所以可以直接通过MG90s的舵机来驱动(和SG90s舵机比起来力量更大)。
正好手里还有一块上个项目留下来的Arduino UNO R3的板子,由此电源和连接的问题就比较简单了(然而还是焊接了下RC522模块),电源可以使用移动电源(我用的是锂电池),连接部分就可以使用杜邦线了。
初版只有NFC,以后有时间可以用树莓派做个中控,加一下红外模块和摄像。
器件:
1.Arduino UNO R3模块
2.RC522模块(会用电烙铁的话没事,不会用电烙铁的话最好找商家焊好排针,不过可能要多收钱,焊接弯针最好)
3.杜邦线若干
4.锂电池和锂电池的线
5.MG90s舵机一个
6.蜂鸣器(可以不加)
7.胶枪,502,胶带
Tips1:其他单片机平台(stm32或者51)也可,RC522的代码很简单,也有官方的github仓库
Tips2:这里简单说一下,有不知道杜邦线和舵机是什么的小伙伴。简单讲一下,舵机就是一个机器,上面有可以旋转的轴,也因此可以拉动插销。杜邦线有公对母,母对母,公对公的区别,主要就是公的代表是插头,母的代表是插座,具体选什么还是要看寝室的具体情况,线的长度可能也需要具体情况具体讲,不过可以先买30cm的,我的是够用的。
连线图
如果不想加蜂鸣器的话可以选择不加蜂鸣器,就把最下面的那个东西的连线都去掉就可以了。
还是不知道怎么连线或者用其他单片机的小伙伴,可以参考RC522的官方github仓库,里面解释比较详细
代码
#include
#include
#include
#define N 2
#define M 4
static const unsigned char f[N][M] =
{
{0x, 0x, 0x, 0x},
{0x, 0x, 0x2E, 0x},
};
MFRC522 mfrc522(10, 9);
Servo mg90s;
void setup()
{
SPI.begin();
mg90s.attach(6);
mg90s.write(0);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
return;
}
void loop()
{
static int c;
int i, j;
if(mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial())
{
for(i = 0; i < N; i ++)
{
for(j = 0; j < M; j ++)
if(mfrc522.uid.uidByte[j] != f[j])
break;
if(j == M)
{
mg90s.write(180);
Serial.print("111");
delay(250);
delay(2750);
mg90s.write(0);
c += 3;
break;
}
}
}
else
{
delay(100);
c ++;
}
if(c >= 20)
{
c = 0;
SPI.end();
SPI.begin();
mfrc522.PCD_Init();
}
return;
}
简单解释一下代码,整体原理是RC522读取卡上的UID之后会和写死在代码里的UID进行比对,如果比对成功,就会驱动舵机,**f[N][M]**里面放的是所有人的UID,N是你写的卡的个数。
Tips:获取卡片UID的方式,比如校园卡,如果你有一个支持NFC的手机,可以下载一个软件查看UID,如果没有就复杂一些,建议借一个带NFC的手机。(比如我,惨兮兮,是通过实验室的门禁知道的,实验室门禁扫描到卡的时候,会在显示屏上显示UID)
另外,安全性确实是个大问题,不过介于本来就没啥安全性(上次忘了带钥匙,找开锁师傅,3s搞定,整的我都想去拜师学医了)和现在暑假疫情基本没啥人的情况,应该还是可以的。
寝室自制智能NFC门禁
起因
暑假申请了返校准备比赛,感觉疫情一个学期没有怎么锻炼了,晚上准备跑回宿舍。但是跑步的时候带钥匙太慢了,于是忙里抽闲,做了一个NFC的门禁(这样我就有理由买小米手环了hhh)
结果图
原理比较简单,寝室是老式的插销,所以可以直接通过MG90s的舵机来驱动(和SG90s舵机比起来力量更大)。
正好手里还有一块上个项目留下来的Arduino UNO R3的板子,由此电源和连接的问题就比较简单了(然而还是焊接了下RC522模块),电源可以使用移动电源(我用的是锂电池),连接部分就可以使用杜邦线了。
初版只有NFC,以后有时间可以用树莓派做个中控,加一下红外模块和摄像。
器件:
1.Arduino UNO R3模块
2.RC522模块(会用电烙铁的话没事,不会用电烙铁的话最好找商家焊好排针,不过可能要多收钱,焊接弯针最好)
3.杜邦线若干
4.锂电池和锂电池的线
5.MG90s舵机一个
6.蜂鸣器(可以不加)
7.胶枪,502,胶带
Tips1:其他单片机平台(stm32或者51)也可,RC522的代码很简单,也有官方的github仓库
Tips2:这里简单说一下,有不知道杜邦线和舵机是什么的小伙伴。简单讲一下,舵机就是一个机器,上面有可以旋转的轴,也因此可以拉动插销。杜邦线有公对母,母对母,公对公的区别,主要就是公的代表是插头,母的代表是插座,具体选什么还是要看寝室的具体情况,线的长度可能也需要具体情况具体讲,不过可以先买30cm的,我的是够用的。
连线图
如果不想加蜂鸣器的话可以选择不加蜂鸣器,就把最下面的那个东西的连线都去掉就可以了。
还是不知道怎么连线或者用其他单片机的小伙伴,可以参考RC522的官方github仓库,里面解释比较详细
代码
#include
#include
#include
#define N 2
#define M 4
static const unsigned char f[N][M] =
{
{0x, 0x, 0x, 0x},
{0x, 0x, 0x2E, 0x},
};
MFRC522 mfrc522(10, 9);
Servo mg90s;
void setup()
{
SPI.begin();
mg90s.attach(6);
mg90s.write(0);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
return;
}
void loop()
{
static int c;
int i, j;
if(mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial())
{
for(i = 0; i < N; i ++)
{
for(j = 0; j < M; j ++)
if(mfrc522.uid.uidByte[j] != f[j])
break;
if(j == M)
{
mg90s.write(180);
Serial.print("111");
delay(250);
delay(2750);
mg90s.write(0);
c += 3;
break;
}
}
}
else
{
delay(100);
c ++;
}
if(c >= 20)
{
c = 0;
SPI.end();
SPI.begin();
mfrc522.PCD_Init();
}
return;
}
简单解释一下代码,整体原理是RC522读取卡上的UID之后会和写死在代码里的UID进行比对,如果比对成功,就会驱动舵机,**f[N][M]**里面放的是所有人的UID,N是你写的卡的个数。
Tips:获取卡片UID的方式,比如校园卡,如果你有一个支持NFC的手机,可以下载一个软件查看UID,如果没有就复杂一些,建议借一个带NFC的手机。(比如我,惨兮兮,是通过实验室的门禁知道的,实验室门禁扫描到卡的时候,会在显示屏上显示UID)
另外,安全性确实是个大问题,不过介于本来就没啥安全性(上次忘了带钥匙,找开锁师傅,3s搞定,整的我都想去拜师学医了)和现在暑假疫情基本没啥人的情况,应该还是可以的。
举报
更多回帖