~~NOTOC~~
=======Commande de porte à lecteur RFID=======
Nous avons découvert les systèmes automatisés et leur programmation à travers des activités simples les années précédentes. Nous allons aujourd'hui étudier et programmer un système plus complexe.
**Compétence(s)**
* CT 4.2 Appliquer les principes élémentaires de l’algorithmique et du codage à la résolution d’un problème simple.
* CT 5.5 Modifier ou paramétrer le fonctionnement d’un objet communicant.
**J’ai acquis la(les) compétence(s) si :**
* Je suis capable de modifier un algorithme de fonctionnement initial afin de répondre à un nouveau besoin
* J'ai acquis les notions de variables, sous-programmes, temporisations/délais
{{ :serrurerfid.jpg?200|Cliquer pour agrandir}}
Dans une entreprise traitant des données sensibles, l'accès aux différents locaux se fait grâce à des badges RFID. Les portes se ferment et se verrouillent automatiquement grâce à des systèmes à ressorts. La présentation du badge adéquat au lecteur figurant sur la porte permet de déverrouiller la gâche un court instant ce qui permet d'ouvrir la porte.
=====Présentation du système=====
====Composition du système de déverrouillage====
{{ :maquette_rfid_bb.png?200|Cliquer pour agrandir}}
* Une carte [[uno|Arduino]]
* Un module RFID [[cap635|CAP635 (RC522)]] : broches RST = 9 et SDA = 10
* Un servomoteur : broche 3 fermé = 10° et ouvert = 150°
* Une LED rouge avec sa résistance de limitation : broche 4 qui indique "Porte fermé"
* Une LED verte avec sa résistance de limitation : broche 5 qui indique "Porte ouverte"
====Fonctionnement du programme====
===Initialisation===
Au démarrage :
* la LED rouge est allumée, la LED verte est éteinte et le servomoteur est en position fermeture.
* le n° de badge autorisé est noté dans une variable
===Boucle principale===
Le programme répète la séquence suivante :
* Si l'on présente un badge et si son code est valide
* Si le code lu est identique au code enregistré dans le programme
* la LED verte s'allume et le servomoteur pivote en position ouverture pendant 3 secondes puis repasse en position fermeture et la LED verte s'éteint.
* Si le badge présenté n'est pas le bon, la LED rouge clignote 3 fois et le servomoteur reste en position fermeture.
* Le badge est invalidé jusqu'à son retrait (pour éviter plusieurs ouvertures intempestives).
=====Activité=====
====Étude du système====
{{ :serrure2.png?300|}}
En vous aidant de toutes les ressources disponibles (liens) ou de vos recherches personnelles :
- Dessiner le schémas bloc en trouvant les fonctions techniques à réaliser et les solutions utilisées.
- Dessiner la chaîne d'information et d'énergie en y plaçant les composants utilisés.
- Proposer un système mécanique destiné à transformer le mouvement de rotation du servomoteur en mouvement de translation du pêne de verrouillage. Faire un croquis légendé et noter les explications.
====Programmation====
Grâce à la maquette et aux trois tag fournis avec, réalisez un programme qui déclenche l'ouverture dans les conditions précisées plus haut.
Vous utiliserez [[https://ide.mblock.cc|mBloc]] et y chargerez le {{ :serrurerfid.zip |début de programme suivant}} (décompresser le fichier avant de l'ouvrir).
Le programme nécessite des extensions mBlock spécifiques à l'ARDUINO UNO :
===RFID de Yeni (basé sur MFRC522 RFID : Gestion de la carte RFID)===
{{:rfid_codemblock.png?350 |Cliquer pour agrandir}}
Initialisation de la carte RFID en utilisant les broches 10 et 9 pour les entrées SDA et RST
Présence carte ? (résultat Vrai ou Faux)
Code valide ? (résultat Vrai ou Faux)
Code carte (N° de carte sous forme texte)
Invalidation code jusqu'à nouvelle présentation
===Strings de Extransfer (Gestion des chaînes textes)===
{{:aau_codemblock.png?200 |Cliquer pour agrandir}}
Définir une variable texte. ex. "Bonjour" ou "12345" (en informatique, le texte "12345" est différent du nombre 12345).
Utiliser la variable texte
===Coup de pouce===
* Indiquer durant l'initialisation le N° du Tag qui permet d'ouvrir la porte dans la variable texte 1
* Lors de la lecture du N° du Tag de la carte, le mettre dans la variable texte 2
* comparer les 2 variable pour définir l'action