Ciao a tutti,
sto ufficialmente impazzendo 
Ho fatto molte prove e sono giunto alla conclusione che il problema è la lunghezza dei cavi.
Nel mio progetto devo collegare 5 RFID MFRC522 ad arduino.
Ogni cavo è lungo 40cm
Se collego solo i 5 RFID tutto funziona regolarmente.
Se invece collego la ethernet shield (originale arduino) smette di funzionare anche SOLO collegando un singolo RFID con cavo da 40cm
Se invece collego gli RFID con cavi cortissimi di pochi cm la ethernet shield funziona.
I cavi sono realizzati utilizzando cavo di rete cat.6 e sono morsettati da entrambi i lati (in allegato le foto)
Questo è mio codice completo
la libreria che uso è questa: GitHub - miguelbalboa/rfid: Arduino RFID Library for MFRC522
#include <MFRC522.h>
#include <Wire.h>
#include <SPI.h>
#include <Ethernet.h>
#define RST_PIN 9 // pin reset RFID
#define SS_CANDLE_B_PIN 8 // pin SS RFID (connettore CN18)
#define SS_CANDLE_F_PIN 7 // pin SS RFID (connettore CN25)
#define SS_CANDLE_A_PIN 6 // pin SS RFID (connettore CN15)
#define SS_CANDLE_G_PIN 5 // pin SS RFID (connettore CN11)
#define SS_CANDLE_D_PIN 3 // pin SS RFID (connettore CN7)
#define RESET_RFID_TIME 5000 // tempo di mancata lettura scaduto il quale l'RFID vience considerato rimosso dal giocatore
byte mac[] = { 0xDE, 0xBE, 0xFE, 0xFE, 0xBC, 0xEE };
IPAddress ip(192, 168, 1, 60);
EthernetServer server(80);
MFRC522 mfrc522_candle_b;
MFRC522 mfrc522_candle_f;
MFRC522 mfrc522_candle_a;
MFRC522 mfrc522_candle_g;
MFRC522 mfrc522_candle_d;
bool candleB;
bool candleF;
bool candleA;
bool candleG;
bool candleD;
unsigned long candleBMillis;
unsigned long candleFMillis;
unsigned long candleAMillis;
unsigned long candleGMillis;
unsigned long candleDMillis;
void setup() {
// attivo la comunicazione seriale per il debug
Serial.begin(9600);
while (!Serial);
SPI.begin();
// inizializzo tutti gli RFID
mfrc522_candle_b.PCD_Init(SS_CANDLE_B_PIN, RST_PIN);
mfrc522_candle_f.PCD_Init(SS_CANDLE_F_PIN, RST_PIN);
mfrc522_candle_a.PCD_Init(SS_CANDLE_A_PIN, RST_PIN);
mfrc522_candle_g.PCD_Init(SS_CANDLE_G_PIN, RST_PIN);
mfrc522_candle_d.PCD_Init(SS_CANDLE_D_PIN, RST_PIN);
// imposto indirizzo mac e IP e avvio la funzionalit� di server
Ethernet.begin(mac, ip);
server.begin();
}
void loop() {
// leggo il client web per verificare se ci sono connessioni in ingresso
EthernetClient client = server.available();
if (client) {
boolean currentLineIsBlank = true;
// gestisco tutte le connessioni in ingresso
while (client.connected()) {
// creo una risposta http e nel corpo della pagina aggiungo le informazioni formattate in XML
if (client.available()) {
char c = client.read();
if (c == '\n' && currentLineIsBlank) {
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: application/json;charset=utf-8");
client.println("Connnection: close");
client.println();
client.println("{\"candleB\":" + String(candleB) + ",\"candleF\":" + String(candleF) + ",\"candleA\":" + String(candleA) + ",\"candleG\":" + String(candleG) + ",\"candleD\":" + String(candleD) + "}");
client.println();
break;
}
if (c == '\n') {
currentLineIsBlank = true;
}
else if (c != '\r') {
currentLineIsBlank = false;
}
}
}
delay(1);
}
// stoppo il client per procedere con la gestione dell'indovinello
client.stop();
if (mfrc522_candle_b.PICC_IsNewCardPresent()) {
if (mfrc522_candle_b.PICC_ReadCardSerial()) {
String value = getRfidTag(mfrc522_candle_b.uid.uidByte, mfrc522_candle_b.uid.size);
if (value == " fa 6c 91 15") {
candleB = true;
candleBMillis = millis();
}
}
}
mfrc522_candle_b.PICC_HaltA();
mfrc522_candle_b.PCD_StopCrypto1();
if (mfrc522_candle_f.PICC_IsNewCardPresent()) {
if (mfrc522_candle_f.PICC_ReadCardSerial()) {
String value = getRfidTag(mfrc522_candle_f.uid.uidByte, mfrc522_candle_f.uid.size);
if (value == " 9a 34 b5 15") {
candleF = true;
candleFMillis = millis();
}
}
}
mfrc522_candle_f.PICC_HaltA();
mfrc522_candle_f.PCD_StopCrypto1();
if (mfrc522_candle_a.PICC_IsNewCardPresent()) {
if (mfrc522_candle_a.PICC_ReadCardSerial()) {
String value = getRfidTag(mfrc522_candle_a.uid.uidByte, mfrc522_candle_a.uid.size);
if (value == " 9a 90 95 15") {
candleA = true;
candleAMillis = millis();
}
}
}
mfrc522_candle_a.PICC_HaltA();
mfrc522_candle_a.PCD_StopCrypto1();
if (mfrc522_candle_g.PICC_IsNewCardPresent()) {
if (mfrc522_candle_g.PICC_ReadCardSerial()) {
String value = getRfidTag(mfrc522_candle_g.uid.uidByte, mfrc522_candle_g.uid.size);
if (value == " 7a b4 33 15") {
candleG = true;
candleGMillis = millis();
}
}
}
mfrc522_candle_g.PICC_HaltA();
mfrc522_candle_g.PCD_StopCrypto1();
if (mfrc522_candle_d.PICC_IsNewCardPresent()) {
if (mfrc522_candle_d.PICC_ReadCardSerial()) {
String value = getRfidTag(mfrc522_candle_d.uid.uidByte, mfrc522_candle_d.uid.size);
if (value == " 6a 0d bb 15") {
candleD = true;
candleDMillis = millis();
}
}
}
mfrc522_candle_d.PICC_HaltA();
mfrc522_candle_d.PCD_StopCrypto1();
unsigned long currentMillis = millis();
if (currentMillis - candleBMillis > RESET_RFID_TIME) {
candleB = false;
}
if (currentMillis - candleFMillis > RESET_RFID_TIME) {
candleF = false;
}
if (currentMillis - candleAMillis > RESET_RFID_TIME) {
candleA = false;
}
if (currentMillis - candleGMillis > RESET_RFID_TIME) {
candleG = false;
}
if (currentMillis - candleDMillis > RESET_RFID_TIME) {
candleD = false;
}
}
String getRfidTag(byte *buffer, byte bufferSize) {
String value = "";
for (byte i = 0; i < bufferSize; i++) {
value.concat(String(buffer[i] < 0x10 ? " 0" : " "));
value.concat(String(buffer[i], HEX));
}
return value;
}
Qualcuno ha qualche suggerimento?
Grazie in anticipo 
Luca