Badge RFID Multifonctions : Gestion des Accès pour Lycée
Découvrez un projet de badge RFID centralisé pour lycée : gestion des accès, casiers et cantine avec Arduino, interface web et base de données.
BADGE MULTIFONCTIONS
Solution de Gestion des Accès pour Lycée
Projet Scolaire
2024 - 2025
Questions Grand Oral
Site Web & Données personnelles
Comment les technologies numériques peuvent-elles simplifier la gestion d'un lycée ?
Quels sont les enjeux liés à la collecte des données personnelles ?
Questions Grand Oral
RFID & Objets connectés
Comment les objets connectés transforment-ils notre société ?
Comment la RFID change-t-elle l'accès aux services ?
PLANNING DU PROJET
Calendrier Prévisionnel et Jalons Clés
Réalisation
En cours
Vue d'ensemble chronologique des tâches et livrables majeurs.
MONTAGE
Montage Arduino + Module RFID RC522 + Écran LCD RGB
CODE ARDUINO
Arduino C++
1<br>2<br>3<br>4<br>5<br>6<br>7<br>8<br>9<br>10<br>11<br>12<br>13<br>14<br>15<br>16<br>17<br>18<br>19<br>20<br>21<br>22<br>23<br>24<br>25<br>26<br>27<br>28<br>29<br>30<br>31<br>32<br>33<br>34<br>35<br>36<br>37<br>38<br>39<br>40<br>41<br>42<br>43<br>44<br>45
46<br>47<br>48<br>49<br>50<br>51<br>52<br>53<br>54<br>55<br>56<br>57<br>58<br>59<br>60<br>61<br>62<br>63<br>64<br>65<br>66<br>67<br>68<br>69<br>70<br>71<br>72<br>73<br>74<br>75<br>76<br>77<br>78<br>79<br>80<br>81<br>82<br>83<br>84<br>85<br>86<br>87<br>88<br>89<br>90
<span style='color:#c678dd'>#include</span> <span style='color:#98c379'><Wire.h></span> <span style='color:#6a9955'>// Bibliothèque I2C (LCD)</span><br><span style='color:#c678dd'>#include</span> <span style='color:#98c379'><SPI.h></span> <span style='color:#6a9955'>// Bibliothèque SPI (RFID)</span><br><span style='color:#c678dd'>#include</span> <span style='color:#98c379'><MFRC522.h></span> <span style='color:#6a9955'>// Bibliothèque lecteur RFID RC522</span><br><span style='color:#c678dd'>#include</span> <span style='color:#98c379'>"rgb_lcd.h"</span> <span style='color:#6a9955'>// Bibliothèque écran LCD RGB</span><br><br><span style='color:#6a9955'>// ---- PINS ----</span><br><span style='color:#c678dd'>#define</span> <span style='color:#d19a66'>SS_PIN</span> <span style='color:#d19a66'>10</span> <span style='color:#6a9955'>// Pin SDA (SS) du module RFID</span><br><span style='color:#c678dd'>#define</span> <span style='color:#d19a66'>RST_PIN</span> <span style='color:#d19a66'>9</span> <span style='color:#6a9955'>// Pin RESET du module RFID</span><br><br>MFRC522 <span style='color:#61afef'>mfrc522</span>(<span style='color:#d19a66'>SS_PIN</span>, <span style='color:#d19a66'>RST_PIN</span>); <span style='color:#6a9955'>// Objet RFID avec ses pins</span><br>rgb_lcd lcd; <span style='color:#6a9955'>// Objet écran LCD</span><br><br><span style='color:#6a9955'>// ---- SETUP ----</span><br><span style='color:#e06c75'>void</span> <span style='color:#61afef'>setup</span>() { <span style='color:#6a9955'>// Exécutée une fois au démarrage</span><br> Serial.<span style='color:#61afef'>begin</span>(<span style='color:#d19a66'>9600</span>); <span style='color:#6a9955'>// Communication série avec le PC</span><br><br> lcd.<span style='color:#61afef'>begin</span>(<span style='color:#d19a66'>16</span>, <span style='color:#d19a66'>2</span>); <span style='color:#6a9955'>// LCD 16 colonnes, 2 lignes</span><br> lcd.<span style='color:#61afef'>setRGB</span>(<span style='color:#d19a66'>0</span>, <span style='color:#d19a66'>0</span>, <span style='color:#d19a66'>255</span>); <span style='color:#6a9955'>// Couleur bleue (démarrage)</span><br> lcd.<span style='color:#61afef'>setCursor</span>(<span style='color:#d19a66'>0</span>, <span style='color:#d19a66'>0</span>); <span style='color:#6a9955'>// Curseur début ligne 1</span><br> lcd.<span style='color:#61afef'>print</span>(<span style='color:#98c379'>" Systeme RFID "</span>); <span style='color:#6a9955'>// Titre du système</span><br> lcd.<span style='color:#61afef'>setCursor</span>(<span style='color:#d19a66'>0</span>, <span style='color:#d19a66'>1</span>); <span style='color:#6a9955'>// Curseur ligne 2</span><br> lcd.<span style='color:#61afef'>print</span>(<span style='color:#98c379'>" Initialise... "</span>); <span style='color:#6a9955'>// Message d'initialisation</span><br> <span style='color:#61afef'>delay</span>(<span style='color:#d19a66'>1500</span>); <span style='color:#6a9955'>// Pause pour lire</span><br><br> SPI.<span style='color:#61afef'>begin</span>(); <span style='color:#6a9955'>// Initialise la communication SPI</span><br> mfrc522.<span style='color:#61afef'>PCD_Init</span>(); <span style='color:#6a9955'>// Initialise le module RFID</span><br><br> lcd.<span style='color:#61afef'>clear</span>(); <span style='color:#6a9955'>// Efface l'écran LCD</span><br> lcd.<span style='color:#61afef'>setRGB</span>(<span style='color:#d19a66'>255</span>, <span style='color:#d19a66'>165</span>, <span style='color:#d19a66'>0</span>); <span style='color:#6a9955'>// Couleur orange (attente PC)</span><br> lcd.<span style='color:#61afef'>setCursor</span>(<span style='color:#d19a66'>0</span>, <span style='color:#d19a66'>0</span>); <span style='color:#6a9955'>// Position curseur ligne 1</span><br> lcd.<span style='color:#61afef'>print</span>(<span style='color:#98c379'>"Attente PC... "</span>); <span style='color:#6a9955'>// Affiche message attente</span><br> lcd.<span style='color:#61afef'>setCursor</span>(<span style='color:#d19a66'>0</span>, <span style='color:#d19a66'>1</span>); <span style='color:#6a9955'>// Position ligne 2</span><br> lcd.<span style='color:#61afef'>print</span>(<span style='color:#98c379'>" "</span>); <span style='color:#6a9955'>// Ligne vide</span><br><br> <span style='color:#e06c75'>unsigned</span> <span style='color:#e06c75'>long</span> t = <span style='color:#61afef'>millis</span>(); <span style='color:#6a9955'>// Sauvegarde le temps actuel</span><br> <span style='color:#e06c75'>while</span> (<span style='color:#61afef'>millis</span>() - t < <span style='color:#d19a66'>5000</span>) { <span style='color:#6a9955'>// Boucle max 5 secondes</span><br> <span style='color:#e06c75'>if</span> (Serial.<span style='color:#61afef'>available</span>()) { <span style='color:#6a9955'>// Si message du PC</span><br> String msg = Serial.<span style='color:#61afef'>readStringUntil</span>(<span style='color:#98c379'>'\n'</span>); <span style='color:#6a9955'>// Lit le message</span><br> msg.<span style='color:#61afef'>trim</span>(); <span style='color:#6a9955'>// Supprime espaces/retours</span><br> <span style='color:#e06c75'>if</span> (msg == <span style='color:#98c379'>"READY"</span>) <span style='color:#e06c75'>break</span>; <span style='color:#6a9955'>// PC prêt → sort boucle</span><br> }<br> }<br> <span style='color:#61afef'>afficherPret</span>(); <span style='color:#6a9955'>// Affiche écran 'prêt'</span><br>}
<span style='color:#6a9955'>// ---- LOOP ----</span><br><span style='color:#e06c75'>void</span> <span style='color:#61afef'>loop</span>() { <span style='color:#6a9955'>// Fonction exécutée en boucle</span><br> <span style='color:#e06c75'>if</span> (Serial.<span style='color:#61afef'>available</span>()) { <span style='color:#6a9955'>// Si message du PC</span><br> String reponse = Serial.<span style='color:#61afef'>readStringUntil</span>(<span style='color:#98c379'>'\n'</span>); <span style='color:#6a9955'>// Lit réponse</span><br> reponse.<span style='color:#61afef'>trim</span>(); <span style='color:#6a9955'>// Nettoie le texte</span><br> <span style='color:#e06c75'>if</span> (reponse == <span style='color:#98c379'>"GRANTED"</span>) { <span style='color:#6a9955'>// Accès autorisé</span><br> <span style='color:#61afef'>afficherAutorise</span>(); <span style='color:#6a9955'>// Appelle fonction autorisé</span><br> } <span style='color:#e06c75'>else</span> <span style='color:#e06c75'>if</span> (reponse == <span style='color:#98c379'>"DENIED"</span>) { <span style='color:#6a9955'>// Accès refusé</span><br> <span style='color:#61afef'>afficherRefuse</span>(); <span style='color:#6a9955'>// Appelle fonction refus</span><br> } <span style='color:#e06c75'>else</span> <span style='color:#e06c75'>if</span> (reponse == <span style='color:#98c379'>"READY"</span>) { <span style='color:#6a9955'>// Remise à zéro</span><br> <span style='color:#61afef'>afficherPret</span>(); <span style='color:#6a9955'>// Retour écran d'attente</span><br> }<br> }<br> <span style='color:#e06c75'>if</span> (!mfrc522.<span style='color:#61afef'>PICC_IsNewCardPresent</span>()) <span style='color:#e06c75'>return</span>; <span style='color:#6a9955'>// Aucun badge → quitte</span><br> <span style='color:#e06c75'>if</span> (!mfrc522.<span style='color:#61afef'>PICC_ReadCardSerial</span>()) <span style='color:#e06c75'>return</span>; <span style='color:#6a9955'>// Lecture échoue → quitte</span><br><br> String uid = <span style='color:#98c379'>""</span>; <span style='color:#6a9955'>// Variable pour l'UID du badge</span><br> <span style='color:#e06c75'>for</span> (<span style='color:#e06c75'>byte</span> i = <span style='color:#d19a66'>0</span>; i < mfrc522.uid.size; i++) { <span style='color:#6a9955'>// Parcourt l'UID</span><br> <span style='color:#e06c75'>if</span> (mfrc522.uid.uidByte[i] < <span style='color:#d19a66'>0x10</span>) uid += <span style='color:#98c379'>"0"</span>; <span style='color:#6a9955'>// Ajoute 0 si besoin</span><br> uid += String(mfrc522.uid.uidByte[i], HEX); <span style='color:#6a9955'>// Convertit en HEX</span><br> }<br> uid.<span style='color:#61afef'>toUpperCase</span>(); <span style='color:#6a9955'>// Met l'UID en majuscules</span><br><br> lcd.<span style='color:#61afef'>clear</span>(); <span style='color:#6a9955'>// Efface l'écran</span><br> lcd.<span style='color:#61afef'>setRGB</span>(<span style='color:#d19a66'>255</span>, <span style='color:#d19a66'>255</span>, <span style='color:#d19a66'>0</span>); <span style='color:#6a9955'>// Jaune = lecture en cours</span><br> lcd.<span style='color:#61afef'>setCursor</span>(<span style='color:#d19a66'>0</span>, <span style='color:#d19a66'>0</span>); <span style='color:#6a9955'>// Position ligne 1</span><br> lcd.<span style='color:#61afef'>print</span>(<span style='color:#98c379'>"Scan badge... "</span>); <span style='color:#6a9955'>// Message de scan</span><br> lcd.<span style='color:#61afef'>setCursor</span>(<span style='color:#d19a66'>0</span>, <span style='color:#d19a66'>1</span>); <span style='color:#6a9955'>// Position ligne 2</span><br> lcd.<span style='color:#61afef'>print</span>(uid); <span style='color:#6a9955'>// Affiche l'UID</span><br><br> Serial.<span style='color:#61afef'>println</span>(<span style='color:#98c379'>"SCAN:"</span> + uid + <span style='color:#98c379'>":porte"</span>); <span style='color:#6a9955'>// Envoie UID au PC</span><br><br> mfrc522.<span style='color:#61afef'>PICC_HaltA</span>(); <span style='color:#6a9955'>// Stop communication carte</span><br> mfrc522.<span style='color:#61afef'>PCD_StopCrypto1</span>(); <span style='color:#6a9955'>// Stop chiffrement RFID</span><br> <span style='color:#61afef'>delay</span>(<span style='color:#d19a66'>500</span>); <span style='color:#6a9955'>// Pause anti-double lecture</span><br>}<br><br><span style='color:#6a9955'>// ---- AFFICHAGE ----</span><br><span style='color:#e06c75'>void</span> <span style='color:#61afef'>afficherPret</span>() { <span style='color:#6a9955'>// Écran 'prêt'</span><br> lcd.<span style='color:#61afef'>clear</span>(); <span style='color:#6a9955'>// Efface l'écran</span><br> lcd.<span style='color:#61afef'>setRGB</span>(<span style='color:#d19a66'>0</span>, <span style='color:#d19a66'>100</span>, <span style='color:#d19a66'>255</span>); <span style='color:#6a9955'>// Couleur bleu</span><br> lcd.<span style='color:#61afef'>setCursor</span>(<span style='color:#d19a66'>0</span>, <span style='color:#d19a66'>0</span>); <span style='color:#6a9955'>// Ligne 1</span><br> lcd.<span style='color:#61afef'>print</span>(<span style='color:#98c379'>" Pret - Badge "</span>); <span style='color:#6a9955'>// Message principal</span><br> lcd.<span style='color:#61afef'>setCursor</span>(<span style='color:#d19a66'>0</span>, <span style='color:#d19a66'>1</span>); <span style='color:#6a9955'>// Ligne 2</span><br> lcd.<span style='color:#61afef'>print</span>(<span style='color:#98c379'>" Approchez svp "</span>); <span style='color:#6a9955'>// Instruction utilisateur</span><br>}
91<br>92<br>93<br>94<br>95<br>96<br>97<br>98<br>99<br>100<br>101<br>102<br>103<br>104<br>105<br>106<br>107<br>108<br>109<br>110<br>111<br>112<br>113<br>114<br>115<br>116<br>117<br>118<br>119<br>120<br>121<br>122<br>123<br>124<br>125<br>126<br>127<br>128<br>129<br>130
<span style='color:#e06c75'>void</span> <span style='color:#61afef'>afficherAutorise</span>() { <span style='color:#6a9955'>// Accès autorisé</span><br> lcd.<span style='color:#61afef'>clear</span>(); <span style='color:#6a9955'>// Efface l'écran</span><br> lcd.<span style='color:#61afef'>setRGB</span>(<span style='color:#d19a66'>0</span>, <span style='color:#d19a66'>255</span>, <span style='color:#d19a66'>0</span>); <span style='color:#6a9955'>// Couleur verte</span><br> lcd.<span style='color:#61afef'>setCursor</span>(<span style='color:#d19a66'>0</span>, <span style='color:#d19a66'>0</span>); <span style='color:#6a9955'>// Ligne 1</span><br> lcd.<span style='color:#61afef'>print</span>(<span style='color:#98c379'>" ACCES AUTORIS "</span>); <span style='color:#6a9955'>// Message succès</span><br> lcd.<span style='color:#61afef'>setCursor</span>(<span style='color:#d19a66'>0</span>, <span style='color:#d19a66'>1</span>); <span style='color:#6a9955'>// Ligne 2</span><br> lcd.<span style='color:#61afef'>print</span>(<span style='color:#98c379'>" Bienvenue ! "</span>); <span style='color:#6a9955'>// Message accueil</span><br><br> <span style='color:#61afef'>delay</span>(<span style='color:#d19a66'>1500</span>); <span style='color:#6a9955'>// Pause pour lecture</span><br><br> <span style='color:#61afef'>afficherPret</span>(); <span style='color:#6a9955'>// Retour écran d'attente</span><br>}<br><br><span style='color:#e06c75'>void</span> <span style='color:#61afef'>afficherRefuse</span>() { <span style='color:#6a9955'>// Accès refusé</span><br> lcd.<span style='color:#61afef'>clear</span>(); <span style='color:#6a9955'>// Efface l'écran</span><br> lcd.<span style='color:#61afef'>setRGB</span>(<span style='color:#d19a66'>255</span>, <span style='color:#d19a66'>0</span>, <span style='color:#d19a66'>0</span>); <span style='color:#6a9955'>// Couleur rouge</span><br> lcd.<span style='color:#61afef'>setCursor</span>(<span style='color:#d19a66'>0</span>, <span style='color:#d19a66'>0</span>); <span style='color:#6a9955'>// Ligne 1</span><br> lcd.<span style='color:#61afef'>print</span>(<span style='color:#98c379'>" ACCES REFUSE "</span>); <span style='color:#6a9955'>// Message refus</span><br> lcd.<span style='color:#61afef'>setCursor</span>(<span style='color:#d19a66'>0</span>, <span style='color:#d19a66'>1</span>); <span style='color:#6a9955'>// Ligne 2</span><br> lcd.<span style='color:#61afef'>print</span>(<span style='color:#98c379'>" Badge inconnu "</span>); <span style='color:#6a9955'>// Explication</span><br><br> <span style='color:#61afef'>delay</span>(<span style='color:#d19a66'>1500</span>); <span style='color:#6a9955'>// Pause</span><br><br> <span style='color:#61afef'>afficherPret</span>(); <span style='color:#6a9955'>// Retour état initial</span><br>}
Chaîne d'information
De la lecture du badge à l'enregistrement en base de données via internet
Site WEB
Page de connexion administrateur
Interface de gestion — Historique des accès
Interface web sécurisée — Gestion et suivi des accès en temps réel
DIAGRAMME D'EXIGENCES
Analyse Fonctionnelle du Système
RÉPARTITION DES TÂCHES
Répartir le travail selon les spécialités pour optimiser l’efficacité du projet.
CONTEXTE
Dans un lycée, l’accès aux bâtiments, l’ouverture des casiers et l’identification à la cantine sont gérés par des systèmes différents. Cette organisation complique la gestion administrative et le suivi des élèves.
Le développement des technologies numériques permet aujourd’hui de centraliser ces services grâce à un système unique utilisant la technologie RFID et relié à une interface web permettant l’enregistrement et la consultation des données.
OBJECTIF
Simplifier et centraliser la gestion des accès grâce à un badge multifonctions connecté.
DIAGRAMME DE CONTEXTE
Diagramme de cas d’utilisation
- rfid
- arduino
- gestion-accès
- lycée
- grand-oral
- iot
- système-embarqué
- informatique