Raspberry Pi - RFID - Servo Motor

Dieses Tutorial zeigt Ihnen, wie Sie einen Raspberry Pi und ein RFID NFC RC522 Modul zur Steuerung eines Servo-Motors verwenden. Der Prozess funktioniert folgendermaßen:

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

Erforderliche Hardware

1×Raspberry Pi 5
1×RFID/NFC RC522 Kit (Reader + Tags)
1×RFID Key Fob
1×RFID Card
1×Servo-Motor
1×5V Netzteil
1×DC-Stromanschluss
1×Jumper Wires (Verbindungskabel)
1×(Empfohlen) Schraubklemmenblock-Shield für Raspberry Pi
1×(Empfohlen) Raspberry Pi Prototyping-Grundplatte & Breadboard-Kit
1×(Empfohlen) HDMI-Touchscreen-Monitor für Raspberry Pi

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.

Kaufhinweis: Falls Sie mehrere Servomotoren verwenden möchten, empfehlen wir die Verwendung des PCA9685 16 Channel PWM Servo Driver Module, um MCU-Pins zu sparen und die Verdrahtung zu vereinfachen.

Über das RFID/NFC RC522 Modul und den Servo Motor

Wenn Sie mit dem RFID/NFC RC522 Modul und Servo Motor nicht vertraut sind (einschließlich Pinout, Funktionsweise und Programmierung), können die folgenden Tutorials weitere Informationen bereitstellen:

Funktionsweise

  • Die UIDs bestimmter RFID/NFC-Tags werden in den Raspberry Pi Code programmiert.
  • Wenn der Benutzer ein RFID/NFC-Tag auf den RFID/NFC-Reader tippt, liest der Reader die UID vom Tag.
  • Der Raspberry Pi ruft dann die UID vom Reader ab und vergleicht sie mit den vordefinierten UIDs.
  • Wenn die UID mit einer der vordefinierten UIDs übereinstimmt, steuert der Raspberry Pi den Servo-Motor auf 90°.
  • Wenn der Tag erneut angetippt wird, steuert der Raspberry Pi den Servo-Motor zurück auf 0°.
  • Dieser Prozess wiederholt sich kontinuierlich.

Verdrahtungsdiagramm

Raspberry Pi RFID RC522 servo motor wiring diagram

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

Um Ihren Verdrahtungsaufbau zu vereinfachen und zu organisieren, empfehlen wir die Verwendung eines Schraubklemmenblock-Shields für Raspberry Pi. Dieses Shield gewährleistet sicherere und besser verwaltbare Verbindungen, wie unten gezeigt:

Raspberry Pi Schraubklemmenblock-Shield

Im obigen Verdrahtungsdiagramm wird ein 5V-Adapter verwendet, um den Raspberry Pi, den Servo-Motor und das RC522-Modul indirekt über den 3,3V-Pin des Raspberry Pi mit Strom zu versorgen.

※ Notiz:

Die Anordnung der Pins kann je nach Hersteller unterschiedlich sein. Verwenden Sie IMMER die auf dem Modul gedruckten Beschriftungen. Das obige Bild zeigt das Pinout von Modulen des Herstellers DIYables.

Der Einfachheit halber wird das obige Verdrahtungsdiagramm für Test- oder Bildungszwecke und für einen Servo-Motor mit kleinem Drehmoment verwendet. Wir empfehlen dringend, in der Praxis eine externe Stromquelle für den Servo-Motor zu verwenden. Siehe wie Sie externe Stromversorgung für den Servo-Motor bereitstellen im Raspberry Pi - Servo Motor Tutorial

Verdrahtungstabelle für RFID/NFC RC522 Modul

RFID/NFC RC522 Raspberry Pi
SS → GPIO 8 (SPI0 CS)
SCK → GPIO 11 (SPI0 SCL)
MOSI → GPIO 10 (SPI0 MOSI)
MISO → GPIO 9 (SPI0 MISO)
IRQ nicht verbunden
GND → Beliebiger GND Pin
RST → Pin 31 (GPIO12)
VCC → Pin 1 oder Pin 16 (3.3V)

Verdrahtungstabelle für Servo Motor

Servo Motor Arduino 5V DC Adapter
VCC (rot) → Positiv
GND (braun) → Negativ
SIG (gelb) → A5

Verdrahtungstabelle für 5V DC Adapter

5V DC Adapter Servo Motor Raspberry Pi
PositivVCC
Positiv -> Vin
NegativGND
Negativ GND

Raspberry Pi Code - Einzelnes RFID/NFC Tag

Schnelle Schritte

  • Stellen Sie sicher, dass Sie Raspbian oder ein anderes Raspberry Pi-kompatibles Betriebssystem auf Ihrem Pi installiert haben.
  • Stellen Sie sicher, dass Ihr Raspberry Pi mit demselben lokalen Netzwerk wie Ihr PC verbunden ist.
  • Stellen Sie sicher, dass Ihr Raspberry Pi mit dem Internet verbunden ist, falls Sie Bibliotheken installieren müssen.
  • Wenn Sie den Raspberry Pi zum ersten Mal verwenden, siehe wie Sie den Raspberry Pi einrichten
  • Verbinden Sie Ihren PC über SSH mit dem Raspberry Pi unter Verwendung des integrierten SSH-Clients auf Linux und macOS oder PuTTY auf Windows. Siehe wie Sie Ihren PC über SSH mit dem Raspberry Pi verbinden.
  • Stellen Sie sicher, dass Sie die RPi.GPIO Bibliothek installiert haben. Falls nicht, installieren Sie sie mit folgendem Befehl:
sudo apt-get update sudo apt-get install python3-rpi.gpio
  • Aktivieren Sie die SPI-Schnittstelle auf dem Raspberry Pi, indem Sie der Anleitung auf Raspberry Pi - wie Sie die SPI-Schnittstelle aktivieren folgen
  • Stellen Sie sicher, dass Sie die spidev Bibliothek installiert haben. Falls nicht, installieren Sie sie mit folgendem Befehl:
sudo apt-get install python3-pip python3-dev git sudo pip3 install spidev
  • Stellen Sie sicher, dass Sie die mfrc522 Bibliothek installiert haben. Falls nicht, installieren Sie sie mit folgendem Befehl:
sudo pip3 install mfrc522
  • Erstellen Sie eine Python-Script-Datei rfid_servo.py und fügen Sie folgenden Code hinzu:
# Dieser Raspberry Pi Code wurde von newbiely.de entwickelt # Dieser Raspberry Pi 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/raspberry-pi/raspberry-pi-rfid-servo-motor import RPi.GPIO as GPIO import MFRC522 import time import math # Define GPIO pins RC522_RST_PIN = 12 # GPIO pin connected to RC522's RST pin SERVO_PIN = 16 # GPIO pin connected to servo motor # Set up GPIO GPIO.setmode(GPIO.BOARD) GPIO.setup(SERVO_PIN, GPIO.OUT) servo_motor = GPIO.PWM(SERVO_PIN, 50) # 50Hz frequency for the servo motor # Create an instance of the RFID reader reader = MFRC522.MFRC522() # Authorized UID authorized_uid = [0xAA, 0xBB, 0xCC, 0xDD] def is_authorized(uid): return uid == authorized_uid def move_servo(angle): duty_cycle = (angle / 18) + 2 GPIO.output(SERVO_PIN, True) servo_motor.ChangeDutyCycle(duty_cycle) print(f"Rotate Servo Motor to {angle}°") try: servo_motor.start(0) # Start PWM with 0% duty cycle print("Tap RFID/NFC Tag on reader") while True: (status, TagType) = reader.MFRC522_Request(reader.PICC_REQIDL) if status == reader.MI_OK: (status, uid) = reader.MFRC522_Anticoll() if status == reader.MI_OK: if is_authorized(uid): print("Authorized Tag") # Toggle servo angle current_angle = 90 if current_angle == 0 else 0 move_servo(current_angle) time.sleep(2) # Add delay after moving the servo else: print(f"Unauthorized Tag with UID: {' '.join(format(b, '02x') for b in uid)}") except KeyboardInterrupt: servo_motor.stop() GPIO.cleanup()
  • Speichern Sie die Datei und führen Sie das Python-Script aus, indem Sie folgenden Befehl im Terminal eingeben:
python3 rfid_servo.py

Das Script läuft in einer Endlosschleife kontinuierlich, bis Sie Ctrl + C im Terminal drücken.

Um die UID eines RFID/NFC-Tags zu identifizieren, tippen Sie ein RFID/NFC-Tag auf das RFID-RC522-Modul. Die UID kann im Terminal angezeigt werden.

PuTTY - Raspberry Pi
Tap RFID/NFC tag on reader Unauthorized Tag with UID: 3A C9 6A CB

Sobald Sie Ihre UID haben:

  • Ersetzen Sie Zeile 20 des Codes mit der UID, zum Beispiel byte authorizedUID[4] = {0x3A, 0xC9, 0x6A, 0xCB};
  • Führen Sie das Python-Script erneut aus
python3 rfid_servo.py
  • Platzieren Sie ein RFID/NFC-Tag auf das RFID-RC522-Modul
  • Der Servo-Motor wird auf 90° drehen
  • Überprüfen Sie die Ausgabe im Terminal
PuTTY - Raspberry Pi
Tap RFID/NFC tag on reader Authorized Tag Rotate Servo Motor to 90°
  • Tippen Sie dasselbe RFID/NFC-Tag, das auf dem RFID-RC522-Modul verwendet wurde, erneut an.
  • Sehen Sie zu, wie sich der Servo-Motor auf 0° dreht.
  • Überprüfen Sie die Ausgabe im Terminal
PuTTY - Raspberry Pi
Tap RFID/NFC tag on reader Authorized Tag Rotate Servo Motor to 90° Authorized Tag Rotate Servo Motor to 0°
  • Tippen Sie ein RFID- oder NFC-Tag auf das RFID-RC522-Modul.
  • Überprüfen Sie die Ausgabe im Terminal
PuTTY - Raspberry Pi
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

Raspberry Pi Code - Mehrere RFID/NFC Tags

Wir können mehrere RFID/NFC-Tags aktivieren, um einen Servo-Motor zu steuern. Als Beispiel verwendet der folgende Code drei RFID-Tags.

# Dieser Raspberry Pi Code wurde von newbiely.de entwickelt # Dieser Raspberry Pi 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/raspberry-pi/raspberry-pi-rfid-servo-motor import RPi.GPIO as GPIO import MFRC522 import time import math # Define GPIO pins RC522_RST_PIN = 12 # GPIO pin connected to RC522's RST pin SERVO_PIN = 16 # GPIO pin connected to servo motor # Set up GPIO GPIO.setmode(GPIO.BOARD) GPIO.setup(SERVO_PIN, GPIO.OUT) servo_motor = GPIO.PWM(SERVO_PIN, 50) # 50Hz frequency for the servo motor # Create an instance of the RFID reader reader = MFRC522.MFRC522() # List of authorized UIDs authorized_uids = [ [0xAA, 0xBB, 0xCC, 0xDD], [0x11, 0x22, 0x33, 0x44], [0xFF, 0xFF, 0xFF, 0xFF] ] def is_authorized(uid): for auth_uid in authorized_uids: if uid == auth_uid: return True return False def move_servo(angle): duty_cycle = (angle / 18) + 2 GPIO.output(SERVO_PIN, True) servo_motor.ChangeDutyCycle(duty_cycle) print(f"Rotate Servo Motor to {angle}°") try: servo_motor.start(0) # Start PWM with 0% duty cycle current_angle = 0 # Initial angle print("Tap RFID/NFC Tag on reader") while True: (status, TagType) = reader.MFRC522_Request(reader.PICC_REQIDL) if status == reader.MI_OK: (status, uid) = reader.MFRC522_Anticoll() if status == reader.MI_OK: if is_authorized(uid): print("Authorized Tag") # Toggle servo angle current_angle = 90 if current_angle == 0 else 0 move_servo(current_angle) else: print(f"Unauthorized Tag with UID: {' '.join(format(b, '02x') for b in uid)}") except KeyboardInterrupt: servo_motor.stop() GPIO.cleanup()

Wiederholen Sie die gleichen Schritte wie zuvor und tippen Sie dann jeden Tag nacheinander auf das RFID-RC522-Modul. Die Ausgabe im Terminal sollte folgendermaßen erscheinen:

PuTTY - Raspberry Pi
Tap RFID/NFC tag on reader Authorized Tag Rotate Servo Motor to 90° Authorized Tag Rotate Servo Motor to 0°

Sie können den obigen Code erweitern, um vier oder mehr RFID-Tags einzuschließen.

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!