Raspberry Pi - RFID - Servomoteur

Ce didacticiel vous explique comment utiliser un Raspberry Pi et un module RFID NFC RC522 pour contrôler un servomoteur. Le processus fonctionne comme suit :

Cela peut être utilisé pour sécuriser une armoire, un tiroir, une porte, ou pour ouvrir et fermer une mangeoire pour animaux...

Préparation du matériel

1×Raspberry Pi 4 Model B
1×RFID/NFC RC522 Kit (reader + tags)
1×RFID Key Fob
1×RFID Card
1×Servo Motor
1×5V Power Adapter
1×DC Power Jack
1×Jumper Wires
1×(Optional) Screw Terminal Block Shield for Raspberry Pi
1×(Optional) USB-C Power Cable with On/Off Switch for Raspberry Pi 4B
1×(Optional) Plastic Case and Cooling Fan for Raspberry Pi 4B
1×(Optional) HDMI Touch Screen Monitor for Raspberry Pi

Or you can buy the following sensor kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.

À propos du module RFID/NFC RC522 et du servomoteur

Si vous n'êtes pas familier avec le module RFID/NFC RC522 et le servomoteur (y compris le brochage, le fonctionnement et la programmation), les tutoriels suivants peuvent fournir plus d'informations :

Comment ça marche

  • Les UIDs de certaines étiquettes RFID/NFC sont programmés dans le code du Raspberry Pi.
  • Lorsque l'utilisateur passe une étiquette RFID/NFC sur le lecteur RFID/NFC, le lecteur lit l'UID de l'étiquette.
  • Le Raspberry Pi récupère ensuite l'UID du lecteur et le compare aux UIDs prédéfinis.
  • Si l'UID correspond à l'un des UIDs prédéfinis, le Raspberry Pi contrôlera le servomoteur à 90°.
  • Si l'étiquette est de nouveau passée, le Raspberry Pi contrôlera le servomoteur à 0°.
  • Ce processus se répète en continu.

Diagramme de câblage

Schéma de câblage RFID RC522 et servo-moteur Raspberry Pi

This image is created using Fritzing. Click to enlarge image

Pour simplifier et organiser votre câblage, nous vous recommandons d'utiliser un Screw Terminal Block Shield pour Raspberry Pi. Ce shield garantit des connexions plus sûres et plus faciles à gérer, comme illustré ci-dessous :

Raspberry Pi Screw Terminal Block Shield

Dans le schéma de câblage ci-dessus, un adaptateur 5V est utilisé pour alimenter le Raspberry Pi, le servo-moteur et le module RC522 indirectement via la broche 3.3V du Raspberry Pi.

※ Note:

La disposition des broches peut varier selon le fabricant. Utilisez TOUJOURS les étiquettes imprimées sur le module. L'image ci-dessus affiche le brochage des modules du fabricant DIYables.

Pour des raisons de simplicité, le schéma de câblage ci-dessus est utilisé à des fins de test ou d'éducation, et pour un servomoteur avec un faible couple. Nous vous recommandons vivement d'utiliser une source d'alimentation externe pour le servomoteur en pratique. Consultez comment fournir une alimentation externe pour le servomoteur dans le tutoriel Raspberry Pi - Moteur Servo..

Tableau de câblage du module RFID/NFC RC522

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 not connected
GND → Any GND Pin
RST → Pin 31 (GPIO12)
VCC → Pin 1 or Pin 16 (3.3V)

Tableau de câblage du servomoteur

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

Tableau de câblage de l'adaptateur 5V DC

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

Code Raspberry Pi - Tag RFID/NFC Unique

Étapes rapides

  • Assurez-vous d'avoir Raspbian ou un autre système d'exploitation compatible avec Raspberry Pi installé sur votre Pi.
  • Assurez-vous que votre Raspberry Pi est connecté au même réseau local que votre PC.
  • Assurez-vous que votre Raspberry Pi est connecté à Internet si vous devez installer des bibliothèques.
  • Si c'est la première fois que vous utilisez Raspberry Pi, voyez Installation du logiciel - Raspberry Pi.
  • Connectez votre PC au Raspberry Pi via SSH en utilisant le client SSH intégré sur Linux et macOS ou PuTTY sur Windows. Voir comment connecter votre PC au Raspberry Pi via SSH.
  • Assurez-vous que vous avez la bibliothèque RPi.GPIO installée. Sinon, installez-la en utilisant la commande suivante :
sudo apt-get update sudo apt-get install python3-rpi.gpio
  • Activez l'interface SPI sur Raspberry Pi en suivant les instructions sur Raspberry Pi - comment activer l'interface SPI
  • Assurez-vous que la bibliothèque spidev est installée. Sinon, installez-la en utilisant la commande suivante :
sudo apt-get install python3-pip python3-dev git sudo pip3 install spidev
  • Assurez-vous d'avoir la bibliothèque mfrc522 installée. Sinon, installez-la en utilisant la commande suivante :
sudo pip3 install mfrc522
  • Créez un fichier script Python rfid_servo.py et ajoutez le code suivant :
# Ce code Raspberry Pi a été développé par newbiely.fr # Ce code Raspberry Pi est mis à disposition du public sans aucune restriction. # Pour des instructions complètes et des schémas de câblage, veuillez visiter: # https://newbiely.fr/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()
  • Enregistrez le fichier et exécutez le script Python en entrant la commande suivante dans le terminal :
python3 rfid_servo.py

Le script s'exécute dans une boucle infinie continuellement jusqu'à ce que vous appuyiez sur Ctrl + C dans le terminal.

Pour identifier l'UID d'une étiquette RFID/NFC, appuyez une étiquette RFID/NFC sur le module RFID-RC522. L'UID peut être vu sur le Terminal.

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

Une fois que vous avez votre UID :

  • Remplacez la ligne 20 du code par l'UID, par exemple byte authorizedUID[4] = {0x3A, 0xC9, 0x6A, 0xCB};
  • Exécutez à nouveau le script Python
python3 rfid_servo.py
  • Placez une étiquette RFID/NFC sur le module RFID-RC522
  • Le servomoteur tournera à 90°
  • Vérifiez la sortie sur le Terminal
PuTTY - Raspberry Pi
Tap RFID/NFC tag on reader Authorized Tag Rotate Servo Motor to 90°
  • Touchez à nouveau le même tag RFID/NFC utilisé sur le module RFID-RC522.
  • Regardez le servomoteur pivoter à 0°.
  • Consultez la sortie sur le Terminal.
PuTTY - Raspberry Pi
Tap RFID/NFC tag on reader Authorized Tag Rotate Servo Motor to 90° Authorized Tag Rotate Servo Motor to 0°
  • Approchez un tag RFID ou NFC du module RFID-RC522.
  • Vérifiez la sortie sur le 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

Code Raspberry Pi - Tags RFID/NFC Multiples

Nous pouvons activer plusieurs étiquettes RFID/NFC pour contrôler un servomoteur. Par exemple, le code ci-dessous utilise trois étiquettes RFID.

# Ce code Raspberry Pi a été développé par newbiely.fr # Ce code Raspberry Pi est mis à disposition du public sans aucune restriction. # Pour des instructions complètes et des schémas de câblage, veuillez visiter: # https://newbiely.fr/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()

Répétez les mêmes étapes qu'auparavant, puis appuyez sur chaque étiquette successivement sur le module RFID-RC522. La sortie sur le terminal devrait apparaître comme suit :

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

Vous pouvez étendre le code ci-dessus pour inclure quatre, ou plus de tags RFID.

Vidéo

※ OUR MESSAGES

  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!