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. L’utilisation d’une puce RFID avec de module combiné a l’arduino peut laisser imaginer toute sorte de système d’identification d’entrée ou de protection.

module_rfid

Module RFID – Disponible ici

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);    
}

 

Module RFID – Disponible ici

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 (Puce RFID), j’ai commenté les lignes permettant d’afficher l’UID de la carte(de la puce RFID). 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/ */ 

Module RFID – Disponible ici

Sources: Lien | Lien

42 Commentaires

  1. Jeff

    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.

    Réponse
    • leroyd

      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

      Réponse
  2. Antonin

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

    Réponse
    • Antonin

      Ah bah non j’ai trouvé 🙂

      Réponse
      • leroyd

        Oh bhen tu m’as même pas laissé le temps de répondre… 🙂

        😉

        Réponse
  3. Manon

    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

    Réponse
    • leroyd

      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

      Réponse
    • 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.

      Réponse
  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,

    Réponse
    • 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

      Réponse
      • 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

        Réponse
  5. Tati

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

    Réponse
    • 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

      Réponse
      • Tati

        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…

        Réponse
  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 ?

    Réponse
  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 ?

    Réponse
    • 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

      Réponse
      • 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

        Réponse
  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) ?

    Réponse
  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

    Réponse
  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);
    }

    Réponse
  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

    Réponse
    • leroyd

      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

      Réponse
  12. maiori

    Bonjour,

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

    Réponse
  13. greg

    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

    Réponse
  14. Denis

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

    Denis

    Réponse
  15. Huys

    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

    Réponse
    • NICOLAS MICHNIEWSKI

      Bonjour, quand on lit une carte rfid (comme avec une app Android sur smartphone), l’uid est exprimé en valeur hexadécimal et ici on utilise du décimal. Y a-t-il moyen d’utiliser la librairie rfid.h en manipulant l’uid du tag au format hexadécimal ? Dans mon projet, il n’est pas prévu de passer par l’arduino pour connaître l’uid, celui ci doit être connu en amont et enregistré en config sur un fichier de carte SD et je ne comprends pas comment convertir l’uid hex vers la valeur que me donne la librairie rfid.h en décimal

      Réponse
  16. Robot

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

    Réponse
  17. gaelle

    bonjour j’essaie de réaliser ce programme je suis débutante
    je ne sais pas où lire l’uid de la carte
    meri

    Réponse
    • leroyd

      Hello,

      As-tu quelque chose qui s’affiche dans le moniteur série sur pc ? (ou mac).

      Lee

      Réponse
      • gaelle

        non mais je ne sais pas l’utiliser

        Réponse
  18. Lucas

    Salut, pour moi je suis bloqué a la 1er étape,
    Le moniteur série n’affiche pas le TAG même après l’installation de la bibliothèque

    Réponse
  19. Didier

    Bonjour

    J’ai fais l’acquisition du matériel pour suivre ce tutorial super cela fonctionne sans problème.
    Merci
    DIDIER

    Réponse
  20. jean

    comment vous modifier le programe pour plusieur tag ?

    Réponse
  21. Afli Intissar

    comment communiquer une base de donnés avec RFID rc522

    Réponse
    • leroyd

      Tu peux imaginer un code avec a la place d’un Arduino un NodeMcu pour pouvoir envoyer celà vers mysql

      Bàt,

      Lee

      Réponse
  22. Thibault BOURDON

    Bonjour,
    je débute,
    je m’acharne , et me retourne le Cerveau.
    j’ai beau installer toutes les bibliothèques RFID qu’on me conseil sur le net,
    j’ai toujours ce fichu ” ‘class MFRC522’ has no member named ‘init'”.
    que puis-je faire?

    Réponse
    • leroyd

      Je vais t’inviter a patienter. Je prend un certain temps entre les articles mais je suis en train de refaire un tutoriel RFID – Repartant de 0 avec toutes les ressources nécessaires (librairie, liste du matériel etc). Tandis que d’autre y arrivent juste en suivant l’article, certains d’entre vous ont des soucis pour éviter tout problème de version / compatibilité je prend le temps de tout refaire et illustrer.

      Lee

      Réponse
  23. midoux

    bonjour a tous je voudrait utiliser la mémoire eeprom pour expire la carte(par exemple j’ai utiliser la carte 10 fois ) quelqu’un aidez moi,excusez moi je ne parle pas très bien la langue française

    Réponse
  24. NoOne38

    Bonjour ,

    Mo projet consiste faire une serrure codée avec carte RFID et clavier
    mon programme fonctione mais , j’ai du y inscrire en “dur” les N° des cartes RFID autorisées

    J’aurais aimé pouvoir mettre ces N° UID detectés en mémoire EEPROM
    et les comparer ensuite lorsqu’ils sont presentés devant le lecteur
    est-ce possible

    cordialement

    Réponse
  25. Travis

    Bonjour,
    Je dois programmer un badge RFID avec arduino de tel manière que je dois envoyer avec ce badge deux informations (numéro de série et type de gaz) (ils’agit de bouteilles de gaz).
    Mais je n’arrive pas à écrire sur le badge ni a faire la programmation.
    Merci d’avance pour vos réponses.
    cordialement
    Tarvis

    Réponse

Soumettre un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Inscrivez-vous a la newsletter

Inscrivez-vous a la newsletter

Soyez les premiers avertis de nouveaux tutos, mises à jours, bon plans,...

Merci et à bientôt!

Pin It on Pinterest

Share This