J’ai réalisé un petit coffre à ouverture par empreinte digitale dans un meuble ikea, pour me permettre de stoker les télécommandes, les manettes de console et les téléphones, afin de ne pas les laisser tous le temps à disposition de mes enfants. Je vous détail se montage et les composants utilisés.

Les composants

Je vous liste les composants que j’ai utilisé avec un lien pour les commander.

Le schéma du montage

Voici le schéma de montage.

Notez bien que j’ai soudé l’alimentation électrique (fil rouge) de la serrure solénoïde sur l’alimentation de l’arduino afin d’avoir du 9 Volts.

Ajouter la bibliothèque fingerprint

Afin de pouvoir gérer le lecteur d’empreinte digital avec l’arduino, il est nécessaire d’ajouter une bibliothèque à l’IDE arduino, de la manière suivante :

Menu Croquis > Inclure une bibliothèque > Gérer les bibliothèques

Saisissez Fingerprint dans le champ de recherche puis cliquez sur le bouton Installer pour la bibliothèque Adafruit Fingerprint Sensor Library

Enregistrer les empreintes

Il faut comprendre qu’il faut d’abord enregistrer les empreintes dans le lecteur d’empreinte pour ensuite pouvoir l’utiliser avec notre programme que nous verrons plus loin. Pour cela, vous avez un programme d’exemple livré avec la bibliothèque :

Menu Fichier Exemples > Adafruit Fingerprint Sensor Library enroll

Vous pouvez maintenant le Téléverser sur l’arduino et suivre les indications sur le moniteur série pour enregistrer les scan d’empreintes dans le lecteurs d’empreinte.

Le programme présent sur l’arduino

Vous disposez aussi d’un exemple nommé fingerprint dans la bibliothèque du lecteur d’empreinte et c’est de ce programme dont je me suis inspiré et d’une vidéo de The Wrench.

Voici le programme en C que j’utilise :

#include <Adafruit_Fingerprint.h>
#include <SoftwareSerial.h>
#include <stdint.h>
int getFingerprintIDez();
// Déclaration pins de connexions
int pinRelay =12;
int pinFPS = 8;
// Déclaration compteur
int count = 0;
// pin #2 is IN from sensor (GREEN wire)
// pin #3 is OUT from arduino  (WHITE wire)
SoftwareSerial mySerial(2, 3);
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
void setup()  
{
  Serial.begin(9600);
  Serial.println("Test empreinte");
  
  // SET PIN AS OUTPUT
  pinMode(pinRelay, OUTPUT);
  pinMode(pinFPS, OUTPUT);
  
  //ACTIVATE THE FPS TRANSISTOR
  digitalWrite(pinFPS,HIGH);
  // set the data rate for the sensor serial port
  finger.begin(57600);
  
  if (finger.verifyPassword()) {
    Serial.println("Trouvez le capteur empreintes digitales !");
  } else {
    Serial.println("Pas de capteur empreintes digitales :(");
    while (1);
  }
  Serial.println("En attente doigt valide...");
}
void loop()
{
  getFingerprintIDez();
  delay(50); // Vitesse clignotement de la led du lecteur empreinte
  
  
  // Afficher les informations de la configuration du compteur
  Serial.print("Awake for ");
  Serial.print(count);
  Serial.println("sec");
  count++;
  delay(1000);
  
    // lire les données en série et lancer la fonction de comptage
  if (Serial.available()) {
    int serialData = Serial.read();
    if (serialData == 'Serial')
    {
      Serial.println("Serial: Pas de doigt détecté"); 
      delay(100);
      count = 0;
    }
  }
 
  // check to confirm sleep 
  if (count >= 10) {
      Serial.println("Lecteur en attente");
      delay(100);
      count = 0;
      digitalWrite(pinFPS,LOW);  
  }
  
}
uint8_t getFingerprintID() {
  uint8_t p = finger.getImage();
  switch (p) {
    case FINGERPRINT_OK:
      Serial.println("Image prise");
      break;
    case FINGERPRINT_NOFINGER:
      Serial.println("Aucun doigt détecté");
      return p;
    case FINGERPRINT_PACKETRECIEVEERR:
      Serial.println("Erreur de communication");
      return p;
    case FINGERPRINT_IMAGEFAIL:
      Serial.println("Erreur de prise image");
      return p;
    default:
      Serial.println("Erreur inconnu");
      return p;
  }
  // OK success !
  p = finger.image2Tz();
  switch (p) {
    case FINGERPRINT_OK:
      Serial.println("Image converti");
      break;
    case FINGERPRINT_IMAGEMESS:
      Serial.println("Image trop brouillonne");
      return p;
    case FINGERPRINT_PACKETRECIEVEERR:
      Serial.println("Erreur de communication");
      return p;
    case FINGERPRINT_FEATUREFAIL:
      Serial.println("Impossible de trouver les caractéristiques des empreintes digitales");
      return p;
    case FINGERPRINT_INVALIDIMAGE:
      Serial.println("Impossible de trouver les caractéristiques des empreintes digitales");
      return p;
    default:
      Serial.println("Erreu inconnu");
      return p;
  }
  
  // OK converti!
  p = finger.fingerFastSearch();
  if (p == FINGERPRINT_OK) {
    Serial.println("Correspondance trouvé !"); 
  } else if (p == FINGERPRINT_PACKETRECIEVEERR) {
    Serial.println("Erreur communication");
    return p;
  } else if (p == FINGERPRINT_NOTFOUND) {
    Serial.println("Pas de correspondance trouvé");
    return p;
  } else {
    Serial.println("Erreur inconnu");
    return p;
  }   
  
  // correspondance trouvé !
  Serial.print("Found ID #"); 
  Serial.print(finger.fingerID); 
  
  Serial.print(" with confidence of "); 
  Serial.println(finger.confidence); 
}
// retourne -1 si échoué, sinon retourne ID #
int getFingerprintIDez() {
  uint8_t p = finger.getImage();
  if (p != FINGERPRINT_OK)  return -1;
  p = finger.image2Tz();
  if (p != FINGERPRINT_OK)  return -1;
  p = finger.fingerFastSearch();
  if (p != FINGERPRINT_OK)  return -1;
  
  // correspondance trouvé !
  Serial.print("Found ID #"); 
  //SET RELAY TO HIGH TO ACTIVATE
  digitalWrite(pinRelay, HIGH);
  delay(2000);
  digitalWrite(pinRelay,LOW);
  Serial.print(finger.fingerID); 
  Serial.print(" with confidence of "); 
  Serial.println(finger.confidence);
  return finger.fingerID; 

Le résultat

J’ai fixé le lecteur d’empreinte sous le meuble Ikea avec de la colle à chaud.

Lecteur d'empreinte digitale

Je peux donc poser l’un de mes doigts sous le meuble sur le lecteur d’empreinte digitale

Lecture de mon empreinte digitale

Le verrou s’ouvre, je peux ainsi tirer la porte et l’ouvrir.

Serrure électrique à solénoïde

L’arduino est collé à l’intérieur du meuble, il faut que lui fasse un cache en impression 3D.

Arduino Uno

J’ai déporté l’alimentation à l’arrière du meuble pour le brancher de l’extérieur avec le bloc alimentation 9V.

Il est en place depuis 8 mois maintenant et n’a jamais planté une seul fois.

Les améliorations

J’ai eu plusieurs idées d’améliorations comme :

  • La possibilité d’ouverture à distance avec mon téléphone
  • La possibilité d’ouverture par mes enfants à certaines heures et jours

4 commentaires

Moha · 13 décembre 2022 à 12 h 40 min

Bonjour, j’espère que vous allez bien, je suis un débutant sur la programmation, enfaîte j’ai vu votre projet sur la serrure électrique, étant donné que ça fonctionne en 12V, préférable aussi d’utiliser un relais pour l’alimentation de haute tension, ma préoccupation maintenant est que je voudrais réaliser ce projet mais avec un module gsm aussi en plus de l’ouvrir avec l’empreinte digitale, genre ouvrir aussi la porte via un message, merci de pouvoir m’aider s’il-vous-plaît…

Kenzo · 26 avril 2022 à 12 h 35 min

Bonjour le transitor est il obligatoire ? si non comment branche t-on la serrure sur la carte arduino merci d’avance.

    Romain · 26 avril 2022 à 15 h 24 min

    Bonjour Kenzo,
    Je vous confirme que le transistor est obligatoire dans mon montage pour un fonctionnement fluide des connecteurs digitaux PWM Arduino. Je suis très loin d’être un expert en électronique mais je crois que la tension des broches PWM Arduino n’est pas suffisante pour contrôler certains éléments en 12v tel que la serrure solénoïde 12v et c’est le transistor qui permet de régler ca.
    Cordialement.

Répondre à Kenzo Annuler la réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *