Projet 5 – Serrure de porte RFID

Le but du projet est de créer un mécanisme de porte avec détection de badge RFID. Ce mécanisme est basé sur le Arduino Uno, et le lecteur de carte Parallax GRAND, et permet une ouverture et fermeture d’un verrou à l’aide d’un badge.

Réalisé par Julien Bonjour et Jérémy Touzé.

ETAPE 1 : Lecture du code RFID

RFID-Reader-Parallax1

Le code pour la lecture des badges RFID est le suivant :

#include <SoftwareSerial.h>

// Lecteur RFID Parallax
// Code original réalisé par Kev_MacD
#define RFIDEnablePin 2 // Pin permettant la lecture. Mis en OUTPUT pour la lecture du tag RFID
#define RFIDSerialRate 2400 // Vitesse de lecture du lecteur RFID

// SoftwareSerial Library pour localiser les serial pins
// Pour eviter tout conflit avec l’update de l’arduino via USB
#define RxPin 5 // Pin pour lire les informations
#define TxPin 4 // Pin pour écrire les données dans le lecteur (ne pas le raccorder dans le cas de la lecture seule du tag RFID)
SoftwareSerial RFIDReader(RxPin,TxPin);

String RFIDTAG= » »; // Mise en mémoire du code RFID
String DisplayTAG = «  »; // On garde dans la console le dernier tag RFID lu

void setup()
{
// Connection du pin SOUT au pin RX à 2400bps pour la lecture RFID
RFIDReader.begin(RFIDSerialRate);

// Connexion du pin Enable en tant qu’ OUTPUT
pinMode(RFIDEnablePin,OUTPUT);

// Activation the RFID reader
digitalWrite(RFIDEnablePin, LOW);
Serial.begin(9600); // Définition de la Serial library à 9600 bps
Serial.println(« lecture RFID prête ! »); // Affichage du message de départ
}

void loop()
{
if(RFIDReader.available() > 0)
{
ReadSerial(RFIDTAG); // Lecture du tag RFID par le lecteur
}
// Affichage d’un seul tag RFID jusqu’au prochain tag scanné
if(DisplayTAG!=RFIDTAG)
{
DisplayTAG=RFIDTAG;
Serial.println(RFIDTAG);
}
}

void ReadSerial(String &ReadTagString)
{
int bytesread = 0;
int val = 0;
char code[10];
String TagCode= » »;

if(RFIDReader.available() > 0) {
if((val = RFIDReader.read()) == 10) { // Vérification du header
bytesread = 0;
while(bytesread<10) { // Lecture du code à 10 chiffres
if( RFIDReader.available() > 0) {
val = RFIDReader.read();
if((val == 10)||(val == 13)) { // Si on rencontre une erreur de lecture
break; // On stop
}
code[bytesread] = val;
bytesread++; // La lecture est prête pour le prochain code tag RFID
}
}
if(bytesread == 10) { // Si la chaine contient 10 chiffres
for(int x=0;x<10;x++) // On les met dans une chaine String
{
TagCode += code[x];
}
ReadTagString = TagCode; // On met à jour l’affichage
while(RFIDReader.available() > 0) // Et on vide le buffer
{
RFIDReader.read();
}

}
bytesread = 0;
TagCode= » »;
}
}
}

ETAPE 2 : Raccordement du servomoteur au Arduino UNO

Une fois le lecteur de carte RFID fonctionnel, on ajoute un servomoteur activé par la carte portant le tag « 2600D3D72E ». Lorsque la carte est détecté, la LED verte s’allume et le moteur s’active d’un quart de tour vers la gauche. Si la carte ne contient pas le bon tag, la LED rouge s’allume et le moteur n’est pas actionné.

RFID-Reader-Servo1

Le code pour l’activation du servomoteur par RFID est le suivant :

#include <SoftwareSerial.h>
// WS- Ajout de la librairie pour le servomoteur
#include <Servo.h>

// Lecteur RFID Parallax
// Code original réalisé par Kev_MacD
#define RFIDEnablePin 2 // Pin permettant la lecture. Mis en OUTPUT pour la lecture du tag RFID
#define RFIDSerialRate 2400 // Vitesse de lecture du lecteur RFID

// SoftwareSerial Library pour localiser les serial pins
// Pour eviter tout conflit avec l’update de l’arduino via USB
#define RxPin 5 // Pin pour lire les informations
#define TxPin 4 // Pin pour écrire les données dans le lecteur (ne pas le raccorder dans le cas de la lecture seule du tag RFID)
SoftwareSerial RFIDReader(RxPin,TxPin);

int restState = 89;

String RFIDTAG= » »; // Mise en mémoire du code RFID
String DisplayTAG = «  »; // On garde dans la console le dernier tag RFID lu

// WS- Création d’une variable pour le servomoteur
Servo doorLock;
// WS- Variable du bon tag
String codeTag = « 2600D3D72E »;
//WS- Position du servo mise à 0
int pos = 0;

void setup()
{
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);

// Connection du pin SOUT au pin RX à 2400bps pour la lecture RFID
RFIDReader.begin(RFIDSerialRate);

// Connexion du pin Enable en tant qu’ OUTPUT
pinMode(RFIDEnablePin,OUTPUT);

// Activation the RFID reader
digitalWrite(RFIDEnablePin, LOW);
Serial.begin(9600); // Définition de la Serial library à 9600 bps
Serial.println(« lecture RFID prete ! »); // Affichage du message de départ

//WS- On déclare l’entrée du servo sur le pin 7
doorLock.attach(7);

// WS- 0 le servo moteur tourne à fond vers la gauche
// WS- 90 le servo est arreté
// WS- 180 le servo moteur tourne à fond vers la droite
doorLock.write(restState);
}

void loop()
{
//LED éteintes
digitalWrite(10, LOW); // set the LED on
digitalWrite(11, LOW); // set the LED on

if(RFIDReader.available() > 0)
{
ReadSerial(RFIDTAG); // Lecture du tag RFID par le lecteur

if (RFIDTAG!=codeTag) {
digitalWrite(11, HIGH); // set the LED on
delay(1000); // wait for a second
digitalWrite(11, LOW); // set the LED off
}
}
// Affichage d’un seul tag RFID jusqu’au prochain tag scanné
if(DisplayTAG!=RFIDTAG)
{
DisplayTAG=RFIDTAG;
Serial.println(RFIDTAG);
}

if (RFIDTAG==codeTag){
digitalWrite(10, HIGH); // set the LED on
delay(1000); // wait for a second
digitalWrite(10, LOW); // set the LED off
Serial.println(« good »);
//doorLock.write(100);
for(pos = 0; pos < restState; pos += 1) // goes from 0 degrees to 180 degrees
{ // in steps of 1 degree
doorLock.write(pos); // tell servo to go to position in variable ‘pos’
Serial.println(pos);
//delay(15); // waits 15ms for the servo to reach the position
RFIDTAG= » »;
}
Serial.println(« 90 degr »);
Comeback();
}
}

void Comeback() {
for(pos = 180; pos > restState; pos -= 1) {
doorLock.write(pos);
Serial.println(pos);
}
}

void ReadSerial(String &ReadTagString)
{
int bytesread = 0;
int val = 0;
char code[10];
String TagCode= » »;

if(RFIDReader.available() > 0) {
if((val = RFIDReader.read()) == 10) { // Vérification du header
bytesread = 0;
while(bytesread<10) { // Lecture du code à 10 chiffres
if( RFIDReader.available() > 0) {
val = RFIDReader.read();
if((val == 10)||(val == 13)) { // Si on rencontre une erreur de lecture
break; // On stop
}
code[bytesread] = val;
bytesread++; // La lecture est prête pour le prochain code tag RFID
}
}
if(bytesread == 10) { // Si la chaine contient 10 chiffres
for(int x=0;x<10;x++) // On les met dans une chaine String
{
TagCode += code[x];
}
ReadTagString = TagCode; // On met à jour l’affichage
while(RFIDReader.available() > 0) // Et on vide le buffer
{
RFIDReader.read();
}
}
bytesread = 0;
TagCode= » »;
}
}
}

Laisser un commentaire

Votre e-mail ne sera jamais publié ni communiqué.

Vous pouvez utiliser ces balises et attributs HTML <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>