Système de pointage Arduino avec RFID

Système de pointage Arduino avec RFID

Dans ce projet, vous allez créer un système de pointage avec le lecteur RFID MFRC522 et Arduino. Lorsque vous glissez une étiquette RFID à côté du lecteur RFID, l’UID et l’heure de l’utilisateur sont enregistrés sur une carte SD. Il indique également si vous êtes en retard ou à l’heure en fonction d’une heure et d’une minute prédéfinies.

Tout d’abord, regardez la vidéo d’introduction ci-dessous

YouTube video

Aperçu du projet

Avant de commencer, il est important de présenter les principales caractéristiques du projet :

  • Il contient un lecteur RFID qui lit les étiquettes RFID ;
  • Notre configuration a un module d’horloge en temps réel pour garder une trace du temps ;
  • Lorsque le lecteur RFID lit une étiquette RFID, il enregistre l’heure actuelle et l’UID de l’étiquette dans une carte SD ;
  • L’Arduino communique avec la carte SD à l’aide d’un module de carte SD ;
  • Vous pouvez définir une heure d’arrivée pour comparer si vous êtes à l’heure ou en retard ;
  • Si vous êtes à l’heure, une LED verte s’allume, si vous êtes en retard, une LED rouge s’allume ;
  • Le système dispose également d’un avertisseur sonore qui émet un bip lorsqu’une étiquette est lue.

Pièces requises

Systeme de pointage Arduino avec RFID

Voici une liste des composants requis pour ce projet :

Vous pouvez utiliser les liens précédents ou aller directement sur MakerAdvisor.com/tools pour trouver toutes les pièces pour vos projets au meilleur prix !

Systeme de pointage Arduino avec RFID

Lecteur RFID MFRC522

Dans ce projet, nous utilisons le lecteur RFID MFRC522 et c’est celui que nous vous recommandons d’obtenir (bien que ce projet puisse également être compatible avec d’autres lecteurs RFID).

RFID signifie radio-Ffréquence identifiantentification. La RFID utilise des champs électromagnétiques pour transférer des données sur de courtes distances et elle est utile pour identifier des personnes, effectuer des transactions, etc.

Un système RFID a besoin d’étiquettes et d’un lecteur :

  • Mots clés sont attachés à l’objet à identifier, dans cet exemple nous avons un porte-clés et une carte électromagnétique. Certains magasins utilisent également des étiquettes RFID dans les étiquettes de leurs produits pour les identifier. Chaque balise a sa propre identification unique (UID).

1641777848 203 Systeme de pointage Arduino avec RFID

  • Lecteur est un émetteur-récepteur radio bidirectionnel qui envoie un signal à l’étiquette et lit sa réponse.

1641777848 900 Systeme de pointage Arduino avec RFID

Le lecteur RFID MFRC522 fonctionne à 3,3 V et peut utiliser la communication SPI ou I2C. le bibliothèque nous allons utiliser pour contrôler le lecteur RFID ne prend en charge que SPI, c’est donc le protocole de communication que nous allons utiliser.

Pour en savoir plus sur le lecteur RFID avec l’Arduino, lisez : Accès sécurisé à l’aide du lecteur RFID MFRC522 avec Arduino

Installation de la bibliothèque MFRC522

Ce projet utilise la bibliothèque MFRC522.h pour contrôler le lecteur RFID. Cette bibliothèque n’est pas installée par défaut dans Arduino IDE, vous devez donc l’installer. Aller à Esquisser > Inclure la bibliothèque > Gérer les bibliothèques et rechercher CRFM522 ou suivez les étapes suivantes :

  1. Cliquez ici pour télécharger la bibliothèque MFRC522. Vous devriez avoir un dossier .zip dans votre dossier Téléchargements.
  2. Décompressez le dossier .zip et vous devriez obtenir RFID-maître dossier
  3. Renommez votre dossier de RFID-maître à RFID
  4. Bouge le RFID dossier dans votre dossier de bibliothèques d’installation Arduino IDE
  5. Enfin, rouvrez votre IDE Arduino

Brochage du lecteur RFID MFRC522

Le tableau suivant montre le brochage du lecteur pour référence future :

ÉPINGLER CÂBLAGE À L’ARDUINO UNO
SDA Numérique 10
SCK Numérique 13
MOSI Numérique 11
MISO Numérique 12
IRQ Ne pas se connecter
GND GND
TVD Numérique 9
3.3V 3.3V

Noter: différentes cartes Arduino ont des broches SPI différentes. Si vous utilisez une autre carte Arduino, vérifiez l’Arduino Documentation.

module de carte SD

Lorsqu’une étiquette est lue, son UID et son heure sont enregistrés sur une carte SD afin que vous puissiez suivre les enregistrements. Il existe différentes manières d’utiliser une carte SD avec l’Arduino. Dans ce projet, nous utilisons le module de carte SD illustré dans la figure ci-dessous – il fonctionne avec une carte micro SD.

1641777848 960 Systeme de pointage Arduino avec RFID

Il existe différents modèles de différents fournisseurs, mais ils fonctionnent tous de la même manière, en utilisant le protocole de communication SPI. Pour communiquer avec la carte SD, nous allons utiliser une bibliothèque appelée SD.h, qui est déjà installé dans Arduino IDE par défaut.

Pour en savoir plus sur le module de carte SD avec l’Arduino, lisez : Guide du module de carte SD avec Arduino

Brochage du module de carte SD

Le tableau suivant montre le brochage du module de carte SD pour référence future :

ÉPINGLER CÂBLAGE À L’ARDUINO UNO
VCC 3.3V
CS Numérique 4
MOSI Numérique 11
CLK Numérique 13
MISO Numérique 12
GND GND

Noter: différentes cartes Arduino ont des broches SPI différentes. Si vous utilisez une autre carte Arduino, vérifiez l’Arduino Documentation.

Préparation de la carte SD

La première étape lors de l’utilisation du module de carte SD avec Arduino consiste à formater la carte SD en FAT16 ou FAT32. Suivez les instructions ci-dessous.

1) Pour formater la carte SD, insérez-la dans votre ordinateur. Aller à Mon ordinateur et faites un clic droit sur la carte SD. Sélectionner Format comme le montre la figure ci-dessous.

1641777848 621 Systeme de pointage Arduino avec RFID

2) Une nouvelle fenêtre apparaît. Sélectionner FAT32, presse Démarrer pour initialiser le processus de formatage et suivez les instructions à l’écran.

1641777848 59 Systeme de pointage Arduino avec RFID

Test du module de carte SD

(Cette étape est facultative. Il s’agit d’une étape supplémentaire pour s’assurer que le module de carte SD fonctionne correctement.)

Insérez la carte SD formatée dans le module de carte SD.

Connectez le module de carte SD à l’Arduino comme indiqué dans les schémas de circuit ci-dessous ou consultez le tableau de brochage.1641777848 398 Systeme de pointage Arduino avec RFID

Noter: selon le module que vous utilisez, les broches peuvent être placées à un endroit différent.

Téléchargement du croquis CardInfo

Pour vous assurer que tout est correctement câblé et que la carte SD fonctionne correctement, dans la fenêtre Arduino IDE, accédez à Déposer> Exemples > Dakota du Sud > InfoCarte.

Téléchargez le code sur votre carte Arduino. Assurez-vous d’avoir sélectionné la bonne carte et le bon port COM.

Ouvrez le moniteur série à une vitesse de transmission de 9600 et les informations de la carte SD seront affichées. Si tout fonctionne correctement, vous verrez un message similaire sur le moniteur série.

1641777848 370 Systeme de pointage Arduino avec RFID

Module RTC (Horloge Temps Réel)

Pour garder une trace du temps, nous utilisons le module SD1307 RTC. Cependant, ce projet fonctionne très bien avec le DS3231, qui est très similaire. Une différence principale entre eux est la précision. Le DS3231 est beaucoup plus précis que le DS1307. La figure ci-dessous montre le modèle SD1307.

1641777848 611 Systeme de pointage Arduino avec RFID

Le module a une batterie de secours installée. Cela permet au module de conserver l’heure, même lorsqu’il n’est pas sous tension.

Ce module utilise la communication I2C et nous utiliserons le RTCLib.h bibliothèque pour lire l’heure du RTC.

Pour en savoir plus sur l’horloge temps réel DS1307 avec l’Arduino, lisez : Guide du module d’horloge temps réel (RTC) avec Arduino (DS1307 et DS3231)

Brochage du module RTC

Le tableau suivant montre le brochage du module RTC pour référence future :

ÉPINGLER CÂBLAGE À L’ARDUINO UNO
SCL A5
SDA A4
VCC 5V (vérifiez la fiche technique de votre module)
GND GND

Noter: différentes cartes Arduino ont des broches I2C différentes. Si vous utilisez une autre carte Arduino, vérifiez l’Arduino Documentation.

Installation de la bibliothèque RTCLib

Pour installer le RTCLib.h aller à Esquisser > Inclure la bibliothèque > Gérer les bibliothèques et rechercher RTCLib ou suivez les étapes suivantes :

  1. Cliquez ici pour télécharger la bibliothèque RTCLib. Vous devriez avoir un dossier .zip dans votre dossier Téléchargements.
  2. Décompressez le dossier .zip et vous devriez obtenir RTCLib-maître dossier
  3. Renommez votre dossier de RTCLib-maître à RTCLib
  4. Bouge le RTCLib dossier dans votre dossier de bibliothèques d’installation Arduino IDE
  5. Enfin, rouvrez votre IDE Arduino

Schémas

Le circuit de ce projet est illustré dans les schémas de circuit ci-dessous.

Dans ce circuit, il y a des appareils 3,3 V et 5 V, assurez-vous de les câbler correctement. De plus, si vous utilisez des modules différents, vérifiez la tension recommandée avant d’alimenter le circuit. Câblez un module à la fois et suivez les tableaux de brochage si nécessaire.

1641777848 59 Systeme de pointage Arduino avec RFID

Voici à quoi devrait ressembler votre circuit après assemblage.

1641777848 156 Systeme de pointage Arduino avec RFID

Code

Téléchargez le code suivant sur votre Arduino. Assurez-vous que vous avez sélectionné la bonne carte et le bon port COM.

/*
 * Rui Santos 
 * Complete Project Details https://www.raspberryme.com
 */

#include <MFRC522.h> // for the RFID
#include <SPI.h> // for the RFID and SD card module
#include <SD.h> // for the SD card
#include <RTClib.h> // for the RTC

// define pins for RFID
#define CS_RFID 10
#define RST_RFID 9
// define select pin for SD card module
#define CS_SD 4 

// Create a file to store the data
File myFile;

// Instance of the class for RFID
MFRC522 rfid(CS_RFID, RST_RFID); 

// Variable to hold the tag's UID
String uidString;

// Instance of the class for RTC
RTC_DS1307 rtc;

// Define check in time
const int checkInHour = 9;
const int checkInMinute = 5;

//Variable to hold user check in
int userCheckInHour;
int userCheckInMinute;

// Pins for LEDs and buzzer
const int redLED = 6;
const int greenLED = 7;
const int buzzer = 5;

void setup() {
  
  // Set LEDs and buzzer as outputs
  pinMode(redLED, OUTPUT);  
  pinMode(greenLED, OUTPUT);
  pinMode(buzzer, OUTPUT);
  
  // Init Serial port
  Serial.begin(9600);
  while(!Serial); // for Leonardo/Micro/Zero
  
  // Init SPI bus
  SPI.begin(); 
  // Init MFRC522 
  rfid.PCD_Init(); 

  // Setup for the SD card
  Serial.print("Initializing SD card...");
  if(!SD.begin(CS_SD)) {
    Serial.println("initialization failed!");
    return;
  }
  Serial.println("initialization done.");

  // Setup for the RTC  
  if(!rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while(1);
  }
  else {
    // following line sets the RTC to the date & time this sketch was compiled
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  }
  if(!rtc.isrunning()) {
    Serial.println("RTC is NOT running!");
  }
}

void loop() {
  //look for new cards
  if(rfid.PICC_IsNewCardPresent()) {
    readRFID();
    logCard();
    verifyCheckIn();
  }
  delay(10);
}

void readRFID() {
  rfid.PICC_ReadCardSerial();
  Serial.print("Tag UID: ");
  uidString = String(rfid.uid.uidByte[0]) + " " + String(rfid.uid.uidByte[1]) + " " + 
    String(rfid.uid.uidByte[2]) + " " + String(rfid.uid.uidByte[3]);
  Serial.println(uidString);
 
  // Sound the buzzer when a card is read
  tone(buzzer, 2000); 
  delay(100);        
  noTone(buzzer);
  
  delay(100);
}

void logCard() {
  // Enables SD card chip select pin
  digitalWrite(CS_SD,LOW);
  
  // Open file
  myFile=SD.open("DATA.txt", FILE_WRITE);

  // If the file opened ok, write to it
  if (myFile) {
    Serial.println("File opened ok");
    myFile.print(uidString);
    myFile.print(", ");   
    
    // Save time on SD card
    DateTime now = rtc.now();
    myFile.print(now.year(), DEC);
    myFile.print('/');
    myFile.print(now.month(), DEC);
    myFile.print('/');
    myFile.print(now.day(), DEC);
    myFile.print(',');
    myFile.print(now.hour(), DEC);
    myFile.print(':');
    myFile.println(now.minute(), DEC);
    
    // Print time on Serial monitor
    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(' ');
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.println(now.minute(), DEC);
    Serial.println("sucessfully written on SD card");
    myFile.close();

    // Save check in time;
    userCheckInHour = now.hour();
    userCheckInMinute = now.minute();
  }
  else {
    Serial.println("error opening data.txt");  
  }
  // Disables SD card chip select pin  
  digitalWrite(CS_SD,HIGH);
}

void verifyCheckIn(){
  if((userCheckInHour < checkInHour)||((userCheckInHour==checkInHour) && (userCheckInMinute <= checkInMinute))){
    digitalWrite(greenLED, HIGH);
    delay(2000);
    digitalWrite(greenLED,LOW);
    Serial.println("You're welcome!");
  }
  else{
    digitalWrite(redLED, HIGH);
    delay(2000);
    digitalWrite(redLED,LOW);
    Serial.println("You are late...");
  }
}

Afficher le code brut

Noter: vérifiez que les bibliothèques nécessaires sont installées.

Importation de bibliothèques

Le code commence par importer les bibliothèques nécessaires. le CRFM522 pour le lecteur RFID, le Dakota du Sud pour le module de carte SD et le RTClib pour le RTC. Vous incluez également le SPI bibliothèque pour la communication SPI avec le module RFID et carte SD.

#include <MFRC522.h> // for the RFID
#include <SPI.h>     // for the RFID and SD card module
#include <SD.h>      // for the SD card
#include <RTClib.h>  // for the RTC

Préparation lecteur RFID, carte SD et RTC

Ensuite, vous définissez les broches pour le lecteur RFID et le module de carte SD. Pour la RFID, le pin SCK (CS_RFID) est connecté à la broche 10 et à la broche RST (RST_RFID) est connecté à la broche 9. Pour le module de carte SD, la broche Chip Select (CS_SD) est connecté à la broche 4.

// define pins for RFID
#define CS_RFID 10
#define RST_RFID 9
// define chip select pin for SD card module
#define CS_SD 4

Vous créez un fichier appelé mon fichier pour stocker vos données.

File myFile;

Ensuite, vous créez une instance pour le RFID et pour le RTC :

// Instance of the class for RFID
MFRC522 rfid(CS_RFID, RST_RFID);

// Instance of the class for RTC
RTC_DS1307 rtc;

Variables

Vous créez une variable de chaîne uidString qui contient les balises UID.

String uidString;

Les lignes suivantes créent des variables pour définir l’heure et la minute d’enregistrement. Dans ce cas, nous définissons l’heure d’arrivée à 9h05 du matin. Vous pouvez modifier l’heure d’enregistrement en modifiant ces valeurs :

// Define check in time
const int checkInHour = 9;
const int checkInMinute = 5;

Vous devez également créer des variables pour conserver l’heure d’enregistrement de l’utilisateur. Ces variables enregistreront l’heure à laquelle une certaine étiquette UID a été lue. Les variables suivantes contiennent l’heure d’enregistrement et la minute d’enregistrement.

//Variable to hold user check in
int userCheckInHour;
int userCheckInMinute;

Enfin, vous attribuez les numéros de broches aux LED et au buzzer.

// Pins for LEDs and buzzer
const int redLED = 6;
const int greenLED = 7;
const int buzzer = 5;

mettre en place()

Ensuite, dans le mettre en place() vous définissez les LED et le buzzer comme sorties.

// Set LEDs and buzzer as outputs
pinMode(redLED, OUTPUT);
pinMode(greenLED, OUTPUT);
pinMode(buzzer, OUTPUT);

Après cela, chaque module est paraphé.

Les fonctions

Dans ce code vous créez 3 fonctions : lireRFID(), logCard() et vérifierCheckIn().

le lireRFID() la fonction lit l’UID de la balise, l’enregistre dans le uidString variable et l’affiche sur le moniteur série. De plus, lorsqu’il lit l’étiquette, le buzzer émet un bip.

le logCard() La fonction crée un fichier sur votre carte SD appelé DATA.txt. Vous pouvez modifier le nom du fichier, si vous le souhaitez, sur la ligne suivante.

myFile=SD.open("DATA.txt", FILE_WRITE);

Ensuite, il enregistre le uidString (qui contient l’UID de la balise) sur la carte SD et l’heure actuelle.

myFile.print(uidString);
// Save time on SD card
DateTime now = rtc.now();
myFile.print(now.year(), DEC);
myFile.print('/');
myFile.print(now.month(), DEC);
myFile.print('/');
myFile.print(now.day(), DEC);
myFile.print(',');
myFile.print(now.hour(), DEC);
myFile.print(':');
myFile.print(now.minute(), DEC);

Il enregistre également l’heure et la minute d’enregistrement de l’utilisateur dans les variables suivantes pour une comparaison ultérieure avec l’heure d’enregistrement prédéfinie.

userCheckInHour = now.hour();
userCheckInMinute = now.minute();

le vérifierCheckIn() La fonction compare simplement l’heure d’enregistrement de l’utilisateur avec l’heure d’enregistrement prédéfinie et donne des commentaires en conséquence. Si l’utilisateur est en retard, la LED rouge s’allume ; si l’utilisateur est à l’heure, la LED verte s’allume.

boucler()

Après avoir étudié les fonctions créées, le boucler() est assez simple à comprendre.

Tout d’abord, le code vérifie si une étiquette RFID a été glissée. Si oui, il lira l’UID RFID, enregistrera l’UID et l’heure sur la carte SD, puis il donnera un retour à l’utilisateur en allumant l’une des LED.

Saisie des données de la carte SD

Pour vérifier les données enregistrées sur la carte SD, retirez-la du module de carte SD et insérez-la dans votre ordinateur.

Ouvrez le dossier de la carte SD et vous devriez avoir un fichier appelé DATA.txt.

1641777848 208 Systeme de pointage Arduino avec RFID

Ouvrez le fichier à l’aide d’un éditeur de texte. Vous aurez quelque chose comme suit :

1641777848 420 Systeme de pointage Arduino avec RFID

Notez que chaque valeur est séparée par des virgules. Cela facilite la tâche si vous souhaitez importer ces données dans Excel, Google Sheets ou un autre logiciel de traitement de données.

Conclusion

Dans ce projet, vous avez appris à utiliser un lecteur de carte RFID et le module de carte SD avec Arduino. Vous pouvez modifier ce projet selon vos propres besoins ou vous pouvez utiliser les fonctions créées ici dans d’autres projets qui nécessitent l’enregistrement de données ou la lecture d’étiquettes RFID.

Vous pouvez aller plus loin dans ce projet et ajouter un affichage pour donner des commentaires supplémentaires à l’utilisateur. Vous pouvez associer un nom à chaque UID et afficher le nom d’utilisateur lors de la lecture de la balise. Vous voudrez peut-être jeter un œil à certains tutoriels avec l’Arduino en utilisant des écrans :

Ceci est un extrait de notre cours « Arduino Step-by-step Projects« . Si vous aimez Arduino et que vous souhaitez faire plus de projets, nous vous recommandons de télécharger notre cours : Projets Arduino étape par étape.

  • DollaTek Système de contrôle d'accès de Sortie UART de Module de Lecteur de RDM6300 125Khz EM4100 RFID pour Arduino
    Le mini-module lecteur de cartes 125KHz est conçu pour lire le code à partir de cartes en lecture seule compatibles avec la carte de 125KHz et d'une carte de lecture / écriture. Il peut être appliqué dans la sécurité de bureau / à la maison, l'identification personnelle, le contrôle d'accès, l'anti-contrefaçon, le jouet interactif et les systèmes de contrôle de production etc. Antenne externe de soutien. Distance efficace maximum jusqu'à 50mm. Moins de 100ms temps de décodage. Interface de l'ordinateur. Support EM4100 compatible lecture seule ou lire / écrire des étiquettes. Conception de petit contour.