Smartes Türschloss mit Gesichtserkennung per Face++ & Bolt IoT
Komponenten und Materialien
| Bolt IoT WiFi-Modul | × | 1 |
| Arduino UNO | × | 1 |
| Summer (Buzzer) | × | 1 |
| Steckbrett (Full-Size) | × | 1 |
| Taster 12 mm (SparkFun) | × | 2 |
| 5-mm-LED rot | × | 1 |
| 5-mm-LED grün | × | 1 |
| Widerstand 10 kΩ | × | 2 |
| Widerstand 330 Ω | × | 2 |
| Jumper-Kabel | × | 1 Set |
Benötigte Werkzeuge
- Heißklebepistole
Apps & Online-Dienste
- Bolt IoT Cloud
- Microsoft Windows 10
- Microsoft Visual Studio (C# WinForms)
- Arduino IDE
- Face++ API (FacePlusPlus)
Projektbeschreibung
Ein IoT-Türschloss, das per Gesichtserkennung entriegelt wird. Eine Windows-Forms-Anwendung (C#) auf dem PC erfasst Webcam-Bilder, verifiziert Gesichter via Face++ API und steuert über Bolt Cloud API das Bolt WiFi-Modul, das wiederum einen Arduino ansteuert, der einen Servo zum Ver-/Entriegeln bewegt.
Schritt 1: Software (Windows Forms, C#)
Verwendete Bibliotheken:
- AForge.NET – Webcam-Bildaufnahme
- Bolt IoT API .NET (inoffiziell, GitHub:
diozz/Bolt-IoT-API-.NET) – Kommunikation mit Bolt Cloud - Newtonsoft.Json – JSON-Parsing
Voraussetzungen
- Bolt Cloud Account, Gerät verknüpfen → Device ID & API Key notieren.
- Face++ Account, API Key & Secret generieren.
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);
Kernfunktionen
- Lock/Unlock Door:
DigitalMultiWriteauf Bolt-Pins D0 (Lock) / D3 (Unlock). Kurz HIGH-Puls, dann beide LOW. - Trusted Faces verwalten: Webcam-Bild → Base64 → Face++ Detect API → bei Erkennung Base64-String + Name lokal speichern (Settings). Entfernen per Klick.
- Face Verification: Face++ Compare API vergleicht Live-Bild mit allen gespeicherten Faces.
confidence > 80%→ Unlock. - Bell Listening Thread: Pollt alle 2 s Bolt-Pin D4 (Taster „Klingel“). Bei HIGH → Face-Capture & Verification.
Schritt 2: Visual Studio Projekt
Projekt herunterladen, Facebolt Doorlock.sln öffnen, API-Credentials in Form1.cs eintragen, starten. UI erlaubt Kamerwahl, Live-Feed, Face-Enrollment, Monitoring-Start.
Schritt 3: Schaltung & Arduino-Code
Funktionen der Schaltung:
- Rote/Grüne LED: Türstatus (zu/auf)
- Taster 1 (Bell, Pin 5): Klingel → Signal an Bolt (D6 HIGH) → PC prüft Gesicht
- Taster 2 (Lock, Pin 8): Direkter Lock-Befehl an Servo
- Summer: Bestätigungstöne (Lock, Unlock, Klingel)
- Servo (Pin 4): 0° = offen, 120° = zu
- Bolt-Pins: D2=Lock-Signal, D3=Unlock-Signal, D4=Bell-Input, D6=Bell-Output
Arduino Sketch (BoltDoorLock.ino):
#include <Servo.h>
#define ServoPin 4
#define LockSignalPin 2
#define UnLockSignalPin 3
#define BellButtonPin 5
#define LockButtonPin 8
#define RingBellSignalPin 6
#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) { // Lock via Bolt
myServo.write(120);
digitalWrite(GreenLedPin, LOW);
digitalWrite(RedLedPin, HIGH);
beep(1000); delay(1000); beep(1000);
}
else if (unlock == HIGH) { // Unlock via Bolt
myServo.write(0);
digitalWrite(GreenLedPin, HIGH);
digitalWrite(RedLedPin, LOW);
delay(2000);
}
if (digitalRead(BellButtonPin) == HIGH) { // Klingel gedrückt
digitalWrite(RingBellSignalPin, HIGH); // Signal an Bolt
dingdong(); // Klingelton
delay(1500);
digitalWrite(RingBellSignalPin, LOW);
}
if (digitalRead(LockButtonPin) == HIGH) { // Lock-Taster
myServo.write(120);
digitalWrite(GreenLedPin, LOW);
digitalWrite(RedLedPin, HIGH);
beep(1000);
}
}
void beep(int ms) { digitalWrite(BuzzerPin, HIGH); delay(ms); digitalWrite(BuzzerPin, LOW); }
void dingdong() { beep(100); delay(20); beep(200); delay(100); beep(100); delay(20); beep(200); }
Ereignisflüsse
- Klingel: Taster → Arduino D5 HIGH → Bolt D6 HIGH → PC-Thread liest D4 → Face++ Compare → bei Match → Bolt D3 HIGH → Arduino Unlock.
- Lock-Taster: Direkt am Arduino → Servo → Lock, LED rot, Summer.
- Beides auch per PC-App manuell auslösbar.
Schritt 4: Mechanik (Schuhregal-Demo)
Servo-Kupplung aus Flaschenhals + -deckel + Nylonfaden. Servo per Heißkleber fixiert. Funktioniert zuverlässig für leichte Türen/Schubladen.
Demo & Fazit
Video-Demo zeigt kompletten Ablauf. Projekt demonstriert IoT-Vernetzung: PC (Face++) ↔ Bolt Cloud ↔ Arduino ↔ Mechanik. Basis für Erweiterungen (Smartphone-App, Mehrbenutzer, Logging).
Code & Dateien
- BoltDoorLock.ino (Arduino)
- Facebolt Doorlock.zip (Visual Studio Projekt, C#)
- Bolt IoT Cloud API Client Library: GitHub
Schaltplan (Fritzing)
facebolt_doorlock_2RfOtkPW2i.fzzHerstellungsprozess
- 433 MHz Smart-Home-Controller mit Sensorflare und Raspberry Pi selbst bauen
- Smartes Auto-Lock-Türschloss per Smartphone-Bluetooth-Nähe bauen
- Echtzeit Pan/Tilt Gesichtstracking auf Raspberry Pi – Praktischer Leitfaden
- Smart Bartender: Eigenen Raspberry Pi Cocktail-Roboter bauen
- Schrauben-Anzug optimieren mit Drehmomentwerkzeugen – Bewährte Strategien für zuverlässige Vorspannung
- ROI bei IoT-Investitionen maximieren: Ein praktischer Leitfaden
- Smarte Geräte sicher machen: Best Practices für IoT-Sicherheit
- Intelligente Beschaffung: KI mit menschlicher Expertise verbinden
- WLAN-Türschloss mit Arduino & ESP8266 – Per Smartphone entsperren
- GE Digital treibt Fertigungstransformation mit Smart MES voran