Arduino - RFID/NFC - Moteur servo

Dans ce tutoriel, nous allons apprendre à utiliser un tag RFID/NFC pour contrôler un moteur servo avec un Arduino. Voici comment cela fonctionne :

Cela peut être appliqué pour verrouiller/déverrouiller un placard, un tiroir, une porte, ou pour ouvrir/fermer le distributeur de nourriture pour animaux...

Préparation du matériel

1×Arduino Uno
1×USB 2.0 cable type A/B
1×RFID/NFC RC522 Kit (reader + tags)
1×RFID Key Fob
1×Servo Motor
1×5V Power Adapter
1×DC Power Jack
1×Jumper Wires
1×(Optional) 9V Power Adapter for Arduino
1×(Recommended) Screw Terminal Block Shield for Arduino Uno
1×(Optional) Transparent Acrylic Enclosure For Arduino Uno

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.

Sur le module RFID/NFC RC522 et le moteur servo

Si vous ne connaissez pas le module RFID/NFC RC522 et le moteur servo (brochage, fonctionnement, programmation...), renseignez-vous à leur sujet dans les tutoriels suivants :

Composant Arduino RFID servo moteur

Comment ça fonctionne

  • Les UID de certains tags RFID/NFC sont prédéfinis dans le code Arduino.
  • L'utilisateur tape un tag RFID/NFC sur le lecteur RFID/NFC.
  • Le lecteur lit l'UID du tag.
  • Arduino reçoit l'UID du lecteur.
  • Arduino compare l'UID lu avec les UID prédéfinis.
  • Si l'UID correspond à l'un des UID prédéfinis, Arduino contrôle le moteur servo à 90°.
  • Si le tag est tapé à nouveau, Arduino ramène le moteur servo à 0°.
  • Ce processus est répété à l'infini.

Diagramme de câblage

Schéma de câblage du moteur servo RFID RC522 Arduino

This image is created using Fritzing. Click to enlarge image

Dans le schéma de câblage ci-dessus, un seul adaptateur 5V fournit de l'énergie directement à l'Arduino, directement au moteur servo, et au module RC522 (indirectement via la broche 3.3V de l'Arduino).

Pour simplifier le processus, les broches du module RC522 sont directement connectées aux broches de l'Arduino. Cependant, cela peut entraîner un dysfonctionnement de l'Arduino dans certains cas car les broches de sortie de l'Arduino produisent une tension de 5V, tandis que les broches du module RC522 fonctionnent normalement à une tension de 3.3V. Par conséquent, il est conseillé de réguler la tension entre les broches de l'Arduino et celles du module RC522. Pour plus de détails, veuillez consulter le tutoriel Arduino - RFID RC522. Le schéma ci-dessous illustre comment réguler de 5V à 3.3V à l'aide de résistances :

Schéma de câblage régulé en tension pour Arduino RFID RC522

This image is created using Fritzing. Click to enlarge image

※ NOTE THAT:

L'ordre des broches peut varier selon les fabricants. Utilisez TOUJOURS les étiquettes imprimées sur le module. L'image ci-dessus montre le schéma de brochage des modules du fabricant DIYables.

Tableau de câblage du module RFID/NFC RC522

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

Tableau de câblage du moteur servo

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 Arduino
PositiveVCC
Positive -> Vin
NegativeGND
Negative GND

Code Arduino - Balise RFID/NFC unique

/* * Ce code Arduino a été développé par newbiely.fr * Ce code Arduino 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/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 } } }

Étapes rapides

  • Naviguez jusqu'à l'icône Libraries sur la barre gauche de l'IDE Arduino.
  • Recherchez "MFRC522", puis trouvez la bibliothèque par GithubCommunity
  • Cliquez sur le bouton Install pour installer la bibliothèque MFRC522.
Bibliothèque Arduino MFRC522

Étant donné que l'UID n'est généralement pas imprimé sur l'étiquette RFID/NFC, la première étape que nous devons faire est de découvrir l'UID de l'étiquette. Cela peut être fait en :

  • Copiez le code ci-dessus et ouvrez-le avec Arduino IDE
  • Cliquez sur le bouton Upload dans Arduino IDE pour téléverser le code vers Arduino
  • Ouvrez le moniteur série
  • Placez une étiquette RFID/NFC sur le module RFID-RC522
  • Obtenez l'UID sur le moniteur série
COM6
Send
Tap RFID/NFC tag on reader Unauthorized Tag with UID: 3A C9 6A CB
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Après avoir UID :

  • Mettez à jour l'UID à la ligne 20 du code ci-dessus. Par exemple, changez byte authorizedUID[4] = {0xFF, 0xFF, 0xFF, 0xFF}; en byte authorizedUID[4] = {0x3A, 0xC9, 0x6A, 0xCB};
  • Téléversez à nouveau le code sur Arduino
  • Apposez une étiquette RFID/NFC sur le module RFID-RC522
  • Vous verrez le servo-moteur tourner à 90°
  • Consultez la sortie sur le moniteur série
COM6
Send
Tap RFID/NFC tag on reader Authorized Tag Rotate Servo Motor to 90°
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Appuyez à nouveau sur la même étiquette RFID/NFC sur le module RFID-RC522
  • Vous verrez le moteur servo tourner à 0°
  • Voir la sortie sur le moniteur série
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  
  • Approchez une autre étiquette RFID/NFC du module RFID-RC522
  • Observez le résultat sur le moniteur série
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  

Code Arduino - Multiples étiquettes RFID/NFC

Nous pouvons permettre à plusieurs étiquettes RFID/NFC de contrôler un moteur servo. Le code ci-dessous utilise deux étiquettes comme exemple.

/* * Ce code Arduino a été développé par newbiely.fr * Ce code Arduino 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/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("°"); }

Effectuez les mêmes étapes que ci-dessus, puis appuyez sur chaque étiquette du module RFID-RC522. Le résultat sur le moniteur série apparaît comme ci-dessous :

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  

Vous pouvez étendre le code ci-dessus pour trois, quatre ou plus de balises.

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!