Arduino宿舍门禁,实现刷卡(NFC)开门
起因最近在学习智能车程序,突然对开发产生了极大的兴趣,一个合格的懒人就要自己做一个刷手机开门。再也不用带沉重的钥匙了,也不需要为忘记带钥匙的室友开门了。选择Arduino是因为它简单,不需要配置寄存器。材料总共需要差不多60多软妹币,可以宿舍分摊一下,程序里面想写几张卡就写几张。主体蜂鸣器可以根据自己的需求,选择添加程序的实现下面是部分程序#include <SPI.h>#includ
起因
最近在学习智能车程序,突然对开发产生了极大的兴趣,一个合格的懒人就要自己做一个刷手机开门。再也不用带沉重的钥匙了,也不需要为忘记带钥匙的室友开门了。选择Arduino是因为它简单,不需要配置寄存器。
材料
总共需要差不多60多软妹币,可以宿舍分摊一下,程序里面想写几张卡就写几张。
主体接线图
蜂鸣器可以根据自己的需求,选择添加
程序的实现
下面是部分程序
#include <SPI.h>
#include <MFRC522.h>//nfc头文件
#include <Servo.h>//舵机头文件
MFRC522 rfid(10, 9);//创建一个rc522读卡器对象
Servo mg90s;//创建一个舵机控制对象
// 初始化数组用于存储读取到的NUID
byte nuidPICC[4];
void setup()
{
SPI.begin(); // 初始化SPI总线
rfid.PCD_Init();
Serial.begin(9600);
mg90s.attach(6);//设定舵机的接口为6
mg90s.write(0);//设定舵机旋转角度复位为0.(可调0~180)
pinMode(5, OUTPUT);
}
void loop()
{
// 找卡
if ( ! rfid.PICC_IsNewCardPresent())
return;
// 验证NUID是否可读
if ( ! rfid.PICC_ReadCardSerial())
return;
MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
// 将NUID保存到nuidPICC数组
for (byte i = 0; i < 4; i++) {
nuidPICC[i] = rfid.uid.uidByte[i];
//Serial.println(nuidPICC[i]);
}
if ((nuidPICC[0]==xxx&& nuidPICC[1]==xxx&& nuidPICC[2]==xxx&& nuidPICC[3]==xxx)||.........) //改成自己卡的uid
{
mg90s.write(170);
delay(1200);
digitalWrite(LED_BUILTIN, HIGH);
mg90s.write(0);
}
}
利用Arduino自带的串口监视器来读取自己的序列号
在下载程序之前,需要在Arduino IDE中导入RC522的库文件
读取自己的卡ID
程序下载到Arduino中
点击右上角这个放大镜进入串口监视器,需要注意的是接的com口和程序中波特率的设置的是多少,然后把卡或者手机放到RC522上,就能看到自己的卡号,四个数。
如果还有不理解的建议看一看b站上佑來老师讲的,最后一集不要跳过!
最重要的电源问题
问题
电脑usb连接时,一切正常,当我用移动电源供电时,却发现程序不能正常工作了,百度一番才知道是舵机工作时,需要的电流太大了,导致板子无法正常工作,程序不能正常执行,现在有两种方法,一种是网上的,一种是我自己做的。
充电宝供电
如果有多余的充电宝,可以尝试充电宝供电,注意,我没有试过这种方法,因为Arduino论坛上不建议用充电宝供电,而且需要具有微电流能力的充电宝,或者买一个持续供电头。防止充电宝休眠。
自己做电池组供电
Arduino有几种常用的电源供电方法,可以参考
链接: bilibili arduino常用主控板供电需求和方式介绍.
而要想要板子正常工作,就要给舵机单独供电,MG966R需要4~6v的电源,因为正好宿舍有多余的18650电池,直接用两节18659(3.7v每节)串联在一起再加一个降压芯片(LM2596S)就搞定了。
Arduino我采用了DC头供电方式,同样两节18650电池串联在一起就行了,Arduino的DC接口可以接7.2v的电源。
电池充电
我给两组电池都加上了这个防过放过充的保护模块,可以在电压过低或者电池充电中电压太高时自动截至。防止过放后无法再充。
接线方法也很简单,直接按图焊上去就行了。焊好该模块后,需要充电才能激活,否则没有电压输出,只要电池不取下来,就不需要再次激活。
充电需要9~12v的充电器,正好实验室有学长不要的12.6V充电器,加上降压芯片(LM2596S)降压到12v以下,充电刚刚好。
耗电大
如果给Arduino一直供电,3700mAh的电池也只能供电几个小时,而最省电的方法,就是加一个开关,只需要一个加在给Arduino板子供电的电池开关,在板子断电的情况下,舵机电源几乎一天只掉0.0x的电压,供一个星期没问题最后我加了一个摇臂开关,开门时打开,用完之后关掉电源。
总结
1.舵机单独供电的GND需要和板子的GND连在一起,即共地。
2.供电方式多种多样,我用18650因为正好充电器和电池都不用自己买了。
这种充电器某宝上只卖10块钱。
3.Arduino有休眠模式,我只是略微了解了一下,觉得还是开关最省电。
4.我采用的是Arduino UNO,有需要的可以了解一下Arduino nano,上佑老师提到过,它更小,更方便,应该比UNO省电。
5.可以用胶枪固定在门上。
6.思考加一个电量低蜂鸣器报警,防止忘记给电池充电。欢迎一起来讨论。
7.指纹模块更简单,不过模块比较贵。
8.还可以加入蓝牙模块等,不过每次都需要打开手机连接蓝牙。
门外照片
门内照片
电源照片,DC头用来供电,插上之后不会脱落,杜邦线用来充电。
还有很大的改进空间,开始做这个东西之前,我没有想到最难的不是程序,而是外接电源的问题,在这个过程中,也学习了很多东西,包括电池模块,降压模块,蓝牙模块,ESp8266模块,省电模式…受益匪浅,如果诸位有什么更好的方法或者高明的见解,欢迎来一起讨论,有什么问题可以在评论区提问,大家一起解决。
2022.10.28更新
如果对耗电有疑问的,可以参考一个别的大佬做的STC15低功耗宿舍门禁,可以待机3~6个月
大佬的STC15低功耗宿舍门禁
arduino也有低功耗模式,我之前了解过,这个项目中,我怀疑主要耗电的应该是那个DC降压芯片,没有实际测试过,大家可以用万用表测一下,当时我还比较菜,现在觉得可以用LDO芯片替代一下。可以参考上面那个链接,建议打成电路板,我这个老是杜邦线线虚/(ㄒoㄒ)/~~。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)