资料介绍
描述
公司开始公布他们的远程员工重返工作岗位的政策。重返办公室必然会增加新的 COVID-19 病例数。但是,可能有一种方法可以减少办公室内 COVID-19 病毒的传播。一般来说,办公室都有隔间,有助于隔离直接的人际传播,但仍然存在传播热点,尤其是在共享空间。会议室是最糟糕的罪魁祸首之一,因为会议室不仅受到限制并在不同群体之间快速共享,而且仅在一天结束时才进行清洁。将责任留给任何共同行动,例如给办公室植物浇水,让会议室里的任何人承担责任,即使曾经得到维护,也很少得到支持。甚至白板的标记也很少被替换。此外,每天/每周消耗多个消毒湿巾/罐是非常浪费的,并且不会随着会议次数而增加。因此,我提出了一种会议集成可再填充物联网设备的解决方案,该设备对已发生会议的会议室进行消毒。
它是如何工作的?
我的解决方案包括一个全栈应用程序以及一个嵌入式设备。有几个工作部分,所以我将首先对系统流程进行高级概述,然后详细解释。这样,那些关注下一节标题为“我是如何构建它的?可以理解为什么我做了我所做的。
以下是该系统的高级概述:
我的解决方案从一个全栈应用开始。我有一个显示 GUI 的前端:
设置参数并切换“检查可用性”按钮后,后端会查看所选会议间隔的 AWS DynamoDB 表,并返回可用会议列表以及会议间隔可用的房间. 下面是表格的示例:
为了简化开发过程,设置了一些注意事项。会议仅每一刻钟开始,持续时间是一刻钟的倍数,并且 Room 1 被硬编码以对应于我的 Core2ForAWS 设备。选择房间 1 的会议后,Core2ForAWS 元素的设备影子将更新为所选会议间隔。设备影子(稍后解释)将如下所示:
设备逻辑
core2ForAWS 元素将解析来自设备影子的会议间隔信息,并填充大小为 96 的会议间隔数组。数组中的每个索引对应于该索引对应的 15 分钟间隔的会议状态。由于 1 天是 24 小时,因此有 96 个间隔,每个间隔为 15 分钟。15 分钟间隔参考从上午 12:00 开始。12:00 AM 被认为相当于 0000 分钟,第 0 个 15 分钟间隔。因此,15 分钟间隔数组的索引 0 对应于从 12:00 AM 到 12:15 AM 的会议间隔的会议状态。如果安排了从上午 12:00 到上午 12:15 的会议,则数组的索引 0 将标记为“1”以表示会议间隔,如果没有安排在上午 12:00 的会议,则将标记为“0”到上午 12:15 会议间隔。
现在,我创造了“先生”的嵌入式设备(它是整个设备,包括 core2ForAWS 元素)接管了。Mister 会检查每个 15 分钟间隔边缘,并且仅当边缘出现在刚刚结束的会议和没有会议的 15 分钟间隔之间时才会激活。会议间隔边缘是两个会议间隔之间的边界。例如上午 12:00->12:15 会议间隔和 12:15->12:30 会议间隔之间的边界。因此,例如,如果先生在 12:15 检查并注意到从 12:00 AM -> 12:15 AM 有一个会议,并且从 12:15 AM -> 12:30 AM 会议没有即将召开的会议,则会出现激活条件间隔。就索引而言,我们可以将其表示为从任何 array[j] = 1 到 array[j+1] = 0 的任何转换,对于所有 j >= 0 &
一旦找到这样的 1->0 边缘,先生的 PIR 传感器就会被激活,并每 2 分钟检查一次移动,以防刚刚发生的会议进入另一个会议间隔。如果在下一个会议间隔之前检测到活动,则在检查即将到来的会议间隔边缘之前将当前会议间隔标记为“1”,因为存在会议间隔的活动价值。这张图可以阐明这个想法:
假设目前,某个时间 > 8:00 am 和 < 8:15 am,由 1 表示。没有安排在上午 8:00 举行的实际会议,所以先生对会议间隔的内部表示是数组索引:32(上午 8:00 是从上午 12:00 开始的 8 小时,8 * 4 = 32 = 上午 8:00 的数组索引)是“0”。如果 PIR 一直持续到上午 8:15(由 2 表示),则索引 32 处的间隔被标记为“1”。索引 32 被标记为“1”,因为 15 分钟的会议间隔(上午 8:00)不打算主持会议,但仍然主持了 15 分钟的活动。
如果 PIR 传感器在 2 分钟内未检测到活动,则会启动辅助检查。首先,会出现提示音,以提醒房间内的任何人即将喷水,然后显示一个设备屏幕,显示从 30 秒开始的倒计时,并带有确认按钮(视频演示将显示这一点)。如果确认屏幕在整个持续时间内都被忽略,则先生启动伺服系统并喷洒房间,并等待下一个 15 分钟间隔。如果确实确认了活动,则先生将返回以返回 PIR 逻辑。
我是如何建造它的?
我开始花一些时间学习 JS,reactJS:https ://reactjs.org/docs/getting-started.html和 nodeJS:https ://nodejs.org/en/docs/ 。我将在下面解释 AWS DynamoDB 和 AWS IoT Core 集成并链接我的全栈应用程序存储库。
我首先在这里设置我的 Core2ForAWS:https ://edukit.workshop.aws/en/getting-started.html ,只需完成这些步骤。然后,我按照以下说明设置 AWS IoT Core:https ://edukit.workshop.aws/en/blinky-hello-world/prerequisites.html 。到此阶段,您应该能够获取 AWS IoT 终端节点,并且您创建的 IAM 用户应该具有以下策略:
如果您找不到添加此策略的位置,请使用您的根电子邮件登录 AWS 控制台,然后单击“IAM”。你应该在左边看到这个:
单击“用户”,然后单击您创建的用户。你会看到这样的东西:
添加 AWSIoTFullAccess 策略。
这是我对正在发生的事情的解释。您创建的 AWS 账户包含所有资源,例如 AWS IoT Core、DynamoDB、IAM 等。您创建的 IAM 用户是经过身份验证的实体,可以根据 IAM 用户的策略访问 AWS 账户的资源。当使用 IAM 用户密钥在 CLI 上运行命令“ aws configure”时,会创建一个配置文件并将其与用户密钥一起存储在您的笔记本电脑上。调用 AWS 开发工具包 API 时,会找到配置文件。然后会发生一些调解,以便被调用的 API 具有与使用“ aws configure”命令配置密钥的 IAM 用户的策略相同的权限。
现在,将 AmazonDynamoDBFullAccess 策略也添加到您的 IAM 用户。它应该如下所示:
以下是与 AWS 交互并带有注释的相关代码片段:
AWS.config.dynamodb = {
region: "us-west-2",
//replace endpoint with own endpoint
endpoint: "https://dynamodb.us-west-2.amazonaws.com",
};
AWS.config.iotdata = {
region: "us-west-2",
//replace endpoint with own endpoint
endpoint: "a36ozlrpzvmdr4-ats.iot.us-west-2.amazonaws.com",
};
// setting up the necessary AWS SDK objects
let dynamodb = new AWS.DynamoDB();
let docClient = new AWS.DynamoDB.DocumentClient();
let iotdata = new AWS.IotData();
// parameters for the DynamoDB table to be created
// replace TABLE_NAME with own table name
// replace PRIMARY_KEY with own primary key name
// replace SECONDARY_KEY with own secondary key name
let params = {
TableName: TABLE_NAME,
KeySchema: [
{ AttributeName: PRIMARY_KEY, KeyType: "HASH" },
{ AttributeName: SECONDARY_KEY, KeyType: "RANGE" },
],
AttributeDefinitions: [
{ AttributeName: PRIMARY_KEY, AttributeType: "S" },
{ AttributeName: SECONDARY_KEY, AttributeType: "S" },
],
ProvisionedThroughput: {
ReadCapacityUnits: 10,
WriteCapacityUnits: 10,
},
};
// the API that creates the DynamoDB table
dynamodb.createTable(params, function (err, data) {
if (err) {
console.error(
"Unable to create table. Error JSON:",
JSON.stringify(err, null, 2)
);
} else {
console.log(
"Created table. Table description JSON:",
JSON.stringify(data, null, 2)
);
}
});
// parameters for shadow
// payload is what to update the shadow with
// thingName is the name of the thing that you registered with AWS IoT Core
let shadowParams = {
// core2IoTPayload should be a JSON of your own choice
payload: JSON.stringify(core2IoTPayload),
// replace thingName with the thing name of own device
thingName: "01231bd1cbac971101"
};
// API to update shadow
iotdata.updateThingShadow(shadowParams, function (err, data) {
if (err) {
console.error("Unable to send to core2", JSON.stringify(err, null, 2));
} else {
console.log("send to core2 succeeded:");
}
});
// API to update DynamoDB table
docClient.put(putParams, function (err, data) {
if (err) {
res.send(JSON.stringify("error"));
} else {
res.send(JSON.stringify("success"));
}
});
下一步是创建先生设备。我想要一个可以用晶体管激活的电动水泵,所以我买了其中一个:
我把它拆开,它看起来像这样:
事实证明,只需用开关短接两个端子即可打开(您可以在原理图部分看到这一点)。我将电子设备与伺服器和 PIR 传感器一起粘在一些纸板上,然后向前跳了几步(我忘了拍中间照片),我最终得到了这个:
电动泵机构位于中间部分,就在空透明罐的正上方。四根柱子中心的弯曲“向后 r”部分使雾气输出偏转。最重要的是,我有 PIR 传感器、控制泵机制的晶体管和 Core2ForAWS 设备。一旦雾气打开,电动泵机构就会从罐中直接向上喷射雾状消毒剂。伺服器开始动作,弯曲的“向后 r”段以 360 度的方式偏转薄雾。如果我有一台 3D 打印机,这个设备的设计会大不相同,而且效率更高(雾偏转应该旋转雾输出的喷嘴,而不是雾本身)。对于 PIR,我将其设置为像这样的非重新触发模式,因此每次移动都会导致边缘触发中断:
!!!!笔记 !!!!原理图中的电路图需要澄清一下,舵机的5V和GND线应该连接到外部电池或输入电缆到 core2ForAWS !如果您连接到外部电池,请确保电池的接地连接到 core2ForAWS 的接地。从 core2ForAWS 连接到晶体管基极的导线是 core2ForAWS 上的 PIN26。在进行更改之前,我用完了 CircuitLab 免费试用版。
下面的代码部分列出了启动和运行 core2ForAWS 组件以及全栈应用程序的确切步骤。
之前,我提到了一个设备影子,我想首先邀请您在这里查看此链接:解释什么是设备影子。您可以将设备影子视为 AWS IoT“事物”与外部影响(即全栈应用程序)之间的通信媒介。实际上,它更复杂,但它超出了本文的范围。从本质上讲,发生的事情是全栈应用程序写入此设备影子,并且预置并连接到 AWS IoT Core 的 core2ForAWS 收到刚刚写入设备影子的更改的通知。
要开始使用全栈应用程序,请遵循此处的 README:https ://github.com/daxlar/mister-frontend和此处:https : //github.com/daxlar/mister-backend上面的解释可能比在整个文章中插入代码块更好地解释了代码。
设备的接线将在“原理图”部分列出,所有代码将在“代码”部分。进入演示!
- 物联网解决方案 2次下载
- 探究机械工程物联网系统远程解决方案 15次下载
- 基于流量指纹的物联网设备识别方法 13次下载
- 一种面向物联网服务的Web攻击向量检测方法 7次下载
- 基于物联网的智慧医院建设解决方案
- 物联网芯片设计应该如何降耗
- RF5325应用在WiFi和蓝牙前端模块的集成解决方案应用和数据免费下载
- 基于诸智云的工业物联网解决方案详细资料免费下载 24次下载
- 物联网的真正价值是什么?
- 选择工业物联网标准的中间件解决方案 1次下载
- 一种物联网接入威廉希尔官方网站 方案 16次下载
- 一种智能无线LED照明系统解决方案 5次下载
- 一种简单的图案填充算法
- 一种有效的可转换的认证加密方案
- 一种高效、低延时的会议密钥管理方案
- 支持安全物联网设备开发和制造的解决方案 1059次阅读
- 为什么说网关在任何工业物联网解决方案中都很重要? 3469次阅读
- 如何构建一个完整的物联网解决方案 4743次阅读
- Inventek物联网照明解决方案系统架构分析 1866次阅读
- 嵌入式物联网设备的3种方案 2927次阅读
- 基于一种可以用按键进行调节LCD背光亮度的解决方案 7827次阅读
- 最适合物联网联网的是哪一种威廉希尔官方网站 2840次阅读
- 大规模物联网的要求以及解决方案组件 1825次阅读
- EMI电磁屏蔽-主要材料简介 1.8w次阅读
- 一种使用ARM+FPGA高速访问USB设备的设计方案详解 5528次阅读
- Pelion物联网平台如何进一步助力Arm的物联网战略? 3624次阅读
- 如何设计一个简单效率的小型物联网设备供电方案? 5522次阅读
- 一种基于GPRS的单片机上网的解决方案 4383次阅读
- 一种基于混合信号威廉希尔官方网站 的汽车电子单芯片设计 1142次阅读
- 一种基于DSP的视频监控系统解决方案 3358次阅读
下载排行
本周
- 1山景DSP芯片AP8248A2数据手册
- 1.06 MB | 532次下载 | 免费
- 2RK3399完整板原理图(支持平板,盒子VR)
- 3.28 MB | 339次下载 | 免费
- 3TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 4DFM软件使用教程
- 0.84 MB | 295次下载 | 免费
- 5元宇宙深度解析—未来的未来-风口还是泡沫
- 6.40 MB | 227次下载 | 免费
- 6迪文DGUS开发指南
- 31.67 MB | 194次下载 | 免费
- 7元宇宙底层硬件系列报告
- 13.42 MB | 182次下载 | 免费
- 8FP5207XR-G1中文应用手册
- 1.09 MB | 178次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33566次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21549次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6656次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537798次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420027次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191187次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183279次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多