Bonjour à tous,
Je suis sur un projet avec
- un clone Arduino Uno
- des lecteurs NFC ITEAD PN532
J'ai réussi à faire fonctionner ces cartes ensemble, en utilisation la librairie Adafruit PN532.
Le problème est que la détection des cartes NFC est instable, et dépend de l'alimentation. J'alimente l'arduino par USB. Lorsque celui-ci est connecté à une source sur secteur (PC sur secteur, batterie externe sur secteur), ça fonctionne 2/3 du temps. Lorsque celui-ci est connecté à un source hors secteur (batterie externe), l'arduino s'allume et exécute son code, mais la détection des cartes NFC ne fonctionne pas.
C'est-à-dire, l'exécution du code suivant affiche "Didn't find PN53x board"
nfc.begin(); uint32_t versiondata = nfc.getFirmwareVersion(); if (!versiondata) { Serial.print("Didn't find PN53x board"); set_error_state(); }
J'ai également ajouté des LEDs qui s'allument en rouge lorsque cette partie du code est atteinte. C'est ce qu'il se passe lorsque le montage est alimenté par batterie externe.
Je suis toujours débutant en électronique et les aspects alimentation me dépassent un peu. Vous voyez quelque chose qui pourrait causer ce comportement ? On m'a dit que ça pourrait être le niveau d'alimentation des cartes NFC qui est mauvais, mais j'aimerais bien comprendre pourquoi si c'est ça, le comportement changerait en fonction de l'alimentation USB.
Le schéma ressemble à ça
Dans mon montage final, j'ai 4 cartes.
Un code minimal de setup qui reproduit cette erreur serait
#include <Wire.h> #include <SPI.h> #include <Adafruit_PN532.h> #include <FastLED.h> FASTLED_USING_NAMESPACE #define DATA_PIN 9 #define LED_TYPE WS2811 #define COLOR_ORDER RGB #define NUM_LEDS 4 CRGB leds[NUM_LEDS]; #define BRIGHTNESS 96 #define FRAMES_PER_SECOND 120 #define N_BOARDS (4) Adafruit_PN532 nfc_1(2, 5, 3, 4); Adafruit_PN532 nfc_2(2, 5, 3, 6); Adafruit_PN532 nfc_3(2, 5, 3, 7); Adafruit_PN532 nfc_4(2, 5, 3, 8); Adafruit_PN532 boards[N_BOARDS] = {nfc_1, nfc_2, nfc_3, nfc_4}; void setup_nfc(Adafruit_PN532 nfc, int i) { Serial.println((String)"Setting up board #"+i); delay(5000); nfc.begin(); uint32_t versiondata = nfc.getFirmwareVersion(); if (!versiondata) { Serial.print("Didn't find PN53x board"); set_error_state(); } // Got ok data, print it out! Serial.print("Found chip PN5"); Serial.println((versiondata>>24) & 0xFF, HEX); Serial.print("Firmware ver. "); Serial.print((versiondata>>16) & 0xFF, DEC); Serial.print('.'); Serial.println((versiondata>>8) & 0xFF, DEC); // configure board to read RFID tags nfc.SAMConfig(); } void set_error_state() { for (int i = 0; i < NUM_LEDS; i++) { leds[i] = CRGB::Red; } FastLED.show(); delay(1000); while(1); // halt } void setup(void) { Serial.begin(115200); while (!Serial) delay(100); // Setup LEDs FastLED.addLeds<LED_TYPE,DATA_PIN,COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip); FastLED.setBrightness(BRIGHTNESS); FastLED.clear(); FastLED.show(); // Setup NFC boards for (int i = 0; i < N_BOARDS; i++) { setup_nfc(boards[i], i); } delay(3000); // 3 second delay for recovery } void loop(void) { // do stuff... }
PS: si vous êtes sur le forum Arduino, vous verrez peut-être également mon message en anglais. Entre mes imprécisions liées au fait que je suis débutant et les pertes en traduction, je commence à avoir une impression d'illégitimité croissante à y demander de l'aide...