资讯详情

RFID模块+WIFI模块+振动传感器+有源蜂鸣器+舵机+Arduino UNO R3所构成的门禁系统模块

主要由系统模块组成RFID模块 WIFI模块 振动传感器 有源蜂鸣器 舵机 Arduino UNO R门禁系统模块由3组成。使用舵机作为门,用户可以刷卡或通过APP控制舵机状态,达到开门效果。若有不法分子想要强行进入室内,对门进行撞击或者人为的破坏,振动传感器检测到有一定强度的震感时会触发有源蜂鸣器发出警报。

一、设备准备

Arduino UNO R3 在这里插入图片描述 RFID模块 有源蜂鸣器 振动传感器 舵机 WIFI模块

二、设备连接

RFID模块

RFID读卡器 Arduino UNO R3
3.3V 3.3V
RST P9
GND GND
MISO P12
MOSI P11
SCK P13
SDA P10

有源蜂鸣器

有源蜂鸣器 Arduino UNO R3
VCC 5V
GND GND
I/O P7

振动传感器

振动传感器 Arduino UNO R3
VCC 5V
GND GND
DO P8

舵机模块

舵机 Arduino UNO R3
黄线 P6
灰线 GND
红线 5V

WIFI模块(局域模式)

WIFI模块 Arduino UNO R3
RX TX
TX RX
GND GND
5V 5V

三、网络配置

下载代码Arduino UNO R3开发板上 WIFI当打开手机时,需要将模块调整到局域模式wifi可以检测到热点WiFi连接由模块组成的网络。 APP下载路径,打开下载安装的手机APP

然后单击右上角的连接 连接成功后,可点击 控制舵机,此时可以APP控制开门。

四、完整代码

#include <SPI.h> //RFID库文件  #include <MFRC522.h>//RFID库文件 #include <Servo.h> //Arduino IDE自带舵机库文件  String CardInfo[4][2] ={ 
             { 
        "f32f3a1c", "yanyu"},     { 
        "43855194", "beyond"} };////这里的卡信息通过Serial.print("Card:" temp "\n");串口显示,修改卡片信息 int MaxNum = 4; ///这里存储的最大卡信息与上述数组一致.   #define Servo_Pin 6 //模拟开门
#define Beep_Pin 7 //蜂鸣器成功提示


#define RST_PIN 9 // RFID 的RST引脚
#define SS_PIN 10 // RFID 的SDA(SS)引脚

const int vibswPin = 8; //震动传感器
int val = 0; //initialize the variable val as 0

MFRC522 mfrc522(SS_PIN, RST_PIN);   // Create MFRC522 instance.

MFRC522::MIFARE_Key key;
int comdata;
Servo myservo;      //定义舵机对象myservo
boolean g_boolSuccess = false; //刷卡成功标识 
/*通信协议*/
int incomingByte = 0;       // 接收到的 data byte
String inputString = "";         // 用来储存接收到的内容
boolean newLineReceived = false; // 前一次数据结束标志
boolean startBit  = false;  //协议开始标志
String returntemp = ""; //存储返回值 

void Beep_Success()         //刷卡成功铃声
{ 
        
  for(int i = 0; i < 3; i++)  //鸣叫三次
  { 
        
    digitalWrite(Beep_Pin, LOW); //打开蜂鸣器
    delay(100);//延时100
    digitalWrite(Beep_Pin, HIGH); //关闭蜂鸣器 
    delay(100);//延时100
  }
}

void Beep_Fail()  //刷卡失败铃声
{ 
        

    digitalWrite(Beep_Pin, LOW); //打开蜂鸣器
    delay(1500);//延时1500
    digitalWrite(Beep_Pin, HIGH); //关闭蜂鸣器 
}

void setup() 
{ 
        
    Serial.begin(9600); //波特率9600 (Wifi通讯设定波特率)
    pinMode(Servo_Pin, OUTPUT);  //初始化舵机为输出模式
    pinMode(Beep_Pin, OUTPUT); //初始化蜂鸣器为输出模式 
    
    pinMode(vibswPin,INPUT); //initialize vibration switch as an input
       
    while (!Serial);    // 如果没有打开串行端口,就什么也不做(添加基于ATMEGA32U4的Arduinos)
    SPI.begin();        //初始化SPI
    mfrc522.PCD_Init(); // 初始化 MFRC522
    myservo.attach(Servo_Pin);    //设置舵机控制引脚为3
    myservo.write(0);    //初始化舵机位置0
    digitalWrite(Beep_Pin, HIGH); //关闭蜂鸣器 
}

void loop() { 
          
    val = digitalRead(vibswPin); //read the value from vibration switch
    Serial.println(val);
    if(val == 1)  //without vibration signal
      { 
        
        digitalWrite(Beep_Pin,LOW);
        delay(2000);
      }
      else
      { 
        
        digitalWrite(Beep_Pin,HIGH);
        delay(2000);
      }
    while (Serial.available())
    { 
        
      comdata= Serial.read();
      if(comdata==49)
      { 
        
        Serial.print("open the door\n");
        Beep_Success();//刷卡成功铃声
        myservo.write(90); //舵机旋转至90度
        delay(3000);      // 延时3000ms
        myservo.write(0);//舵机旋转至0度
      }
      delay(100);
    }

    /* 寻找新的卡片*/
    if ( ! mfrc522.PICC_IsNewCardPresent())
        return;
    /* 选择一张卡片*/
    if ( ! mfrc522.PICC_ReadCardSerial())
        return;
     /* 显示PICC的信息,将卡的信息写入temp */ 
    String temp,str;  //定义字符串temp,str
    for (byte i = 0; i < mfrc522.uid.size; i++)
    { 
        
        str = String(mfrc522.uid.uidByte[i], HEX);    // 将数据转换成16进制的字符 
        if(str.length() == 1) //保证str的长度有两位
        { 
        
          str = "0" + str;
        }
        temp += str; //将字符str放入temp 
    }
    Serial.print("Card:" + temp + "\n");  //这里打开可以查看实际的卡,方便填写数组
    /* 将temp的信息与存储的卡信息库CardInfo[4][2]进行比对*/
    for(int i = 0; i < MaxNum; i++)
    { 
        
        if(CardInfo[i][0] == temp) //如果在CardInfo[i][0]中比对到卡片的信息
        { 
        
          //Serial.print(CardInfo[i][1] + " Open door!\n");
          Serial.print("$RFID-" + CardInfo[i][0] + "-" + CardInfo[i][1] + "-1-0#"); //将卡的信息打印到串口
          g_boolSuccess = true;  //刷卡成功标识
        }
    }
    if(g_boolSuccess == true) //如果刷卡成功
    { 
        
        Beep_Success();//刷卡成功铃声
        myservo.write(90); //舵机旋转至90度
        delay(3000);      // 延时3000ms
        myservo.write(0);//舵机旋转至0度
    }
    else//刷卡失败
    { 
        
        Beep_Fail();//刷卡失败铃声
    }
    g_boolSuccess = false;//刷卡失败标识
    mfrc522.PICC_HaltA();      //停止读写
    mfrc522.PCD_StopCrypto1(); // 停止向PCD加密
}


void serialEvent()
{ 
        
  while (Serial.available())                    //如果串口接收到数据则进入循环
  { 
            
    incomingByte = Serial.read();              //一个字节一个字节地读,下一句是读到的放入字符串数组中组成一个完成的数据包
    if(incomingByte == '$')                     //如果到来的字节是'$',开始读取 
    { 
        
      startBit= true;
    }
    if(startBit == true)
    { 
        
       inputString += (char) incomingByte;     // 全双工串口可以不用在下面加延时,半双工则要加的//
    }  
    if (incomingByte == '^') 
    { 
        
       newLineReceived = true;                 //如果到来的字节是'#',读取结束
       startBit = false;
    }
  }
}

RFID所需库文件 将下载好的压缩包解压,把文件RC522复制到你的编译器Arduino的libraries文件夹下

五、视频效果演示

基于Arduino UNO R3开发板的安全检测系统的实现---RFID门禁系统APP控制

视频链接CSDN 视频链接B站

标签: 7p8pin连接器0050振动传感器振动传感器输出44200205010振动传感器4200250108振动传感器连接器pin机

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台