Je suis complètement débutant en Arduino et en électronique en général, et je rencontre un problème avec un montage que j'ai réalisé. Mon objectif est de créer un système d'ouverture de porte à l'aide d'un lecteur RFID, d'un bouton poussoir et d'un autre contact.
Le souci est le suivant : lorsque je démarre mon Arduino et que je passe ma carte RFID devant le lecteur, cela fonctionne, mais uniquement la première fois.
En revanche, le fonctionnement avec les boutons poussoirs continue de marcher.
De plus, si j'utilise d'abord un bouton poussoir avant le lecteur RFID, celui-ci ne fonctionne plus.
En gros, dès que la gâche est alimentée, cela fait bugger le lecteur RFID.
Pourtant, lorsque je fais des essais sur une breadboard avec une LED à la place de la gâche, tout fonctionne correctement.
Je me demande si cela pourrait être dû à un appel de courant de la gâche qui mettrait le lecteur en défaut ? La gâche est alimentée en 12VDC, et l'Arduino utilise la même alimentation (je passe par un module pour convertir le 12V en 5V pour l'alimenter).
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
#define PORTE 8
#define BP_PORTE 2
#define LIVRE 3
#define BUTTON_PIN 7
MFRC522 rfid(SS_PIN, RST_PIN); // Création d'une instance du lecteur RFID
// Array to hold authorized UID
byte authorizedUID[4][4] = {
{0xF5, 0x65, 0x73, 0x01}, // Example UID 1
{0xF5, 0x11, 0x04, 0x35}, // Example UID 2
{0xAB, 0xCD, 0xEF, 0x01}, // Example UID 3
{0x00, 0x00, 0x00, 0x00} // Placeholder for new UID
};
void setup() {
Serial.begin(9600);
SPI.begin();
rfid.PCD_Init();
pinMode(PORTE, OUTPUT);
pinMode(BP_PORTE, INPUT_PULLUP);
pinMode(LIVRE, INPUT_PULLUP);
pinMode(BUTTON_PIN, INPUT_PULLUP);
Serial.println("Place your card to the reader...");
Serial.println();
digitalWrite(PORTE, LOW); // Relais éteint au démarrage
}
void loop() {
// Vérification du bouton poussoir
if (digitalRead(BP_PORTE) == LOW) {
digitalWrite(PORTE, HIGH);
delay(1000); // Anti-rebond
digitalWrite(PORTE, LOW);
}
// Vérification du contact de porte
if (digitalRead(LIVRE) == LOW) {
digitalWrite(PORTE, HIGH);
delay(1000); // Anti-rebond
digitalWrite(PORTE, LOW);
}
// Show UID on serial monitor
if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) {
Serial.print("Card UID: ");
String content = "";
byte readUID[4];
for (byte i = 0; i < rfid.uid.size; i++) {
readUID[i] = rfid.uid.uidByte[i];
content.concat(String(rfid.uid.uidByte[i] < 0x10 ? " 0" : " "));
content.concat(String(rfid.uid.uidByte[i], HEX));
}
content.toUpperCase();
Serial.println(content);
// Vérifie si l'UID de la carte est valide
if (isAuthorized(readUID)) {
Serial.println("Authorized access");
digitalWrite(PORTE, HIGH);
delay(1000); // Anti-rebond
digitalWrite(PORTE, LOW);
}
else {
Serial.println("Access denied");
}
}
// Check if the button is pressed
if (digitalRead(BUTTON_PIN) == LOW) {
Serial.println("Button pressed, waiting for new card...");
// Wait for a new card to be presented
while (!rfid.PICC_IsNewCardPresent()) {
delay(100);
}
if (rfid.PICC_ReadCardSerial()) {
// Store the new UID in the last slot of authorizedUID
for (byte i = 0; i < 4; i++) {
authorizedUID[3][i] = rfid.uid.uidByte[i];
}
Serial.println("New card registered!");
}
}
rfid.PICC_HaltA();
}
// Fonction pour vérifier si l'UID de la carte est valide
bool isAuthorized(byte *readUID) {
for (byte i = 0; i < 4; i++) {
bool match = true;
for (byte j = 0; j < 4; j++) {
if (authorizedUID[i][j] != readUID[j]) {
match = false;
break;
}
}
if (match) {
return true;
}
}
return false;
}
Concernant la diode de roue libre je ne sais pas du tout si la gâche en a une le gâche est celle-ci :
j'ai utiliser une LED comme diode car je n'ai que ça et ça a l'air de fonctionné pour l'instant,
est ce que je peux laissé la LED a votre avis ou y a t-il des les plus approprier ?