Slimme Deurtoegangssysteem met Gezichtsherkenning Ontgrendeling
Onderdelen en Benodigdheden
| Bolt IoT Bolt WiFi Module | × | 1 |
| Arduino UNO | × | 1 |
| Buzzer | × | 1 |
| Solderloos Breadboard Full Size | × | 1 |
| SparkFun Drukknopschakelaar 12mm | × | 2 |
| 5mm LED: Rood | × | 1 |
| 5mm LED: Groen | × | 1 |
| Weerstand 10k ohm | × | 2 |
| Weerstand 330 ohm | × | 2 |
| Draadjes (generiek) | × | 1 |
Benodigde Tools en Machines
- Lijmpistool (generiek)
Apps en Online Services
- Bolt IoT Bolt Cloud
- Microsoft Windows 10
- Microsoft Visual Studio
- Arduino IDE
- Face++
Over dit Project
Welkom, nieuwsgierige vriend! We leven in een internet-gerevolutioneerde tijdperk waar het nu makkelijker is dan ooit om te experimenteren en te innoveren om briljante ideeën te bedenken die een positieve impact kunnen hebben op miljoenen over de hele wereld.
Ooit wilden je een beetje extra beveiliging toevoegen aan je plank, lades, kasten of deuren thuis? Als het gaat om innovatie met internet, springen er een paar platforms en tools eruit onder de duizenden die beschikbaar zijn: Arduino en Bolt IoT. In dit project gaan we een standaard plank aanpassen om een beveiligingssysteem te hebben dat ontgrendelt met Gezichtsverificatie. We bouwen een Windows Forms Applicatie in C# die geautoriseerde gezichten kan opslaan, verifiëren en ontgrendelen. Het gebruikt FacePlusPlus API voor gezichtsverificatie en Bolt IoT Cloud API voor communicatie met de Bolt WiFi Module en Arduino. We koppelen de Bolt WiFi Module aan een Arduino Uno, die een servomotor bestuurt om de deur te vergrendelen/ontgrendelen.
Opgewonden? Laten we beginnen.
Achtergrond
Ik maakte dit project als onderdeel van de Innovate Challenge en IoT Training, georganiseerd door Internshala Trainings. Hun training hielp de basis te begrijpen van het omgaan met API-services, Objectgeoriënteerd Programmeren en het meest belangrijks, het gebruik van de Bolt WiFi Module. Een samenvatting van het Capstone Project dat gedaan werd als onderdeel van deze training is hier te vinden. Veel van deze concepten bleken handig tijdens de ontwikkeling van dit project. Dus een grote dank aan het Internshala-team voor het mogelijk maken.
Stap 1: De Software Bouwen
We bouwen een Windows Forms Applicatie met Visual Studio. Deze applicatie draait op een Windows-machine en is verantwoordelijk voor het beheren van geautoriseerde gezichten, het verifiëren van een gezicht met FacePlusPlus API en het communiceren met de Bolt WiFi Module. We gebruiken C# voor de code.
Start Visual Studio en maak een nieuw Windows Forms Applicatie project. Als je compleet nieuw bent met Visual Studio, raad ik aan de basis van Windows Forms Applicatie Ontwikkeling met Visual Studio te leren. Deze en deze zijn goede bronnen om te beginnen.
In deze tutorial leg ik alleen de code uit met behulp van codefragmenten uit het project die de belangrijkste functies uitvoeren. Het zou vervelend en onnodig zijn om de hele code door te nemen omdat het grootste deel van zichzelfsprekend en goed gedocumenteerd is.
Ons Visual Studio-project maakt gebruik van 3 bibliotheken voor verschillende doeleinden:
- AForge .NET: Een populair .NET-framework voor beeldverwerking in Windows. We gebruiken het voor het vastleggen van afbeeldingen van een webcam.
- Bolt IoT API .NET: Een onofficiële clientbibliotheek die ik in C# schreef, voor communicatie met de Bolt Cloud API.
- Newtonsoft JSON: Een populair hoogpresterend JSON-framework voor .NET. Gebruikt voor het parsen van API-antwoorden in ons project.
LET OP: Voor duidelijkheid in het gebruik van verschillende methoden in de bovenstaande API's, raadpleeg hun respectievelijke documentaties hier, hier en hier.
Aan de slag
Voordat we in de code duiken, moeten we een paar dingen instellen.
1. Bolt Cloud API Inloggegevens
Als je dat nog niet gedaan hebt, ga naar cloud.boltiot.com en maak een account aan. Zodra je ingelogd bent, koppel je WiFi-module met de Bolt Cloud. Download daarvoor de Bolt IoT Setup App op je mobiele telefoon. Volg de instructies in de app om je apparaat met je account te koppelen. Dit omvat het koppelen van de Bolt met het lokale WiFi-netwerk. Eenmaal succesvol gekoppeld, zal je dashboard je apparaat tonen. Je kunt nu je Device ID en API Key uit het dashboard halen.
2. FacePlusPlus API Inloggegevens
Een andere API-service waar we op vertrouwen in dit project is FacePlusPlus API. Het is een gratis platform dat verschillende soorten beeldherkenningsservices aanbiedt. We gebruiken het voor gezichtsidentificatie. Maak een account aan en ga naar de FacePlusPlus-console. Ga naar API Key onder Apps en klik op +Get API Key. Noteer de nieuw gegenereerde API Key en API Secret.

Nu zou je het volgende gereed moeten hebben:
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";
We maken een nieuwe globale instantie van de Bolt-klasse genaamd myBolt, waarmee we alle toekomstige communicatie met de WiFi-module zullen doen:
myBolt = new Bolt(BOLT_API_KEY, BOLT_DEVICE_ID);
Dat gezegd hebbend, laten we nu zien hoe onze applicatie enkele van de kernfuncties uitvoert.
1. Deur Vergrendelen/Ontgrendelen
We hebben de schakeling zo ontworpen dat wanneer Digitale Pin 0 HIGH is, de deur vergrendeld moet worden, en wanneer Digitale Pin 3 HIGH is, de deur ontgrendeld moet worden. Dit wordt later duidelijker wanneer we de schakelingsschema's bespreken.
Voor vergrendelen gebruiken we de DigitalMultiWrite methode uit de bibliotheek om HIGH waarde naar D0 en LOW waarde naar D3 te schrijven. Dit zal de Arduino signaleren om de deur te vergrendelen. Voor ontgrendelen schrijven we LOW waarde naar D0 en HIGH waarde naar D3. Dit zal de Arduino signaleren om de deur te ontgrendelen. We bespreken de Arduino-code en schakelingontwerp later in deze tutorial.
Code die vergrendeling uitvoert:
private async Task LockDoor() {
MultiPinConfig multiPinConfig = new MultiPinConfig();
multiPinConfig.AddPinState(DigitalPins.D0, DigitalStates.High); // Vergrendel Signaal
multiPinConfig.AddPinState(DigitalPins.D3, DigitalStates.Low); // Ontgrendel Signaal
await myBolt.DigitalMultiWrite(multiPinConfig);
multiPinConfig = new MultiPinConfig();
multiPinConfig.AddPinState(DigitalPins.D0, DigitalStates.Low); // Vergrendel Signaal
multiPinConfig.AddPinState(DigitalPins.D3, DigitalStates.Low); // Ontgrendel Signaal
await myBolt.DigitalMultiWrite(multiPinConfig);
}
Code die ontgrendeling uitvoert:
private async Task UnlockDoor() {
MultiPinConfig multiPinConfig = new MultiPinConfig();
multiPinConfig.AddPinState(DigitalPins.D0, DigitalStates.Low); // Vergrendel Signaal
multiPinConfig.AddPinState(DigitalPins.D3, DigitalStates.High); // Ontgrendel Signaal
await myBolt.DigitalMultiWrite(multiPinConfig);
multiPinConfig = new MultiPinConfig();
multiPinConfig.AddPinState(DigitalPins.D0, DigitalStates.Low); // Vergrendel Signaal
multiPinConfig.AddPinState(DigitalPins.D3, DigitalStates.Low); // Ontgrendel Signaal
await myBolt.DigitalMultiWrite(multiPinConfig);
}
2. Vertrouwde Gezichten Toevoegen/Verwijderen
De afbeeldingsdata van het vertrouwde gezicht wordt gecodeerd naar een Base64-string en lokaal op de machine opgeslagen. Een lijst met bijbehorende namen van elk gezicht wordt ook opgeslagen. In ons programma om een gezicht toe te voegen, controleren we eerst of er een gezicht beschikbaar is in het huidige frame. We doen dit met de Detect API van FacePlusPlus. Het retourneert een JSON-antwoord dat kenmerken van het gedetecteerde gezicht bevat. Als geen gedetecteerd wordt, is het antwoord simpelweg []. Eenmaal een gezicht gedetecteerd, slaan we de base64-gecodeerde string van de afbeelding en de bijbehorende naam op. Hier is een videodemo van het toevoegen van een vertrouwd gezicht.

Verwijderen van een gezicht is vrij simpel. Het indrukken van de verwijderknop wist de afbeeldingsdata en naam uit de opgeslagen lijst.
Code die de gezichtsgegevens toevoegt en opslaat:
// Afbeelding converteren naar base64 string en toevoegen aan de lijst
ImageDataList.Add(ImageToBase64((Image)PreviewBox.Image.Clone()));
// Naam van het gezicht toevoegen aan de lijst
NameList.Add(FaceNameTextBox.Text.Trim());
// Slaat de gezichtsafbeeldingsdata op als base64 gecodeerde string, samen met de naam
Properties.Settings.Default.Base64ImageData = ImageDataList;
Properties.Settings.Default.FaceNames = NameList;
Properties.Settings.Default.Save();
Code die gezichtsgegevens verwijdert:
// Verwijder gezichtsgegevens op gespecificeerde positie in de lijst
NameList.RemoveAt(e.RowIndex);
ImageDataList.RemoveAt(e.RowIndex);
// Sla de lijst op na verwijdering van een gezicht
Properties.Settings.Default.FaceNames = NameList;
Properties.Settings.Default.Base64ImageData = ImageDataList;
Properties.Settings.Default.Save();
Bekijk de code in het bijgevoegde project waar het proces uitgelegd wordt als commentaar in elke regel voor een helder idee.
3. Gezichtsverificatie
We verifiëren of een gezicht vertrouwd is of niet door de Compare API in FacePlusPlus te gebruiken. Tijdens dit proces itereren we lineair door elk gezicht in de opgeslagen lijst en vergelijken we het met de vastgelegde afbeelding. Als de API een confidence van meer dan 80% retourneert, ontgrendelen we de deur.
De code die deze vergelijking doet ziet er ongeveer zo uit:
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(System.Text.Encoding.UTF8.GetString(response))["confidence"].ToString();
WebClient.UploadValues methode stuurt het verzoek naar FacePlusPlus API samen met de base64-gecodeerde gezichtsdata van twee te vergelijken gezichten en onze API-inloggegevens. Het antwoord wordt geparsed met Newtonsoft JSON bibliotheek en de confidence waarde wordt verkregen. Lees de Compare API-documentatie voor duidelijke begrip van de argumenten.
4. De Bel-luisterende Thread
We willen een fysieke drukknop voorzien, iets als een belknop, zodat de gebruiker kan drukken terwijl hij naar de camera kijkt om de deur te ontgrendelen. Om dit mogelijk te maken, moeten we een nieuwe speciale thread aanmaken die continu luistert naar belknop-indruk events.
Later in deze tutorial zullen we zien hoe de drukknop ingezet wordt en hoe hij de D4-pin van de Bolt WiFi-module HIGH maakt wanneer de knop ingedrukt wordt. Voor nu gaan we ervan uit dat het zo is. In deze thread lezen we continu de waarde van D4-pin via DigitalRead. Als het HIGH is, nemen we dat als bel-ring-event en doen we de gezichtsopname en verificatie.
Hier is de code die continu draait op de bel-luisterende thread:
while (ListenForBell) {
Response R = await myBolt.DigitalRead(DigitalPins.D4);
if (R.Value == "1") {
RingBell_Click(null, null);
Thread.Sleep(2000);
}
Thread.Sleep(2000);
}
We stoppen en wachten 2 seconden tussen elke iteratie. Anders zou het het Bolt Cloud API-gebruiksquotum snel opgebruiken.
Stap 2: Het Visual Studio Project Bouwen
Download het hele project hier. Open het Facebolt Doorlock.sln bestand in Visual Studio. Nadat de oplossing geladen is, open Form1.cs en werk de code bij met je API-inloggegevens. Druk op de groene play-knop genaamd 'Start', om het programma te bouwen en uit te voeren.
Het programma laat je kiezen uit camera-apparaten die aan het systeem gekoppeld zijn en een live feed van de camera zien. Je kunt een vertrouwd gezicht toevoegen/verwijderen. Start gezichtsmonitoring. Zodra het programma de connectiviteit van je Bolt-apparaat verifieert, kun je de bel ringen of de deur direct vergrendelen vanuit het programma.



Het is OK als je nu verward bent over hoe de gezichtsverificatie, vergrendelen en ontgrendelen in het programma werken. Het wordt duidelijker zodra we het schakelingsschema-ontwerp en de Arduino-code zien. Ik zal ook de gebeurtenisstroom van elke operatie aan het einde uitleggen.
Stap 3: Schakelingontwerp en Arduino-code
In onze schakeling willen we de volgende functies implementeren:
- Rode en groene LED-indicatie voor vergrendelde en ontgrendelde deurstatus, respectievelijk.
- Een drukknop die fungeert als belknop. Wanneer ingedrukt, moet onze WinForms-applicatie het gezicht verifiëren en de deur openen bij succesvolle gezichtsauthenticatie.
- Een andere drukknop om de deur te vergrendelen.
- Een buzzer die piept bij een bel-ring en deurvergrendeling.
De schakelingverbinding van ons project wordt hieronder getoond:


Als je dat nog niet gedaan hebt, download de Arduino IDE hier en verbind je Arduino met het systeem. Zorg dat je het juiste Arduino-model en de poort in de IDE-instellingen hebt ingesteld, voordat je de code uploadt.
Arduino-code:
#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 lockButton, lock, unlock, bell;
char snum[5];
lock = digitalRead(LockSignalPin);
unlock = digitalRead(UnLockSignalPin);
// Check of vergrendel-signaal van Bolt HIGH is
if(lock == HIGH) {
// Draai motor naar vergrendelde positie
myServo.write(120);
// LED-indicaties instellen
digitalWrite(GreenLedPin, LOW);
digitalWrite(RedLedPin, HIGH);
// Vergrendel-geluid
digitalWrite(BuzzerPin, HIGH);
delay(1000);
digitalWrite(BuzzerPin, LOW);
delay(1000);
}
// Check of ontgrendel-signaal van Bolt HIGH is
else if(unlock == HIGH) {
// Draai motor naar ontgrendelde positie
myServo.write(0);
// LED-indicaties instellen
digitalWrite(GreenLedPin, HIGH);
digitalWrite(RedLedPin, LOW);
delay(2000);
}
bell = digitalRead(BellButtonPin);
if(bell == HIGH) // Gebruiker drukte op belknop
{
// Signaleer Bolt dat belknop ingedrukt is
digitalWrite(RingBellSignalPin, HIGH);
// Een belgeluid patroon!
digitalWrite(BuzzerPin, HIGH);
delay(100);
digitalWrite(BuzzerPin, LOW);
delay(20);
digitalWrite(BuzzerPin, HIGH);
delay(200);
digitalWrite(BuzzerPin, LOW);
delay(100);
digitalWrite(BuzzerPin, HIGH);
delay(100);
digitalWrite(BuzzerPin, LOW);
delay(20);
digitalWrite(BuzzerPin, HIGH);
delay(200);
digitalWrite(BuzzerPin, LOW);
delay(1500);
// Zet het signaal uit
digitalWrite(RingBellSignalPin, LOW);
}
lockButton = digitalRead(LockButtonPin);
if(lockButton == HIGH) // Gebruiker drukte op vergrendelknop
{
// Draai motor naar vergrendelde positie
myServo.write(120);
// LED-indicaties instellen
digitalWrite(GreenLedPin, LOW);
digitalWrite(RedLedPin, HIGH);
// Vergrendel-geluid
digitalWrite(BuzzerPin, HIGH);
delay(1000);
digitalWrite(BuzzerPin, LOW);
}
}
Gebeurtenisstromen
Nu we zowel de WinForms-applicatie als het Arduino-ontwerp klaar hebben, laten we in de code duiken en de besturingsstroom van elke operatie verkennen.
1. Belknop Ingedrukt

2. Vergrendelknop Ingedrukt

Beide bovenstaande operaties kunnen ook direct vanuit de Windows Forms Applicatie uitgevoerd worden.
Hier kunnen we observeren dat de Bolt WiFi Module fungeert als een belangrijk draadloos interface tussen de Windows Forms Applicatie en de Arduino. Het gebruik van Bolt Cloud API stelt ons in staat om ons project uit te breiden en applicaties op andere platforms zoals Android te bouwen en de deur te ontgrendelen met onze telefoons! Deze flexibiliteit is de kracht van IoT en het Bolt-platform.
Nu we het software-ontwerpgedeelte voltooid hebben, gaan we verder met het bouwen van een vergrendelbaar deurmechanisme.
Stap 4: De Hardware Bouwen
Ik had een schoenenrek liggen, dus in dit project ga ik die gebruiken voor de vergrendelingsdemonstratie. Je kunt een plank, een deur, een kledingkast of alles wat een hackbaar vergrendelingsmechanisme heeft gebruiken. Het is echt aan jou.




We moeten een koppelmechanisme bouwen dat onze servomotor met het slot verbindt. Mijn idee is om een afgehakte hals van een fles en een dop van een andere fles te gebruiken. Bevestig de fles-hals aan de servomotor en de dop aan het slot. We koppelen ze dan met een nylon-draad. Dit resulteert in de vergrendel/ontgrendel-actie wanneer de motor draait.
De benodigde fles-hals met een gat in de dop ziet er ongeveer uit als getoond hieronder. We bevestigen dit aan de vergrendelingsas van de schoenenrek.


Een andere flesdop moet aan de servomotor bevestigd worden. We gebruiken koperdraad om de dop aan de draaiende as van de motor te verbinden.



Nu moeten we deze twee koppelen. Daarvoor gebruiken we nylon-draad. Maak een lus met de draad met de benodigde lengte en bevestig de draad aan beide doppen.


Eenmaal gekoppeld, kunnen ze een wederzijdse draaiende actie veroorzaken:

Nu we ons draai-mechanisme klaar hebben, is het tijd om in het slot in te breken en onze fles-hals erin te fixeren. We hadden een gat in het geboord, dus alles wat we hoeven te doen is de vergrendelingsas van de rek los te draaien, de fles-hals erboven te plaatsen en het slot weer stevig vast te draaien.

Nu is het enige wat overblijft de servomotor aan de schoenenrek te fixeren. We gebruiken een lijmpistool om de motor aan de rek te kitten.


Na het aanpassen van de draadlengte en het voldoende strak trekken, is onze finale opstelling klaar. Zoals hieronder te zien, kan de servomotor de deur correct vergrendelen en ontgrendelen!


Je hoeft niet per se de fles-hals-draad methode van koppelen te gebruiken. Gebruik welke methode het meest geschikt en handig is met jouw slotsysteem.
Gelukkig had ik een kleine opening op de juiste plek in de rek. Dit maakte het mogelijk om de servomotor-verbindingen gemakkelijk naar buiten te halen. Na een beetje decoratiewerk en labelen, is onze finale slimme schoenenrek nu klaar voor actie.






We zijn nu helemaal klaar. Alles wat overblijft is de schakeling aanzetten, een vertrouwd gezicht toevoegen in de WinForms-applicatie en genieten van de gezichtsslot-beveiliging op onze deuren. Je moet zowel de Arduino als de Bolt WiFi-module voeden. Ik gebruik een 10000 mAh powerbank om ze allebei te voeden. De webcam die ik gebruik is een Microsoft LifeCam VX-800. Hij is oud maar nog steeds beter dan de laptop-camera. Bekijk zeker de demonstratievideo. Hij toont de werking van ons project in detail.
De Videodemonstratie
Bekijk ons project in actie (Excuses voor de videokwaliteit):
Conclusie
Huh.. dat was best lang. Dit project is het fruit van Internshala's IoT-training, aangedreven door Bolt IoT. Hoewel dit project redelijk simpel is, laat het ons het potentieel van Internet of Things zien en hoe het het dagelijks leven van mensen makkelijker kan maken.
Toch.. Dit was een geweldige leerervaring voor mij. Ik hoop dat jullie plezier zullen beleven aan het bouwen hiervan en ik ben benieuwd naar welke nieuwe innovaties jullie zullen bedenken. Ik sluit af met mijn oprechte dank aan het trainings-team van Internshala en Bolt IoT voor het mogelijk maken van deze onderneming.
En dat is een wrap!
Code
BoltDoorLock.ino C/C++
Arduino-code.
#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 lockButton, lock, unlock, bell;
char snum[5];
lock = digitalRead(LockSignalPin);
unlock = digitalRead(UnLockSignalPin);
// Check of vergrendel-signaal van Bolt HIGH is
if(lock == HIGH) {
// Draai motor naar vergrendelde positie
myServo.write(120);
// LED-indicaties instellen
digitalWrite(GreenLedPin, LOW);
digitalWrite(RedLedPin, HIGH);
// Vergrendel-geluid
digitalWrite(BuzzerPin, HIGH);
delay(1000);
digitalWrite(BuzzerPin, LOW);
delay(1000);
}
// Check of ontgrendel-signaal van Bolt HIGH is
else if(unlock == HIGH) {
// Draai motor naar ontgrendelde positie
myServo.write(0);
// LED-indicaties instellen
digitalWrite(GreenLedPin, HIGH);
digitalWrite(RedLedPin, LOW);
delay(2000);
}
bell = digitalRead(BellButtonPin);
if(bell == HIGH) // Gebruiker drukte op belknop
{
// Signaleer Bolt dat belknop ingedrukt is
digitalWrite(RingBellSignalPin, HIGH);
// Een belgeluid patroon!
digitalWrite(BuzzerPin, HIGH);
delay(100);
digitalWrite(BuzzerPin, LOW);
delay(20);
digitalWrite(BuzzerPin, HIGH);
delay(200);
digitalWrite(BuzzerPin, LOW);
delay(100);
digitalWrite(BuzzerPin, HIGH);
delay(100);
digitalWrite(BuzzerPin, LOW);
delay(20);
digitalWrite(BuzzerPin, HIGH);
delay(200);
digitalWrite(BuzzerPin, LOW);
delay(1500);
// Zet het signaal uit
digitalWrite(RingBellSignalPin, LOW);
}
lockButton = digitalRead(LockButtonPin);
if(lockButton == HIGH) // Gebruiker drukte op vergrendelknop
{
// Draai motor naar vergrendelde positie
myServo.write(120);
// LED-indicaties instellen
digitalWrite(GreenLedPin, LOW);
digitalWrite(RedLedPin, HIGH);
// Vergrendel-geluid
digitalWrite(BuzzerPin, HIGH);
delay(1000);
digitalWrite(BuzzerPin, LOW);
}
}
WinForms Applicatie - Visual Studio Project (Facebolt Doorlock).zip C#
* Pak het zip-bestand uit en open het .sln-bestand in Visual Studio.
* Pas de code aan met je API-inloggegevens.
* Run het project.
* Voeg een vertrouwd gezicht toe.
* Ten slotte, start gezichtsmonitoring.
Bolt IoT Cloud API - Client Bibliotheek
Dit is een onofficiële clientbibliotheek die ik schreef, voor communicatie met de Bolt Cloud API. Deze bibliotheek wordt gebruikt in onze WinForms-applicatie voor communicatie met de Bolt WiFi-module.
https://github.com/diozz/Bolt-IoT-API-.NET
Schema's
Fritzing Schakelingsschema

Productieproces
- Optimaliseren van Boutaandraaiing met Momentgereedschappen - Bewezen Strategieën voor Betrouwbare Voorlaadkracht
- Een 433 MHz Slimme Huiscounter Bouwen met Sensorflare en Raspberry Pi
- Een Slimme Auto-vergrendelende Deur Bouwen met uw Smartphone's Bluetooth-bijnaheid
- Real-time Pan/Tilt gezichtsvolging op een Raspberry Pi – Praktische Gids
- Slimme Barman: Bouw Je Eigen Raspberry Pi-Cocktailstation
- WiFi-ingeschakeld slim slot met Arduino & ESP8266 – Ontgrendel via je telefoon
- GE Digital drijft productietransformatie met Slim MES
- Slim inkoop: AI samensmelten met menselijk inzicht
- Kliksloten Begrepen: Functie, Types en Veiligheidsvoordelen
- Maximaliseer ROI op uw IoT-investeringen: Een praktische gids
- Uw Slimme Apparaten Beveiligen: Best Practices voor IoT-veiligheid