我是靠谱客的博主 鲜艳裙子,最近开发中收集的这篇文章主要介绍RFID模块+WIFI模块+振动传感器+有源蜂鸣器+舵机+Arduino UNO R3所构成的门禁系统模块一、设备准备二、设备连接三、配置网络四、完整代码五、视频效果演示,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

一、设备准备

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

二、设备连接

RFID模块

RFID读卡器Arduino UNO R3
3.3V3.3V
RSTP9
GNDGND
MISOP12
MOSIP11
SCKP13
SDAP10

有源蜂鸣器

有源蜂鸣器Arduino UNO R3
VCC5V
GNDGND
I/OP7

振动传感器

振动传感器Arduino UNO R3
VCC5V
GNDGND
DOP8

舵机模块

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

WIFI模块(局域模式)

WIFI模块Arduino UNO R3
RXTX
TXRX
GNDGND
5V5V

三、配置网络

将代码下载到Arduino UNO R3开发板上
WIFI模块需要调节到局域模式,此时打开手机wifi热点,即可检测到WiFi模块所组成的网络,在这里插入图片描述,进行连接。
APP下载路径,打开下载安装好的手机APP

在这里插入图片描述
之后,点击右上角的连接在这里插入图片描述
连接成功之后,即可点击 开锁(49) 对舵机进行控制,此时就可以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 doorn");
        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站

最后

以上就是鲜艳裙子为你收集整理的RFID模块+WIFI模块+振动传感器+有源蜂鸣器+舵机+Arduino UNO R3所构成的门禁系统模块一、设备准备二、设备连接三、配置网络四、完整代码五、视频效果演示的全部内容,希望文章能够帮你解决RFID模块+WIFI模块+振动传感器+有源蜂鸣器+舵机+Arduino UNO R3所构成的门禁系统模块一、设备准备二、设备连接三、配置网络四、完整代码五、视频效果演示所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(81)

评论列表共有 0 条评论

立即
投稿
返回
顶部