Différentiation de RFID-RC522

Bonjour à tous !

//Présentation
Je suis tout à fait nouveaux sur le forum. Je suis étudiant en école d'ingénieur et je fais de l'arduino pour un projet scolaire, je suis complètement débutant. J'espère avoir bien placé mon topic, n'hésitez pas à me le dire si ce n'est pas le cas.

//Problème
J'ai une Arduino UNO R3 sur laquelle j'aimerais brancher 6 RFID-RC522 (lecteur-émetteur RFID pour arduino). Le problème est que je n'ai pas assez de pin pour faire ça.
Le technicien du laboratoire a émis l'idée selon laquelle, il serait possible de tous les brancher en dérivation puis de les différencier par un "potentiel ID unique".
Les tutos que j'ai regardé m'ont orienté vers la librairie : "MFRC522". Librairie que j'utilise maintenant : GitHub - miguelbalboa/rfid: Arduino RFID Library for MFRC522

// Autre problème
Vu que c'est un projet d'école : j'ai plus de budget pour une autre carte. (comme la méga).

//Ma question finale est donc :
Est ce que quelqu'un a déjà eu affaire à ce problème ? comment l'a-t-il résolu ?
Est il juste possible de connecter ces lecteurs/émetteurs (RFID RC522) en série ?
Ont-ils un id individuel récupérable par la carte ?

// Bonus
J'ai entendu parler du concept de "bus" mais je n'ai pas trop compris si c'était possible pour le RC522, qui n'est pas en connectique i2c.

Voilà, merci de m'avoir lu.
Si vous avez n'importes quelles informations. Je suis intéressé parce que là, je suis vraiment perdu. Merci d'avance

Pierre Olivier

:warning:
Post mis dans la mauvaise section, on parle anglais dans les forums généraux. déplacé vers le forum francophone.

Merci de prendre en compte les recommandations listées dans Les bonnes pratiques du Forum Francophone

1 Like

Un RC522 se branche sur un bus SPI :

  • MISO : D12
  • MOSI : D11
  • SCK : D13
  • SS (sérigraphié SDA) : D10 ou autre

Plusieurs RC522 se branchent sur le même bus SPI, sauf SS (CHIP SELECT) qui pourra être une pin autre que 11, 12, 13 (D2, D3, D4, D5, D6, D7, etc.).
Ils se différencient donc par leur CHIP SELECT.
Il faut prévoir une pin de reset, qui peut certainement être commune.
Donc pour 6 lecteurs, cela fait en tout 6 * SS + RESET + MISO + MOSI + CLK = 10 pins.

Dans le code, il suffit d'instancier 6 lecteurs :

// RESET sur D2, SS sur 3 à 8
MFRC522 rfid1(3, 2);
MFRC522 rfid2(4, 2);
MFRC522 rfid3(5, 2);
MFRC522 rfid4(6, 2);
MFRC522 rfid5(7, 2);
MFRC522 rfid6(8, 2);

Il faudra initialiser les six lecteurs dans setup() :

rfid1.PCD_Init();
rfid2.PCD_Init();
// etc.

Et bien sûr lire les six lecteurs dans loop() :

  if (rfid1.PICC_IsNewCardPresent()) {
    // traiter carte
  }
  if (rfid2.PICC_IsNewCardPresent()) {
    // traiter carte
  }
  // etc.

Quel sera le temps nécessaire pour reconnaître une carte posée sur l'un des lecteurs ?
Je n'en sais rien, mais certainement un temps plus important qu'avec un seul lecteur.

Peut être que ton projet réclame d'autres pins pour d'autres usages, mais tu n'en parles pas.
Éventuellement, les pins analogiques peuvent être utilisées comme pins digitales (sauf A6 et A7 sur une NANO).

Bonsoir,

Merci d'avoir replacé le topic dans la bonne section.
Merci beaucoup hbachetti pour cette réponse très complète.

Au risque de dépasser le sujet, peux tu m'éclairer sur l'utilisation de pin analogique en tant que pin numérique. Je n'ai jamais vu rien de tel, et étant complètement débutant je ne comprend pas trop ce que cette différence implique.
Personnellement, si les pins analogiques pouvait servir comme numérique, cela me permettrait de ne pas devoir acheter une carte plus grande, car oui effectivement d'autre pin seront, et devront, être utilisé.

Bonjour @pyo223072002

les pins dites "analogiques" d'une carte UNO ont en fait la double fonctionnalité: Numérique ou Analogique.
Cela découle des caractéristiques du microcontroleur ATMega328 utilisé
(D'autres cartes Arduino , avec d'autres miconcontroleurs , peuvent disposer de pins strictement analogiques)

La fonction est définie par l'usage qu'on en fait :
analogique si un AnalogRead() est appliqué
numérique : avec pinMode() , digitalRead(), digitalWrite()

l'emploi de ces diverses fonctions établit la connection appropriée dans l'ATMega328

Quand au BUS SPI l'image suivante résume la situation

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.