资讯详情

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 0MFRC522 mfrc522(SS_PIN, RST_PIN);   // Create MFRC522 instance.MFRC522::MIFARE_Key key;int comdata;Servo myservo;      //定义舵机对象myservoboolean g_boolSuccess = false; //刷卡成功标识 /*通信协议*/int incomingByte = 0;       // 接收到的 data byteString 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站

标签: 基于振动传感器

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

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