Arduino - RFID/NFC Deurslot Systeem

In deze tutorial gaan we leren hoe u een Arduino RFID/NFC Deurslot Systeem bouwt met een Arduino, RFID/NFC RC522 Kit, en een elektromagnetisch slot of solenoid slot.

※ Notiz:

We hebben ook andere Arduino - Deurslot systeem met keypad tutorials.

Over RFID/NFC RC522 Module en Elektromagnetisch Slot

Als u niet bekend bent met de RFID/NFC RC522 Module, Elektromagnetisch Slot en Solenoid Slot (pinout, werking, programmeren...), leer er meer over in de volgende tutorials:

Systeemcomponenten

Het deurslot systeem bestaat uit twee hoofdonderdelen:

  • Deurslot: Arduino + RFID/NFC reader + Elektromagnetisch slot
  • Deursleutel: RFID/NFC tags
Arduino arduino rfid door lock component

Er zijn diverse types RFID/NFC readers die met Arduino kunnen werken. Deze tutorial gebruikt de RFID-RC522 als RFID/NFC reader omdat deze betaalbaar is.

Hoe Werkt het RFID/NFC Deurslot

  • Sommige tags met UIDs die in de Arduino code zijn ingesteld, fungeren als geautoriseerde sleutels
  • Gebruiker tikt met RFID/NFC tag op de RFID/NFC reader
  • De reader leest de UID van de tag
  • Arduino ontvangt de UID van de reader
  • Arduino vergelijkt de gelezen UID met de vooraf ingestelde UIDs
  • Indien de UID overeenkomt met een van de bekende UIDs, schakelt Arduino het elektromagnetische slot uit om de deur te ontgrendelen

Bedradingsschema

  • RFID RC522 Deurslot met Solenoid Slot
Arduino RFID RC522 Door Lock System wiring diagram

This image is created using Fritzing. Click to enlarge image

  • RFID RC522 Deurslot met Elektromagnetisch Slot
Arduino RFID RC522 Door Lock System wiring diagram

This image is created using Fritzing. Click to enlarge image

Om het simpel te houden zijn de pinnen van de RC522 module rechtstreeks verbonden met de Arduino pinnen. Dit kan echter problemen geven omdat de Arduino uitgangspinnen 5V leveren, terwijl de pinnen van de RC522 module normaal gesproken op 3.3V werken. Daarom wordt aangeraden de spanning te regelen tussen de Arduino en de RC522 pinnen. Voor meer gedetailleerde instructies verwijzen we naar de Arduino - RFID RC522 tutorial. Het onderstaande schema illustreert hoe u 5V kunt omzetten naar 3.3V met behulp van weerstanden:

Arduino RFID RC522 with voltage regulated wiring diagram

This image is created using Fritzing. Click to enlarge image

※ Notiz:

De volgorde van pinnen kan verschillen per fabrikant. Gebruik ALTJID de labels die op het module zijn gedrukt. Bovenstaande afbeelding toont de pinout van de modules van fabrikant DIYables.

Arduino Code - Enkelvoudige Sleutel

/* * Deze Arduino code is ontwikkeld door newbiely.nl * Deze Arduino code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/arduino/arduino-rfid-nfc-door-lock-system */ #include <SPI.h> #include <MFRC522.h> #define SS_PIN 10 #define RST_PIN 5 #define RELAY_PIN A5 // the Arduino pin connects to relay MFRC522 rfid(SS_PIN, RST_PIN); byte keyTagUID[4] = {0xFF, 0xFF, 0xFF, 0xFF}; void setup() { Serial.begin(9600); SPI.begin(); // init SPI bus rfid.PCD_Init(); // init MFRC522 pinMode(RELAY_PIN, OUTPUT); // initialize pin as an output. digitalWrite(RELAY_PIN, HIGH); // lock the door Serial.println("Tap RFID/NFC Tag on reader"); } void loop() { if (rfid.PICC_IsNewCardPresent()) { // new tag is available if (rfid.PICC_ReadCardSerial()) { // NUID has been readed MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak); if (rfid.uid.uidByte[0] == keyTagUID[0] && rfid.uid.uidByte[1] == keyTagUID[1] && rfid.uid.uidByte[2] == keyTagUID[2] && rfid.uid.uidByte[3] == keyTagUID[3] ) { Serial.println("Access is granted"); digitalWrite(RELAY_PIN, LOW); // unlock the door for 2 seconds delay(2000); digitalWrite(RELAY_PIN, HIGH); // lock the door } else { Serial.print("Access denied for user with UID:"); 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(); // halt PICC rfid.PCD_StopCrypto1(); // stop encryption on PCD } } }

Snelle Stappen

Omdat de UID meestal niet op de RFID/NFC tag is gedrukt, is de eerste stap om de UID van de tag uit te lezen. Dit doet u als volgt:

  • Kopieer de bovenstaande code en open deze in de Arduino IDE
  • Klik op de Upload knop in de Arduino IDE om de code naar de Arduino te uploaden
  • Open de Serial Monitor
  • Tik met een RFID/NFC tag op de RFID-RC522 module
  • Lees de UID af op de Serial Monitor
COM6
Send
Tap RFID/NFC tag on reader Access denied for user with UID: 3A C9 6A CB
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Na het verkrijgen van de UID:

  • Pas de UID aan op regel 18 in de code. Bijvoorbeeld verander byte keytagUID[4] = {0xFF, 0xFF, 0xFF, 0xFF}; naar byte keytagUID[4] = {0x3A, 0xC9, 0x6A, 0xCB};
  • Upload de code opnieuw naar de Arduino
  • Tik met een RFID/NFC tag op de RFID-RC522 module
  • Bekijk de output op de Serial Monitor
COM6
Send
Tap RFID/NFC tag on reader Access is granted
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Controleer het elektromagnetische slot, het zou ontgrendeld moeten zijn
  • Tik met een andere RFID/NFC tag op de RFID-RC522 module
  • Bekijk de output op de Serial Monitor
COM6
Send
Tap RFID/NFC tag on reader Access is granted Access denied for user with UID: BD 1E 1D 00
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

※ Notiz:

  • Voor testdoeleinden is de ontgrendelduur ingesteld op 2 seconden, deze dient in praktijk verlengd te worden
  • U moet de MFRC522 bibliotheek installeren. Zie Arduino - RFID/NFC RC522 tutorial

Arduino Code - Meerdere Sleutels

Stel u voor dat alleen de manager en de secretaris toegang hebben tot een kamer.

In dat geval heeft u twee RFID/NFC tags nodig: één voor de manager en één voor de secretaris. U moet de UIDs van beide tags in de code specificeren.

/* * Deze Arduino code is ontwikkeld door newbiely.nl * Deze Arduino code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/arduino/arduino-rfid-nfc-door-lock-system */ #include <SPI.h> #include <MFRC522.h> #define SS_PIN 10 #define RST_PIN 5 #define RELAY_PIN A5 // the Arduino pin connects to relay MFRC522 rfid(SS_PIN, RST_PIN); byte managerKeyUID[4] = {0x3A, 0xC9, 0x6A, 0xCB}; byte secretaryKeyUID[4] = {0x30, 0x01, 0x8B, 0x15}; void setup() { Serial.begin(9600); SPI.begin(); // init SPI bus rfid.PCD_Init(); // init MFRC522 pinMode(RELAY_PIN, OUTPUT); // initialize pin as an output. digitalWrite(RELAY_PIN, HIGH); // lock the door Serial.println("Tap RFID/NFC Tag on reader"); } void loop() { if (rfid.PICC_IsNewCardPresent()) { // new tag is available if (rfid.PICC_ReadCardSerial()) { // NUID has been readed MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak); if (rfid.uid.uidByte[0] == managerKeyUID[0] && rfid.uid.uidByte[1] == managerKeyUID[1] && rfid.uid.uidByte[2] == managerKeyUID[2] && rfid.uid.uidByte[3] == managerKeyUID[3] ) { Serial.println("Access is granted for manager"); digitalWrite(RELAY_PIN, LOW); // unlock the door for 2 seconds delay(2000); digitalWrite(RELAY_PIN, HIGH); // lock the door } else if (rfid.uid.uidByte[0] == secretaryKeyUID[0] && rfid.uid.uidByte[1] == secretaryKeyUID[1] && rfid.uid.uidByte[2] == secretaryKeyUID[2] && rfid.uid.uidByte[3] == secretaryKeyUID[3] ) { Serial.println("Access is granted for secretary"); digitalWrite(RELAY_PIN, LOW); // unlock the door for 2 seconds delay(2000); digitalWrite(RELAY_PIN, HIGH); // lock the door } else { Serial.print("Access denied for user with UID:"); 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(); // halt PICC rfid.PCD_StopCrypto1(); // stop encryption on PCD } } }

Volg dezelfde stappen als hierboven en tik vervolgens één voor één met beide tags op de RFID-RC522 module. Het resultaat op de Serial Monitor ziet er als volgt uit:

COM6
Send
Tap RFID/NFC tag on reader Access is granted for secretary Access is granted for manager
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

U kunt de bovenstaande code uitbreiden voor drie, vier of meer tags.

※ Notiz:

In de bovenstaande code zijn de sleutels hard gecodeerd. In de praktijk dient het mogelijk te zijn om sleutels dynamisch toe te voegen of te verwijderen via een speciale modus. Hiervoor moeten de sleutels opgeslagen worden in het EEPROM geheugen. Het aantal sleutels dat opgeslagen kan worden hangt af van de grootte van het EEPROM. De code zal hierdoor complexer worden. Mocht u zo’n systeem willen bouwen, dan bieden wij een programmeerservice aan. Neem gerust contact met ons op.

Video Tutorial

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.

Bekijk onze video-tutorial voor een visuele begeleiding bij dit project! De video biedt extra inzichten en helpt u stap-voor-stap met de implementatie.

Opmerkingen

※ ONZE BERICHTEN

  • U bent welkom om de link naar deze tutorial te delen. Gebruik onze inhoud echter niet op andere websites. We hebben veel moeite en tijd gestoken in het maken van de inhoud, respecteer alstublieft ons werk!