Arduino - RFID - Solenoïde Slot

In deze tutorial leert u hoe u een op RFID gebaseerd deurslot systeem maakt met behulp van Arduino, RC522 RFID lezer en een solenoïde slot.

Hardware Benodigd

1×Arduino Uno R3
1×USB 2.0 kabel type A/B
1×RFID/NFC RC522 set (lezer + tags)
1×RFID Sleutelhanger
1×RFID Kaart
1×Solenoïde Slot
1×Relais
1×12V Voedingsadapter
1×DC Voedingsconnector
1×(Aanbevolen) Schroefklem Block Shield voor Arduino Uno
1×(Aanbevolen) Breadboard-Shield voor Arduino Uno
1×(Aanbevolen) Behuizing voor Arduino Uno
1×(Aanbevolen) Prototyping Basisplaat & Breadboard Kit voor Arduino Uno

Of u kunt de volgende kits kopen:

1×DIYables Sensorkit (30 sensoren/displays)
1×DIYables Sensorkit (18 sensoren/displays)
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.

Over RFID/NFC RC522 Module en Solenoïde Slot

Als u niet bekend bent met de RFID/NFC RC522 module en solenoïde slot (pinout, werking, programmeren ...), leer er meer over in de volgende tutorials:

Bedradingsschema

Arduino RFID RC522 solenoïde slot bedrading schema

This image is created using Fritzing. Click to enlarge image

Om de opstelling te vereenvoudigen, zijn de pinnen van de RC522 module direct verbonden met de Arduino pinnen. Houd er echter rekening mee dat deze directe verbinding problemen kan veroorzaken, omdat de output pinnen van de Arduino 5V leveren, terwijl de RC522 module is ontworpen voor een 3,3V werking. Het is aanbevolen om de spanning te regelen tussen de Arduino pinnen en de RC522 module pinnen om mogelijke problemen te voorkomen. Raadpleeg voor meer gedetailleerde richtlijnen de Arduino - RFID RC522 tutorial. Het onderstaande schema laat zien hoe weerstanden kunnen worden gebruikt om de 5V naar 3,3V te reduceren:

Arduino RC522 module met spanningsregelaar bedrading schema

This image is created using Fritzing. Click to enlarge image

※ Notiz:

De volgorde van de pinnen kan verschillen per fabrikant. Gebruik ALTIJD de labels die op de module gedrukt staan. De bovenstaande afbeelding toont de pinout van modules van fabrikant DIYables.

Arduino Code - Enkel RFID Tag

/* * 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-solenoid-lock */ #include <SPI.h> #include <MFRC522.h> #define SS_PIN 10 #define RST_PIN 5 #define RELAY_PIN A5 // The Arduino pin that controls the solenoid lock via relay MFRC522 rfid(SS_PIN, RST_PIN); byte authorizedUID[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, LOW); // deactivate the solenoid lock => locked Serial.println("Tap RFID 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] == 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); // deactivate the solenoid lock => unlocked delay(2000); digitalWrite(RELAY_PIN, HIGH); // activate the solenoid lock => locked } 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(); // halt PICC rfid.PCD_StopCrypto1(); // stop encryption on PCD } } }

Snelle Stappen

Omdat de UID meestal niet op de RFID Tag gedrukt staat, is de eerste stap om de UID van de tag te achterhalen. Dit doet u als volgt:

  • Kopieer de bovenstaande code en open deze met de Arduino IDE
  • Klik op de Upload knop in de Arduino IDE om de code naar de Arduino te uploaden
  • Open de Seriële Monitor
  • Houd een RFID Tag voor de RFID-RC522 module
  • Noteer de UID in de Seriële Monitor
COM6
Send
Tap RFID Tag on reader Unauthorized Tag: 51 3D C1 AC
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Nadat u de UID heeft:

  • Werk de UID bij in regel 18 van 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 voor de RFID-RC522 module
  • Bekijk de output in de Seriële Monitor
COM6
Send
Tap RFID Tag on reader Authorized Tag
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Houd een andere RFID Tag voor de RFID-RC522 module
  • Bekijk de output in de Seriële Monitor
COM6
Send
Tap RFID Tag on reader Authorized Tag Unauthorized Tag: 5D 11 1A D3
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Arduino Code - Meerdere RFID Tags

We kunnen meerdere RFID/NFC tags toestaan om het solenoïde slot te activeren. De onderstaande code gebruikt twee tags als voorbeeld.

/* * 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-solenoid-lock */ #include <SPI.h> #include <MFRC522.h> #define SS_PIN 10 #define RST_PIN 5 #define RELAY_PIN A5 // The Arduino pin that controls the solenoid lock via relay 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(); // init SPI bus rfid.PCD_Init(); // init MFRC522 pinMode(RELAY_PIN, OUTPUT); // initialize pin as an output. digitalWrite(RELAY_PIN, LOW); // deactivate the solenoid lock => locked Serial.println("Tap RFID 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] == 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); // deactivate the solenoid lock => unlocked delay(2000); digitalWrite(RELAY_PIN, HIGH); // activate the solenoid lock => locked } 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); // deactivate the solenoid lock => unlocked delay(2000); digitalWrite(RELAY_PIN, HIGH); // activate the solenoid lock => locked } 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(); // halt PICC rfid.PCD_StopCrypto1(); // stop encryption on PCD } } }

Volg dezelfde stappen als hierboven, en houd vervolgens één voor één de tags voor de RFID-RC522 module. Het resultaat in de Seriële Monitor ziet er als volgt uit:

COM6
Send
Tap RFID Tag on reader Authorized Tag 2 Authorized Tag 1
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

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.

※ 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!