Interférence électromagnétique?

Salut (surtout à ce qui me voit échouer pour une troisième raisons différente sur le même circuit haha)

J'ai actuellement ce circuit

Faisant tourner ce code:

#include <Debug.h>
#include <PN5180.h>
#include <PN5180ISO15693.h>

/*

*/
 const int ledred = 7;
 const int ledgreen = 6;

// The number of PN5180 readers connected
 const byte numReaders = 3; ///  A MODIFIER

// What is the "correct" UID that should be detected by each reader
uint8_t correctUid[][8] = 
{
  {0x8A,0x9F,0x9D,0xA4,0x50,0x1,0x4,0xE0}, //TAG 1
  {0xB,0x8A,0xC6,0x6A,0x0,0x1,0x4,0xE0} //TAG 2
};


//Si ce tag est lu par un des lecteurs, le puzzle sera reset
uint8_t resetUid[][8] = {{0xD1,0xD2,0x48,0x2A,0x50,0x1,0x4,0xE0}}; //TAG 1}

//Valeur par défaut quand il n'y a pas de tag
uint8_t noUid[][8] = {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}; //TAG 1}

//Serial.println("Etape 1");
// GLOBALS
// Each PN5180 reader requires unique NSS, BUSY, and RESET pins,
// as defined in the constructor below
PN5180ISO15693 nfc[] = {
PN5180ISO15693(22,24,26), // Pins correspondants aux fonstions des lecteurs
  PN5180ISO15693(28,30,32), // works
  PN5180ISO15693(34,36,38), // works

 //MISO BLEU 50
 //MOSI VERT 51
 //SCK JAUNE 52
};

// Array to record the value of the last UID read by each reader
uint8_t lastUid[numReaders][8];
 
// the setup function runs once when you press reset or power the board
void setup() {
 Serial.begin(9600);

  Serial.println("Etape 1");
  pinMode(ledred,OUTPUT);// Led rouge
  pinMode(ledgreen,OUTPUT);// Led verte

 
  Serial.println("RFID Tirroir, escape pirate");

  for(int i=0; i<numReaders; i++){
    Serial.print("Reader #");
    Serial.println(i);
    Serial.println(F("Initialising..."));
    nfc[i].begin();
    Serial.println(F("Resetting..."));
    nfc[i].reset();
    Serial.println(F("Enabling RF field..."));
    nfc[i].setupRF();
  }
  Serial.println(F("Setup Complete"));


}

// the loop function runs over and over again forever
void loop() {
  for(int i=0; i<numReaders; i++) {
    // Variable to store the ID of any tag read by this reader
    uint8_t thisUid[8];
    // Try to read a tag ID (or "get inventory" in ISO15693-speak) 
    ISO15693ErrorCode rc = nfc[i].getInventory(thisUid);
    // If the result code was that a card had been read
    if(rc == ISO15693_EC_OK) {
      // If this is the same ID as we read last frame
      if(memcmp(thisUid, lastUid[i], 8) == 0) {
        // Nothing to do - move on to the next reader
        continue;
      }
      // If it's a different ID
      else {
        Serial.print(F("New Card Detected on Reader "));
        Serial.print(i);
        Serial.print(F("... "));
        for (int j=0; j<sizeof(thisUid); j++) {
          Serial.print(thisUid[j],HEX);
          Serial.print(" ");
        }
        Serial.println();
        // Update the array that keeps track of most recent ID
        memcpy(lastUid[i], thisUid, sizeof(lastUid[i][0])*8);

        // Has placing this card solved the puzzle?
        checkIfPuzzleSolved();
      }
    }
    // If a card cannot be read
    else {
      // Test if we previously knew about a card (in which case it's just been removed
      // The most significant (last) byte of a valid UID should always be 0xE0. e.g. E007C4A509C247A8
      if(lastUid[i][7] == 0xE0){
        Serial.print("Card ");
        for (int j=0; j<sizeof(lastUid[i]); j++) {
          Serial.print(lastUid[i][j], HEX);
        }
        Serial.print(" removed from Reader ");
        Serial.println(i);
        // Update the array that keeps track of last known ID
        memset(lastUid[i], 0, sizeof(lastUid[i][0])*8);
      }
      
      #ifdef DEBUG
        Serial.print(F("Error in getInventory: "));
        Serial.println(nfc[i].strerror(rc));
      #endif
    }
 
    // Slight delay before checking the next reader
    delay(10);
  }
 // digitalWrite(ledgreen, LOW);
 // digitalWrite(ledred, HIGH);   
 // delay(1000);    
 // digitalWrite(ledred, LOW);
 // digitalWrite(ledgreen, HIGH);                    
}

void onPuzzleSolved() {
  // Activate the relay
  digitalWrite(ledred, LOW);
  digitalWrite(ledgreen, HIGH); 
  Serial.print(" Bonne carte ");
  // Loop forever
  while(true) { delay(1000); }
}

// Check whether all PN5180s have detected the correct tag
void checkIfPuzzleSolved() {
  // Test each reader in turn
  for(int i=0; i<numReaders; i++){
    // If this reader hasn't detected the correct tag
    if(memcmp(lastUid[i], correctUid[i], 8) != 0){
      // Exit
      digitalWrite(ledred, HIGH); 
      return;
    }
  }
  onPuzzleSolved();
}

Le soucis que j'ai maintenant et que je me demande s'il n'y a pas un soucis de masse ou un truc du genre. Car lorsque je lance mon programme et regarde le moniteur série, celui-ci bloque à un endroit précis de l'initialisation des lecteur RFID:

Le truc c'est que lorsque je touche la nappes de fils surlignés ici en jaune

Le programme se débloque soudainement et me permet de lire les cartes RFID placé en face des lecteurs.... Tant que je touche la nappe de fil!
Je me suis dit au début que c'était une erreur de soudure, ou un faux contact, mais j'ai fait des test de continuité et tout est bien relié. De plus je n'ai même pas besoin de faire bouger les câbles en les touchant, juste les toucher suffit à faire marcher le circuit. J'ai meme poser une pince à sertir sur les cables pour les maintenir dans la position de quand je les tenait. Rien. Mais si je touche la partie métallique de la pince qui fait contact avec les cables, encore une fois ça marche aussi.

Je précise que les cables sont neuf, pas dénudés, que le circuit est alimenté en USB par mon ordinateur et le tout posé sur un chiffon pour l'isoler au dessus de ma tour.

Du coup je ne sais pas d'où vient le problème, mais dés que je rentre en contact avec la nappe suspecte, bam ça marche.

Merci à vous (encore une fois)

Où est branché la masse du troisième module ?

Si par troisième module tu veux dire le troisième lecteur RFID, à la masse commune comme les autres. En gros mes trois lecteurs RFID ont leur masses passant par le ground des voltage-level translators, qui ressort et est mis en commun pour repartir sur une pin ground du arduino

Ce n'est pas le cas sur ton image (- au plus et + au plus

Pardon, il y'a en effet une erreur sur l'image, mais cela n'est pas le cas sur le circuit, toutes les masses sont bien reliés à l'arduino

La ligne tout en haut est elle une masse non reliée à l'autre?

Non les deux masses sont bien reliées

Bonjour neekolls

C'est clairement un problème de GND, le fait de toucher voire d'approcher un doigt du câblage pour que cela influence le fonctionnement.

Aussi pour le premier lecteur?

Oui, mais "à travers" tes modules de conversion, essaies de faire une liaison des GND de façon plus direct entre l'Arduino et les lecteurs RFID.

Cordialement
jpbbricole

il y a bien une ligne de masse entre ARDUINO et breadboard, mais la ligne de masse de la breadboard est-elle continue ?
Je veux dire par là que tu as peut-être besoin de ceci :

1 Like

Alors pour mettre fin a tous les doutes, sachez que j'ai utilisé une breadboard pour schématiser mon circuit, mais que concrètement tout ça est soudé sur une stripboard. Je vous épargne juste de regarder le bordel de câble que c'est. Mais j'ai branché en suivant le schémas que je vous ai montré.

Oui, mais "à travers" tes modules de conversion, essaies de faire une liaison des GND de façon plus direct entre l'Arduino et les lecteurs RFID.

J'ai essayé de relier la masse "du haut" donc celle collectant les masses des lecteurs à un des grounds de l'arduino mais sans succés

Bonsoir neekolls

En partant du GND l'Arduino, avec un ohmmètre, mesures tout points de GND, il doit y avoir presque 0 ohm. Fait de même avec le 5V et 3.3v.

Cordialement
jpbbricole

En partant du GND l'Arduino, avec un ohmmètre, mesures tout points de GND, il doit y avoir presque 0 ohm. Fait de même avec le 5V et 3.3v.

Alors j'ai fait une séance de mesure
Entre la masse d'un des lecteur et la masse prise à la PIN ground que j'utilise de l'arduino j'ai 2,2Ω.
Entre la masse prise à la PIN ground et les pins grounds d'un des voltage-level translators(coté 5v et 3,3v) : 1,8 Ω. Idem pour les masses communes "du haut" et "du bas"

Pour la suite je ne suis pas sur d'avoir comprit le "fait de même avec le 5V et 3.3v", mais je suppose que tu veut dire entre la masse de l'Arduino et les endroits ou je suis censé avoir du 5 et 3,3v. Désolé je débute j'ai pas vraiment de notions

Du coup entre la masse prise à la PIN ground de l'arduino et la pin 5V d'un des lecteur j'ai 1,4 kΩ
Entre la masse prise à la PIN ground de l'arduino et la pin 3,3v d'un des lecteur j'ai 313Ω
Entre la masse prise à la PIN ground de l'arduino et la pin 5V d'un des voltage-level translators j'ai 1,4 kΩ ,
Et enfin Entre la masse prise à la PIN ground de l'arduino et la pin 3,3V d'un des voltage-level translators j'ai 1,4 kΩ aussi.

En espérant que ces mesures puissent aider

Vérifies quand même que c'est bien des ohms et pas des milli ohms! Sinon tout est foireux. Prend un fil et mesure sa résistance. Si tu trouve 1Ω, c'est que tu mesure bien des mΩ

Cela veut dire de mesurer la résistance entre deux broches 5V ou entre deux broches 3,3V. La mesure entre une broche GND et une 5V a peu d'intérêt.

Ca parait élevé. Vérifie que ton multimètre donne bien 0 ohm en courcircuitant les deux sondes.

Alors pour commencer je doutais de la fiabilité de mon multimètre, du coup j'en ai racheté un nouveau. On parle d'un truc avec un écran qui merdais et aussi de valeurs qui ne se stabilisaient jamais.

Alors du coup sur le mode "200" en mesurant un fil il me donne "0,1". C'est donc censé être 1 mΩ?

Donc: entre deux pins 5V de deux lecteur RFID différents j'obtient "0,3" ( 3 mΩ je suppose du coup)
entre deux pins 3,3V de deux lecteur RFID différents j'obtient "0,5" = 5mΩ
entre deux pins 5V de deux voltage-level translators différents j'obtient "0,3" = 3 mΩ
entre deux pins 5V de deux voltage-level translators différents j'obtient "0,3" = 3 mΩ
entre deux pins 3,3V de deux voltage-level translators différents j'obtient "0,2" = 2 mΩ

J'ai refais avec le nouveau multimètre et je trouve "0,4" = 4 mΩ cette fois ci

Non, 100mΩ, mais cela inclut la résistance des fils du multimètre.

Bon et bien probléme réglé dans tous les cas!
J'ai fait un nouveau test de continuité avec le nouveau multimètre partout et j'avais deux soudures mal faites sur ma board.
Conclusion je pense que mon ancien multimètre perdais la boule et m'indiquait une continuité alors qu'il y'en avait pas. D'autant que le montage n'a quasi pas bougé donc peu de chance qu'un truc se soit défait tout seul.
En tout cas merci à tous, je pense du coup faire un sujet sur mon projet fini puisque j'ai vraiment pas mal demandé de l'aide pour celui la.
En espérant de pas avoir à encore revenir en demander d'ici là!

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