×

从Azure Percept中的docker容器控制Arduino

消耗积分:0 | 格式:zip | 大小:0.00 MB | 2023-06-27

张艳

分享资料个

描述

这是一篇文章,我们探讨了使用 Azure Percept 来提高工作人员的安全性并构建连接到微控制器以控制警报的概念证明。本文介绍了如何将 Azure Percept 连接到 Arduino、设置固件并演示如何在 docker 容器中使用 .NET IoT。

工人安全的重要性

根据 OSHA,美国建筑工地工人死亡的最常见原因如下

  • 跌倒(造成建筑工人死亡的 33.5%)
  • 被物体击中(占建筑工人死亡的 11.1%)
  • 触电(占建筑工人死亡的 8.5%)
  • 夹在中间(占建筑工人死亡的 5.5%)

安全在每个工作现场都非常重要。有些地方是工人必须避开的。根据 Construction Dive 的一篇文章:与电梯相关的施工死亡人数正在上升

“虽然建筑和维修工人与电梯相关的总死亡人数与建筑总死亡人数相比相对较少,但从 2003 年到 2016 年,此类死亡人数翻了一番,从 14 人增加到 28 人,2015 年达到峰值 37 人,根据来自建筑研究与培训中心 (CPWR) 的一份报告。然而,跌倒是大多数电梯相关死亡的原因,就像整个建筑行业一样。超过 53% 的与电梯相关的死亡来自跌倒,在这些事件中,近 48% 来自 30 英尺以上的高度。”

查看这些统计数据,它在错误的时间出现在错误的地方。警告标志通常张贴在危险区域周围,但可能会被忽略或遗忘。

如果我们可以使用 Azure Percept 来监控这些危险区域并警告工作人员远离并避开它会怎样。目标是发出威慑、可听见的声音,提醒他们可能存在的危险。一旦工人离开该区域并且不再被检测到,声音就会自动停止。同样在维护期间,允许使用符合法规所需的授权远程禁用检测。

poYBAGNgjpOAGj8NAAB7uwwSowE811.png
 

 

 

入门

我们将查看该项目的硬件、软件要求和架构图。然后逐步了解如何设置和部署应用程序。

硬件

Azure 感知设备工具包

https://www.microsoft.com/d/azure-percept-dk/8mn84wxz7xww

与 Arduino IDE 兼容的 ELEGOO UNO R3 超级入门套件

https://www.elegoo.com/products/elegoo-uno-project-super-starter-kit

软件

Azure 订阅(Azure Percept 需要)

https://azure.microsoft.com

视觉工作室代码

https://code.visualstudio.com/

适用于 VS Code 的 Azure IoT 工具扩展

https://marketplace.visualstudio.com/items?itemName=vsciot-vscode.azure-iot-tools

Azure IoT Edge 开发工具

https://github.com/Azure/iotedgedev

使用 DockerHub 帐户的 Docker

https://docs.docker.com/get-docker/

Arduino IDE

https://www.arduino.cc/en/software

整体架构

poYBAGNgjpaAKCcPAADz8-vrXNE532.png
 

当摄像头检测到危险区域内的工人时,会发出警报并将遥测信息发送到云端。Azure Percept Device Kit 包含一个人员检测模型,用于处理来自相机的帧。当检测到工人时;它向 Arduino 设备发送消息以设置蜂鸣器声音并将消息发送到 IoT Hub。

指示

设置人员检测模型

Azure Percept Device Kit 连接到云端后,我们可以通过转到 Vision 选项卡 -> Deploy a Sample Model 来指定使用人员检测模型

poYBAGNgjpeAHS5XAAA7V9W8Vss314.png
 
pYYBAGNgjpqAT_8JAABwW98xV08240.png
 

设置 Arduino 模块

我按照 .NET IoT github 页面上的说明进行操作。

https://github.com/dotnet/iot/tree/main/src/devices/Arduino#quick-start

您可以在以下位置下载我用于此项目的 Firmata 固件:

https://github.com/rondagdag/arduino-percept/blob/main/firmata/percept-uno/percept-uno.ino

以下是步骤:

  • 打开 Arduino IDE
  • 转到库管理器并检查您是否安装了“ConfigurableFirmata”库
  • 从设备绑定文件夹中打开“Percept-Uno.ino”或访问http://firmatabuilder.com/创建您自己的自定义固件固件。确保您至少检查了您需要的功能。
  • 将此草图上传到您的 Arduino。

向arduino模块发送警报

在 Visual Studio Code 中打开 Percept Edge 解决方案项目

https://github.com/rondagdag/arduino-percept/tree/main/PerceptEdgeSolution

如果你有 Azure IoT Edge Dev 工具和 Azure IoT Tools Extensions for VS Code,这个模块可以在你的机器上本地运行

要在您的机器上本地运行它,您可能需要更改此 module.json

https://github.com/rondagdag/arduino-percept/blob/main/PerceptEdgeSolution/modules/ArduinoModule/mod ...

将存储库更改为您的 Dockerhub 用户名。

"repository": "rondagdag/arduino-percept-module"

Arduino 模块是一个控制 arduino 设备的 C# 应用程序。它是一个使用 .NET IoT 绑定的 docker 容器。这是我使用的Nuget 包。

Include="Microsoft.Azure.Devices.Client" />
Include="Microsoft.Extensions.Configuration" />
Include="Microsoft.Extensions.Configuration.Abstractions" />
Include="Microsoft.Extensions.Configuration.Binder" />
Include="Microsoft.Extensions.Configuration.EnvironmentVariables" />
Include="Microsoft.Extensions.Configuration.FileExtensions" />
Include="Microsoft.Extensions.Configuration.Json" />
Include="System.Runtime.Loader" />
Include="System.IO.Ports" />
Include="System.Device.Gpio" />
Include="Iot.Device.Bindings" />   
Include="Microsoft.Extensions.Logging.Console" />

该模块尝试连接到两个 Arduino USB 端口。我注意到有时在重新启动期间,它可能是 arduino 连接到的这些端口之一。

/dev/ttyACM0
/dev/ttyACM1

为了在您的机器上本地运行它,您可能必须将端口号更改为 Arduino IDE 确定 UNO 连接到的端口号(Windows 的 COM3 或 Mac 的 /dev/ttyS1)

它连接到 115200 波特率。

蜂鸣器连接到如下所示的 PIN 12:

poYBAGNgjp-AD29GAACxNvC1Gx8055.png
 

当从 IoT Edge 中心接收消息时,可以对其进行处理以检测是否检测到工作人员。如果有效载荷包含 NEURAL NETWORK 节点中的项目,那么我们可以将警报发送到 Arduino。

这是要分析的代码。

在您的机器上本地运行它可能会很棘手,并且可能需要一些修改。您可能必须修改部署模板和代码才能接收来自模拟温度的有效负载。

注意端口是如何映射到 docker 容器上的。/dev/ttyACM0 和 /dev/ttyACM1

"ArduinoModule": {
            "version": "1.0",
            "type": "docker",
            "status": "running",
            "restartPolicy": "always",
            "settings": {
              "image": "${MODULES.ArduinoModule}",
              "createOptions": {
                "HostConfig": {
                  "Privileged": true,
                  "Devices": [
                    {
                      "PathOnHost": "/dev/ttyACM0",
                      "PathInContainer": "/dev/ttyACM0",
                      "CgroupPermissions": "rwm"
                    },
                    {
                      "PathOnHost": "/dev/ttyACM1",
                      "PathInContainer": "/dev/ttyACM1",
                      "CgroupPermissions": "rwm"
                    }
                  ]
                }
              }
            }
          }

本地的 EdgeHub 映射如下所示。模拟温度传感器将输出传递给 Arduino 模块。然后 Arduino 模块过滤数据,控制 arduino 并将遥测数据发送到云端。

"$edgeHub": {
      "properties.desired": {
        "schemaVersion": "1.2",
        "routes": {
          "sensorToArduinoModule": "FROM /messages/modules/SimulatedTemperatureSensor/outputs/temperatureOutput INTO BrokeredEndpoint(\"/modules/ArduinoModule/inputs/input1\")",
          "ArduinoModuleToIoTHub": "FROM /messages/modules/ArduinoModule/outputs/* INTO $upstream"
        },
        "storeAndForwardConfiguration": {
          "timeToLiveSecs": 7200
        }
      }

你可以在模拟器上测试一下

pYYBAGNgjqGAPcDDAAB4HMJAOOs407.png
 

部署设置

为了将其部署到 Azure Percept,IoT Hub 设备 -> 设置模块 -> 添加 -> IoT Edge 模块

pYYBAGNgjqWAGa5zAACSYIy8fUA500.png
 

填写模块名称和图像 URI。

poYBAGNgjqyAODI-AACIAkhARIg838.png
 

还有容器创建选项来映射正确的端口。

pYYBAGNgjq6ABD4NAACG0D0AwXA593.png
 

指定路线。在这种情况下,我们必须将来自 Azure Eye 模块的数据推送到 Arduino 模块。

pYYBAGNgjrCALo1eAACBDDW0aL8498.png
 

这是映射的样子

"$edgeHub": {
            "properties.desired": {
                "routes": {
                    "AzureSpeechToIoTHub": "FROM /messages/modules/azureearspeechclientmodule/outputs/* INTO $upstream",
                    "AzureEyeModuleToArduinoModule": "FROM /messages/modules/azureeyemodule/outputs/* INTO BrokeredEndpoint(\"/modules/ArduinoModule/inputs/input1\")",
                    "ArduinoModuleToIoTHub": "FROM /messages/modules/ArduinoModule/outputs/* INTO $upstream"
                },

概括

在任何工作场所,确保工人的安全都非常重要。Azure Percept 可以帮助检测人员并连接不同的警报系统。我们演示了如何设置 Azure Percept Dev Kit 以使用人员检测。我们已将 Arduino 与蜂鸣器连接以触发可听见的声音。这实际上使 Azure Percept Dev Kit 能够扩展功能并拓宽用例。让我知道这个博客是否对您有任何帮助,请在下面发表评论,我有兴趣学习不同的想法和用例。

资源

参考代码:

https://github.com/rondagdag/arduino-percept

Azure Percept 入门:

https://docs.microsoft.com/azure/azure-percept/

如果这个项目启发了您使用 Azure Percept - 单击“竖起大拇指”按钮并关注我。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !