Outils pour utilisateurs

Outils du site


wiki:tutoriels:systeme-rfid:systeme-rfid

Système RFID Arduino + Processing

  • Documentation : Julien Warin
  • Date : 21/12/16
  • logiciels : libre de droits

Introduction

Ce tutoriel qui va vous présenter les principes et fonctionnement d’un système RFID comprenant un lecteur de puces et des puces elles-mêmes, s’inspire d’un autre tutoriel réalisé par Selma Benramdane mais qui divergent sur certains points. Contrairement à Selma, mon système n’utilisera pas un dispositif permettant de jouer directement du son via un speaker mais, d’utiliser le langage Arduino pour interagir avec Processing, pour ouvrir des fichiers vidéos ou encore audio par le biais du système RFID.

Description

Tout d’abord « qu’est-ce qu’un système RFID » ou encore « qu’est-ce que le RFID » me diriez vous ? Et bien le RFID (de l’anglais radio frequency identification) ou radio-identification pour les intimes, est une méthode pour mémoriser et récupérer des données à distance en utilisant des marqueurs appelés « radio-étiquettes » (« RFID tag » ou « RFID transponder » en anglais). Les radio-étiquettes sont de petits objets, tels que des étiquettes autoadhésives, qui peuvent être collés ou incorporés dans des objets ou produits et même implantés dans des organismes vivants (animaux, corps humain). Les radio-étiquettes comprennent une antenne associée à une puce électronique qui leur permet de recevoir et de répondre aux requêtes radio émises depuis l’émetteur-récepteur. Ces puces électroniques contiennent un identifiant et éventuellement des données complémentaires.(RAD) Cette technologie d’identification peut être utilisée pour identifier :

- les objets, comme avec un code-barres (on parle alors d’étiquette électronique);

- les personnes, en étant intégrée dans les passeports, carte de transport, carte de paiement (on parle alors de carte sans contact);

- les carnivores domestiques (chats, chiens et furets) dont l'identification RFID est obligatoire dans de nombreux pays, en étant implantée sous la peau. C'est également le cas de manière non obligatoire pour d'autres animaux de travail, de compagnie ou d'élevage de rente (on parle alors de puce sous-cutanée).

Pour ce qui est de ce tutoriel, nous allons utiliser des puces toutes simples, permettant juste d’activer une action grâce à leurs lecture.

Matériels

Montage et Fonctionnement

Après vous être fournit de tout le matériel dont vous aviez besoin, ils ne nous restent plus qu’à monter tout ça ! Il vous suffit pour ça d’observer l’image ci-dessous pour voir le montage du lecteur RFID avec la carte Arduino et reliez chaque parties avec un jumper (la couleur n’est pas importante).

ATTENTION : je met en garde sur certains points notamment dans la manipulation de la carte Arduino et du lecteur RFID(surtout du lecteur car fragile). Pensez à éviter de toucher les circuits des cartes, à toujours les prendre sur les côtés ou par les entrées/sorties en plastiques afin d’éviter un court-circuit avec vos doigts.

Codage sur Arduino

Après avoir effectué le montage, vous avez peut-être déjà essayé de poser une puce RFID sans succès ? Si c’est le cas ne vous inquiétez pas, c’est tout à fait normal ! Pour pouvoir activer une action via une puce, il faut tout d’abord obtenir son identifiant ! Pour obtenir cet identifiant RIEN DE PLUS SIMPLE, il vous suffit de suivre ces différentes étapes :

Tout d’abord, il faut que vous utilisiez le code ci-dessous dans un fichier Arduino afin de pouvoir obtenir toutes les informations de la puce.

//librairies à télécharger
#include <MFRC522.h>
#include <SPI.h>
#include <RFID.h>



RFID monModuleRFID(10,9);

int UID[5];

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

}

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

Mais il vous faut aussi autre chose, les librairies qui vont vous permettre de faire fonctionner le lecteur RFID avec la carte. pour ça, il vous suffit de télécharger le fichier « librairies » juste en dessous puis de les importer dans le dossier librairies dans le dossier Arduino (voir captures d’écrans)

librairies.zip

Après avoir importé les librairies et copié le code dans le fichier Arduino, faites « vérifier » le code par Arduino (vous pourrez voir le logiciel en train de vérifier si une erreur ce trouve sur le fichier dans la barre d’information en bas).

Par la suite, faites « téléverser » le code sur la carte Arduino. Si ça ne marche pas ou que quelque chose ne va pas, pensez à vérifier si Arduino téléverse bien vers votre carte, dans ce cas allez dans l’onglet « outils » > port > sélectionner votre carte (pour moi c’est « …usbmodem1411 ») ou sinon vérifier si Arduino télévise bien au bon modèle. Pour vérifier, allez encore une fois dans « outils » > type de carte :  > arduino/genuino uno

après toutes ces épreuves, il ne vous reste plus qu’à voir le résultat fulgurant une fois que tout est OK ! pour pouvoir voir le résultat escompté, ouvrez le moniteur série. Vous verrez ainsi une fenêtre s’ouvrir et il ne vous restera plus qu’à poser votre puce afin d’obtenir son identifiant.

Ce qui devrait s’afficher sur votre moniteur ce serait normalement une série de chiffres comme par exemple : « 136.4.172.207.239 » dont vous n’avez aucune idée de ce qu’ils peuvent signifier et qui commencerait par « L’IUD est : … ». Pour rendre active une puce, toute la série de chiffre ne sert à rien, il vous faut un nombre en particulier mais lequel ? comment savoir ? et bien c’est très simple ! En obtenant les différentes identifiants de plusieurs puces, vous avez dû remarquer que certaines valeurs ne changeaient pas, surtout les deux premiers. Et bien c’est deux chiffres correspondent à des données en rapport avec le fabricant tout simplement, mais ce n’est pas ces chiffres là dont nous avons besoin. Nous, nous avons besoin du chiffre juste après, du troisième chiffre, c’est celui-là qui va nous intéressé !

Après avoir obtenu ce chiffre, il ne vous reste plus qu’à copier le code Arduino ci-dessous qui va vous permettre de faire fonctionner vos puces RFID et de changer les valeurs à des endroits précis afin de pouvoir utiliser vos puces. Pour utiliser plus de puces, vous n’avez qu’à copier la partie commençant par « if » et finissant par un « } » dans la partie « lecture/stop ».

//librairies à télécharger et/ou déjà disponible
#include <SoftwareSerial.h>
#include <SPI.h>
#include <MFRC522.h>

#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN);  // Create MFRC522 instance.

#define PAGE_SIZE 64

// Variables de détection
int noCardSeuil = 1; // Seuil
int noCardCount = 0;
boolean cardState = false;         // current state of the button
boolean lastCardState = false;     // previous state of the button

void setup() {
  Serial.begin (9600);
  SPI.begin();           // MFRC522 Hardware uses SPI protocol
  mfrc522.PCD_Init(); // initialisation du module RFID
  delay(1);   
}

void loop() {
  
  //Compteur : si c'est true (0 ou 1)
  // Si c'est false : compteur continue
  if (mfrc522.PICC_IsNewCardPresent()) {
    noCardCount = 0;
  }else{ 
    noCardCount++;
  }
  
////    for (byte i = 0 ; i <  16 ; i++){
////    Serial.println("byteinfo [i]");
////    Serial.print("    ");
////    Serial.println(mfrc522.uid.uidByte[1]);
  // Etats : Présent / Pas présent
  if (noCardCount <= noCardSeuil) cardState = true;
  else cardState = false;



  // Lecture / Stop
  if (cardState != lastCardState) {
    if (cardState) {
      //Serial.println("Present");
      //Serial.println(valeurdelacarte);
      // Identification
      mfrc522.PICC_ReadCardSerial();
      if(mfrc522.uid.uidByte[1] == 22){ //valeur à changer
        //CHIFFRE 1 byte (valeur/num. hexadécimal de la puce rfid);
        // exemple num. hexa 136.4.22(le num. important).230.124 (puce marron tordu)
        Serial.print("A");
     }

     if(mfrc522.uid.uidByte[1] == 82){ //valeur à changer
      //exemple num. hexa 136.4.82.230.56 (puce marron normal)
      Serial.print("B"); 
     }

     if(mfrc522.uid.uidByte[1] == 172){ //valeur à changer
     //exemple num. hexa 136.4.172.207.239 (puce blanche)
     Serial.print("C"); 
     }  
}
  }

  lastCardState = cardState ;
}

Si les explications du montage non pas étés assez clairs pour vous, il est possible d’aller sur ce site pour voir une vidéo montrant comment obtenir les identifiants avec le code disponible mais aussi de pouvoir télécharger les librairies qui vous seront utiles : http://www.les-electroniciens.com/videos/arduino-ep14-comment-utiliser-le-module-rfid-rc522

Codage sur Processing

Maintenant que la partie code d’Arduino est finit, il ne nous reste plus qu’à « programmer » Processing pour ainsi utiliser les puces RFID et nous amuser avec !

Je vous demanderais donc avant tout d’utiliser ce code ci-dessous qui va vous permettre de savoir sur quel port votre carte Arduino est connectée.

//librairie, pour l'ajouter aller dans sketch>importer une librairie>serial
import processing.serial.*; 

// The serial port
Serial myPort; //myPort = nom variable/attribut      

// List all the available serial ports
printArray(Serial.list());//va afficher dans la barre d'information les ports valides

Pourquoi il est essentiel de savoir dans quel port notre carte Arduino est branchée ? Et bien tout simplement parce que Arduino va communiquer une information via ce port qui, une fois détectée par Processing, va enclencher l’ouverture du fichier. Ce qui permet cet exploit est la balise « serial.print » dans Arduino qui nous permet de communiquer avec Processing. En faite la lettre A qui représente en ASCII (American Standard Code for Information Interchange ou en français Code américain normalisé pour l'échange d'information) la valeur 65, va permettre à Processing de lui dire « si tu reçois comme valeur 65 dans le port numéro … alors ouvre moi le fichier … » mais pour que cet échange est lieu, il nous faut d’abord connaître le port, voilà pourquoi il est important de le savoir. Une fois que vous le savez, vous pouvez vous amuser à rendre un carré rouge au lieu de gris en utilisant les puces RFID ou faire tout autre chose.

Pour ce qui est l’ouverture de fichiers audios, vidéso ou bien les deux, il vous faudra savoir sur quel port est branché votre carte Arduino mais pas que. Il vous faudra dans un premier temps, télécharger des librairies aussi sur Processing mais tout dépendra si vous voulez importer un fichier vidéo, audio ou autre. En ce qui me concerne, j’ai décidé d’afficher un vidéo donc je vais devoir télécharger au préalable la librairie vidéo de Processing. Pour télécharger cette librairie, rien de plus simplissime, il vous suffit d’aller dans l’onglet « sketch » > importer une librairie > ajouter une librairie. Ensuite un nouvel onglet va s’ouvrir et dans la barre de recherche vous n’aurez plus qu’à taper « vidéo » et à télécharger la librairie ayant comme auteurs « the procession foundation » comme sur la capture d’écran ci-dessous.

Il vous suffira de faire pareil en ce qui concerne le téléchargement de la librairie pour les fichiers audio en tapant “sound” dans la barre de recherche et qui a le même auteur.

Dès que le téléchargement des librairies est faite, il ne vous reste plus qu’à glisser sur la fenêtre de Processing, les fichiers vidéos et/ou sonores que vous désirez utilisez. Pour constater que les fichiers on bien été importés, Processing vous avertit dans la barre d’information en bas de l’importation des fichiers mais aussi, qu’un dossier « data » a été crée à côté de votre fichier processing (si vous avez déjà enregistré votre fichier) avec tout vos fichiers à l’intérieur.

Une fois tout ça effectué, il ne vous reste plus qu’à copier le code ci-dessous et à changer les informations qui vous plaisent pour ouvrir des fichiers audios/vidéos avec vos puces RFID ou faire tout autre chose. Pour voir ce que ça va produire, il vous ne vous reste plus qu’a appuyer sur le bouton « exécuter » (bouton en forme de play) et de placer votre puce RFID sur le lecteur et d’admirer le résultat !

Dans le code ci-dessous, vous pouvez afficher et lire un fichier audio et vidéo grâce à une puce RFID.

//d'abord chose importante, glisse ton/tes fichier(s) audio et vidéo dans la fenêtre
//une fois glisser les fichiers dans la fenêtre, ça va créer un dossier "data" à côté de ton fichier processing

import processing.video.*; 
//librairie importante à télécharger (sketch > importer une librairie > ajouter une librairie puis écrire "video"
Movie amour; //nom variable/attribut = amour


//import processing.sound.*; //importer librairie son
//SoundFile facebook;//nom variable/attribut = facebook

//import serial port
import processing.serial.*;

Serial myPort;  // Create object from Serial class
int val;      // Data received from the serial port


void setup(){
  //size(1020, 695);//taille de l'affichage pour écran macbook pro 13 pouces
  size(1280, 695);
  background(0);//fond de la fenêtre une fois affichée = noir
  //importer vidéo
  amour = new Movie(this, "amour_avec_bruit_fond.mp4"); //importation de la vidéo...
  frameRate(200); //nombre d'image par seconde
  
  //importer son
 //facebook = new SoundFile(this, "facebook.mp3");
 
  String portName = Serial.list()[5];// va chercher/voir dans le port 0 = peut être modifié (1,2,3,...)
  myPort = new Serial(this, portName, 9600);//9600 doit être pareil que dans le fichier arduino sinon ne marche pas
}

void draw(){
  
  if ( myPort.available() > 0) {  // If data is available,
    val = myPort.read();         // read it and store it in val
    }
  if (val == 65){ //si processing trouve la valeur ... donc A dans arduino
    amour.loop(); //moi = (nom variable) est joué en boucle 
    //facebook.loop();//facebook = (nom variable) est joué en boucle
    image(amour, 0, 0, width, height); //la vidéo à la même taille que la fenêtre d'affichage size(1280, 695);
    }
}

void movieEvent(Movie m){
  if (m == amour){//afficher la vidéo
  amour.read();
  }
}

Et dans le code ci-dessous, c'est la même chose sauf que l'on peut lire plusieurs fichiers vidéos et audios.

//d'abord chose importante, glisse ton/tes fichier(s) audio et vidéo dans la fenêtre
//une fois glisser les fichiers dans la fenêtre, ça va créer un dossier "data" à côté de ton fichier processing

import processing.video.*; 
//librairie importante à télécharger (sketch > importer une librairie > ajouter une librairie puis écrire "video"
Movie amour, amour1, amour2; //nom variable/attribut = amour, amour1, amour2


//import processing.sound.*; //importer librairie son
//SoundFile facebook;//nom variable/attribut = facebook

//import serial port
import processing.serial.*;

Serial myPort;  // Create object from Serial class
int val;      // Data received from the serial port


void setup(){
  //size(1020, 695);//taille de l'affichage pour écran macbook pro 13 pouces
  size(1280, 695);
  background(0);//fond de la fenêtre une fois affichée = noir
  //importer vidéo
  amour = new Movie(this, "amour_avec_bruit_fond.mp4"); //importation de la vidéo...
  amour1 = new Movie(this, "amour1_avec_bruit_fond.mp4");
  amour2 = new Movie(this, "amour2_avec_bruit_fond.mp4");
  frameRate(200); //nombre d'image par seconde
  
  //importer son
 //facebook = new SoundFile(this, "facebook.mp3");
 
  String portName = Serial.list()[5];// va chercher/voir dans le port 0 = peut être modifié (1,2,3,...)
  myPort = new Serial(this, portName, 9600);//9600 doit être pareil que dans le fichier arduino sinon ne marche pas
}

void draw(){
  
  if ( myPort.available() > 0) {  // If data is available,
    val = myPort.read();         // read it and store it in val
    }
  if (val == 65){ //si processing trouve la valeur ... donc A dans arduino
    amour.loop(); //amour = (nom variable) est joué en boucle 
    amour1.stop();
    amour2.stop();
    //facebook.loop();//facebook = (nom variable) est joué en boucle
    image(amour, 0, 0, width, height); //la vidéo à la même taille que la fenêtre d'affichage size(1280, 695);
    }
     
  if (val ==66){ //si processing trouve la valeur ...
    amour1.loop();//amour1 = (nom variable) est joué en boucle 
    amour2.stop();
    amour.stop();
    image(amour1, 0, 0, width, height);
    }
  
  if (val == 67){ //si processing trouve la valeur ...
    amour2.loop();//amour2 = (nom variable) est joué en boucle
    amour1.stop();
    amour.stop();
    image(amour2, 0, 0, width, height);
    }
     
}
void movieEvent(Movie m){
  if (m == amour){//afficher la vidéo
  amour.read();
  } else if (m == amour1){
    amour1.read();
  } else if (m == amour2){
    amour2.read();
}
}

Sources & références

Pour voir une autre façon d’utiliser le système de puce RFID, je vous conseil d’aller voir du côté de Selma et notamment de son site : http://www.bourdon-s.com/boxson.html#fabrication ou encore de voir sur le wiki du DSAA : http://www.tonerkebab.fr/wiki/doku.php/wiki:projets:tching:tching

wiki/tutoriels/systeme-rfid/systeme-rfid.txt · Dernière modification: 2018/05/30 17:04 (modification externe)