Arduino - RFID/NFC - Servomotor

In diesem Tutorial lernen wir, wie man einen RFID/NFC-Tag verwendet, um einen Servomotor mit Arduino zu steuern. So funktioniert es:

Dies kann angewendet werden, um einen Schrank, eine Schublade, eine Tür zu verriegeln oder zu entriegeln, oder den Futterspender zu öffnen oder zu schließen.

Erforderliche Hardware

1×Arduino Uno R3
1×USB 2.0 Kabel Typ A/B (für USB-A PC)
1×USB 2.0 Kabel Typ C/B (für USB-C PC)
1×RFID/NFC RC522 Kit (reader + tags)
1×RFID Key Fob
1×RFID Card
1×Servo-Motor
1×5V Netzteil
1×DC-Stromanschluss
1×Verbindungskabel
1×(Empfohlen) Schraubklemmenblock-Shield für Arduino Uno
1×(Empfohlen) Breadboard-Shield für Arduino Uno
1×(Empfohlen) Gehäuse für Arduino Uno
1×(Empfohlen) Prototyping-Grundplatte & Breadboard-Kit für Arduino Uno

Oder Sie können die folgenden Kits kaufen:

1×DIYables STEM V3 Starter-Kit (Arduino enthalten)
1×DIYables Sensor-Kit (30 Sensoren/Displays)
1×DIYables Sensor-Kit (18 Sensoren/Displays)
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.

Über RFID/NFC RC522-Modul und Servomotor

Falls Sie nichts über das RFID/NFC RC522-Modul und den Servo-Motor wissen (Pinbelegung, Funktionsweise, Programmierung ...), informieren Sie sich in den folgenden Tutorials darüber:

Arduino Arduino RFID Servomotor Bauteil

So funktioniert es

  • Die UIDs einiger RFID-/NFC-Tags sind im Arduino-Code voreingestellt.
  • Der Benutzer berührt einen RFID-/NFC-Tag am RFID-/NFC-Lesegerät.
  • Das Lesegerät liest die UID aus dem Tag.
  • Arduino erhält die UID vom Lesegerät.
  • Arduino vergleicht die ausgelesene UID mit den vordefinierten UIDs.
  • Wenn die UID mit einer der vordefinierten UIDs übereinstimmt, steuert Arduino den Servomotor auf 90°.
  • Wenn der Tag erneut berührt wird, bewegt Arduino den Servomotor wieder auf 0°.
  • Dieser Prozess wird unendlich oft wiederholt.

Verdrahtungsdiagramm

Arduino RFID RC522 Servomotor-Schaltplan

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

Im obigen Schaltplan versorgt einziger 5-V-Adapter den Arduino direkt, den Servo-Motor direkt und das RC522-Modul (indirekt über den 3,3-V-Pin des Arduino).

Um den Prozess zu vereinfachen, sind die Pins des RC522-Moduls direkt mit den Pins des Arduino verbunden. Dies kann jedoch in bestimmten Fällen dazu führen, dass der Arduino nicht mehr ordnungsgemäß funktioniert, da die Ausgabepins des Arduino eine Spannung von 5 V liefern, während die Pins des RC522-Moduls normalerweise mit 3,3 V arbeiten. Folglich ist es ratsam, die Spannung zwischen den Pins des Arduino und den Pins des RC522-Moduls zu regulieren. Für weitere Details verweisen Sie bitte auf das Arduino - RFID RC522 Tutorial. Die untenstehende Schaltung zeigt, wie man 5 V auf 3,3 V mithilfe von Widerständen reguliert:

Arduino RFID RC522 mit spannungsregulierendem Schaltplan

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

※ Notiz:

Die Anordnung der Pins kann je nach Hersteller variieren. Verwenden Sie immer die auf dem Modul aufgedruckten Etiketten. Das obige Bild zeigt die Pinbelegung der Module des Herstellers DIYables.

Verdrahtungstabelle des RFID/NFC RC522-Moduls

RFID/NFC RC522 Arduino
SS → 10
SCK → 13
MOSI → 11
MISO → 12
IRQ(not connected)
GNDGND
RST → 9
VCC → 3.3V

Verdrahtungstabelle des Servomotors

Servo Motor Arduino 5V DC Adapter
VCC (red) → positive
GND (brown) → negative
SIG (yellow) → A5

Verdrahtungstabelle des 5-V-Gleichstromadapters

5V DC Adapter Servo Motor Arduino
PositiveVCC
Positive -> Vin
NegativeGND
Negative GND

Arduino-Code - Einzelner RFID/NFC-Tag

/* * Dieser Arduino Code wurde von newbiely.de entwickelt * Dieser Arduino Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/arduino/arduino-rfid-nfc-servo-motor */ #include <SPI.h> #include <MFRC522.h> #include <Servo.h> #define SS_PIN 10 #define RST_PIN 9 #define SERVO_PIN A5 MFRC522 rfid(SS_PIN, RST_PIN); Servo servo; byte authorizedUID[4] = {0xFF, 0xFF, 0xFF, 0xFF}; int angle = 0; // the current angle of servo motor void setup() { Serial.begin(9600); SPI.begin(); // init SPI bus rfid.PCD_Init(); // init MFRC522 servo.attach(SERVO_PIN); servo.write(angle); // rotate servo motor to 0° 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] == authorizedUID[0] && rfid.uid.uidByte[1] == authorizedUID[1] && rfid.uid.uidByte[2] == authorizedUID[2] && rfid.uid.uidByte[3] == authorizedUID[3] ) { Serial.println("Authorized Tag"); // change angle of servo motor if (angle == 0) angle = 90; else //if(angle == 90) angle = 0; // control servo motor arccoding to the angle servo.write(angle); Serial.print("Rotate Servo Motor to "); Serial.print(angle); Serial.println("°"); } else { Serial.print("Unauthorized Tag 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 } } }

Schnelle Schritte

  • Navigieren Sie zum Bibliotheken-Symbol in der linken Seitenleiste der Arduino IDE.
  • Suchen Sie nach “MFRC522”, und finden Sie dann die Bibliothek von GithubCommunity
  • Klicken Sie auf die Installieren-Schaltfläche, um die MFRC522-Bibliothek zu installieren.
Arduino MFRC522-Bibliothek

Da die UID normalerweise nicht auf dem RFID/NFC-Tag aufgedruckt ist, besteht der erste Schritt darin, die UID des Tags herauszufinden. Dies kann durch Folgendes erreicht werden:

  • Kopieren Sie den obigen Code und öffnen Sie ihn mit der Arduino IDE
  • Klicken Sie in der Arduino IDE auf die Hochladen-Schaltfläche, um den Code auf den Arduino hochzuladen
  • Öffnen Sie den Seriellen Monitor
  • Berühren Sie ein RFID/NFC-Tag am RFID-RC522-Modul
  • Lesen Sie die UID im Seriellen Monitor aus
COM6
Send
Tap RFID/NFC tag on reader Unauthorized Tag with UID: 3A C9 6A CB
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Nach dem Vorliegen einer UID:

  • Aktualisieren Sie die UID in Zeile 20 des obigen Codes. Zum Beispiel ändern Sie byte authorizedUID[4] = {0xFF, 0xFF, 0xFF, 0xFF}; zu byte authorizedUID[4] = {0x3A, 0xC9, 0x6A, 0xCB};
  • Laden Sie den Code erneut auf den Arduino hoch.
  • Berühren Sie ein RFID/NFC-Tag am RFID-RC522-Modul.
  • Sie sehen, wie sich der Servomotor auf 90° dreht.
  • Sehen Sie die Ausgabe im Serial Monitor.
COM6
Send
Tap RFID/NFC tag on reader Authorized Tag Rotate Servo Motor to 90°
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Berühren Sie denselben RFID/NFC-Tag erneut am RFID-RC522-Modul.
  • Sie werden sehen, wie sich der Servomotor auf 0° dreht.
  • Sehen Sie die Ausgabe im seriellen Monitor.
COM6
Send
Tap RFID/NFC tag on reader Authorized Tag Rotate Servo Motor to 90° Authorized Tag Rotate Servo Motor to 0°
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Tippe ein weiteres RFID/NFC-Tag auf dem RFID-RC522-Modul an
  • Sieh die Ausgabe im Serial Monitor
COM6
Send
Tap RFID/NFC tag on reader Authorized Tag Rotate Servo Motor to 90° Authorized Tag Rotate Servo Motor to 0° Unauthorized Tag with UID: BD 1E 1D 00
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Arduino-Code – Mehrere RFID/NFC-Tags

Wir können mehreren RFID-/NFC-Tags die Steuerung eines Servomotors ermöglichen. Der untenstehende Code verwendet zwei Tags als Beispiel.

/* * Dieser Arduino Code wurde von newbiely.de entwickelt * Dieser Arduino Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/arduino/arduino-rfid-nfc-servo-motor */ #include <SPI.h> #include <MFRC522.h> #include <Servo.h> #define SS_PIN 10 #define RST_PIN 9 #define SERVO_PIN A5 MFRC522 rfid(SS_PIN, RST_PIN); Servo servo; byte authorizedUID1[4] = {0x3A, 0xC9, 0x6A, 0xCB}; byte authorizedUID2[4] = {0x30, 0x01, 0x8B, 0x15}; int angle = 0; // the current angle of servo motor void setup() { Serial.begin(9600); SPI.begin(); // init SPI bus rfid.PCD_Init(); // init MFRC522 servo.attach(SERVO_PIN); servo.write(angle); // rotate servo motor to 0° 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] == 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"); changeServo(); } 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"); changeServo(); } else { Serial.print("Unauthorized Tag 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 } } } void changeServo() { // change angle of servo motor if (angle == 0) angle = 90; else //if(angle == 90) angle = 0; // control servo motor arccoding to the angle servo.write(angle); Serial.print("Rotate Servo Motor to "); Serial.print(angle); Serial.println("°"); }

Führen Sie ähnliche Schritte wie oben durch, und tippen Sie anschließend nacheinander jeden RFID-Tag auf das RFID-RC522-Modul. Das Ergebnis im Serial Monitor sieht unten so aus:

COM6
Send
Tap RFID/NFC tag on reader Authorized Tag 2 Rotate Servo Motor to 90° Authorized Tag 1 Rotate Servo Motor to 0°
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Sie können den obigen Code auf drei, vier oder mehr Tags erweitern.

Video Tutorial

Wir erwägen die Erstellung von Video-Tutorials. Wenn Sie Video-Tutorials für wichtig halten, abonnieren Sie bitte unseren YouTube-Kanal , um uns zu motivieren, die Videos zu erstellen.

※ UNSERE NACHRICHTEN

  • Sie können gerne den Link zu diesem Tutorial teilen. Bitte verwenden Sie jedoch unsere Inhalte nicht auf anderen Websites. Wir haben viel Mühe und Zeit in die Erstellung der Inhalte investiert, bitte respektieren Sie unsere Arbeit!