1. Introduction

Une belle plume attire les convoitises. Or, il n'y a rien de pire (à par peut être la chasse aux bébés phoques) que de se faire "emprunter" sa plume sans être mis au courant. Il serait ainsi fort satisfaisant de disposer d'un système permettant d'empêcher les inopportuns d'utiliser une plume. Voilà les raisons qui m'ont poussé à imaginer un dispositif, basé sur la reconnaissance d'empreintes digitales, qui ne s'ouvre que si une personne auparavant enregistrée identifie ses empreintes. Ainsi, vous pourrez décider qui peut utiliser votre plume, et me plus subir le dérangement de devoir la surveiller pour éviter les "emprunts".

1.1 But

Mon but pour ce projet est de réaliser un prototype fonctionnel qui permette de vérifier des empreintes digitales et de déverrouiller le boîtier en cas de reconnaissance des empreintes. Je vais me baser sur la plate-forme Arduino, grâce à laquelle je pourrais commander un capteur d'empreintes digitale et un servo moteur pour le système de fermeture.Il serait également pratique que le programme puisse enregistrer de nouvelles empreintes directement depuis l'arduino, pour que l'on puisse prêter le P.M.P.M. à quelqu'un de confiance. Le programme devra ainsi supporter deux fonctions: Ouvrir et fermer une boîte après la reconnaissance des empreintes, et enregistrer des empreintes supplémentaires.

2. Matériel et méthodes

2.1 Liste du matériel

  • Deux Arduino UNO
  • Un capteur d'empreintes digitales
  • Des câbles
  • Un bouton
  • Un servomoteur
  • Une barre, du fil de fer et deux petits anneaux pour le système d'ouverture/fermeture
  • Une alimentation externe pour le servomoteur
  • Un boîtier pour abriter la plume ou l'objet à protéger
  • Perceuse, scie, lime, tournevis et autres outils nécessaires pour adapter la boîte au projet
  • Une led rouge, et une led dont on peut modifier la couleur

2.2 Fonctionnement

Mon projet se base sur la reconnaissance d'empreinte digitale. Le capteur d'empreinte est donc au centre du projet. Le programme chargé sur l'Arduino commande au capteur de vérifier en permanence les empreintes (5 fois par seconde selon mon code). SI une empreinte enregistrée est détectée, une commande part pour le servo moteur pour qu'il ferme/ouvre le système. Il faut appuyer sur le bouton pour passer en mode enregistrement. Pour mon projet de protège plume, je me suis dit qu'il était raisonnable que je garde le contrôle sur le système, mes deux pouces sont donc enregistrés sans que l'on puisse les changer depuis l'Arduino. On peut en revanche enregistrer deux doigts supplémentaires, en appuyant sur le bouton. Répéter l'opération écrase les deux empreintes supplémentaires déjà enregistrées.

2.3 Le capteur d'empreintes

Mon choix s'est porté sur le Fingerprint Sensor d'Adafruit pour mon projet. Il permet d'enregistrer un grand nombre d'empreintes et n'est pas trop compliqué à utiliser.
IMAGE CAPTEUR Figure 1: Le capteur d'empreinte digitale inséré dans le boîtier

2.4 Le servo moteur

J'ai utilisé un petit servo moteur pour le système de fermeture du boîtier. Un mouvement de rotation est pratique pour mon système de verrouillage, et ce servo est généralement précis.
PHOTO SERVO Figure 2: Le servo moteur utilisé

2.5 Le système de verrouillage

Le concept est très simple. Le servo moteur fait monter et descendre une petite barre. Quand elle est en position haute (et donc fermé), la barre vient se glisser dans un petit trou du couvercle, et empêche ainsi qu'on puisse le faire coulisser. Quand la barre est en position basse (et donc ouvert), elle n'est plus fichée dans le couvercle, on peut ainsi le retirer.
IMAGE SCHEMA ouvert Figure 3: Schéma du système de verrouillage en position ouvert

IMAGE SCHEMA fermé Figure 4: Schéma du système de verrouillage en position fermé

PHOTO Figure 5: Le système de verrouillage sur le P.M.P.M.

2.6 Le boîtier

J'ai récupéré une boîte qui était prévue pour contenir une bouteille de vin. Le couvercle coulissant permet un système de verrouillage relativement simple (c.f. partie 2.6). Juste de la bonne taille pour abriter les deux Arduinos, il m'a fallu toutefois percé des trous pour les câbles d'alimentations des Arduinos et pour le capteur d'empreinte.
Le boîtier Figure 6: Le boîtier du P.M.P.M.

2.7 La deuxième Arduino

Mon projet ne nécessiterait normalement qu'une seule Arduino UNO. Toutefois, le capteur d'empreinte et le servo moteur ne peuvent pas fonctionner sur la même alimentation 5 Volts, car il utilisent trop de courant et les deux commencent à ne plus fonctionner normalement. Fabriquer une alimentation externe à base de piles pour le servo s'étant avéré plus compliqué que prévu, j'ai fait le choix d'une deuxième Arduino, qui permet d'alimenter le servo de manière fiable. Arduino bis Figure 7: La seconde Arduino, servant d'alimentation au servo

2.8 Schéma du code

Le code est en langage Arduino, une adaptation du C. DSC05093.JPG Figure 8: Schéma du fonctionnement du code

2.9 Code détaillé

Voici quelques points clés du code:

2.9.1 Les deux fonctions principales

Le code est basé sur deux fonction principales. La première, getFingerprint|Dez, supporte la reconnaissance d'empreinte et le verrouillage/déverrouillage du couvercle. La seconde, getFingerprintEnroll, permet d'enregistrer deux empreintes supplémentaires qui seront désormais acceptées par la fonction de reconnaissance. LE choix de deux ID supplémentaires me paraissait raisonnable pour mon projet, mais il serait très facile de rajouter plus d'empreintes disponibles, en mettant un incrément sur la variable ID, et dont la seule limite serait la taille de la mémoire du capteur.

2.9.2 La variable Fonction

On peut faire changer la variable Fonction par le biais de l'interrupt. Appuyer sur le bouton a pour effet de passer en mode enregistrement d'empreintes.

 if (Fonction==0){
   getFingerprintIDez();
   delay(200);            //Défini le rythme auquel le capteur va vérifier les empreintes
    }
 
 
  else {Serial.println(          doigt);
   uint8_t id = doigt;
   digitalWrite(LEDRED, HIGH);
   digitalWrite(LEDBLUE, HIGH);
   Serial.print("Enregistre ID #");
   Serial.println(id);
 
   while (!  getFingerprintEnroll(id) );
     }
 }

Cette partie de code, située dans le void loop, définit si le programme est en mode "vérification d'empreinte" ou "enregistrement"

2.9.3 La variable Statut et l'ouverture/fermeture

La variable Statut correspond à l'état ouvert/fermé du système. Le servo moteur va donc descendre ou monter la barre en fonction du Statut.

if(Statut==0){ myservo.write(0);  //Servomoteur, ouvrir la boite
              }
 else if(Statut==1){myservo.write(50);    //Servomoteur, fermer la boite
                    }
  if(Statut==0){Statut=1;}      //Fait varier l'état ouvert/fermé
    else{Statut=0;}

3. Résultats

Voici une petite vidéo de présentation du P.M.P.Voici le prototype final du P.M.P.M.:

Le système fonctionne globalement. La première partie du code, contrôlant le verrouillage du couvercle, fonctionne bien. Il y a de temps en temps quelques arrêts, pendant lesquels le programme ne fait rien et ne réagit pas, mais cela ne dure pas plus que quelques secondes, et n'est donc pas trop gênant. Bien qu'il ne soit pas à toute épreuve, le système de verrouillage est relativement solide et est efficace.
En revanche, la deuxième partie du code est bien moins satisfaisante. Elle ne fonctionne pas toujours normalement, il faut parfois s'y reprendre à plusieurs reprises pour arriver à enregistrer une nouvelle empreinte. Mais le plus gênant reste le fait que la commande digitalWrite ne fonctionne pas au sein de la fonction d'enregistrement. Cela m'est difficilement compréhensible, car les actions comme les Serial.print s'effectuent parfaitement. Cela a pour effet de ne pas pouvoir allumer de LED pendant l'enregistrement des empreintes, ce qui rend le système difficilement utilisable, surtout que cette partie du code n'est pas très stable et qu'il faut parfois recommencer. Des clignotements de couleurs différentes pour indiquer poser le doigt, retirer le doigt, reposer le même doigt ou encore les empreintes correspondent aurait été fort appréciable. L'utilisation du port série, qui permet de donner ces informations par le Serial.print peut de pallier à ce défaut. Il aurait été toutefois préférable d'arriver à faire s'allumer les LEDs pour une meilleure interaction avec l'utilisateur.

4. Discussion

Le P.M.P.M n'est pas tout à fait aboutit, il reste à l'état de prototype. Plusieurs points seraient à améliorer, voir à changer, pour pouvoir imaginer une utilisation concrète.
La première chose a améliorer serait le code en lui-même. Il comporte plusieurs problèmes, dont le plus gênant est l'instabilité de la fonction getFingerprintEnroll. Marchant parfois parfaitement, il arrive qu'une empreinte ne s'enregistre pas alors que les deux essais étaient qualifiés de concordants. L'absence de LEDs indicatrices dans cette partie du programme pose également un problème de compréhension pour l'utilisateur. Passer par le Serial n'est pas une solution pratique. Un autre problème consiste en l'alimentation, car le P.M.P.M a besoin de deux câbles usb pour fonctionner. Cela veut dire qu'un ordinateur est nécessaire pour qu'il soit utilisable, mais ce n'est pas pratique d'être obligé de toujours le brancher à un ordinateur. Ce problème pourrait être résolu par une alimentation indépendante comme des piles ou des batteries, ou alors une alimentation plus classique, comme une prise électrique normale. Ainsi, un ordinateur ne serait plus nécessaire à son fonctionnement, ce qui simplifierait son utilisation.
Enfin, le dernier point à améliorer serait ses dimensions. Il faut en effet une boîte de presque 40 cm de long pour abriter une plume, ce n'est pas très pratique. Il serait tout à fait possible d'en faire une version plus petite, et avec une alimentation indépendante. Ainsi, le P.M.P.M pourrait réellement être utile, que cela soit pour garder des documents confidentiels ou des objets de valeurs. Dans l'état actuel, son utilisation se rapproche plus d'un coffre fort (à la sécurité toutefois douteuse), et donc destiné à un endroit fixe et pour des objets plus grands et plus lourds qu'une plume.

5. Conclusion

Le Protège Ma Plume Marcel fonctionne, et c'est le plus important. Il reste quelques problèmes dans le code et plusieurs points seraient à améliorer. Ce n'est qu'un prototype, mais c'est déjà un résultat satisfaisant. En le détournant de son usage premier de protège plume, il pourrait même s'avérer un concept intéressant d'un point de vue commercial. Une fois le code corrigé, et le système miniaturisé et alimenté de manière indépendante, il pourrait être utile pour abriter les petites affaires personnelles auxquelles on ne veut pas que n'importe qui ait accès.

6. Annexes