Raspberry Pi - RFID - Servo Motor

Deze handleiding legt uit hoe u een Raspberry Pi en een RFID NFC RC522-module gebruikt om een servomotor aan te sturen. Het proces werkt als volgt:

Dit kan worden gebruikt voor het beveiligen van een kast, lade, deur of voor het openen en sluiten van een voederbak voor huisdieren...

Hardware Benodigd

1×Raspberry Pi 5
1×RFID/NFC RC522 Kit (lezer + tags)
1×RFID Key Fob
1×RFID Card
1×Servomotor
1×5V Voedingsadapter
1×DC Voedingsconnector
1×Jumper wires (verbindingsdraadjes)
1×(Aanbevolen) Schroefklem Block Shield voor Raspberry Pi
1×(Aanbevolen) Raspberry Pi Prototyping Basisplaat & Breadboard Kit
1×(Aanbevolen) HDMI-Touchscreen-Monitor voor Raspberry Pi

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 Servomotor

Als u niet bekend bent met de RFID/NFC RC522-module en servomotor (inclusief pinout, werking en programmering), bieden de volgende handleidingen meer informatie:

Hoe Het Werkt

  • De UIDs van bepaalde RFID/NFC-tags worden geprogrammeerd in de Raspberry Pi-code.
  • Wanneer de gebruiker een RFID/NFC-tag op de RFID/NFC-lezer tikt, leest de lezer de UID van de tag.
  • De Raspberry Pi ontvangt de UID van de lezer en vergelijkt deze met de vooraf gedefinieerde UIDs.
  • Als de UID overeenkomt met één van de vooraf gedefinieerde UIDs, stuurt de Raspberry Pi de servomotor naar 90°.
  • Wanneer dezelfde tag opnieuw wordt getikt, stuurt de Raspberry Pi de servomotor terug naar 0°.
  • Dit proces wordt continu herhaald.

Aansluitschema

Raspberry Pi RFID RC522 servomotor aansluitschema

This image is created using Fritzing. Click to enlarge image

In het bovenstaande aansluitschema wordt een 5V adapter gebruikt om stroom te leveren aan de Raspberry Pi, de servomotor en de RC522-module indirect via de 3,3V-pin van de Raspberry Pi.

※ Notiz:

De pinindeling kan verschillen afhankelijk van de fabrikant. Gebruik ALTIJD de labels die op de module gedrukt staan. De afbeelding hierboven toont de pinout van modules van fabrikant DIYables.

Voor de eenvoud wordt het bovenstaande aansluitschema gebruikt voor test- of educatieve doeleinden, en voor een servomotor met een klein koppel. We raden sterk aan om in de praktijk een externe voeding voor de servomotor te gebruiken. Zie hoe u de externe voeding aansluit voor een servomotor in de Raspberry Pi - Servo Motor handleiding.

Aansluittabel van RFID/NFC RC522 Module

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 niet aangesloten
GND → Elke GND Pin
RST → Pin 31 (GPIO12)
VCC → Pin 1 of Pin 16 (3.3V)

Aansluittabel van Servomotor

Servomotor Arduino 5V DC Adapter
VCC (rood) → positief
GND (bruin) → negatief
SIG (geel) → A5

Aansluittabel van 5V DC Adapter

5V DC Adapter Servomotor Raspberry Pi
PositiefVCC
Positief -> Vin
NegatiefGND
Negatief GND

Raspberry Pi Code - Enkele RFID/NFC Tag

Snelstart

  • Zorg dat Raspbian of een ander met Raspberry Pi compatibel besturingssysteem op uw Pi is geïnstalleerd.
  • Zorg dat uw Raspberry Pi verbonden is met hetzelfde lokale netwerk als uw PC.
  • Zorg dat uw Raspberry Pi internettoegang heeft indien u libraries moet installeren.
  • Als dit de eerste keer is dat u de Raspberry Pi gebruikt, zie hoe u de Raspberry Pi installeert
  • Verbind uw PC met de Raspberry Pi via SSH gebruikmakend van de ingebouwde SSH-client op Linux en macOS of PuTTY op Windows. Zie hoe u uw PC verbindt met Raspberry Pi via SSH.
  • Zorg dat u de RPi.GPIO library geïnstalleerd heeft. Indien niet, installeer die met het volgende commando:
sudo apt-get update sudo apt-get install python3-rpi.gpio
  • Schakel de SPI-interface op de Raspberry Pi in door de instructies op Raspberry Pi - hoe activeer je de SPI interface te volgen.
  • Zorg dat u de spidev library geïnstalleerd heeft. Indien niet, installeer die met het volgende commando:
sudo apt-get install python3-pip python3-dev git sudo pip3 install spidev
  • Zorg dat u de mfrc522 library geïnstalleerd heeft. Indien niet, installeer die met het volgende commando:
sudo pip3 install mfrc522
  • Maak een Python-scriptbestand aan met de naam rfid_servo.py en voeg de volgende code toe:
# Deze Raspberry Pi code is ontwikkeld door newbiely.nl # Deze Raspberry Pi code wordt zonder enige beperking aan het publiek beschikbaar gesteld. # Voor volledige instructies en schema's, bezoek: # https://newbiely.nl/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()
  • Sla het bestand op en voer het Python-script uit door het volgende commando in de terminal te typen:
python3 rfid_servo.py

Het script draait in een oneindige lus totdat u Ctrl + C in de terminal indrukt.

Om de UID van een RFID/NFC-tag te achterhalen, houdt u een RFID/NFC-tag op de RFID-RC522-module. De UID verschijnt in de Terminal.

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

Zodra u de UID heeft:

  • Vervang regel 20 van de code door de UID, bijvoorbeeld byte authorizedUID[4] = {0x3A, 0xC9, 0x6A, 0xCB};
  • Voer het Python-script opnieuw uit
python3 rfid_servo.py
  • Plaats een RFID/NFC-tag op de RFID-RC522-module
  • De servomotor draait naar 90°
  • Bekijk de output in de Terminal
PuTTY - Raspberry Pi
Tap RFID/NFC tag on reader Authorized Tag Rotate Servo Motor to 90°
  • Tik nogmaals met dezelfde RFID/NFC-tag op de RFID-RC522-module.
  • Bekijk hoe de servomotor terug draait naar 0°.
  • Bekijk de output in de Terminal
PuTTY - Raspberry Pi
Tap RFID/NFC tag on reader Authorized Tag Rotate Servo Motor to 90° Authorized Tag Rotate Servo Motor to 0°
  • Tik een RFID- of NFC-tag op de RFID-RC522-module.
  • Bekijk de output in de 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 - Meerdere RFID/NFC Tags

We kunnen meerdere RFID/NFC-tags inschakelen om een servomotor aan te sturen. In het volgende voorbeeld gebruikt de code drie RFID-tags.

# Deze Raspberry Pi code is ontwikkeld door newbiely.nl # Deze Raspberry Pi code wordt zonder enige beperking aan het publiek beschikbaar gesteld. # Voor volledige instructies en schema's, bezoek: # https://newbiely.nl/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()

Herhaal dezelfde stappen als voorheen, en tik vervolgens elke tag achtereenvolgens op de RFID-RC522-module. De output in de Terminal zou als volgt moeten zijn:

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

U kunt de bovenstaande code uitbreiden om vier of meer RFID-tags te ondersteunen.

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 om dit project succesvol op te zetten.

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