Bonjour à tous !
Je travaille sur un petit projet : une porte qui s'ouvre grâce à un badge NFC.
Pour cela j'utilise :
- Arduino Uno
- Breakout Board PN532 d'Adafruit (pas le shield)
- un relais pour la gâche électrique
Mon code est ok au téléversement, et il fonctionne : la breakout board reconnait les puces NFC (je ne suis pas encore à l'étape de lecture d'une puce précise), et envoie le signal au relais comme demandé.
Mais à l'installation, j'alimente l'arduino avec un transfo... Et là ça ne fonctionne plus.
J'ai tenté plusieurs transfo aux tensions et voltage différents sans succès. J'ai eu un petit moment de réussite en branchant un transfo de chargeur de portable au port USB B de l'Arduino, mais ça fonctionne une fois sur deux.
En résumé :
Projet de lecture de puce NFC :
Alimentation par laptop :
- LED Arduino ok
- LED relais OK
- LED breakboard OK
- le relais s'enclenche quand on passe une puce devant la breakboard
Alimentation par transfo :
- LED Arduino ok
- LED relais OK
- LED breakboard OK
- le relais ne s'enclenche pas quand on passe une puce devant la breakboard
Où j'en suis :
J'essaie de déterminer l'endroit où ça coince. Je pense que c'est :
- soit la breakout board qui ne capte plus la puce
- soit la breakout board qui capte la puce mais n'envoie pas le signal
- soit le relais qui ne reçoit pas le signal
- soit mon code qui a une couille quelque part...
Mon code :
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_PN532.h>
#define PN532_SCK (2)
#define PN532_MOSI (3)
#define PN532_SS (4)
#define PN532_MISO (5)
#define PN532_IRQ (8)
#define PN532_RESET (3)
Adafruit_PN532 nfc(PN532_IRQ, PN532_RESET);
const int GACHE = 11;
void setup(void) {
pinMode(GACHE, OUTPUT);
Serial.begin(115200);
Serial.println("Bonjour !");
nfc.begin();
uint32_t versiondata = nfc.getFirmwareVersion();
if (! versiondata) {
Serial.print("La carte PN53x n'a pas été trouvée");
while (1); // halt
}
// Got ok data, print it out!
Serial.print("Carte PN5 reconnue"); Serial.println((versiondata>>24) & 0xFF, HEX);
Serial.print("Version : "); Serial.print((versiondata>>16) & 0xFF, DEC);
Serial.print('.'); Serial.println((versiondata>>8) & 0xFF, DEC);
// Set the max number of retry attempts to read from a card
// This prevents us from waiting forever for a card, which is
// the default behaviour of the PN532.
nfc.setPassiveActivationRetries(0xFF);
// configure board to read RFID tags
nfc.SAMConfig();
Serial.println("En attente d'un badge ISO14443A");
}
void loop(void) {
boolean success;
uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; // Buffer to store the returned UID
uint8_t uidLength; // Length of the UID (4 or 7 bytes depending on ISO14443A card type)
// Wait for an ISO14443A type cards (Mifare, etc.). When one is found
// 'uid' will be populated with the UID, and uidLength will indicate
// if the uid is 4 bytes (Mifare Classic) or 7 bytes (Mifare Ultralight)
success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, &uid[0], &uidLength);
if (success) {
Serial.println("Badge RFID détecté !");
digitalWrite (GACHE, HIGH);
Serial.print("UID longueur: ");Serial.print(uidLength, DEC);Serial.println(" bytes");
Serial.print("UID valeur: ");
for (uint8_t i=0; i < uidLength; i++)
{
Serial.print(" 0x");Serial.print(uid[i], HEX);
}
Serial.println("");
// Wait 1 second before continuing
delay(1000);
}
else
{
// PN532 probably timed out waiting for a card
Serial.println("Timed out waiting for a card");
}
}
Dans tous les cas : est-ce que ce serait l'alimentation qui cause ce problème ? Et si oui, quelles seraient vos suggestions ?
Merci pour vos réponses !