Projet ScanShield : Contrôle d'Accès Scolaire RFID
Découvrez ScanShield, un système intelligent de contrôle d'accès scolaire utilisant RFID et Arduino pour sécuriser les entrées des lycées.
Projet ScanShield
SCANSHIELD
TSTI2D_4
1/14
CONTEXTE
Permettre d'aider le personnel éducatif à gérer des entrées sécurisés et à faciliter l'entrée pour les élèves avec un système d'oubli de code.
2/14
SOMMAIRE
RÉPARTITION DES TÂCHES
ASPECT ENVIRONNEMENTAL
Planning
Use Case
Diagramme Requirements
Chaîne d'information
Photo
Code
Questions du GO
3/14
RÉPARTITION
DES TÂCHES
Wassim :
Identifier les élèves rentrant et scanner leur badges respectifs.
Oualid :
Faire un digicode permettant à l'élève ayant oublié son badge d'entrer son code à la place
4/14
ASPECT<br/>ENVIRONNEMENTAL
Consomme peu d'énergie il est donc à considérer énergétiquement et facile à entretenir.
Cela facilite la charge de travail lié au personnel éducatif et facilite également l'entrée au lycée.
L'achat d'un scanner n'est pas coûteuse, il apportera des changements qualitatifs au sein du lycée tout en ayant une carte réutilisable sur les 3 ans de scolarité.
5/14
PLANNING
6/14
USE CASE
7/14
ScanShield
Eleve
Scanner
Digicode
Identifier les élèves
Identifier si oublie carte
Autoriser ou refuser l'accès
DIAGRAMME REQUIREMENTS
8/14
1.0
Le système devra scanner chaque élève
2.0
Permettre à l'élève d'accéder au lycée si oubli de carte
1.1
Identifier chaque carte
1.2
Autoriser ou refuser l'accès au lycée
3.0
Doit être efficace énergétiquement et capable de tenir longtemps
4.0
Faire gagner du temps au personnel tout en améliorant la sécurité
CHAÎNE D'INFORMATION
Grandeurs physiques :
Acquérir :
Digicode<br>Lecteur RFID
Signal électrique
Traiter :
Arduino
Signal numérique
Communiquer :
Afficheur LCD
Envoie vers chaîne d'énergie
9/14
PHOTO
10/14
CODE
11/14
#include <SPI.h> #include <MFRC522.h> #include <Keypad.h> #include <Wire.h> #include "rgb_lcd.h" MFRC522 mfrc522(10, 9); rgb_lcd lcd; const byte ROWS = 4; const byte COLS = 4; char keys[ROWS][COLS] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} }; byte rowPins[ROWS] = {9, 8, 7, 6}; byte colPins[COLS] = {5, 4, 3, 2}; Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS); byte uids[][4] = { {0xDE, 0xAD, 0xBE, 0xEF}, {0xCA, 0xFE, 0xBA, 0xBE} }; String codes[] = { "1234", "5678" }; int ids[] = {1, 2}; bool attenteID = true; bool attCode = false; String currentCode = ""; int badgeIndex = -1; void setup() { SPI.begin(); mfrc522.PCD_Init(); lcd.begin(16, 2); lcd.setRGB(255, 255, 255); lcd.print("Init Shield..."); delay(1000); lcd.clear(); lcd.print("Presentez badge"); }
void loop() { char key = keypad.getKey(); if (key == '#') { attenteID = true; attCode = false; currentCode = ""; badgeIndex = -1; lcd.clear(); lcd.setRGB(255, 255, 255); lcd.print("Presentez badge"); return; } if (attenteID) { if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial()) { gestionSaisie(); // Update UI for (int i = 0; i < 2; i++) { if (checkUID(mfrc522.uid.uidByte, uids[i])) { badgeIndex = i; break; } } if (badgeIndex != -1) { attenteID = false; attCode = true; lcd.clear(); lcd.setRGB(0, 0, 255); // Blue lcd.print("Code PIN:"); } } } if (attCode && key) { currentCode += key; lcd.setCursor(0, 1); lcd.print(currentCode); if (currentCode.length() == 4) { if (currentCode == codes[badgeIndex]) { lcd.clear(); lcd.setRGB(0, 255, 0); // Green lcd.print("Acces autorise"); } else { lcd.clear(); lcd.setRGB(255, 0, 0); // Red lcd.print("Code incorrect"); } delay(3000); setup(); // System reset } } }
CODE (FIN)
12/14
delay(2000); resetSystem(); return; } if (!mfrc522.PICC_IsNewCardPresent() || !mfrc522.PICC_ReadCardSerial()) return; lcd.clear(); bool ok = false; for(byte i=0; i<NUM_BADGES; i++) { if(compareUID(mfrc522.uid.uidByte, badges[i])) { ok = true; break; } } if (ok) { lcd.print("Acces autorise"); lcd.setRGB(0, 255, 0); } else { lcd.print("Carte refusee"); lcd.setRGB(255, 0, 0); } delay(2000); resetAffichage(); } void gestionSaisie(char key, String &s, bool masque) { // Fonction de gestion des saisies au clavier matriciel
attenteID = 0; attenteCode = 0; idSaisi = codeSaisi = codeCorrect = ""; badgeIndex = -1; resetAffichage(); } } void resetAffichage() { lcd.clear(); lcd.setRGB(0, 0, 255); lcd.print("Passer carte"); } boolean compareUID(byte *a, byte *b) { for(byte i=0; i<4; i++) { if(a[i] != b[i]) return 0; } return 1; } void resetSystem() { // Reinitialisation du microcontroleur }
QUESTIONS DU GO
De quelle manière un système automatisé peut-il être fiable avec des capteurs imparfaits ?
Capteur jamais parfaits, plusieurs sources d'informations, Vérification et refus si doute.
A quel point peut-on simplifier un système de sécurité sans le rendre vulnérable ?
Simplifier améliore la fiabilité, Ne pas trop simplifier, limiter le système et vérifier.
13/14
MERCI DE
VOTRE ÉCOUTE
14/14
- scanshield
- arduino
- rfid
- contrôle-d-accès
- tsti2d
- sécurité-scolaire
- digicode