这是一个非常卡蒙达万圣节, 这个项目应该让你从技巧或治疗的安全!

在这一年的COVID-19,我需要找到一种方法,使技巧或治疗安全和乐趣的每个人。我知道它需要不接触, 但我也知道我需要一种方法来正确评估服装和技巧或治疗者分发糖果。我所想的就是物联网和业务流程管理 (BPM) 的组合,它允许您从远处安全地评估技巧或处理者,并按需分发糖果!当然,这不仅仅是一个 BPM 过程。这是一个使用 Camunda BPM 交付货物的物联网项目。

我将打破这篇文章分成几个部分,但你将需要(或至少需要访问)3D打印机,以充分意识到真棒在这里。它使用修改的狗治疗分配器, 因为我没有时间 (或技能) 设计一个全新的糖果分配器从零开始。

概述

这既是硬件,也是软件,也是BPMN项目,所以有很多运动部件——无论是字面意思还是比喻。

我要做的第一件事是弄清楚所有这些部分是什么,并绘制出这一切。

幸运的是,我有 卡韦莫 让我开始。我绘制了流程的所有不同部分,并请求反馈(因为我可以与一些合作者共享 Cawemo 模型!然后,一旦我把基本的整体结构向下,我把它全部移到卡蒙达模型,以充实过程的细节。定义流程中每个步骤的过程对于设计所有 各个部分 非常有帮助。

所以,这里是我想出了整体模型(你也可以得到 完整的文件 ):


当然,有些领域我可以简化事情,但毕竟,这基本上是一个 鲁贝· 戈德堡项目,所以简化并不是真正的目标。基本步骤包括:

  1. 技巧或治疗者按门铃
  2. 相机拍摄”技巧”或”处理者”的照片,并将其发送到服务器
  3. 用户评估图片以确定此人是否穿着服装
    1. 如果他们不是, 他们没有得到糖果和过程结束
  4. 如果是,一块糖果被添加到他们的虚拟糖果袋
  5. 然后对图片进行第二次评估,以判断服装
    1. 如果服装真的很棒,虚拟糖果袋里会加入两块糖果
    2. 如果服装只是 ‘确定’ 一块糖果被添加
    3. 如果服装是可怕的, 没有额外的糖果添加
  6. 然后对图片进行第三次评估,确定”技巧者”或”处理者”的年龄
    1. 如果技巧或治疗是 5 岁或以下, 他们得到两块额外的糖果, 因为小孩子在可爱的服装是最好的
    2. 如果他们是6-10岁,他们得到一块额外的糖果添加
    3. 如果他们是11-15岁,不添加额外的糖果
    4. 如果他们是15岁或以上,不会分发糖果和过程结束
  7. 所有的糖果都加在一起,并发送到自动糖果分配器,在那里分发了正确的糖果片

我可以让万圣节糖果送起来更复杂吗?可能

因此,你有整体布局。接下来,我需要构建两个硬件,让我实现这个梦想。我需要一个门铃摄像头和一个治疗分配器。

对于这些东西,我需要建立一些自定义硬件,然后3D打印一些自定义件,使这一切走到一起。

我还不得不写一个小服务器进程,从相机拍摄的照片,然后将它们提交给卡蒙达引擎,以及外部命令,卡蒙达引擎可以调用在年底,这将开始糖果被分配。我将在其自己的部分中介绍每个区域。

三元打印

使用我的打印机,打印花了四天的更好部分,所以准备一些漫长的一天看你的打印机!我只从包含的模型打印以下部件:

  • treat-spout.stl • 食物出来的地方的壶嘴!
  • hopper.stl • 漏斗持有您的糖果储备
  • Screwll.stl • 转动分配糖果的螺钉
  • feeder-tube.stl • 螺钉进入的管子
  • Hopper-lid.stl • 漏斗盖

此外,我做了设计和打印一件: TreatHolder.stl 因为我没有使用伺服电机,而是选择使用步进电机,我不得不设计一个部件来容纳步进电机和管子。

所有这些文件都在子 DispenserFiles 目录中。印刷快乐!

根据您用于驱动螺钉的电机, 您可能需要自定义 孔,只需一点,使轴适合。

下面是分配器内部的外观。你可以看到,它使用螺丝机制推动糖果沿管。


当整个事情组装起来,并准备分发糖果。


硬件

我可能有点过度设计。但这里基本上有两种不同的硬件版本:

  • 相机和门铃
  • 治疗分配器

我将单独介绍其中的每一个,但没有一个部分是很难得到的,大多数,如果不是所有的,应该从阿达夫鲁伊特。

相机和门铃

相机和门铃是基于板 ESP32-Cam ,这是一个小,超级便宜的板,有一个相当高品质的相机。大约 1″ 平方 (这是 2 此外,我添加了一个瞬间开关(作为”门铃”)和两个 LED (绿色和红色 – 作为状态 LED,以防主板或相机无法正确出现。

以下是我如何连线这一切:


以下是最终产品的外观:


我的 LED 需要 100 欧姆电阻器才能足够明亮。门铃上有一个220欧姆的电阻器。这真的是所有它有门铃/相机侧的布线。

现在,在代码方面,您需要一些东西。您需要为 Arduino 安装 ESP-32 相机库,您可以在 Espressif GitHub 获得该库一旦您拥有该库, 则 CandyCam 中的代码应该编译并正常工作。

注: 您必须在线输入您的 WiFi SSID 和密码 125 才能连接。您还需要在线更改服务器的 IP 地址 204 。这些是硬编码的,以节省内存空间,因为我们在一个小设备上拍摄大照片。

治疗分配器

治疗分配器使用超便宜的韦莫斯 D1 R2 迷你 (ESP8266) D1。我以每张大约 1.50 美元批量购买, 所以如果他们现在然后爆炸 ( 他们这样做) 没关系。步进电机驱动器是 阿达水果TB6612,这是约5.00美元。整个事情最昂贵的部分是步 进电机

未显示的 部分是升 压升压器, 我用于将电机的输入电压从 3.3V 提升至 12V。


下面是该板在最终形式中的样子:

戈朗图书馆。

 

x
1
10
9
10
 
1

2
func发送图片s字符串) |
3
客户端=卡蒙达客户戈.新Client(camundaClientgo.客户端选项|
4
端点"http://localhost:8080/engine-rest",
5
ApiUser"演示"
6
ApiPassword"演示",
7
超时时间time二 *10
8
路径: + + 字符串修剪s ,") )

10
过程键: ="服装"
11
变量 : = 映射=字符串=卡蒙达Clientgo.可变|
12
"newCostume": [newPath类型"字符串"*,
13
"isCostume": [类型"布尔"],
14
"糖果片": [0 类型Type"长"],
15
 =,错误= 客户端过程定义开始(

17
卡蒙达Clientgo查询进程定义通过[密钥和进程],
18
卡蒙达Clientgo要求启动 [变量和变量],
19
  )
20
如果错误! []
21
日志Printf"错误启动过程: %s\n"错误
22
  }

24
}

请注意,我设置的所有三个过程变量,我需要在整个过程中在这里开始。这对于变量 candyPieces 尤其重要,因为我发现,如果我在以后的过程中尝试设置它,它被定义为一个而不是一 doublelong 导致事情不工作。

服务器进程的所有代码都包含 在此项目中, 因此您所应执行的只是使用命令运行该文件,您将准备好在糖果分配器中拍摄 go run goserver.go 照片并启动 Camunda 任务!

任务处理程序

这是我不得不写的另一篇文章: 处理最后的任务, 分配正确的糖果片的最后任务。为此,我使用了 Node.js,代码同样简单:

Javascript

 

1
varmqtt=需要'mqtt'
2
varmqttClient=mqtt.连接"mqtt://YOURBROKER"
3
const客户端记录器=需要"camunda - 外部任务 - 客户端 - js");
4
锥形打开=要求"打开");
5

6
客户端的配置:
7
// - "记录器":自动记录重要事件的实用程序

9
- "异步响应超时":长轮询超时(然后将发出新请求)
10
const配置=baseurl'http://localhost:8080/engine-rest'使用记录器异步响应超时10 ];
11

12
使用自定义配置创建客户端实例
13
const客户端=new新客户端配置);
14

15
订阅('服装'异步函数function([任务任务服务]) |

16
糖果+任务变量得到"糖果片");
17
控制台日志('分配'+糖果 + '糖果片!
18
varcstring="糖果"=+candy"糖果";'}'
19
mqttClient.发布"糖果"cString);
20
// 完成任务
21
完成任务);

22
});

要运行此命令,请运行以下命令:

 

x
1
1
$ cd 糖果分配器工人
2
$ 节点 辅助角色. js

卡蒙达密码

因此,现在您应该有一个服务器进程来拍摄照片并启动任务,以及一个服务任务工作人员来处理作为最后任务分配代码。是时候填写模型本身的所有部分,使其充分发挥作用。

对于 Evaluate Picture 用户任务,我创建了一个窗体,其中基于传入的任务变量 和 两个 isCostume 字段 newCostume



我制作了 newCostume 这个 readonly 字段,以便用户不会意外地转到错误的图片。

需要改进的领域: 使窗体中的图片链接实际上可单击,而不是让用户复制/粘贴链接到新的浏览器窗口中。


然后,该过程将一块糖果添加到虚拟糖果袋中,为此我使用了一个脚本任务,其中有一点点 javascript 代码:

Javascript

 

x
1
 
1
获取可变"糖果片");

2
如果糖果=)]
3
糖果=0;
4
}
5
糖果+11;
6
执行设置可变'糖果'糖果);


我使用我们在 Web candyPieces 服务器代码中设置的全局变量来跟踪糖果的数量。

一旦我们这样做了, 是时候对服装进行评价了, 所以我做了另一种形式:



同样,糖果的数量是不可编辑的,因为我们不想任何人作弊!


在此之后,我需要添加更多的糖果计数(也许,除非他们有一个可怕的服装),所以我重新使用javascript代码从第一个脚本任务的所有其余的,只是调整糖果的数量(如果有任何添加。

最后,我们估计了技巧或治疗者的年龄:


这变成了一个不错的形式:


并再次使用脚本任务的 javascript 将糖果添加到糖果袋中。

最后一步是将整个任务发送到我们之前定义的辅助任务:


请注意,我之前 topic 将 设置为与以前在文件中定义为 topic 我的相同 worker.js 。任务完成后,应在启动该任务的控制台中看到以下内容:

 

x
1
1

2
• 订阅主题服装
3
4 片糖果!
4
• 完成任务 ca3ae72e-1875-11eb-82d1-0242ac110002

这表明糖果已分发,任务已完成!

成功!!

结论

有人多次问我,BPMN 和 Iot 怎么会是一起"东西",我已经为答案是"不能"做好了充分的准备。

但是,我后来开始思考它——实际上,在业务决策过程中,来自传感器等的物联网数据可以通过数千种方式成为关键数据。

此外,拥有业务决策过程的最终结果,是随后在物理世界中进行的事情 - 也许它是一个治疗分配器,但也许它是一个仓库机器人,任务是去收集和处理订单 - 是一个非常现实的需要。

因此,虽然我可能已经证明,BPMN和物联网可以以最愚蠢的方式走到一起,这是一个超级有趣的项目,我希望它让你思考其他的可能性,无论是您的物联网项目或您的BPMN进程。

Comments are closed.