Arduino RFID RC522

Aujourd’hui on va apprendre à comment utiliser le module rfid RC522.

J’ai nettoyé les codes en exemple avec la librairie pour faire un contrôle d’accés simplifié.

 

#include <SPI.h>
#include <MFRC522.h>

#define SS_PIN 53
#define RST_PIN 5

MFRC522 rfid(SS_PIN, RST_PIN); // appel de la classe

#define PIN_LED_VERTE 8
#define PIN_LED_ROUGE 9

// liste clés valides
String keyOk[]={"15 c4 2d 5","15 c4 2d 6"};

void setup() { 
  Serial.begin(57600);
  SPI.begin(); // Init SPI bus
  rfid.PCD_Init(); // Init MFRC522 

  pinMode(PIN_LED_VERTE,OUTPUT);
  pinMode(PIN_LED_ROUGE,OUTPUT);

  // led eteintes a l'init
  digitalWrite(PIN_LED_VERTE,LOW);
  digitalWrite(PIN_LED_ROUGE,LOW);
}

void loop() {

  // Si on ne detecte pas une carte on reboucle au debut
  if ( ! rfid.PICC_IsNewCardPresent())
    return;

  // as t'on lu la carte
  if ( ! rfid.PICC_ReadCardSerial())
    return;

// recuperation de l'UID et concaténation de sa valeur en hex dans un string
String myKey=String(rfid.uid.uidByte[0],HEX) + " " + String(rfid.uid.uidByte[1],HEX) + " " + String(rfid.uid.uidByte[2],HEX) + " " + String(rfid.uid.uidByte[3],HEX);

// j'affiche la valeur de la carte sur le serial
Serial.println(myKey);

bool accessOk = 0;
// je boucle sur toutes les valeurs des clés autorisés et si je la trouve accesOK => 1
for(int y = 0; y < (sizeof(keyOk)/sizeof(String)) ; y++){

  if(keyOk[y] == myKey){
    accessOk = 1;
  }

}

  // Halt PICC, fin de lecture de carte
  rfid.PICC_HaltA();

  // Stop encryption on PCD
  rfid.PCD_StopCrypto1();

// La carte as t'elle acces , si oui led verte , si non led rouge
  if(accessOk == 1){
    digitalWrite(PIN_LED_VERTE,HIGH);
  }
  else{
    digitalWrite(PIN_LED_ROUGE,HIGH);
  }

// on eteind les led apres un delais
delay(2000);
digitalWrite(PIN_LED_VERTE,LOW);
digitalWrite(PIN_LED_ROUGE,LOW);

}

En matériel il nous faut :
– 1 arduino
– 1 module rfid RC522

Attention ce module fonctionne sous 3,3 Volt !!!

Pour le branchement cela va dépendre de la carte arduino utilisé ( utilisation du SPI ) , ci dessous le tableau récapitulatif.

Signal MFRC522

Reader/PCD

Pin

Arduino

Uno/101

Pin

Arduino

Mega

Pin

Arduino

Nano v3

Pin

Arduino

Leonardo/Micro

Pin

Arduino

Pro Micro

Pin

 RST/Reset  RST  9  5  D9  RESET/ICSP-5  RST
 SPI SS  SDA(SS)  10  53  D10  10  10
 SPI MOSI  MOSI  11 / ICSP-4  51  D11  ICSP-4  16
 SPI MISO  MISO  12 / ICSP-1  50  D12  ICSP-1  14
 SPI SCK  SCK  13 / ICSP-3  52  D13  ICSP-3  15

Pour installer une librairie aller dans croquis, inclure une bibliothèque, gérer les bibliothèques et en recherche taper “rc522” , tu vas trouver toutes la librairie MFRC522.

Pour le code on appelle deux librairies , une pour le SPI et l’autre pour le module RC522.

On définit les pin SS_PIN et RST_PIN avec les pin associés a la carte utilisée, dans mon exemple j’utilise une carte Mega donc pin 53 et 5 , si tu utilise une carte Uno pin 10 et 9  ( voir tableau pour les pin ).

On appelle la classe pour la carte RFID : MFRC522 rfid(SS_PIN, RST_PIN);

Je défini deux variables pour les led que je vais utiliser plus tard pour afficher si j’ai débloqué l’acces ou non.

J’ai ensuite un tableau keyOK qui contient les UID des puce rfid qui vont avoir acces .

Dans le setup on initialise le SPI avec begin et le module RC522 avec rfid.PCD_Init();

Puis mes deux led en OUTPUT et je les met dans leur état LOW.

Partie boucle, j’ai une premiere condition qui verifie si une carte est presentée devant le module, si aucune carte ou reboucle au debut avec return et deuxieme condition on lit la carte, si on y arrive pas ou reboucle.

Si tout s’est bien passé on recupere la valeur UID de la carte et on stocka sa valeur en hexadecimal dans la variable myKey et je l’affiche dans le serial pour connaitre sa valeur ( pour facilement voir la valeur de nos cartes).

J’ai un booleen pour valider mon acces ou non avant ma boucle de controle, dans cette boucle de controle je balaye toutes les valeurs de keyOk et si je trouve une correspondance  accessOk passe à 1.

On stoppe la lecture du rfid avec  rfid.PICC_HaltA(); et rfid.PCD_StopCrypto1();

J’ai ensuite ma condition pour valider ou non la carte ou je vais éclairer une led, led verte pour ok et rouge pour bloquer. Je te laisse appliquer le code pour ton utilisation

Je termine avec un delay pour eteindre les led apres 2 secondes.

A toi d’adapter le code à l’utilisation que tu veux en faire 🙂

 

Télécharger le code :
RFID RC522

N’hésitez pas à poser vos questions sur les réseaux sociaux de la chaîne instagramtwitter , facebook ,youtube ; si vous ne comprenez pas certaines parties du tutoriel n’hésitez pas , me dire ce que vous aimeriez que je crée pour en faire des vidéos tutoriel  et à partager les projets que vous aimeriez créer etc…

Comme toujours allez sur la page de C’est quoi Retro et Geek pour connaître tout ce que je recherche à faire sur la chaîne.

Merci les RetroGeeker et RetroGeekeuse