Capteur RFID uniquement si mouvement?

Bonsoir,

Je débute Arduino et j'ai une question où je n'ai pas trouvé de réponses sur le web.

Si je monte un capteur RFID type RC522, si je laisse un badge posé dessus, est-ce que j'ai l'information de présence en continue (donc à chaque loop()) ou bien qu'une seule fois au moment de la première détection?

Ma question concerne un petit projet où je veux cabler 3x RC522 et déclencher une action si j'ai posé mes 3 badges rfid sur mes 3 capteurs mais surtout qu'à l'instant T les 3 badges soient bien présents. Donc la possibilité de vérifier si le badge RFID est encore à portée ou pas.

Je me pose la question car souvent au travail ou ailleurs on passe un badge rfid puis un "bip" retentit mais rien ne se passe si on laisse le badge collé contre le capteurs rfid.

Une idée, une expérience?

Merci d'avance!

Jeff86:
....
Si je monte un capteur RFID type RC522, si je laisse un badge posé dessus, est-ce que j'ai l'information de présence en continue (donc à chaque loop()) ou bien qu'une seule fois au moment de la première détection?

bonsoir
:grin:
ça dépend simplement ... de ton programme :sunglasses:

Donc je peux intérroger la présence d'un badge RFID a tout moment? Même s'il est posé depuis 10min sans bouger?

Attention je parle pas de stocker dans une variable le fait que le badge ait été présent y'a 3 min. Je parle du fait que a l'instant T je fais une demande au capteur pour savoir si le badge est toujours là.

bonjour,
+1 avec Artouste
regarde du coté de la fonction millis()

Ok pour millis() pour timer les verifs ça y'a pas de soucis. Ma question n'est pas vraiment côté programmation mais hardware. Le RC522 va-t-il détecter le badge RFID s'il ne bouge plus et qu'il est posé là sans bouger depuis 5/6/12/30 minutes qu'importe?

Jeff86:
Ok pour millis() pour timer les verifs ça y'a pas de soucis. Ma question n'est pas vraiment côté programmation mais hardware. Le RC522 va-t-il détecter le badge RFID s'il ne bouge plus et qu'il est posé là sans bouger depuis 5/6/12/30 minutes qu'importe?

tu fais en sorte que lorsque le badge est taggé, millis est mis en valeur et tu vérifie via une variable si le badge est toujours lu.
par exemple, tu mets une limite de 1s maxi pour la lecture
le badge passe==>top debut millis
si le badge est relu au dela de 1s, c'est qu'il est encore présent===> donc on ne fait plus rien
tu affiche par exemple, retirez le badge

après si tu veux vérifier la sortie rc522 en hard, là faut prendre la doc pour voir s'il y a une fonction pour ca.

Jeff86:
Ok pour millis() pour timer les verifs ça y'a pas de soucis. Ma question n'est pas vraiment côté programmation mais hardware. Le RC522 va-t-il détecter le badge RFID s'il ne bouge plus et qu'il est posé là sans bouger depuis 5/6/12/30 minutes qu'importe?

bonjour
oui sans probleme
j'ai une appli basée sur cette lib qui gere des evenements posés/retraits de tag

Artouste:
bonjour
oui sans probleme
j'ai une appli basée sur cette lib qui gere des evenements posés/retraits de tag

Super!

OK je viens de lire la doc, si je comprends bien je lis MFRC522::GetStatusCodeName() et si j'ai un STATUS_TIMEOUT c'est que le RFID a été retiré? Ou bien peut-être que je suis passé à côté d'une fonction qui est appelée si on retire le RFID?

Jeff86:
Super!

OK je viens de lire la doc, si je comprends bien je lis MFRC522::GetStatusCodeName() et si j'ai un STATUS_TIMEOUT c'est que le RFID a été retiré? Ou bien peut-être que je suis passé à côté d'une fonction qui est appelée si on retire le RFID?

le programme ci-dessous fait une relecture toute les secondes (presence tag) apres une 1ere lecture ok
sinon il tente une acquisition fonction de la durée de boucle.
c'est simple à adapter

/*
 * Dump serial number of a MIFARE RFID card using a RFID-RC522 reader
 * Uses MFRC522 - Library to use ARDUINO RFID MODULE KIT 13.56 MHZ WITH TAGS SPI W AND R BY COOQROBOT.
 * https://github.com/miguelbalboa/rfid
 -----------------------------------------------------------------------------
 * Pin layout should be as follows:
 * Signal     Pin              Pin               Pin
 *            Arduino Uno      Arduino Mega      MFRC522 board
 * ------------------------------------------------------------
 * Reset      9                5                 RST
 * SPI SS     10               53                SDA
 * SPI MOSI   11               52                MOSI
 * SPI MISO   12               51                MISO
 * SPI SCK    13               50                SCK
 *
 * Hardware required:
 * Arduino
 * PCD (Proximity Coupling Device): NXP MFRC522 Contactless Reader IC
 * PICC (Proximity Integrated Circuit Card): A card or tag using the ISO 14443A interface, eg Mifare or NTAG203.
 * The reader can be found on eBay for around 5 dollars. Search for "mf-rc522" on ebay.com.
 */

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

#define SS_PIN 10    //Arduino Uno
#define RST_PIN 9
byte tagok = 0;

unsigned long sernum[11] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1149839889}; //poste 0 N° carte lue, poste 1 à 9 pour UID carte a tester, poste 10 carte master

MFRC522 mfrc522(SS_PIN, RST_PIN);        // Create MFRC522  instance.
MFRC522::MIFARE_Key key;

void setup() {
  Serial.begin(9600);        // Initialize serial communications with the PC
  SPI.begin();                // Init SPI bus
  mfrc522.PCD_Init();        // Init MFRC522 card
  Serial.println("LECTEUR OK ");
}

void loop() {
  mfrc522.PCD_Init();        // Init MFRC522 card
  
  
  if ( ! mfrc522.PICC_IsNewCardPresent()) {
    Serial.println(" PAS DE BADGE PRESENT ");
  }

  // Select one of the cards
  if ( ! mfrc522.PICC_ReadCardSerial())    return;

  Serial.print("Card UID:");    //Dump UID
  for (byte i = 0; i < 4; i++) {
    Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
    Serial.print(mfrc522.uid.uidByte[i], HEX);
  }

  sernum[0] = *((unsigned long *)mfrc522.uid.uidByte); //recup num serie lu long unsigned

  Serial.print(" ");
  Serial.print(sernum[0]);
  Serial.print(" ");
  Serial.print(sernum[0], HEX);
  Serial.print(" ");
  tagok = 0;
  for  (byte i = 1; i < 10; i++) {
    if (sernum[0] == sernum[i]) tagok = 1; // carte reconnue dans la liste
  }
  
  if (sernum[0] == sernum[10]) tagok = 255; // carte master reconnue

  if (tagok == 0) { // faire si carte inconnue

    Serial.print("TAG INCONNU");
  }
  
  if (tagok > 0) //faire si carte reconnue
  {
    Serial.print("TAG OK ");
  }

  if (tagok == 255) //faire si carte master reconnue
  {
    Serial.print(" CARTE MASTER RECONNUE ");
  }
  Serial.println();
  delay(1000); // delai entre 2 lectures apres reconnaissance tag
}

Artouste:
le programme ci-dessous fait une relecture toute les secondes (presence tag) apres une 1ere lecture ok
sinon il tente une acquisition fonction de la durée de boucle.
c'est simple à adapter

/*

  • Pin layout should be as follows:
  • Signal     Pin              Pin               Pin
  • Arduino Uno      Arduino Mega      MFRC522 board

  • Reset      9                5                 RST
  • SPI SS     10               53                SDA
  • SPI MOSI   11               52                MOSI
  • SPI MISO   12               51                MISO
  • SPI SCK    13               50                SCK
  • Hardware required:
  • Arduino
  • PCD (Proximity Coupling Device): NXP MFRC522 Contactless Reader IC
  • PICC (Proximity Integrated Circuit Card): A card or tag using the ISO 14443A interface, eg Mifare or NTAG203.
  • The reader can be found on eBay for around 5 dollars. Search for "mf-rc522" on ebay.com.
    */

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

#define SS_PIN 10    //Arduino Uno
#define RST_PIN 9
byte tagok = 0;

unsigned long sernum[11] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1149839889}; //poste 0 N° carte lue, poste 1 à 9 pour UID carte a tester, poste 10 carte master

MFRC522 mfrc522(SS_PIN, RST_PIN);        // Create MFRC522  instance.
MFRC522::MIFARE_Key key;

void setup() {
 Serial.begin(9600);        // Initialize serial communications with the PC
 SPI.begin();                // Init SPI bus
 mfrc522.PCD_Init();        // Init MFRC522 card
 Serial.println("LECTEUR OK ");
}

void loop() {
 mfrc522.PCD_Init();        // Init MFRC522 card
 
 
 if ( ! mfrc522.PICC_IsNewCardPresent()) {
   Serial.println(" PAS DE BADGE PRESENT ");
 }

// Select one of the cards
 if ( ! mfrc522.PICC_ReadCardSerial())    return;

Serial.print("Card UID:");    //Dump UID
 for (byte i = 0; i < 4; i++) {
   Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
   Serial.print(mfrc522.uid.uidByte[i], HEX);
 }

sernum[0] = *((unsigned long *)mfrc522.uid.uidByte); //recup num serie lu long unsigned

Serial.print(" ");
 Serial.print(sernum[0]);
 Serial.print(" ");
 Serial.print(sernum[0], HEX);
 Serial.print(" ");
 tagok = 0;
 for  (byte i = 1; i < 10; i++) {
   if (sernum[0] == sernum[i]) tagok = 1; // carte reconnue dans la liste
 }
 
 if (sernum[0] == sernum[10]) tagok = 255; // carte master reconnue

if (tagok == 0) { // faire si carte inconnue

Serial.print("TAG INCONNU");
 }
 
 if (tagok > 0) //faire si carte reconnue
 {
   Serial.print("TAG OK ");
 }

if (tagok == 255) //faire si carte master reconnue
 {
   Serial.print(" CARTE MASTER RECONNUE ");
 }
 Serial.println();
 delay(1000); // delai entre 2 lectures apres reconnaissance tag
}

Ok parfait! Comme ça je recheck la valeur toutes les secondes pour vérifier que le bon UUID du badge est encore présent.

Merci beaucoup! :wink:

salut j'ai un probleme avec la carte blanche de l'RFID elle ne voulais pas etre détectée par le RC522 pourtant le tag est detecté

nasreddine:
salut j'ai un probleme avec la carte blanche de l'RFID elle ne voulais pas etre détectée par le RC522 pourtant le tag est detecté

bonsoir
Si il s'agit d'un kit asia , lecteur + carte mifare (format carte credit) +porte clef (tag)
comme ci-dessous , et que le tag est detecté alors que la carte ne l'est pas
la probabilité d'une carte mifare défectueuse est importante .