Aller au contenu


7hibault

Inscrit(e) (le) 26 août 2019
Déconnecté Dernière activité juin 13 2022 06:14
-----

#115966 Instabilité de carte ITEAD PN532 avec le clone Arduino Uno

Posté par 7hibault - 30 mai 2022 - 12:13

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

 

multi_nfc_join.png

 

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...




#104997 Traqueur solaire sans batterie

Posté par 7hibault - 30 août 2019 - 10:41

Y a longtemps j'ai regardé cette vidéo, j’espère que cela va t'aider un peu

 

pour moi y a besoin que de 2 capteurs de lumière, après c'est l'angle qui fait le reste.

 

Ah oui ça aide bien. Suite au visionnage de ta vidéo, youtube m'a recommandé celle-ci.

 


En résumé :

- si V2-V1 < - Voffset2 : le comparateur du bas est à l'état haut, donc le NMOS devient passant (ie le moteur tourne), mais la bobine du relai n'est pas alimentée, donc le moteur tourne dans le sens "normal"

- si -Voffset2 < V2-V1 < Voffset1 :  aucun comparateur n'est à l'état haut, donc le N-MOS est bloqué et le moteur ne tourne pas

- si Voffset1 < V2-V1 : le comparateur du haut est à l'état haut, donc le NMOS devient passant (ie le moteur tourne), et la bobine du relai est pas alimentée, donc le moteur tourne dans le sens "inverse"

 

Je ne sais pas si je me ferai un jour à la qualité de l'aide que des inconnus peuvent nous apporter sur internet ! C'est génial, merci !

 

Je crois avoir compris dans les grandes lignes le fonctionnement. Je vais revoir ça à tête reposée ce week-end pour voir si j'ai des questions. Il y a certains composants dont je ne connais pas le fonctionnement en détail (N-MOS et relai), et des calculs que je vais refaire pour les comprendre (ça ressemble à des ponts diviseurs de tension en entrée des comparateurs mais le fait qu'il y ait 2 tensions différents V+ et V1 [ou V2] me perturbe un peu à première vue donc je dois m'y repencher, et mes connaissances datent un peu)