|
RFID(射频识别)是一种廉价且可容易实现的技术。它可以用于许多应用场合中,例如访问控制、安全、资产跟踪、人员跟踪等。在酒店、办公室以及许多其他地方,RFID门锁系统非常常见,将RFID卡靠近RFID读卡器,一秒钟后,门就会打开。
在之前的文章中,我们制作了一个简单的RFID门锁,这次我们使用了一个真正的电磁门锁,并通过RFID和Arduino对其进行控制。本文中,霍尔效应传感器和磁铁用于检测门的移动。霍尔效应传感器放置在门框上,磁铁将放置在门本身上。当霍尔效应传感器和磁体彼此靠近时,霍尔效应传感器将处于低电平状态,门保持关闭状态;当传感器和此帖离得远时,则意味着门已打开并且霍尔传感器处于高电平状态。我们将使用此霍尔效应机制自动锁定和解锁门。
所需的组件 ● Arduino Uno开发板 ● RFID-RC522模块 ● 12v电磁锁 ● 继电器模块 ● 霍尔效应传感器 ● 10kΩ电阻 ● 蜂鸣器
电磁锁 电磁锁在电子机械锁机构上起作用。这种类型的锁具有一个带有倾斜切口的嵌条和一个良好的安装支架。接通电源后,DC会产生磁场,该磁场会使锁芯在内部移动并使门保持在解锁位置。锁芯将保持其位置,直到断电为止。断开电源后,锁芯会向外移动并锁定门。在锁定状态下,它不使用任何电源。要驱动电磁锁,您需要一个可提供12V @ 500mA的电源。
电路连接图 下面给出了使用Arduino的电磁门锁的电路图。
蜂鸣器的正极引脚连接到Arduino的数字引脚4,而GND引脚连接到Arduino的接地引脚。霍尔效应传感器的VCC和OUT引脚之间使用10K电阻。电磁锁通过继电器模块连接到Arduino。 根据电路图将所有组件焊接完毕后,如下图所示:
代码说明 该Arduino电磁锁的完整代码在文档末尾给出。在这里,我们将逐行解释该代码以便更好地理解。
首先包含所有必需的库。本文中,需要两个库,一个用于Arduino和RFID之间的SPI通信,另一个用于RFID模块。这两个库都可以从下面给出的链接下载: 1. SPI.h 2. MFRC522.h
定义蜂鸣器、电磁锁和RFID模块使用的引脚: - int Buzzer = 4;
- const int LockPin = 2;
- #define SS_PIN 10
- #define RST_PIN 9
复制代码然后将电磁锁引脚和蜂鸣器引脚定义为输出,并将霍尔效应传感器引脚定义为输入,然后并启动SPI通信。 - pinMode(LockPin, OUTPUT);
- pinMode(Buzzer, OUTPUT);
- pinMode(hall_sensor, INPUT);
- SPI.begin(); // Initiate SPI bus
- mfrc522.PCD_Init(); // Initiate MFRC522
复制代码
在void loop()函数中,读取霍尔传感器的值,当该值变低电平时,关闭门。 - state = digitalRead(hall_sensor);
- Serial.print(state);
- delay(3000);
- if(state==LOW){
- digitalWrite(LockPin, LOW);
- Serial.print("Door Closed");
- digitalWrite(Buzzer, HIGH);
- delay(2000);
- digitalWrite(Buzzer, LOW);}
复制代码在void loop()函数中,检查是否存在新的RFID卡,如果存在新的卡,则它将检查卡的UID。对于有效的卡,它将打开锁;否则,将打印显示“You are not authorized。” - if ( ! mfrc522.PICC_IsNewCardPresent())
- {
- return;
- }
- // Select one of the cards
- if ( ! mfrc522.PICC_ReadCardSerial())
- {
- return;
- }
- //Show UID on serial monitor
- String content= "";
- byte letter;
- for (byte i = 0; i < mfrc522.uid.size; i++)
- {
- content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
- content.concat(String(mfrc522.uid.uidByte[i], HEX));
- }
- Serial.println();
- Serial.print("Message : ");
- content.toUpperCase();
- if (content.substring(1) == "60 4E 07 1E" ) //change here the UID of the card/cards that you want to give access
- {
- digitalWrite(LockPin, HIGH);
- Serial.print("Door Unlocked");
- digitalWrite(Buzzer, HIGH);
- delay(2000);
- digitalWrite(Buzzer, LOW);
- }
- else
- {
- Serial.println("You are not Authorised");
- digitalWrite(Buzzer, HIGH);
- delay(2000);
- digitalWrite(Buzzer, LOW);
- }
- }
复制代码
测试RFID电磁锁 准备好代码和硬件后,就可以开始测试电磁门锁。我们已将所有组件焊接在面包板上,以便可以轻松地将其安装在门上。因此要进行测试,请将面包板安装在门框上,并在门上安装磁铁,以便可以检测到门的运动。下图显示了如何将磁铁和霍尔传感器固定在门上。
现在,扫描您的授权RFID卡以打开门锁。电磁门锁将保持打开状态,直到霍尔效应传感器的输出为高电平。现在,当门在关闭时再次到达霍尔传感器附近时,由于磁场(由门上安装的磁铁产生),霍尔效应传感器的状态将变为低电平,并且锁将再次关闭。
您可以使用延迟函数来代替霍尔效应传感器,使得门在规定的时间内保持打开状态。
代码 以下是本篇文章使用的完整代码:
main.rar
(919 Bytes, 下载次数: 80)
|