Qu'est ce que le rfid ? Comment l'utiliser dans vos projets ?

Introduction

La radio frequency identification est une méthode pour mémoriser et récupérer des données à distance grâce à des puces électroniques.

Ces puces électroniques contiennent un identifiant unique pour chacune d’elles.

Cette technologie d’identification peut être utilisée pour identifier :

  • des objets, avec un code-barres par exemple
  • des personnes, en étant intégrée dans des passeports, cartes de transport ou encore cartes de paiement.

Un système de radio-identification est composé de deux entités qui communiquent entre elles :

  • Un marqueur, nommé radio-étiquette, apposé sur l’élément à identifier et encodant des données numériques.

 

  • Un ou plusieurs lecteurs RFID, appelés aussi interrogateurs.

Installation de la librairie RFID

Pour contrôler votre carte rfid, il faut installer la librairie sur arduino ide. Pour cela vous devez d’abord télécharger la librairie : RFID.

Ensuite, vous devez la charger sur Arduino ide. Pour cela vous devez aller dans “sketch” puis “include library” et “add library” et choisir le dossier que vous venez de télécharger :

Une fois la librairie installé vous pouvez commencer à téléverser les programmes pour la carte.

Afficher les informations de la carte

Une fois la librairie installée vous pouvez commencer à téléverser les programmes pour la carte.

Voici le circuit du cablâge du rfid :

Ce schéma à été fait avec fritzing. Voici le lien de la pièce rfid si vous voulez reproduire le schéma.

Pour lire la carte quand elle est détectée par le module rfid, il vous suffit de copier le programme suivant :

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

#define Reset_PIN   9     // Pin pour configurer le reset du rfid
#define Liaison_SPI    10    // Pin pour la liaison SPI

MFRC522 mfrc522(Liaison_SPI, Reset_PIN);   
MFRC522::MIFARE_Key key;

void setup() {
  Serial.begin(9600);  // Initialisation la connexion avec le moniteur série
  while (!Serial);     // Ttant que le moniteur série est ouvert on ne fait rien
  SPI.begin();         // Initialisation de la liaison SPI
  mfrc522.PCD_Init();  // Initialisation de la carte rfid.
  Serial.println(F("Approchez votre carte du lecteur !"));
  
}

void loop() {
  
  // On regarde s'il y a de nouvelles cartes 
  if ( ! mfrc522.PICC_IsNewCardPresent() || ! mfrc522.PICC_ReadCardSerial() ) {
    delay(50);
    return;
  }
  
  // La nouvelle carte est maintenant sélectionnée
  
  Serial.print(F("Lecture de la carte UID:"));
  for (byte i = 0; i < mfrc522.uid.size; i++) {
    Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
    Serial.print(mfrc522.uid.uidByte[i], HEX);
  } 
  Serial.println();
  delay(2000);
}

Voici le lien du programme : arduino rfid.

Voici ce que l’on obtient en passant la carte sur le module :

Changer numéro UID carte

Pour changer l’identité de la carte uid, le circuit est le même que pour la lecture de la carte.

Ci-dessous, le programme pour écrire un nouveau code sur la carte :

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

#define RST_PIN   9     // Pin pour configurer le reset du rfid
#define SS_PIN    10   // Pin pour la liaison SPI

MFRC522 mfrc522(SS_PIN, RST_PIN);   

/* On créer un nouveau UID */
#define NEW_UID {0xDE, 0xAD, 0xBE, 0xEF}

MFRC522::MIFARE_Key key;

void setup() {
  Serial.begin(9600);  // On initialise la connexion avec le moniteur série
  while (!Serial);     // On en fait rien tan que le moniteur série est ouvert
  SPI.begin();         // Initialisation de la liaison SPI.
  mfrc522.PCD_Init();  // Initialisation de la carte rfid.
  Serial.println(F("Approchez votre carte du lecteur !"));
  
  // On choisit ici les chiffres hexadécimaux du numéro UID.
  for (byte i = 0; i < 6; i++) {
    key.keyByte[i] = 0xFF;
  }
}

void loop() {
  
   // On regarde s'il y a des nouvelles cartes 
  if ( ! mfrc522.PICC_IsNewCardPresent() || ! mfrc522.PICC_ReadCardSerial() ) {
    delay(50);
    return;
  }
  
   // La nouvelle carte est maintenant sélectionnée.
  
    Serial.print(F("Lecture de la carte UID:"));
  for (byte i = 0; i < mfrc522.uid.size; i++) {
    Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
    Serial.print(mfrc522.uid.uidByte[i], HEX);
  } 
  Serial.println();

  // On ajoute le nouvel UID
  byte newUid[] = NEW_UID;
  if ( mfrc522.MIFARE_SetUid(newUid, (byte)4, true) ) {
    Serial.println(F("On écrit sur la nouvelle carte."));
  }
  

  mfrc522.PICC_HaltA();
  if ( ! mfrc522.PICC_IsNewCardPresent() || ! mfrc522.PICC_ReadCardSerial() ) {
    return;
  }
  
  Serial.println(F("Voici le nouveau UID"));
  mfrc522.PICC_DumpToSerial(&(mfrc522.uid));
  
  delay(2000);
}

Voici le lien du programme : code rfid uid.

Voici ce que l’on obtient en ajoutant un nouveau UID :

Allumer led quand présenter carte

On va maintenant voir comment allumer une led quand la carte est détectée. Pour cela vous devez réaliser le circuit suivant :

Voici le programme qui va vous permettre de faire fonctionner votre circuit :

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

#define Reset_PIN   9     // Pin pour configurer le reset du rfid
#define Liaison_SPI    10    // Pin pour la liaison SPI
const int led_rouge = 3;
const int led_vert = 4;

MFRC522 mfrc522(Liaison_SPI, Reset_PIN);   
MFRC522::MIFARE_Key key;

void setup() {
  Serial.begin(9600);  // On initialise la connexion avec le moniteur série
  while (!Serial);     // On en fait rien tan que le moniteur série est ouvert
  SPI.begin();         // Initialisation de la liaison SPI.
  mfrc522.PCD_Init();  // Initialisation de la carte rfid.
  Serial.println(F("Approchez votre carte du lecteur !"));
  pinMode(led_rouge, OUTPUT);
  pinMode(led_vert, OUTPUT);
  digitalWrite(led_rouge, HIGH); // On allume la led rouge tant que la carte n'est pas présenté
  
}

void loop() {
  
  // On regarde s'il y a des nouvelles cartes 
  if ( ! mfrc522.PICC_IsNewCardPresent() || ! mfrc522.PICC_ReadCardSerial() ) {
    delay(50);
    return;
  }
  
  // La nouvelle carte est maintenant sélectionnée.
  
  Serial.print(F("Lecture de la carte UID:"));
  for (byte i = 0; i < mfrc522.uid.size; i++) {
    Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
    Serial.print(mfrc522.uid.uidByte[i], HEX);
    digitalWrite(led_rouge, LOW); // On éteint la led rouge quand la carte est reconnue
    digitalWrite(led_vert, HIGH); // On éteint la led verte
  } 
  Serial.println();
  delay(2000);
}

Voici le programme que vous pouvez télécharger : code rfid led.