Arduino - RFID - Elektromagnetisch Slot
In deze tutorial leert u hoe u een op RFID gebaseerd deurslot maakt met behulp van Arduino, de RC522 RFID-reader en een elektromagnetisch slot.
Of u kunt de volgende kits kopen:
Openbaarmaking: Sommige van de links in deze sectie zijn Amazon-affiliate links. We kunnen een commissie ontvangen voor aankopen die via deze links worden gedaan, zonder extra kosten voor u. We waarderen uw steun.
Als u nog niet bekend bent met de RFID/NFC RC522-module en het elektromagnetisch slot (pinout, werking, programmering ...), leer er dan meer over in de volgende tutorials:

This image is created using Fritzing. Click to enlarge image
Om de opstelling eenvoudiger te maken, zijn de pinnen van de RC522-module rechtstreeks verbonden met de Arduino-pinnen. Deze directe verbinding kan echter problemen geven, omdat de uitgangspinnen van de Arduino 5V leveren, terwijl de RC522-module bedoeld is voor 3,3V werking. Het verdient aanbeveling om de spanning tussen de Arduino-pinnen en de RC522-module te reguleren om mogelijke problemen te voorkomen. Raadpleeg voor meer gedetailleerde instructies de Arduino - RFID RC522 tutorial. Het onderstaande schema toont hoe weerstanden kunnen worden gebruikt om de 5V naar 3,3V te verlagen:

This image is created using Fritzing. Click to enlarge image
※ Notiz:
De volgorde van pinnen kan verschillen per fabrikant. Gebruik ALTIJD de labels die op de module zijn gedrukt. De bovenstaande afbeelding toont de pinout van modules van fabrikant DIYables.
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 5
#define RELAY_PIN A5
MFRC522 rfid(SS_PIN, RST_PIN);
byte authorizedUID[4] = {0xFF, 0xFF, 0xFF, 0xFF};
void setup() {
Serial.begin(9600);
SPI.begin();
rfid.PCD_Init();
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW);
Serial.println("Tap RFID Tag on reader");
}
void loop() {
if (rfid.PICC_IsNewCardPresent()) {
if (rfid.PICC_ReadCardSerial()) {
MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
if (rfid.uid.uidByte[0] == authorizedUID[0] &&
rfid.uid.uidByte[1] == authorizedUID[1] &&
rfid.uid.uidByte[2] == authorizedUID[2] &&
rfid.uid.uidByte[3] == authorizedUID[3] ) {
Serial.println("Authorized Tag");
digitalWrite(RELAY_PIN, LOW);
delay(2000);
digitalWrite(RELAY_PIN, HIGH);
}
else
{
Serial.print("Unauthorized Tag:");
for (int i = 0; i < rfid.uid.size; i++) {
Serial.print(rfid.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(rfid.uid.uidByte[i], HEX);
}
Serial.println();
}
rfid.PICC_HaltA();
rfid.PCD_StopCrypto1();
}
}
}
Omdat UID meestal niet op de RFID-tag staat, is de eerste stap deze te achterhalen. Dit doet u als volgt:
Kopieer de bovengenoemde code en open deze in de Arduino IDE
Klik op de Upload knop in Arduino IDE om de code naar de Arduino te uploaden
Open de Serial Monitor
Houd een RFID-tag tegen de RFID-RC522 module
Lees de UID uit op de Serial Monitor
Houd RFID Tag tegen lezer
Unauthorized Tag: 51 3D C1 AC
Nadat u de UID heeft:
Pas de UID aan op regel 18 in de bovenstaande code. Bijvoorbeeld, wijzig byte authorizedUID[4] = {0xFF, 0xFF, 0xFF, 0xFF}; naar byte authorizedUID[4] = {0x51, 0x3D, 0xC1, 0xAC};
Upload de code opnieuw naar de Arduino
Houd een RFID-tag tegen de RFID-RC522 module
Bekijk de uitvoer in de Serial Monitor
Houd RFID Tag tegen lezer
Authorized Tag
Houd RFID Tag tegen lezer
Authorized Tag
Unauthorized Tag: 5D 11 1A D3
U kunt meerdere RFID/NFC-tags toestaan om het elektromagnetisch slot te activeren. De onderstaande code gebruikt twee tags als voorbeeld.
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 5
#define RELAY_PIN A5
MFRC522 rfid(SS_PIN, RST_PIN);
byte authorizedUID1[4] = {0x51, 0x3D, 0xC1, 0xAC};
byte authorizedUID2[4] = {0x30, 0x01, 0x8B, 0x15};
void setup() {
Serial.begin(9600);
SPI.begin();
rfid.PCD_Init();
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW);
Serial.println("Tap RFID Tag on reader");
}
void loop() {
if (rfid.PICC_IsNewCardPresent()) {
if (rfid.PICC_ReadCardSerial()) {
MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
if (rfid.uid.uidByte[0] == authorizedUID1[0] &&
rfid.uid.uidByte[1] == authorizedUID1[1] &&
rfid.uid.uidByte[2] == authorizedUID1[2] &&
rfid.uid.uidByte[3] == authorizedUID1[3] ) {
Serial.println("Authorized Tag 1");
digitalWrite(RELAY_PIN, LOW);
delay(2000);
digitalWrite(RELAY_PIN, HIGH);
}
else
if (rfid.uid.uidByte[0] == authorizedUID2[0] &&
rfid.uid.uidByte[1] == authorizedUID2[1] &&
rfid.uid.uidByte[2] == authorizedUID2[2] &&
rfid.uid.uidByte[3] == authorizedUID2[3] ) {
Serial.println("Authorized Tag 2");
digitalWrite(RELAY_PIN, LOW);
delay(2000);
digitalWrite(RELAY_PIN, HIGH);
}
else
{
Serial.print("Unauthorized Tag:");
for (int i = 0; i < rfid.uid.size; i++) {
Serial.print(rfid.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(rfid.uid.uidByte[i], HEX);
}
Serial.println();
}
rfid.PICC_HaltA();
rfid.PCD_StopCrypto1();
}
}
}
Voer dezelfde stappen uit als hierboven en houd vervolgens één voor één een tag tegen de RFID-RC522 module. De uitvoer in de Serial Monitor wordt dan als volgt weergegeven:
Houd RFID Tag tegen lezer
Authorized Tag 2
Authorized Tag 1
We overwegen het maken van videotutorials. Als u videotutorials belangrijk vindt, abonneer u dan op ons YouTube-kanaal om ons te motiveren de video's te maken.