Arduino Nano - RFID - Servomotor

Dieses Tutorial zeigt dir, wie man ein Arduino Nano und ein RFID/NFC RC522-Modul verwendet, um einen Servomotor zu steuern. Der Prozess funktioniert wie folgt:

Dies kann verwendet werden, um einen Schrank, eine Schublade oder eine Tür zu sichern oder einen Futterspender für Haustiere zu öffnen und zu schließen...

Erforderliche Hardware

1×Official Arduino Nano
1×Alternativ: DIYables ATMEGA328P Nano Development Board
1×USB-A-zu-Mini-B-Kabel
1×RFID/NFC RC522 Kit (reader + tags)
1×RFID Key Fob
1×RFID Card
1×Servo-Motor
1×5V Netzteil
1×Verbindungskabel
1×(Optional) DC-Stromanschluss
1×(Empfohlen) Schraubklemmen-Erweiterungsboard für Arduino Nano
1×(Empfohlen) Breakout-Erweiterungsboard für Arduino Nano
1×(Empfohlen) Stromverteiler für Arduino Nano

Oder Sie können die folgenden Kits kaufen:

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

Wenn Sie mit dem RFID/NFC RC522-Modul und dem Servomotor nicht vertraut sind (einschließlich Pinbelegung, Funktionsweise und Programmierung), finden Sie weitere Informationen in den folgenden Tutorials:

Arduino Nano Arduino RFID Servomotor-Bauteil

Wie es funktioniert

  • Der Arduino Nano-Code enthält einige vordefinierte UIDs von RFID-/NFC-Tags.
  • Wenn das RFID-/NFC-Tag auf den Leser getippt wird, wird die UID gelesen.
  • Der Arduino Nano empfängt die UID vom Leser.
  • Er vergleicht dann die gelesene UID mit den vordefinierten UIDs.
  • Falls die UID mit einer der vordefinierten UIDs übereinstimmt, steuert der Arduino Nano den Servomotor auf 90°.
  • Wird das Tag erneut getippt, steuert der Arduino Nano den Servomotor wieder auf 0°.
  • Dieser Prozess wird kontinuierlich wiederholt.

Verdrahtungsdiagramm

Arduino Nano RFID RC522 Servomotor-Schaltplan

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

Aus Gründen der Einfachheit wird das oben gezeigte Verdrahtungsdiagramm zu Test- oder Lehrzwecken verwendet und für einen Servo-Motor mit geringem Drehmoment. Wir empfehlen dringend, in der Praxis eine externe Spannungsquelle für den Servo-Motor zu verwenden. Das untenstehende Verdrahtungsdiagramm veranschaulicht, wie der Servo-Motor an eine externe Spannungsquelle angeschlossen wird.

Arduino Nano RFID RC522 Servomotor-Schaltplan

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

Verdrahtung mit dem RFID-RC522-Modul

Um den Verbindungsprozess 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 fehlerhaft funktioniert, da die Ausgabepins des Arduino eine Spannung von 5 V liefern, während die Pins des RC522-Moduls eine Standardspannung von 3,3 V verwenden. Daher ist es ratsam, die Spannung zwischen den Arduino-Pins und den Pins des RC522-Moduls zu regulieren. Für weitere Details verweisen Sie bitte auf das Arduino Nano - RFID RC522 Tutorial. Die folgende Abbildung veranschaulicht, wie man 5 V mithilfe von Widerständen auf 3,3 V reguliert.

Arduino Nano RFID RC522 mit Spannungsregler-Verdrahtungsdiagramm

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

Siehe Der beste Weg, den Arduino Nano und andere Komponenten mit Strom zu versorgen.

※ Notiz:

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

Verdrahtungstabelle für das RFID/NFC RC522-Modul

RFID/NFC RC522 Arduino Nano
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-Gleichspannungsadapters

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

Arduino Nano Code - Einzelner RFID/NFC-Tag

/* * Dieser Arduino Nano Code wurde von newbiely.de entwickelt * Dieser Arduino Nano 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-nano/arduino-nano-rfid-servo-motor */ #include <SPI.h> #include <MFRC522.h> #include <Servo.h> #define RC522_SS_PIN 10 // The Arduino Nano pin connected to RC522's SS pin #define RC522_RST_PIN 5 // The Arduino Nano pin connected to RC522's RST pin #define SERVO_PIN A5 // The Arduino Nano pin connected to servo motor MFRC522 rfid(RC522_SS_PIN, RC522_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; // rotate the servo motor to the angle position 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

  • Klicken Sie auf das Bibliotheken-Symbol in der linken Leiste der Arduino IDE.
  • Suchen Sie nach “MFRC522” und finden Sie die Bibliothek von GithubCommunity.
  • Drücken Sie die Installieren-Schaltfläche, um die MFRC522-Bibliothek zu installieren.
Arduino Nano MFRC522-Bibliothek

Um die UID eines RFID-/NFC-Tags zu bestimmen, besteht der erste Schritt darin, Code in die Arduino-IDE hochzuladen. Dies kann durch Folgendes erfolgen:

  • Code kopieren und im Arduino IDE öffnen
  • Klicken Sie auf die Hochladen-Schaltfläche
  • Öffnen des seriellen Monitors
  • Berühren des RFID/NFC-Tags am RFID-RC522-Modul
  • Die UID im seriellen Monitor anzeigen
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 Erhalt der UID:

  • Ersetze den Wert von authorizedUID in Zeile 20 des Codes durch die erhaltene UID. Zum Beispiel ändere byte authorizedUID[4] = {0xFF, 0xFF, 0xFF, 0xFF}; zu byte authorizedUID[4] = {0x3A, 0xC9, 0x6A, 0xCB};
  • Lade den Code erneut auf das Arduino Nano-Board hoch.
  • Platziere einen RFID/NFC-Tag auf dem RFID-RC522-Modul.
  • Der Servomotor dreht sich auf 90°.
  • Überprüfe 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  
  • Tippen Sie erneut auf den RFID/NFC-Tag am RFID-RC522-Modul.
  • Der Servomotor wird auf 0° drehen und die Ausgabe wird im Serial Monitor sichtbar sein.
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 einen RFID- oder NFC-Tag auf das RFID-RC522-Modul.
  • Schau dir die Ausgabe im seriellen Monitor an.
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 Nano Code - Mehrere RFID- und NFC-Tags

Wir können mehrere RFID-/NFC-Tags aktivieren, um einen Servomotor zu steuern. Als Beispiel verwendet der untenstehende Code zwei Tags.

/* * Dieser Arduino Nano Code wurde von newbiely.de entwickelt * Dieser Arduino Nano 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-nano/arduino-nano-rfid-servo-motor */ #include <SPI.h> #include <MFRC522.h> #include <Servo.h> #define RC522_SS_PIN 10 // The Arduino Nano pin connected to RC522's SS pin #define RC522_RST_PIN 5 // The Arduino Nano pin connected to RC522's RST pin #define SERVO_PIN A5 // The Arduino Nano pin connected to servo motor MFRC522 rfid(RC522_SS_PIN, RC522_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; // rotate the servo motor to the angle position servo.write(angle); Serial.print("Rotate Servo Motor to "); Serial.print(angle); Serial.println("°"); }

Wiederhole dieselben Schritte wie oben und tippe dann nacheinander jeden RFID-Tag am RFID-RC522-Modul an. Die Ausgabe, die im Serial Monitor angezeigt wird, sollte wie folgt aussehen:

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 oben geschriebenen Code erweitern, um drei, vier oder mehr Tags hinzuzufügen.

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!