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...

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

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'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/NFC.. 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

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.

※ Note:

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

※ NOS MESSAGES

  • N'hésitez pas à partager le lien de ce tutoriel. Cependant, veuillez ne pas utiliser notre contenu sur d'autres sites web. Nous avons investi beaucoup d'efforts et de temps pour créer ce contenu, veuillez respecter notre travail !