Confilt de fonctionnement entre GPS et lecteur RFID

Bonsoir

Je travail actuellement sur un projet qui me permettre de fraire le suivre à distance des certaines objets

Mon équiement :

  • Arduino mega 2560
  • SIM808 GSM/GPS/GPRS EVB-V3.2.4
  • RFID-RC522
  • DHT11

J’utilise les liaisons suivantes :

Liaison serie UART avec SIM808 : serial2 17(RX), 16(TX) et la bibliothéque DFRobot_SIM808
Liaison SPI avec RFID-RC522 : RST_PIN 5 et SS_PIN 53 et les bibliothéques RFID et SPI
Pin 4 avec DHT11

J’ai testé chaque module séparement et ils sont tous fonctionnels (Affichage des positions GPS/ lecteur TAG RFID / température / humidité) , mes problèmes commence lorsque j’essai de faire fonctionne le GPS avec la lecteur RFID ensemble je peut lire UID des tags RFID mais le GPS ne fonctionne plus.
J’ai effectué plusieurs recherche et certaines personnes parle d’un conflit entre le protocole UART et le SPI, personnellement je ne saurai quoi faire.

Sachant que mon objectif est que lors de la lecture d’un TAG RFID je récupére l’UID/Coordonnées GPS/TEMP/HUMI

Mon code est le suivants :

#include <DFRobot_sim808.h>
#include <dht11.h>
#include <SPI.h>
#include <RFID.h> 

DFRobot_SIM808 sim808(&Serial2);//Connect RX,TX,PWR,

#define DHT11PIN 4 // broche DATA -> broche 4
dht11 DHT11;

#define SS_PIN 53
#define RST_PIN 5
RFID rfid(SS_PIN, RST_PIN); 

// Setup variables:
    int serNum0;
    int serNum1;
    int serNum2;
    int serNum3;
    int serNum4;

int delais=30000;
int heure;

void setup()
{
  Serial2.begin(9600);
  Serial.begin(9600);
  SPI.begin(); 
  rfid.init();
   
  //******** Initialize sim808 module *************

  delay(3000);

  if( sim808.attachGPS())
      Serial.println("Open the GPS power success");
  else 
      Serial.println("Open the GPS power failure");
    }

  void loop() {

      if (rfid.isCard()) {
        if (rfid.readCardSerial()) {
                         /* With a new cardnumber, show it. */

                serNum0 = rfid.serNum[0];
                serNum1 = rfid.serNum[1];
                serNum2 = rfid.serNum[2];
                serNum3 = rfid.serNum[3];
                serNum4 = rfid.serNum[4];
               
                //Serial.println(" ");
                Serial.println(F("Un colis a été détecté"));
                Serial.print(F("Identité du colis : "));
                 Serial.print(rfid.serNum[0],HEX);
                Serial.print(rfid.serNum[1],HEX);
                Serial.print(rfid.serNum[2],HEX);
                Serial.print(rfid.serNum[3],HEX);
                Serial.print(rfid.serNum[4],HEX);
                Serial.println(" ");

                  //************** Get GPS data *******************
   if (sim808.getGPS()) {
    Serial.print(sim808.GPSdata.day);
    Serial.print("/");
    Serial.print(sim808.GPSdata.month);
    Serial.print("/");
    Serial.print(sim808.GPSdata.year);
    Serial.print("\n");
    heure=sim808.GPSdata.hour+1;
    Serial.print(heure);
    Serial.print(":");
    Serial.print(sim808.GPSdata.minute);
    Serial.print(":");
    Serial.print(sim808.GPSdata.second);
    Serial.print("\n");
    Serial.print("latitude :");
    Serial.println(sim808.GPSdata.lat,6);
    sim808.latitudeConverToDMS();
    Serial.print("latitude :");
    Serial.print(sim808.latDMS.degrees);
    Serial.print("\^");
    Serial.print(sim808.latDMS.minutes);
    Serial.print("\'");
    Serial.print(sim808.latDMS.seconeds,6);
    Serial.println("\"");
    Serial.print("longitude :");
    Serial.println(sim808.GPSdata.lon,6);
    sim808.LongitudeConverToDMS();
    Serial.print("longitude :");
    Serial.print(sim808.longDMS.degrees);
    Serial.print("\^");
    Serial.print(sim808.longDMS.minutes);
    Serial.print("\'");
    Serial.print(sim808.longDMS.seconeds,6);
    Serial.println("\"");
    Serial.print("speed_kph :");
    Serial.println(sim808.GPSdata.speed_kph);
    
      DHT11.read(DHT11PIN);
      Serial.print("Humidité (%): ");
      Serial.print((float)DHT11.humidity, 2);
      Serial.print("\n");
      Serial.print("Température (°C): ");
      Serial.println((float)DHT11.temperature, 2);   
          
     }
    
             } 
          } 
  
}

merci d’avance pour votre aide

Sur une MEGA Serial2 (16,17) et SPI (50 à 53) sont gérés au niveau matériel sans conflits particuliers si ce n’est qu’ils utilisent tous les deux des interruptions et que s’il y a trop d’interruptions des deux côtés (flot de données super important) alors vous n’arriverez pas à suivre - mais le GPS n’est pas “trop bavard”

je n’ai pas regardé vraiment du côté code pour le moment, mais pouvez vous préciser comment le tout est alimenté ? trop de composants tirant trop de courant sur votre MEGA peut faire chuter la tension et créer des soucis.

On utilise généralement la bibliothèque de Miguel Balboa avec un

#include <MFRC522.h>

et en terminant proprement la transaction. C’est quoi votre bibliothèque ?

Avec le bibliothèque mentionnée ci dessus, on traite correctement une transaction ainsi:

uint8_t longueurClef; // Nombre d'octets dans le UID. 4, 7 or 10 en fonction des cartes
uint8_t numeroSerie[10]; // le UID

if (mfrc522.PICC_IsNewCardPresent()) {
  if (mfrc522.PICC_ReadCardSerial()) {

    // on a lu une carte. effectuer le traitement
    // la longueur du N° de série est dans mfrc522.uid.size;
    // le N° de série est dans mfrc522.uid.uidByte

    // par exemple on garde une copie dans le programme
    longueurClef = mfrc522.uid.size;
    memcpy(numeroSerie, mfrc522.uid.uidByte, mfrc522.uid.size);

    // il faut absolument terminer la transaction SPI
    mfrc522.PICC_HaltA();

    // MAINTENANT ON PEUT FAIRE AUTRE CHOSE QUAND UNE CARTE A ETE LUE


  } else {
    // erreur lecture
  }
} else {
  // pas de nouvelle carte présentée
}

J-M-L:
Sur une MEGA Serial2 (16,17) et SPI (50 à 53) sont gérés au niveau matériel sans conflits particuliers si ce n’est qu’ils utilisent tous les deux des interruptions et que s’il y a trop d’interruptions des deux côtés (flot de données super important) alors vous n’arriverez pas à suivre - mais le GPS n’est pas “trop bavard”

je n’ai pas regardé vraiment du côté code pour le moment, mais pouvez vous préciser comment le tout est alimenté ? trop de composants tirant trop de courant sur votre MEGA peut faire chuter la tension et créer des soucis.

On utilise généralement la bibliothèque de Miguel Balboa avec un

#include <MFRC522.h>

et en terminant proprement la transaction. C’est quoi votre bibliothèque ?

Merci pour votre réponse

De cote de l’alimentation j’utilise :

  • TRANSFORMATEUR 12V-2A pour alimenter le module SIM808
  • cable USB pour l’arduino
  • DHT11 5V alimenté par arduino
  • RFID-RC522 3.3V alimenté par arduino

Pour la bibliothéque j’utilise :

  • DFRobot_sim808
  • dht11.h
  • SPI.h
  • RFID.h

y a pas vraiment un grant traffic et n’utilise pas des intrupteurs et tout les modules sont fonctionnels je l’ai déja test séparément ainsi que le module SIM808 “GPS” fonctionnne avec le DHT11 et le RC522 fonctionne avec le DHT11.

Mais le SIM808 avec RC522 ne fonctionne plus sachant que le système m’affiche “Open the GPS power success”

Les GND sont joints ?

Je n’utilise pas RFID.h donc peut pas vous dire si le souci vient de là (données des liens vers vos bibliothèques le nom ne suffit pas)

Quelles sont les oins exactes utilisées par votre SIM808 ?

Salut ,

il me semble avoir deja vu passé un sujet similaire , le probleme etait qu ' une des bibliotheques initialisait la liaison serie a une vitesse fixe donnée afin de communiquer avec son peripherique .

Du coup , avec une autre vitesse dans le setup , evidement ca ne marchait plus .

il faudrait verifier / lire les descriptions des modules que vous utilisez et les readme des bibliotheques utilisées pour etre sur que ce n' est pas ce genre de soucis .