如何使用Bolt IoT设计人脸解锁智能门

网友投稿 320 2022-11-13

如何使用Bolt IoT设计人脸解锁智能门

背景说明

我们生活在一个互联网革命的时代,现在比以往任何时候都更容易进行实验和创新,以提出可以对全世界数百万人产生积极影响的绝妙想法。

我们将使用 Visual Studio 构建一个 Windows 窗体应用程序。此应用程序在 Windows 机器上运行,将负责管理授权人脸、使用 FacePlusPlus API 验证人脸以及与 Bolt WiFi 模块通信。我们将使用 C# 进行编码。

启动 Visual Studio 并创建新的 Windows 窗体应用程序项目。如果您完全不熟悉 Visual Studio,我建议您学习使用 Visual Studio 进行 Windows 窗体应用程序开发的基础知识。

在本文中,我将仅使用项目中执行主要和重要功能的代码片段来解释代码。浏览整个代码将是乏味且不必要的,因为其中大部分都是不言自明且有据可查的。

我们的 Visual Studio 项目将 3 个库用于各种目的。他们是:

AForge .NET:一种流行的 .NET 框架,用于 Windows 中的图像处理。我们使用它从网络摄像头捕获图像。

Bolt IoT API .NET:我用 C# 编写的非官方客户端库,用于与 Bolt Cloud API 进行通信。

入门

在开始编码之前,我们需要设置一些东西。

1. Bolt Cloud API 凭证

2. FacePlusPlus API 凭证

现在您应该准备好以下内容:

private readonly string BOLT_API_KEY = “XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX”;

private readonly string FPP_API_KEY = “XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX”;

private readonly string FPP_API_SECRET = “XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX”;

我们创建一个名为 的 Bolt 类的新全局实例myBolt,通过它我们将与 WiFi 模块进行所有未来的通信:

myBolt = new Bolt(BOLT_API_KEY, BOLT_DEVICE_ID);

也就是说,现在让我们看看我们的应用程序如何执行一些核心功能。

功能介绍

1. 锁定/解锁门

执行锁定的代码:

private async Task LockDoor()

执行解锁的代码:

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

2. 添加/删除可信面孔

去除脸部非常简单。按删除按钮将从保存的列表中删除图像数据和名称。

添加和保存人脸信息的代码:

删除人脸信息的代码:

//Removing face information at specified position in the list NameList.RemoveAt(e.RowIndex); ImageDataList.RemoveAt(e.RowIndex);    //Saving the the list after removal of a face Properties.Settings.Default.FaceNames = NameList; Properties.Settings.Default.Base64ImageData = ImageDataList; Properties.Settings.Default.Save();

3.人脸验证

我们通过使用FacePlusPlus 中的比较 API来验证人脸是否可信。在此过程中,我们线性迭代保存列表中的每个人脸,并将其与捕获的图像进行比较。如果 API 返回超过 80% 的置信度,我们将解锁门。

进行此比较的代码如下所示:

WebClient client = new WebClient();

4. 侦听铃声

在本文的后面,我们将看到如何使用按钮以及按下按钮时它将如何使 Bolt WiFi 模块HIGH的 D4 引脚。现在,我们只假设上述情况。所以在这个线程中,我们不断地计算 D4 引脚的值。如果是,我们将其作为铃声事件并进行人脸捕获和验证。DigitalReadHIGH

这是将在铃声侦听线程上连续运行的代码:

while (ListenForBell)

我们在每次迭代之间停止并等待 2 秒。否则会很快耗尽 Bolt Cloud API 的使用配额。

第 2 步:构建 Visual Studio 项目

在 Visual Studio 中打开下方提供的文件。解决方案加载后,打开文件并使用您的 API 凭据更新代码。按名为“开始”的绿色播放按钮,构建并运行程序。 Facebolt Doorlock.slnForm1.cs

如果您现在对程序中人脸验证、锁定和解锁的工作方式感到困惑,没关系。一旦我们看到电路原理图设计和Arduino代码,就会变得更加清晰。最后,我还将分解每个操作的事件流。

在我们的电路中,我们打算实现以下功能:

另一个按钮来锁门。

我们项目的电路连接如下图所示:

在上传代码之前,请确保您已在 IDE 设置中设置了正确的 Arduino 模型和端口。

Arduino代码:

#include    #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 if lock signal from Bolt is HIGH     if(lock == HIGH)     {         // Turn motor to locked position         myServo.write(120);                  // Set LED indications         digitalWrite(GreenLedPin, LOW);         digitalWrite(RedLedPin, HIGH);            // Buzz locking sound         digitalWrite(BuzzerPin, HIGH);         delay(1000);         digitalWrite(BuzzerPin, LOW);         delay(1000);     }     // Check if unlock signal from Bolt is HIGH     else if(unlock == HIGH)     {         // Turn motor to unlocked position         myServo.write(0);                  // Set LED indications         digitalWrite(GreenLedPin, HIGH);         digitalWrite(RedLedPin, LOW);         delay(2000);     }        bell = digitalRead(BellButtonPin);     if(bell == HIGH) // User pressed bell ring betton     {         // Signal Bolt that ring button was pressed         digitalWrite(RingBellSignalPin, HIGH);            // A calling bell sound pattern !         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);            // Turn off the signal         digitalWrite(RingBellSignalPin, LOW);     }        lockButton = digitalRead(LockButtonPin);     if(lockButton == HIGH) // User pressed lock betton     {         // Turn motor to locked position         myServo.write(120);                  // Set LED indications         digitalWrite(GreenLedPin, LOW);         digitalWrite(RedLedPin, HIGH);            // Buzz locking sound         digitalWrite(BuzzerPin, HIGH);         delay(1000);         digitalWrite(BuzzerPin, LOW);     } }

事件流

现在我们已经准备好 WinForm 应用程序和 Arduino 设计,让我们深入研究代码并探索每个操作的控制流程。

1. 响铃按钮按下

2. 锁定按钮按下

上述两个操作也可以直接从 Windows 窗体应用程序执行。

现在我们已经完成了软件设计部分,让我们继续构建一个可锁定的门机制。

我有一个鞋架,所以在这个项目中,我将用它来演示锁具。您可以使用架子、门或衣柜或任何具有可破解锁定机制的东西。

所需的瓶盖上钻有一个孔,如下图所示。我们将把它连接到鞋架的锁轴上。

另一个瓶子的盖子必须连接到伺服电机上。我们使用铜线将盖子连接到电机的转轴。

现在我们需要将这两者结合起来。为此,我们使用尼龙线。使用所需长度的线制作一个环,并将线连接到两个盖子上。

一旦耦合,它们可以引起相互旋转的动作:

现在我们已经准备好转动机构,是时候进入锁并修复我们的瓶颈了。我们在上面钻了一个孔,所以我们需要做的就是从机架上拧下锁轴,将瓶颈放在上面,然后重新拧紧锁。

现在唯一要做的就是将伺服电机固定在鞋架上。我们将使用热胶枪将电机密封到机架上。

不过,不一定必须使用瓶颈 - 螺纹耦合方法。你可以选择一个最适合和方便您的锁系统的任何方法。

幸运的是,我在机架的正确位置开了一个小口。这使我能够轻松地连接伺服电机。经过一些装饰工作和贴标后,我们最终的智能鞋架现已准备就绪。

结论

该项目是由 Bolt IoT 提供支持的 Internshala 物联网培训的成果。虽然这个项目非常简单,但它向我们展示了物联网的潜力以及它如何让人们的日常生活更轻松。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Kubernetes之部署calico网络
下一篇:命令行修改阿里云的安全组
相关文章

 发表评论

暂时没有评论,来抢沙发吧~