当前位置:首页Arduino > 正文

如何通过Arduino对RC522刷卡控制舵机转动开门?

作者:野牛程序员:2024-07-03 17:09:59Arduino阅读 2214
如何通过Arduino对RC522刷卡控制舵机转动开门?

通过Arduino控制RC522刷卡模块来操作舵机实现开门功能,可以按照以下步骤进行:

所需硬件

  • Arduino开发板(如Arduino Uno)

  • RC522 RFID读卡器模块

  • 舵机(如SG90)

  • 若干跳线

  • 电源(可通过USB供电)

连接示意

  1. RC522与Arduino连接

    • SDA -> D10

    • SCK -> D13

    • MOSI -> D11

    • MISO -> D12

    • IRQ -> 未连接

    • GND -> GND

    • RST -> D9

    • 3.3V -> 3.3V(或5V,根据RC522模块的规格)

  2. 舵机与Arduino连接

    • 信号线 -> D3

    • 电源线(VCC) -> 5V

    • 地线(GND) -> GND

编写Arduino代码

以下是一个示例代码,通过RC522读取到指定的RFID卡后,舵机转动至90度位置开门,延时几秒后复位。

#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>

#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN); // 创建MFRC522实例
Servo myservo;  // 创建舵机对象

// 预定义允许开门的卡的UID
byte allowedUID[] = {0xDE, 0xAD, 0xBE, 0xEF};  // 替换为实际的UID

void setup() {
  Serial.begin(9600);  // 初始化串口通讯
  SPI.begin();         // 初始化SPI总线
  mfrc522.PCD_Init();  // 初始化RFID读卡器
  myservo.attach(3);   // 将舵机连接到数字引脚3
  myservo.write(0);    // 初始化舵机位置为0度
  Serial.println("RFID门禁系统准备就绪");
}

void loop() {
  // 检查是否有新的卡片
  if ( ! mfrc522.PICC_IsNewCardPresent()) {
    return;
  }
  // 读取卡片的序列号
  if ( ! mfrc522.PICC_ReadCardSerial()) {
    return;
  }
  
  // 检查读到的卡的UID是否与预定义的UID匹配
  if (isAllowedUID(mfrc522.uid.uidByte, mfrc522.uid.size)) {
    Serial.println("卡片识别成功,开门");
    myservo.write(90);  // 舵机转动到90度开门
    delay(5000);        // 保持5秒
    myservo.write(0);   // 舵机复位到0度关门
  } else {
    Serial.println("未授权的卡片");
  }

  // 终止对当前卡片的读取
  mfrc522.PICC_HaltA();
}

bool isAllowedUID(byte *uid, byte uidSize) {
  if (uidSize != 4) {
    return false;  // UID大小不符合
  }
  for (byte i = 0; i < 4; i++) {
    if (uid[i] != allowedUID[i]) {
      return false;  // UID不匹配
    }
  }
  return true;  // UID匹配
}

步骤解释

  1. 初始化:在setup函数中,初始化RFID读卡器和舵机,并设置初始状态。

  2. 检测卡片:在loop函数中,持续检测是否有新卡片靠近RFID读卡器。

  3. 读取卡片UID:若有新卡片,读取其UID并与预定义的允许开门的UID进行比较。

  4. 控制舵机:若UID匹配,控制舵机转动至90度位置模拟开门,保持5秒后复位。

根据具体的需求,可以调整代码中舵机转动的角度和保持的时间。



野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
  • Arduino
  • 最新推荐

    热门点击