起因

最近在学习智能车程序,突然对开发产生了极大的兴趣,一个合格的懒人就要自己做一个刷手机开门。再也不用带沉重的钥匙了,也不需要为忘记带钥匙的室友开门了。选择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有几种常用的电源供电方法,可以参考

链接: 太极创客 几种常用的为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ㄒ)/~~。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐