mercredi 5 avril 2017

Module RFID-RC522 et Arduino

Je me suis récemment procuré (pour moins de 2 €) un petit kit comportant:

- un module RFID-RC522
- un tag RFID prenant la forme d'une carte
- un tag RFID prenant la forme d'un porte-clés

Le module est presque prêt à l'emploi, mais il faut soi-même souder une barrette de 8 connecteurs (ce qui n'a rien de bien difficile).

Dans ce petit tutoriel, nous allons réaliser un montage constitué d'une carte Arduino Uno et d'un module RFID-RC522.  Lorsqu'un tag RFID comportant un code admissible sera détecté, une LED verte va s'allumer.  Lorsqu'un tag comportant un code inadmissible sera détecté, c'est plutôt une LED rouge qui s'allumera.




Installation de la bibliothèque MFRC522

Nous allons utiliser la bibliothèque MFRC522, qui a été développée par Miguel Balboa.  Il est donc nécessaire d'installer cette bibliothèque dans votre environnement de programmation Arduino.

Le circuit 

Le module RFID-RC522 communique au moyen du protocole SPI, avec un niveau logique de 3,3 V. Bien que la plupart des tutoriels que j'ai vus sur internet semblent omettre cette précaution, j'ai choisi d'utiliser un convertisseur de niveaux logiques CD4050 pour éviter que les signaux émis par l'Arduino (à un niveau logique de 5 V) n'abîment le module RC522.

Les 8 connecteurs du RC522 sont donc branchés de la façon suivante:
  • SDA:  Arduino 10, après avoir été abaissé par le 4050
  • SCK: Arduino 13, après avoir été abaissé par le 4050
  • MOSI:  Arduino 11, après avoir été abaissé par le 4050.
  • MISO:  Arduino 12
  • IRQ:  Pas utilisé
  • GND:  Arduino GND
  • RST:  Arduino 9, après avoir été abaissé par le 4050
  • 3.3V:  Arduino 3.3V
(À noter que SDA et RST peuvent être branché sur une autre pin de l'Arduino au besoin, il s'agira de modifier le sketch en conséquence).

Quant aux deux LEDs indicatrices, elle seront branchées aux pins 6 (rouge) et 7 (verte) de l'Arduino.



Premier sketch:  récupérer l'UID du tag

Dans un premier temps, il faut connaître l'UID, qui est le code unique écrit sur notre carte.  Le sketch ci-dessous affiche dans le moniteur série  l'UID de tout tag qu'on approche du module RC-522.


/**************************************************************
Ce sketch permet de connaître l'IUD d'un tag RFID.
Utilisation de la bibliothèque MFRC522 par Miguel Balboa
Plus d'infos:
https://electroniqueamateur.blogspot.com/2017/04/module-rfid-rc522-et-arduino.html
*****************************************************************/
#include <SPI.h>
#include <MFRC522.h>
const int pinRST = 9; // pin RST du module RC522
const int pinSDA = 10; // pin SDA du module RC522
MFRC522 rfid(pinSDA, pinRST);
void setup()
{
SPI.begin();
rfid.PCD_Init();
Serial.begin(9600);
}
void loop()
{
if (rfid.PICC_IsNewCardPresent()) // on a dédecté un tag
{
if (rfid.PICC_ReadCardSerial()) // on a lu avec succès son contenu
{
Serial.println("Voici l'UID de ce tag:");
Serial.print("const byte bonUID[");
Serial.print(rfid.uid.size);
Serial.print("] = {");
for (byte i = 0; i < rfid.uid.size; i++)
{
Serial.print(rfid.uid.uidByte[i]);
if (i < rfid.uid.size - 1)
{
Serial.print(", ");
}
else
Serial.println("};");
}
Serial.println();
delay (2000);
}
}
}
view raw lectureUID.ino hosted with ❤ by GitHub

Après avoir téléversé ce sketch dans l'Arduino, ouvrez le moniteur série et approchez un tag RFID à proximité du module RC-522.  La capture d'écran ci-dessous montre le résultat lorsque j'ai approché ma carte blanche  (const byte bonUID[4] = {144, 207, 148, 117}), puis mon porte-clé  (const byte bonUID[4] = {131, 133, 4, 107}).  Évidemment, les valeurs numériques diffèrent selon le tag utilisé.

Copiez le code de votre tag, afin de le coller dans le sketch principal ci-dessous.




Sketch principal

Avant d'utiliser ce sketch, vous devez remplacer la ligne " (const byte bonUID[4] = {144, 207, 145, 117})" par celle qui correspond à votre tag, et que vous avez précédemment copiée du moniteur série grâce au premier sketch.


/*******************************************************************************
RFID LEDs
Exemple d'utilisation de la bibliothèque MFRC522 par Miguel Balboa
Lorsque le tag RFID est accepté, une LED verte s'allume pendant 3 secondes
Lorsque le tag RFID est refusé, une LED rougeo s'allume pendant 3 secondes
Pour plus de détails:
https://electroniqueamateur.blogspot.com/2017/04/module-rfid-rc522-et-arduino.html
***********************************************************************************/
#include <SPI.h>
#include <MFRC522.h>
// copier ici le résultat du sketch "lectureUID.ino":
const byte bonUID[4] = {144, 207, 148, 117};
const int pinLEDVerte = 7; // LED verte
const int pinLEDRouge = 6; // LED rouge
const int pinRST = 9; // pin RST du module RC522
const int pinSDA = 10; // pin SDA du module RC522
MFRC522 rfid(pinSDA, pinRST);
void setup()
{
SPI.begin();
rfid.PCD_Init();
pinMode(pinLEDVerte, OUTPUT);
pinMode(pinLEDRouge, OUTPUT);
}
void loop()
{
int refus = 0; // quand cette variable n'est pas nulle, c'est que le code est refusé
if (rfid.PICC_IsNewCardPresent()) // on a dédecté un tag
{
if (rfid.PICC_ReadCardSerial()) // on a lu avec succès son contenu
{
for (byte i = 0; i < rfid.uid.size; i++) // comparaison avec le bon UID
{
if (rfid.uid.uidByte[i] != bonUID[i]) {
refus++;
}
}
if (refus == 0) // UID accepté
{
// on allume la LED verte pendant trois secondes
digitalWrite(pinLEDVerte, HIGH);
delay(3000);
digitalWrite(pinLEDVerte, LOW);
}
else { // UID refusé
// on allume la LED rouge pendant trois secondes
digitalWrite(pinLEDRouge, HIGH);
delay(3000);
digitalWrite(pinLEDRouge, LOW);
}
}
}
}
view raw RFID_LEDS.ino hosted with ❤ by GitHub


Vidéo du montage

Voici, pour finir, une vidéo montrant le montage en action.  La LED verte s'allume lorsque j'approche la carte blanche (code accepté), mais c'est la LED rouge qui s'allume lorsque j'approche le porte-clé (code refusé).




N.B.: Ce projet a également été réalisé avec  Raspberry Pi, STM32 Nucleo et MSP430 Launchpad.

Yves Pelletier   (TwitterFacebook)

6 commentaires:

  1. Merci ! exacement ce que je cherchai, y compris la conversion des niveaux logiques 3.3 - 5v

    RépondreSupprimer
  2. Pour moi le 1er code ne marche pas

    RépondreSupprimer
  3. Moi aussi , le premier code ne marche pas !

    RépondreSupprimer
  4. comment ajouter 3 badges (UID diffèrent)?

    RépondreSupprimer
  5. COMMENT CHANGER L'UID DE LA CARTE J'AI ESSAYER PLUSIEUR CODE MAIS JE TROUVR DE NAK

    RépondreSupprimer