Utiliser un module RFID-RC522 avec l’Arduino

J’ai reçu un module RFID-RC522 13.56Mhz compatible Arduino, comme d’habitude, je n’y vois pas encore d’utilité, mais je suis très curieux donc c’est parti.

module_rfid

Les broches

module_rfid_pinout

Branchement

  • Module RFID -> Arduino
  • SDA -> Pin 10
  • SCK -> Pin 13
  • MOSI -> Pin 11
  • MISO -> Pin 12
  • GND -> GND
  • RST -> Pin 9
  • VCC -> 3.3V

arduino_rfid_cablage

Installez la librairie RFID

Téléchargez la librairie et installez-la

Lien vers la librairie

Lecture du tag RFID

#include <SPI.h>
#include <RFID.h>

RFID RFID(10,9);

int UID[5];

void setup()
{
  Serial.begin(9600);
  SPI.begin();
  RFID.init();  

}

void loop()
{
    if (RFID.isCard()) {  
          if (RFID.readCardSerial()) {        
            Serial.print("L'UID est: ");
            for(int i=0;i<=4;i++)
            {
              UID[i]=RFID.serNum[i];
              Serial.print(UID[i],DEC);
              Serial.print(".");
            }
            Serial.println("");
          }          
          RFID.halt();
    }
    delay(100);    
}

 

Controle d'un Servomoteur

Branchement du servo:

  • vcc -> + 5V Arduino
  • GND -> GND Arduino
  • Signal -> Pin ~5 Arduino

Un peu à la manière d'une barrière. On badge, çà s'ouvre, on passe.

Pour la lecture du tag, j'ai commenté les lignes permettant d'afficher l'UID de la carte. Pour mes propres essais je les ai simplement retiré.

#include <SPI.h>
#include <RFID.h>
#include <Servo.h>

RFID RFID(10,9);

int UID[5]={};
int MASTERKEY[5]={1,171,43,97,224}; // UID du badge ou de la carte acceptée sous forme de tableau (Array).
Servo monServo;

bool statut = 1;

void setup()
{
  Serial.begin(9600);
  SPI.begin();
  RFID.init();

  monServo.attach(5); // Servo connecté à la pin 9.  
}

void loop()
{
    if (RFID.isCard()) {  

          /* Lecture du tag */
          if (RFID.readCardSerial()) 
          {        
          /*Serial.print("L'UID est: ");*/  
            for(int i=0;i<=4;i++)
            {
              UID[i]=RFID.serNum[i];
             /* Serial.print(UID[i],DEC);
              Serial.print(".");*/
            }
            /*Serial.println("");*/
          }
          /* fin de  Lecture du tag */
          
          if (UID[0] == MASTERKEY[0]   // Si l'UID 0  est égale à 1
           && UID[1] == MASTERKEY[1]   // Et si l'UID 1  est égale à 171
           && UID[2] == MASTERKEY[2]   // Et si l'UID 2  est égale à 43
           && UID[3] == MASTERKEY[3]   // Et si l'UID 3  est égale à 97
           && UID[4] == MASTERKEY[4])  // Et si l'UID 4  est égale à 224
            {
              ouverture();
            }
            else
            {
              fermeture();
            }
            
          RFID.halt();
    }
    delay(100);    
}

void ouverture()
{
  monServo.write(125); // On ouvre le portail fermé.
}

void fermeture()
{
  monServo.write(35); // On ouvre le portail fermé.
}


/* inspiré de: http://www.les-electroniciens.com/ */ 

Sources: Lien | Lien

← Previous post

Next post →

35 Comments

  1. Hello, ne devrait-on pas changer les && par des || pour la partie:

    if (UID[0] == MASTERKEY[0] // Si l’UID 0 est égale à 1
    && UID[1] == MASTERKEY[1] // Et si l’UID 1 est égale à 171
    && UID[2] == MASTERKEY[2] // Et si l’UID 1 est égale à 43
    && UID[3] == MASTERKEY[3] // Et si l’UID 1 est égale à 97
    && UID[4] == MASTERKEY[4]) // Et si l’UID 1 est égale à 224

    Car là c’est impossible qu’un badge soit égal à la fois à 171 et à 43 en même temps par exemple.

    • On analyse le tableau ici. Si tu remarque on check l’UID[0], ensuite le [1],… jusqu’au UID[4]. L’erreur ne se trouve que dans le commentaire du code ^^ j’ai copié-collé trop vite ^^

      Mais je corrige 🙂

      Bien à toi,

      Lee

  2. Antonin

    Salut !
    Je suis débutant et je voudrais savoir comment on installe la librairie .rar (idehack.com/dl/rfid_lib.rar).
    Merci !

  3. Hey, je suis débutante, j’aimerais je suis en train de réaliser le montage d’un lecteur de carte RFID , j’ai mis le code ci dessus, le probleme c’est pour le téléchargement de la bibliothèque: téléchargé en .rar je l’ai extrais le problème c’est que lorsque je cherche pour le mettre dans ma bibliothèque je ne trouve aucun document pouvant etre ouvert et j’ai le message d’erreur suivant :
    Bibliothèque non valide trouvée dans : ……mes documents
    merci d’avance pour vos réponses

    • Hey a toi aussi,

      Tout d’abord, as-tu bien collé le fichier décompressé dans le dossier: « Mes Documents/Arduino/libraries » ?
      Ensuite il ne faut pas oublier de redémarrer complètement le le logiciel Arduino.

      Bien à toi,

      Leroyd

    • pouet

      J’ai du chercher aussi un peu avant de réussir : il faut décompresser l’archive .rar, qui contient l’arborescence suivante :
      rfid_id /
      __Librairies/
      ____RFID/
      ____SPI/

      Ensuite à partir du logiciel arduino il faut bien sélectionner juste le dossier RFID (double-cliquer dessus) et faire OK. Ça devrait l’importer correctement.

  4. DatSheep

    Salut LeroyD,
    Petite question, avec le module RFID-RC522 peux t-on programmer une carte? Ou juste lire ce qu’elle contient.
    Merci d’avance,

    • leroyd

      Bonjour,

      Il existe des modèle ouvert en écriture.
      Cependant pas ce modèle ne l’est pas.

      Un projet en particulier ?

      Sorry pour le temps de réponse quelques travaux en cours 🙂

      bàt,

      Leroyd

      • rm -rf

        J’ai le même module RFID chez moi. Les tags fournis avec contiennent une puce MIFARE Classic 1K qui contient 1Ko de mémoire. En plus la puce et le lecteur peuvent s’authentifier mutuellement et chiffrer tous leurs échanges de données, il est possible de diviser la mémoire entre plusieurs applications distinctes…
        Je l’utilise avec la librairie miguelbalboa/RFID, je vous conseille de trouver des exemples de codes en ligne, elle est assez compliquée à utiliser

  5. Bonsoir,

    Je réalise un projet pour le bac et j’ai justement utilisé votre programme qui a fonctionné lorsque j’étais au lycée. Cependant, je m’en suis servi sur l’ordinateur de mon prof qui avait déjà téléchargé la bonne bibliothèque. Maintenant, je souhaite faire des modifications depuis chez moi mais je n’arrive pas à faire fonctionner le programme en téléchargeant la bibliothèque ci dessus. Est ce que vous avez une idée de mon problème? J’ai téléchargé la bibliothèque au format .rar. J’ai alors essayé de le décompresser avec Winrar et j’ai testé le programme qui ne fonctionne pas. J’ai alors testé une autre approche: je l’ai converti au format zip grâce à des convertisseur présents sur internet. J’y suis parvenu, j’ai téléchargé la bibliothèque dans arduino mais le programme ne marche pas non plus…

    A savoir: J’ai Arduino 1.0.6 que j’ai pris sur clé USB sur l’ordi de mon prof. Je ne sais pas si cela peut apporter une info utile ^^

    • leroyd

      hello,

      Ce que je peux vous conseiller dans un premier temps c’est une installation complète de l’IDE dans la même version que celle de votre prof (sans passer par l’usb peut-etre).

      Vous avez une erreur ou un problème d’import de bibliothèque ?

      Bàt,

      Lee

      • Bonsoir,
        J’ai bien téléchargé la bonne version de arduino mais en effet, je pense avoir un problème avec la bibliothèque. Lorsque je suis dans arduino, je mets « Importer bibliothèque », « Add library » puis le message qui s’affiche est: « Library added to your libraries. Check « Import library » menu ». Puis je ferme arduino, je le ré-ouvre et finalement j’essaie les programmes en exemples inclus avec la bibliothèque. Cependant toujours la même chose, il y a un problème avec RFID RFID…

  6. Yvan

    Bonjour,

    j’ai essayé ton code, mais le test RFID.isCard() ne passe jamais.
    Le fait de poser la carte ne provoque rien. Sais tu d’ou peut provenir le problème ?

  7. Guillaumr

    Bonjour, très bon article merci a vous
    Cependant il me reste une question, niveau distance entre le tag et le lecteur, le max est à combien ?

    • leroyd

      Il est vrai que l’information est pertinente. Je n’hésiterais pas à l’ajouter à l’article ^^ pour la réponse cela doit déprendre du modèle mais c’est de l’ordre du cm, voire 2 cm dans ce cas-ci.
      Bien a toi,
      Lee

      • rm -rf

        4cm pour moi avec la carte blanche (voir même plus en augmentant le gain du récépteur), avec le badge bleu c’est un peu moins

  8. Jacques

    Bonjour,
    Merci pour cette page très claire aux explications et sketchs simples.
    Je viens de faire quelques adaptations pour essayer des allumages/extinctions de leds avec les 2 badges fournis dans le kit « Chinois » et ça marche nickel.
    Sais-tu pourquoi le quartz de la carte est un 27,12Mhz (le double de 13,56Mhz) ?

  9. pouet

    Salut,

    merci pour ce tuto, c’est juste ce qu’il me fallait !
    J’avais déjà essayé il y a de cela 1 an et demi sans succès… Je suppose que l’émetteur que j’avais acheté était défectueux donc j’en ai racheté un (le même) et cette fois ci en suivant ce tuto il fonctionne nickel. Il ne me reste plus qu’à retester l’ancien pour confirmer que le problème était bien un problème de matériel et non d’une mauvaise manip ou de l’usage de la mauvaise librairie.

    En tout cas pour ceux que ça intéresse, mon modèle qui fonctionne avec ce tuto est le suivant : https://www.amazon.fr/gp/product/B00QFDRPZY/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1

  10. Rachid Tanjaoui

    Je propose le code suivant pour éviter les multiples variables et simplifier le code

    #include
    #include

    const char DOUT_LED_ROUGE = 2;
    const char DOUT_LED_VERTE = 3;

    RFID monModuleRFID(10,9);

    String MasterRFID= »7221106197117″;
    void setup()
    {
    Serial.begin(9600);
    SPI.begin();
    monModuleRFID.init();
    pinMode(DOUT_LED_ROUGE, OUTPUT);
    pinMode(DOUT_LED_VERTE, OUTPUT);
    digitalWrite(DOUT_LED_ROUGE, LOW);
    digitalWrite(DOUT_LED_VERTE, LOW);

    }

    void loop()
    {
    String SerRFID= » »;

    if (monModuleRFID.isCard()) {
    if (monModuleRFID.readCardSerial()) {
    Serial.print(« L’UID est: « );
    for(int i=0;i<=4;i++)
    {
    SerRFID+=monModuleRFID.serNum[i];
    }

    Serial.print(SerRFID);
    Serial.println("");
    }

    if (SerRFID==MasterRFID)
    {
    digitalWrite(DOUT_LED_VERTE, HIGH);
    delay(500);
    digitalWrite(DOUT_LED_VERTE, LOW);
    Serial.println("Master");
    }
    else
    {
    digitalWrite(DOUT_LED_ROUGE, HIGH);
    delay(500);
    digitalWrite(DOUT_LED_ROUGE, LOW);
    }
    monModuleRFID.halt();
    }
    delay(1);
    }

  11. Pacome Herbin

    Bonjour,
    Tout d’abord merci pour ce tuto qui est clair et précis. De mon coté ça fonctionne parfaitement.

    J’ai en revanche une petite question. Ici nous lisons l’UID de la carte, mais est il possible de lire également le contenue de la carte? J’imagine que ces cartes peuvent posséder d’autres informations que leur numéro de série non? Comment les lires?

    Merci

    • Hello,

      je n’ai aucune idée de s’il y a d’autres informations à lire sur ces puces. A vrai dire je ne pense pas qu’elles soient dédiées à d’autres choses qu’a attribuer un « matricule ». Cependant si je trouve des infos je n’hésiterais pas à te les communiquer.

      Lee

  12. Bonjour,

    Merci pour ce tuto, est-il possible de rajouter un shield Wifi ?

  13. Bonjour!!
    J’ai un message d’erreur me disant que au niveau du programme:
    RFID RFID(10,9);

    int UID[5]={};
    int MASTERKEY[5]={1,171,43,97,224}; // UID du badge ou de la carte acceptée sous forme de tableau (Array).
    Servo monServo;

    RFID n’est pas déclarée avez vous une solution>?
    merci d’avance

  14. bonjour,
    et comment on augmente le gain du récepteur ?

    Denis

  15. Bonjour !

    J’ai un problème qui me prend la tête depuis plusieurs heures ayant fait la plupart des forums, dans le but de trouver une solution. J’espère que vous pourrez m’éclairer !

    Ayant copié le programme ci-dessus, téléchargé la bibliothèque SPI et RFID je téléverse

    Televersement réussie, Mais le badge ne fonctionne, rien ne s’affiche dans le sériel et un message me dit bibliothèque non valide trouvé dans le //…

    Merci de votre aide

  16. bonjour j’ai installer la librairie mais quand je vérifie le code c’est marqué que ca ne connais pas
    #include

  17. bonjour j’ai installer la librairie mais quand je vérifie le code c’est marqué que ca ne connais pas
    #include

  18. bonjour j’ai installer la librairie mais quand je vérifie le code c’est marqué que ca ne connais pas
    #include

  19. deso mon ordi a freeze

  20. Bonjour,
    question bête, le module RFID reconnait d’initiative la carte et le module bleu fourni avec?

  21. Bonjour,
    Possibilité de déclarer l’objet RFID avec des pins différents que les 9/10/11/12 ? Dans ce cas faut changer le tableau ? Merci d’avance !

    • leroyd

      Je n’ai pas refais ce tutoriel depuis quelques temps déja. Mais dans mes souvenirs ces pins ne doivent pas changer. (a tester? Si c’était le cas il faudrait oui les changer dans le tableau) 🙂

      have a nice day
      Lee

  22. Garnier

    Bonjour à tous, impossible de compiler le code, j’ ai le message suivant :
    « Class RFID has no member named init()  »
    auparavant cela marchait bien …
    j’ai réinstallé 3 fois l’IDE arduino, réinsséré 3 fois la bibliothèque …
    Quelqu’un aurait-il une idée ? Merci pour celui ou celle qui aura le temps … 🙂

Laisser un commentaire