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.
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é.
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;
// 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 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= » »; } } }
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
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é.
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= » »;
}
}
}