了解社交距离的游戏。
保持社交距离对于控制 COVID-19 大流行至关重要。GUS 是一款“了解社交距离的游戏”。它专为在教室环境中使用而设计。该项目的目标是帮助孩子们了解病毒如何在人与人之间传播,以及社交距离对疾病传播的影响。
GUS 是一种可穿戴设备(GUS 徽章),用于模拟疾病的传播。班上的每个学生都会收到一个 GUS 徽章,它将成为蓝牙网状网络中的一个节点。老师将有老师的徽章。GUS 希望就可以轻松传播的看不见的病毒创造切实的概念。
该模拟使用了一个非常粗略的近似值,即病毒如何根据人群成员之间的距离在人群中传播。它探讨了口罩和疫苗接种如何影响病毒的传播。这就像一个标签游戏,只是你不知道“它”是谁,也不知道谁被标签了。
GUS 具有三种操作模式:
GUS 的目标不是提供课堂课程。目标是为教师提供一个工具来开启关于社交距离的讨论,并以一种有趣的方式进行讨论。
GUS 网络是一个蓝牙网状网络,由一个教师证卡客户端节点和两个或多个 GUS 证卡服务器节点组成。使用 Nordic nRF Mesh 智能手机应用程序完成配置。我建立了九个 GUS 徽章,除了距离检查外,我发现两个或九个节点之间没有性能下降。我的距离检查方案使用循环法。添加节点会增加网络流量并降低节点向教师报告的频率。可以管理的徽章数量的实际限制可能要高得多。
GUS 教师徽章
教师证上的显示分为三个页面:Badges 、Config和Analysis 。顶部的三个按钮用于选择所需的页面。
GUS 徽章
GUS 徽章使用其两个“眼睛”R、G、B LED 指示其当前状态:
Left Right Description
RGB RGB Identify - Flashing in Red, Green, and Blue
Green Green Healthy, no mask, no vaccine
Green Yellow Healthy, with mask
Blue Blue Healthy, with vaccine
Blue Yellow Healthy, with mask and vaccine
Red Red Infected, no mask and no vaccine
Yellow Red Infected, with mask
Blue Red Infected, with vaccine
Yellow Yellow Infected, with mask and vaccine
Off Off Badges are inactive
该视频演示了 GUS 使用纸孩子而不是真实的东西。它经过大量编辑以适应指定的时间限制。它显示了以下特点:
该项目的代码可在 github 上找到(参见代码部分)。GUS 徽章和教师徽章有不同的项目。它还需要安装Nordic nRF Connect SDK版本 1.5.0(1.5.1 构建但尚未经过测试)。
GUS徽章项目
构建和下载 GUS 徽章代码就像按照北欧关于构建和编程示例应用程序的说明一样简单。只需为项目使用 GUS 徽章文件夹,对于需要浏览到GUS 项目文件夹中的board\arm\gus_bl652文件夹的电路板名称。
GUS教师项目
构建 GUS 教师项目需要几个额外的步骤:
之后,可以使用与 GUS 徽章中相同的步骤构建和加载 GUS Teacher 项目,使用 GUS Teacher 作为项目,使用nrf5340dk_nrf5340_cpuapp作为板名。
供应
对 GUS 徽章和教师徽章进行编程后,需要使用nRF Mesh 智能手机应用程序配置网状网络。网状网络需要:
Gus_Teacher 的元素 1 的供应商模型 0x0032 需要以下内容:
每个 Gus 徽章的供应商型号 0x0032 需要以下内容:
教师徽章
教师徽章的制作是微不足道的。只需将 Adafruit 显示器插入 nRF5340DK 板上,将 USB 移动电源连接到 J2,为显示器添加 3D 打印边框和橡皮筋,您就拥有了高级可穿戴 GUS 教师徽章。
GUS 徽章
制作 GUS 徽章稍微复杂一些。GUS 徽章建立在 30x35mm pcb 上,并使用 nRF52832 模块 (Larid BL652)。我本来希望使用 nRF5340 模块,但在项目开始时可用性受到限制。该电路非常简单,除了电源和接地之外的所有走线都在一层,这使得我可以轻松构建自己的 PCB。
功耗约为 7-10 毫安,这对于纽扣电池供电的设备来说有点高。然而,CR2032 电池可以提供 220mah 的电量,这对于一节课甚至两节课来说已经绰绰有余了。可充电电池可能是更好的解决方案。
蓝牙网状模型
GUS VENDOR MODE 是基于 nRF Connect SDK 网格聊天示例的自定义网格模型。教师徽章是客户端节点,GUS 徽章是服务器节点。关键操作是:
登录是第一个需要运行的操作,但可以随时运行。当点击 GUI 上的扫描按钮时会发生这种情况。它为客户端提供了一种发现所有活动 GUS 徽章节点的地址并检索与它们关联的名称的方法。教师徽章会发布登录消息,并且所有已配置和活动的徽章都会以他们的名字进行响应。
Teacher Badge1 Badge2 ... BadgeN
Signin----->-----^--------^-------------^ Published signin
<-------------| Reply with name
<----------------------| "
<------------------------------------| "
Set-State设置所有徽章或特定徽章的状态。状态通常是指健康/感染、戴口罩或接种疫苗,它们点亮 LED 眼睛以反映状态。还可以识别导致 LED 在有限时间内闪烁的状态或使 LED 变暗的关闭状态。在模拟分析开始时,教师徽章向所有 GUS 徽章发布“健康” ,然后更新每个需要不同状态的徽章的状态。
Teacher Badge1 Badge2 ... BadgeN
>-SS healthy--->----^--------^-------------^ Published set state healthy
>-SS masked--->-----^ Set State Badge1 masked
>-SS infected->--------------^ Set State Badge2 infected
Set-Name 更改与徽章关联的名称。它响应于在 GUI中点击编辑名称而发生。徽章名称存储在徽章上,并在登录时检索。徽章还包含基于徽章节点地址选择的常用默认名称列表(持久性未完全实现)。
Teacher Badge1 Badge2 ... BadgeN
>-Set Name Bjorn ->----------^ Name of Badge2 changed to Bjorn
请求报告是一项复杂的操作,它结合了从徽章中检索联系信息以及启动附近的徽章检查。当处于 GUS 标记模式时,它会响应点击 GUI 中的“记录”按钮而发生。当徽章收到报告请求消息时,它会发送包含六个最近最重要联系人列表的回复。然后,它会清除其联系人列表并向所有其他徽章发布“检查接近度”消息。任何看到Check Proximity消息的徽章都会将发件人的地址和消息的 RSSI 添加到自己的联系人列表中。到教师徽章发送报告请求时对于每个 GUS 徽章,每个 GUS 徽章都有机会查看它们是否与其他任何徽章接触。教师的徽章在录制时以每五秒一次的速率发送报告请求,从而有时间进行近距离检查。如果网络中有 10 个 GUS 徽章,则需要 5 * 10 = 50 秒才能从所有徽章中检索报告。
Teacher Badge1 Badge2 ... BadgeN
Report Req->-----^ Report requested from Badge1
<-------------| Badge1 replies with contacts
Proximity--^-------^-----^ Badge1 publishes Proximity, all other
badges record contact if received.
Report Req->--------------^ Report requested from Badge2
<----------------------| Badge2 replies with contacts
^-Prox-<-|->-Prox--^---^ Badge2 publishes Proximity, all other
badges record contact if received.
...
Report Req->----------------------------^ Report requested from BadgeN
<-------------| BadgeN replies with contacts
^--------^------Prox-<-| BadgeN publishes Proximity, all other
badges record contact if received.
... The process repeats while recording
关于蓝牙 Mesh 的一条评论,我很难理解如何做我需要做的事情。看起来应该很简单的问题,例如客户端如何确定服务器节点的地址却很难找到。幸运的是,北欧团队能够提供帮助。但似乎这样的答案应该可以通过网络搜索找到。
图形用户界面
GUI 使用LVGL库,初始代码主要来自 LVGL Widgets 演示。它使用消息队列来保持响应而不影响代码的其他部分。使用 Visual Studio 2019 在模拟器中运行代码大大加快了 GUI 的开发。采用了许多快捷方式来加快开发速度,例如使用按钮伪造选项卡对话框,而不是在尝试使用选项卡式小部件时尝试找到崩溃的根源。此外,与使用容器和填充物等适当的定位设备不同,控制位置和大小是硬编码的。所以 GUI 实现并不是如何使用 LVGL 创建 GUI 的一个很好的例子。但结果看起来相当体面且反应灵敏(多亏了快速处理器)。
模拟
该模拟假设您的感染风险与与感染者的距离的平方成反比。而且风险是累积的,戴口罩大大降低了感染者戴口罩的风险,但只能适度保护口罩佩戴者,接种疫苗的人不会被感染,传播病毒的机会也会降低。
模拟代码有自己的消息队列。该代码保留一个活动徽章列表,其中包含初始感染状态、蒙面、接种疫苗和病毒总暴露等信息。它还维护了任意两个徽章之间的联系人列表以及它们之间的距离,这会影响曝光级别。联系人列表可能会变得相当大,可能会影响响应时间。计算总曝光的算法有时需要多次遍历联系人列表,这也会影响响应时间。然而,nRF5340 在满足处理需求方面没有问题,而且我从未注意到任何减速。
两种操作模式,课堂和GUS 标签模式都使用相同的联系人列表和大部分相同的代码。由于首先开发了Classroom代码,因此它采用了更复杂的方法来处理联系信息。实施GUS Tag模式代码后,联系人列表最终按时间组织得比最初预期的要好得多,从而简化了处理过程。课堂模式代码的代码可以简化,但到目前为止似乎没有必要。
未来的扩展
如果有更多的时间,可以添加更多的功能。在GUS Tag 的当前实现中,直到分析阶段才知道谁被感染或谁被感染。如果徽章离得太近或刚刚被感染,一项简单的修改将使徽章实时响应。联系人列表包含所有发生的接触,因此可以尝试不同的场景,即人们现在戴着口罩或最初感染了不同的人。还可以搜索特定徽章已进行的所有联系或哪个徽章已进行了最多的联系。如果徽章中的处理器升级到 nRF5340,则可以添加徽章之间的方向,允许教师徽章以图形方式绘制徽章与时间的关系图。
制作 PCB 本身就是一个有趣的小项目。KiCad 用于进行布局以及我们为简化焊接和铣削所做的几件事,例如移除 nRF532830 模块不需要的焊盘和使 PCB 走线更粗。我关注了TeachingTech 的 YouTube 视频,介绍了从布局到工厂的过程。这是一个 1:15 分钟的 PCB 制作视频。实际时间不到5分钟。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !