Bonjour à tous,
Je suis un débutant en matière d'arduino.
Je travaille sur un projet de verrou automatique avec une une temporisation de 20 seconde de l'ouverture et fermeture d' une armoire a pharmacie avec contrôle de l'ouverture par RFID.
le concept est simple, une led bleue clignotante signale que le verrou est en stand-by, une led verte indique l'ouverture du verrou, un afficheur a segment indique les 10 dernières secondes avant la fermeture automatique du verrou puis une led rouge s'allume 2 secondes et le cycle recommence.
Le prototype sur breadboard est satisfaisant mais j'aimerai toutefois que le servomoteur effectue sa rotation plus lentement.
Je ne pense pas qu'un potentiomètre est indiqué selon ce que j'ai appris.
Ma question première :
Peut-on réduire de moitié sa vitesse de rotation grâce au code? si oui; quelqu'un serait t'il m'aider a inclure ces lignes de codes au bon endroit dans le programme ?
Seconde question :
peut-on envisager d'ajouter un système de secours (en cas de problème RFID) grâce au module infrarouge KY*022IR et de la télécommande ?
La encore, un peu d'aide serait appréciable.
je met le code, ne soyez pas trop sévère avec moi, je ne suis qu'un débutant de 50 ans qui n'a que 1 semaine d'expérience en arduino. Merci à tous.
#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>
/**************************PARAMETERS******************************/
const int ipadd[4] = {3, 128, 69, 183}; //ip address à modifier selon la carte
int servoOpen = 90;
int servoClose = 0;
int delayBeforeClosing = 10000;
/******************************************************************/
// INPUT
#define SS_PIN 53
#define RST_PIN 9
// OUTPUT
const int servoPin = 49;
const int ledPin = 47;
const int ledPinR = 45;
Servo servo;
MFRC522 rfid(SS_PIN, RST_PIN);
bool approved = 0, oldApproved = 0;
// Init array that will store new NUID
byte nuidPICC[4];
void setup() {
Serial.begin(9600);
SPI.begin(); // Init SPI bus
rfid.PCD_Init(); // Init MFRC522
pinMode(ledPin, OUTPUT);
pinMode(ledPinR, OUTPUT);
pinMode(43, OUTPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
servo.write(servoClose);
servo.attach(servoPin);
Serial.println(F("Scan RFID NUID..."));
digitalWrite(ledPinR, LOW);
}
void loop() {
digitalWrite(43, HIGH);
delay(25); // Wait for 500 millisecond(s)
digitalWrite(43, LOW);
delay(20000); // Wait for 500 millisecond(s)
readRFID();
if (nuidPICC[0] == ipadd[0]
&& nuidPICC[1] == ipadd[1]
&& nuidPICC[2] == ipadd[2]
&& nuidPICC[3] == ipadd[3]) {
approved = true;
if (approved != oldApproved) {
Serial.println(F("Card approved!"));
digitalWrite(ledPin, HIGH);
digitalWrite(ledPinR, LOW);
servo.write(servoOpen);
delay(delayBeforeClosing);
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, LOW);
delay(1000);
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
delay(1000);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
delay(1000); // Wait for 1000 millisecond(s)
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
delay(1000); // Wait for 1000 millisecond(s)
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, LOW);
delay(1000); // Wait for 1000 millisecond(s)
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
delay(1000); // Wait for 1000 millisecond(s)
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, LOW);
delay(1000); // Wait for 1000 millisecond(s)
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, LOW);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
delay(1000); // Wait for 1000 millisecond(s)
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, HIGH);
delay(1000); // Wait for 1000 millisecond(s)
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
delay(1000); // Wait for 1000 millisecond(s)
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
}
nuidPICC[0] = 0;
nuidPICC[1] = 0;
nuidPICC[2] = 0;
nuidPICC[3] = 0;
} else {
approved = false;
if (approved != oldApproved) {
Serial.println(F("Card incorrect!"));
digitalWrite(ledPin, LOW);
digitalWrite(ledPinR, HIGH);
servo.write(servoClose);
delay(2000);
digitalWrite(ledPinR, LOW);
}
}
oldApproved = approved;
}
//
void readRFID()
{
// Look for new 1 cards
if ( ! rfid.PICC_IsNewCardPresent())
return;
// Verify if the NUID has been readed
if ( !rfid.PICC_ReadCardSerial())
return;
if (rfid.uid.uidByte[0] != nuidPICC[0] ||
rfid.uid.uidByte[1] != nuidPICC[1] ||
rfid.uid.uidByte[2] != nuidPICC[2] ||
rfid.uid.uidByte[3] != nuidPICC[3] ) {
Serial.println(F("A new card has been detected."));
// Store NUID into nuidPICC array
for (byte i = 0; i < 4; i++) {
nuidPICC[i] = rfid.uid.uidByte[i];
}
Serial.print(F("RFID tag in dec: "));
printDec(rfid.uid.uidByte, rfid.uid.size);
Serial.println();
}
// Halt PICC
rfid.PICC_HaltA();
// Stop encryption on PCD
rfid.PCD_StopCrypto1();
}
/**
Helper routine to dump a byte array as dec values to Serial.
*/
void printDec(byte *buffer, byte bufferSize) {
for (byte i = 0; i < bufferSize; i++) {
Serial.print(buffer[i] < 0x10 ? " 0" : " ");
Serial.print(buffer[i], DEC);
}
}