Système de pointage RFID avancé v2.0 – Solution sans Ethernet
Composants et fournitures
| Arduino UNO | × | 1 |
| Fils de connexion (génériques) | × | 1 |
| Module RFID RC522 | × | 1 |
Applications et services en ligne
- addrfidwin64.zip (Windows uniquement)
- markattendancewin64.zip (Windows uniquement)
À propos du projet
La première version de notre « Système de pointage RFID en ligne (sans Ethernet) » pouvait sembler complexe pour les amateurs sans compétences en programmation. Avec la version 2 du système de pointage RFID en ligne, nous avons éliminé la partie codage. En réalisant simplement quelques connexions, vous pourrez créer votre propre système de pointage en ligne.
Cette version intègre tous les éléments d'un vrai système de pointage : afficheur LCD, gestion des utilisateurs, validation de groupe, etc.
Fonctionnement
Circuit

En cas de doute sur les connexions, consultez la section « Schémas » pour le détail des broches.
Connexion de l'écran LCD :
- Broche 3 (VO) → GND via résistance 220 Ω
- RS → broche numérique A0
- Enable → broche numérique A1
- D4 → broche numérique 5
- D5 → broche numérique 4
- D6 → broche numérique 3
- D7 → broche numérique 2
- R/W → GND
- VSS → GND
- VCC → 5V
Programmation :
Étape 1 : Créez un groupe d'utilisateurs et générez une clé de validation sur cette page. Conservez cette clé.

Étape 2 : Téléchargez les fichiers nécessaires à la synchronisation Arduino / Application Web :
Note : uniquement pour Windows (32 ou 64 bits). Extrayez les archives et placez les fichiers sur votre PC.
Étape 3 : Connectez l'Arduino et le lecteur RFID au même PC.
Étape 4 : Copiez le code Arduino (section Code) dans l'IDE Arduino, compilez et téléversez.
Étape 5 : Lancez l'application de bureau « addRFIDTagsProg » (dossier addRFIDTagsProg.zip). Sélectionnez le port COM de l'Arduino.


Entrez la clé de validation générée à l'étape 1 et cliquez sur « Valider la clé ». Une fois validé, vous pouvez ajouter des utilisateurs : approchez le badge RFID du lecteur, le UID s'affiche, saisissez le nom de l'utilisateur et validez.

Un message de succès confirme l'ajout. L'utilisateur apparaît sur le panneau web : https://www.parikshacrack.com/gadgetProgrammers/index.php
Étape 6 : Connectez-vous à l'application web (même URL) pour gérer les utilisateurs. Onglet « Utilisateurs → Liste des utilisateurs en attente » pour assigner les badges RFID aux employés/étudiants.

Étape 7 : Lancez l'application « markOnlineAttendance » (dossier markattendancewin64.zip). L'écran affiche « Status: connected ». Présentez un badge RFID devant le lecteur quelques secondes : le pointage est enregistré pour la personne associée.

Étape 8 : Pour consulter les pointages (mois/année) : onglet « Contrôles de pointage → Voir pointages », sélectionnez mois et année, cliquez sur « Afficher ».

C'est terminé ! N'hésitez pas à laisser un commentaire en cas de question.
Code
Code Arduino
/* --------------------------------------------------------------------------------------------------------------------
Example sketch/program showing how to read new NUID from a PICC to serial.
--------------------------------------------------------------------------------------------------------------------
This is a MFRC522 library example; for further details and other examples see: https://github.com/miguelbalboa/rfid
...
*/
#include <SPI.h>
#include <MFRC522.h>
#include <LiquidCrystal.h>
const int rs = A0, en = A1, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
#define SS_PIN 10
#define RST_PIN 9
int writeVal;
int greenLedPin = A2;
int redLedPin = A3;
int orangeLedPin = 6;
int buzzerPin = A4;
boolean chkConn = false;
MFRC522 rfid(SS_PIN, RST_PIN);
MFRC522::MIFARE_Key key;
byte nuidPICC[4];
boolean isValidating = false;
void setup() {
Serial.begin(9600);
SPI.begin();
rfid.PCD_Init();
pinMode(greenLedPin, OUTPUT);
pinMode(redLedPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
for (byte i = 0; i < 6; i++) key.keyByte[i] = 0xFF;
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("GadgetProgrammer");
delay(100);
lcd.setCursor(0, 1);
lcd.print(" Not Connected! ");
establishConnection();
}
void loop() {
lcd.setCursor(0, 1);
char retOutput;
if (Serial.available() > 0) {
retOutput = Serial.read();
lcd.blink();
if (retOutput == 'A') { chkConn = true; analogWrite(orangeLedPin,0); lcd.print("Swipe Your Card!"); }
if(retOutput == 'V'){ analogWrite(orangeLedPin,1000); lcd.print("Validating Group"); isValidating = true; delay(1000); }
if(retOutput == 'S'){ lcd.print("Validation Done!"); glowGreenLed(1000); isValidating = false; delay(1000); }
}
if (chkConn && !retOutput != "") {
if (retOutput == '1') { lcd.print("Attendance Done!"); glowGreenLed(1000); delay(4000); }
else if (retOutput == '0') { lcd.print("Network Error !"); glowRedLed(1000); delay(4000); }
else if (retOutput == '2') { lcd.print("User Not Found!"); glowRedLed(1000); delay(4000); }
else if (retOutput == '5') { lcd.print("Network Error!"); glowRedLed(1000); delay(4000); }
if(isValidating == false){
lcd.setCursor(0, 1);
analogWrite(orangeLedPin,0);
lcd.print("Swipe Your Card!");
}
}
if ( ! rfid.PICC_IsNewCardPresent()) return;
if ( ! rfid.PICC_ReadCardSerial()) return;
MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI && piccType != MFRC522::PICC_TYPE_MIFARE_1K && piccType != MFRC522::PICC_TYPE_MIFARE_4K) return;
for (byte i = 0; i < 4; i++) nuidPICC[i] = rfid.uid.uidByte[i];
printHex(rfid.uid.uidByte, rfid.uid.size);
Serial.println();
lcd.setCursor(0,1);
lcd.print("Reading Card...!");
rfid.PICC_HaltA();
rfid.PCD_StopCrypto1();
delay(1000);
}
void printHex(byte *buffer, byte bufferSize) {
for (byte i = 0; i < bufferSize; i++) {
Serial.print(buffer[i] < 0x10 ? "0" : "");
Serial.print(buffer[i], HEX);
}
}
void printDec(byte *buffer, byte bufferSize) {
for (byte i = 0; i < bufferSize; i++) {
Serial.print(buffer[i] < 0x10 ? "0" : "");
Serial.print(buffer[i], DEC);
}
}
void glowGreenLed(int delaytime) {
digitalWrite(orangeLedPin,LOW);
digitalWrite(greenLedPin, HIGH);
digitalWrite(redLedPin, LOW);
tone(buzzerPin, 5000, 300);
if (delaytime > 0) { delay(delaytime); digitalWrite(greenLedPin, LOW); noTone(buzzerPin); }
}
void glowRedLed(int delaytime) {
digitalWrite(orangeLedPin,LOW);
digitalWrite(greenLedPin, LOW);
digitalWrite(redLedPin, HIGH);
digitalWrite(buzzerPin, HIGH);
delay(1000);
tone(buzzerPin, 5000);
if (delaytime > 0) { delay(delaytime); digitalWrite(redLedPin, LOW); noTone(buzzerPin); }
}
void glowOrangeLed(){ analogWrite(orangeLedPin,100); delay(100); }
void establishConnection() {
while (Serial.available() <= 0 && !chkConn) { Serial.println("A"); glowOrangeLed(); delay(200); }
}
void printLcdMsg(String msg, int col, int row) {
if (msg.equals("") || row < 0 || col < 0) { row = 0; col = 1; }
lcd.setCursor(col, row);
lcd.print(msg);
}
Schémas
pin_connections_of_arduino_and_lcd_yD9G43NUd9.tiff
pin_connections_of_arduion_and_rfid_7DFKgigFOA.tiff
Processus de fabrication
- Le rouleau à pâtisserie : des origines étrusques à l'artisanat moderne
- L'évolution et l'artisanat des quilles de bowling modernes
- Systèmes de chauffage solaire : des solutions passives aux actives pour un chauffage domestique durable
- Des fibules antiques à la fabrication moderne : l'épingle de sûreté expliquée
- Primal Display : Construire un moniteur de température LCD avec Raspberry Pi
- Elkem Silicones dévoile LSR Select : cicatrisation basse température et formulation sur mesure pour cycles 50% plus rapides
- Système de refroidissement thermoélectrique révolutionnaire améliore les performances des ordinateurs et batteries
- Systèmes de convoyage : fonctionnement, types et avantages clés
- Maîtriser la suspension automobile : composants, types, fonctionnement et diagnostic