自制宿舍NFC门禁教程

前言

参加荣耀充电宝千人评测,搞了个10000毫安的荣耀充电宝二代回来。正常来说,在宿舍的时候,充电宝除了给台灯、小风扇、手机这些供电就没什么其他用处了,你让我写什么测评,图赏,未免是太没有意思了,要整点硬核的干货是吧。于是,就有了这篇拖欠几个月的文章。成品是做出来很久了,但我一直在生病,懒得写出来,拖到现在,靠朋友一起弄完了。他发在酷安,我发在知乎。

先上效果

原理

出门可能会带钥匙,但是在校园里刷卡,校园卡多半会在身上。恰巧可以用rfid装置来读取校园卡的信息,来进行匹配,开门。

所需材料

  • 荣耀充电宝2代(支持长时间微电流充电的充电宝)
  • arduino平台单片机(不用焊接,比较方便)
  • mg90s舵机(力量可以达到14牛顿足以拉开门锁)
  • rc522模块(比较常用的模块,51平台,stm平台,arduino平台都通用)
  • 线材(连接主板和舵机)
  • 热熔胶+胶枪

(--详见下图--)

实现过程


单片机平台我选择了arduino平台,不用焊接,比较方便uno平台适合新手上手nano适合diy(比较小)

有了平台的支持,这下就需要去找对应的RFID模块了我们选择rc522,这是比较常用的模块,51平台,stm平台,arduino平台都通用

其次就是牵引装置了,将门锁拉开,需要的力还是比较大的,我们选择了使用mg90s舵机,力量可以达到14N,足以拉开门锁。

线材,连接主板和舵机

固定环节,如果没有胶枪用502也行的,反正固定在门上就是了嘛。

插线,打开荣耀充电宝微电流供电模式(因为这个电流很小,所以如果使用没有微电流模式的充电宝,一段时间后会自动关闭充电宝电源),大功告成!

点击电源键两下,指示灯循环闪烁即是微电流模式。为了美观,可以自行调整线材走线,用彩纸包装即可,电机和模块也可使用淘宝现成的,都很便宜。这里因为直男审美,所以不再装饰了。整套装备仅花费不到五十元~~
后期可以加上显示器模块(lcd1602)8块WiFi模块(网络开锁,室友忘带了校园卡和钥匙)摄像头模块(刷卡时人脸识别双重验证)另外:有些寝室是铁门,可以通过用两块nano单片机配合433通讯模块进行近距离通信,门外一套,门内一套。成本提升30左右
附上源码(--警告!!请勿用作商业用途--)(---违反必追责---)

#include "RC522.h"
#include <SPI.h>
#include <Servo.h>
#define Buzzer 4

Servo myservo;  // 创建一个伺服电机对象
unsigned char serNum[5];
void setup() 
{ 
    Serial.begin(9600); 
    Serial.println("wellcome to use!");
    SPI.begin();   
    pinMode(chipSelectPin,OUTPUT); 
    digitalWrite(chipSelectPin, LOW); 
    pinMode(NRSTPD,OUTPUT); 
    myservo.attach(8);  // 8号引脚输出电机控制信号
    MFRC522_Init();	
    myservo.write(0);
    pinMode(8,OUTPUT);
    pinMode(4,OUTPUT);
}
int time=0;
void loop()
{   
    myservo.write(0);
    unsigned char status;
    unsigned char str[MAX_LEN];
    status = MFRC522_Request(PICC_REQIDL, str); 
    if (status == MI_OK)			//读取到ID卡时候
    {   
		status = MFRC522_Anticoll(str);    
		if (status == MI_OK)
		{
			memcpy(serNum, str, 5);
			Serial.print("ID:");
			ShowCardID(serNum);
			unsigned char* id = serNum;
			if( id[0]==0x** && id[1]==0x** && id[2]==0x** && id[3]==0x** ) 
			{
                                myservo.write(90);     // dakaiduoji
                                Serial.println("The Host 1!");
                                delay(1300);
                                myservo.write(0);
			}
                        else if(id[0]==0x** && id[1]==0x** && id[2]==0x** && id[3]==0x**   ) 
			{
                                myservo.write(90);     // dakaiduoji
                                Serial.println("The Host 1!");
                                delay(1300);
                                myservo.write(0);
			}
                        else if(id[0]==0x** && id[1]==0x** && id[2]==0x** && id[3]==0x**   ) 
			{
                                myservo.write(90);     // dakaiduoji
                                Serial.println("The Host 1!");
                                delay(1300);
                                myservo.write(0);
			}
                        else if(id[0]==0x** && id[1]==0x** && id[2]==0x** && id[3]==0x**   ) 
			{
                                myservo.write(90);     // dakaiduoji
                                Serial.println("The Host 1!");
                                delay(1300);
                                myservo.write(0);
			}
                        else
                        {
                                Serial.println("Stranger!");
                                for(int a=0;a<3;a++)
                                {
                                  for(int i = 0 ; i < 1000 ; i++)		//循环100次
                                  {
                                    digitalWrite(Buzzer,HIGH);		//设置输出高电平
                                    delayMicroseconds(100);	
                                    digitalWrite(Buzzer,LOW);			//设置输出低电平
                                    delayMicroseconds(100);				//延时100us
                                  } 
                                  delay(200);
                                }
                              delay(2000);          
                        }			
		}		
    }   
    MFRC522_Halt();
    delay(100);
}
知识共享许可协议
本站作品除特殊声明外均采用 CC BY-NC-SA 4.0进行许可。转载请注明出处!