Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Système de contrôle d'accès intelligent avec déverrouillage par reconnaissance faciale

Composants et fournitures

Composant Quantité
Module WiFi Bolt IoT 1
Arduino UNO 1
Buzzer 1
Plaque d'essai grande taille 1
Boutons poussoirs 12 mm 2
LED rouge 5 mm 1
LED verte 5 mm 1
Résistance 10 kΩ 2
Résistance 330 Ω 2
Fils de liaison 1 jeu

Outils

Applications et services

À propos du projet

Projet réalisé dans le cadre du défi Innovate et de la formation IoT d'Internshala. Objectif : ajouter une sécurité biométrique à une porte/placard en utilisant Arduino, Bolt IoT et la reconnaissance faciale via Face++.

Une application Windows Forms (C#) gère :

Architecture

  1. Application PC (C#) : webcam → détection visage (AForge.NET) → comparaison Face++ → commande Bolt Cloud.
  2. Bolt WiFi Module : interface sans fil vers Arduino (DigitalMultiWrite sur D0/D3, lecture D4).
  3. Arduino UNO : pilote servomoteur (verrou), LEDs d'état, buzzer, boutons physiques (sonnette + verrouillage manuel).

Flux des événements

1. Appui sur la sonnette (bouton physique)

Bouton → D4 Bolt HIGH → Thread C# détecte → Capture webcam → Vérification Face++ → Si confiance > 80 % : Bolt D3 HIGH → Arduino déverrouille (servo 0°, LED verte, bip). Sinon : rien (porte reste verrouillée).

2. Verrouillage manuel (bouton physique ou appli)

Bolt D0 HIGH → Arduino verrouille (servo 120°, LED rouge, bip long).

Application Windows Forms (C#)

Bibliothèques : AForge.NET (webcam), Bolt IoT API .NET (client non officiel), Newtonsoft JSON.

Configuration API

private readonly string BOLT_DEVICE_ID = "BOLTXXXXXX";
private readonly string BOLT_API_KEY = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
private readonly string FPP_API_KEY = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
private readonly string FPP_API_SECRET = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";

Bolt myBolt = new Bolt(BOLT_API_KEY, BOLT_DEVICE_ID);

Verrouillage / Déverrouillage via Bolt

private async Task LockDoor() {
  var cfg = new MultiPinConfig();
  cfg.AddPinState(DigitalPins.D0, DigitalStates.High); // Lock
  cfg.AddPinState(DigitalPins.D3, DigitalStates.Low);  // Unlock
  await myBolt.DigitalMultiWrite(cfg);
  cfg = new MultiPinConfig();
  cfg.AddPinState(DigitalPins.D0, DigitalStates.Low);
  cfg.AddPinState(DigitalPins.D3, DigitalStates.Low);
  await myBolt.DigitalMultiWrite(cfg);
}

private async Task UnlockDoor() {
  var cfg = new MultiPinConfig();
  cfg.AddPinState(DigitalPins.D0, DigitalStates.Low);
  cfg.AddPinState(DigitalPins.D3, DigitalStates.High);
  await myBolt.DigitalMultiWrite(cfg);
  cfg = new MultiPinConfig();
  cfg.AddPinState(DigitalPins.D0, DigitalStates.Low);
  cfg.AddPinState(DigitalPins.D3, DigitalStates.Low);
  await myBolt.DigitalMultiWrite(cfg);
}

Ajout / suppression visages de confiance


// Ajout (après détection visage via Face++ Detect)
ImageDataList.Add(ImageToBase64((Image)PreviewBox.Image.Clone()));
NameList.Add(FaceNameTextBox.Text.Trim());
Properties.Settings.Default.Base64ImageData = ImageDataList;
Properties.Settings.Default.FaceNames = NameList;
Properties.Settings.Default.Save();

// Suppression
NameList.RemoveAt(index); ImageDataList.RemoveAt(index);
Properties.Settings.Default.FaceNames = NameList;
Properties.Settings.Default.Base64ImageData = ImageDataList;
Properties.Settings.Default.Save();

Vérification faciale (Face++ Compare)


WebClient client = new WebClient();
byte[] response = client.UploadValues("https://api-us.faceplusplus.com/facepp/v3/compare",
  new NameValueCollection() {
    { "api_key", FPP_API_KEY }, { "api_secret", FPP_API_SECRET },
    { "image_base64_1", face1Base64 }, { "image_base64_2", face2Base64 }
  });
string confidence = JObject.Parse(Encoding.UTF8.GetString(response))["confidence"].ToString();
// Si confidence > 80 → UnlockDoor()

Thread écoute sonnette


while (ListenForBell) {
  Response r = await myBolt.DigitalRead(DigitalPins.D4);
  if (r.Value == "1") { RingBell_Click(null, null); Thread.Sleep(2000); }
  Thread.Sleep(2000); // Éviter quota API
}

Code Arduino (BoltDoorLock.ino)


#include <Servo.h>
#define ServoPin 4
#define LockSignalPin 2      // D0 Bolt → verrouiller
#define UnLockSignalPin 3    // D3 Bolt → déverrouiller
#define BellButtonPin 5      // Bouton sonnette physique
#define LockButtonPin 8      // Bouton verrouillage manuel
#define RingBellSignalPin 6  // D4 Bolt ← signal sonnette
#define BuzzerPin 7
#define GreenLedPin 9
#define RedLedPin 10

Servo myServo;

void setup() {
  pinMode(LockSignalPin, INPUT);
  pinMode(UnLockSignalPin, INPUT);
  pinMode(BellButtonPin, INPUT);
  pinMode(LockButtonPin, INPUT);
  pinMode(BuzzerPin, OUTPUT);
  pinMode(RedLedPin, OUTPUT);
  pinMode(GreenLedPin, OUTPUT);
  pinMode(RingBellSignalPin, OUTPUT);
  digitalWrite(RedLedPin, LOW);
  digitalWrite(GreenLedPin, LOW);
  digitalWrite(RingBellSignalPin, LOW);
  myServo.attach(ServoPin);
  Serial.begin(9600);
}

void loop() {
  int lock = digitalRead(LockSignalPin);
  int unlock = digitalRead(UnLockSignalPin);
  
  if (lock == HIGH) { // Verrouillage commande Bolt
    myServo.write(120);
    digitalWrite(GreenLedPin, LOW); digitalWrite(RedLedPin, HIGH);
    digitalWrite(BuzzerPin, HIGH); delay(1000); digitalWrite(BuzzerPin, LOW); delay(1000);
  }
  else if (unlock == HIGH) { // Déverrouillage commande Bolt
    myServo.write(0);
    digitalWrite(GreenLedPin, HIGH); digitalWrite(RedLedPin, LOW);
    delay(2000);
  }
  
  // Sonnette physique
  if (digitalRead(BellButtonPin) == HIGH) {
    digitalWrite(RingBellSignalPin, HIGH); // Signale au Bolt
    // Bip sonnette
    digitalWrite(BuzzerPin, HIGH); delay(100); digitalWrite(BuzzerPin, LOW); delay(20);
    digitalWrite(BuzzerPin, HIGH); delay(200); digitalWrite(BuzzerPin, LOW); delay(100);
    digitalWrite(BuzzerPin, HIGH); delay(200); digitalWrite(BuzzerPin, LOW); delay(1500);
    digitalWrite(RingBellSignalPin, LOW);
  }
  
  // Verrouillage manuel local
  if (digitalRead(LockButtonPin) == HIGH) {
    myServo.write(120);
    digitalWrite(GreenLedPin, LOW); digitalWrite(RedLedPin, HIGH);
    digitalWrite(BuzzerPin, HIGH); delay(1000); digitalWrite(BuzzerPin, LOW);
  }
}

Mécanisme de verrouillage (bricolage)

Utilisation d'un goulot de bouteille (fixé sur l'axe du servo) + bouchon (fixé sur la gâche de la porte) reliés par un fil nylon. Rotation du servo → traction/relâchement du fil → verrouillage/déverrouillage. Adaptable à toute gâche.

Système de contrôle d accès intelligent avec déverrouillage par reconnaissance faciale

Schéma Fritzing

Système de contrôle d accès intelligent avec déverrouillage par reconnaissance faciale

Ressources

Processus de fabrication

  1. Construire un contrôleur domotique 433 MHz avec Sensorflare et Raspberry Pi
  2. Construire une porte à verrouillage automatique intelligente via la proximité Bluetooth de votre smartphone
  3. Suivi de visage Pan/Tilt temps réel sur Raspberry Pi – Guide pratique
  4. Barman intelligent : Construisez votre propre station de cocktails alimentée par Raspberry Pi
  5. Optimiser le serrage des boulons avec les outils de couple – stratégies éprouvées pour un préchargement fiable
  6. Maximiser le ROI de vos investissements IoT : guide pratique
  7. Sécurisez vos appareils intelligents : meilleures pratiques pour la sécurité IoT
  8. Achats intelligents : fusionner l'IA et l'expertise humaine
  9. Serrure connectée WiFi avec Arduino et ESP8266 – Déverrouillage par smartphone