项目硬件:我们如何建造一个带有黑客任务的房间

项目硬件:我们如何建造一个带有黑客任务的房间
几周前我们度过了 在线寻找黑客:他们建造了一个房间,里面装满了智能设备,并在里面启动了 YouTube 广播。 玩家可以通过游戏网站控制物联网设备; 目标是找到房间里隐藏的武器(强大的激光笔),破解它并导致房间短路。

为了增加动作效果,我们在房间里放了一台碎纸机,里面装了 200 卢布:碎纸机每小时吃掉一张钞票。 赢得游戏后,您可以停止碎纸机并拿走所有剩余的钱。

我们已经告诉 演练后端是如何制作的 项目。 现在是时候谈谈硬件及其组装方式了。


有很多人要求展示打扫房间的时刻 - 我们展示了如何将其拆开

硬件架构:房间控制

当场景已经大致了解、后端准备就绪、并且我们有一个空房间准备安装设备时,我们就开始设计硬件解决方案。

记得老笑话“The S in IoT indicates Security”(“IoT缩写中的字母S代表Security”),我们决定这次游戏场景中的玩家只与前端和后端交互网站,但没有机会直接访问熨斗。

这样做是出于安全和屏幕上发生的情况的考虑:通过玩家直接访问硬件,隔离安全和潜在危险的操作将变得更加困难,例如,快速滚动碎纸机或控制烟火。

在开始设计之前,我们制定了几个控制游戏设备的原则,这成为了设计的基础:

不要使用无线解决方案

整个游戏空间在一帧之内,每个角落都可以到达。无线连接并不真正需要,它们只会成为另一个故障点。

不使用任何特殊的智能家居设备

主要是为了定制的灵活性。显然,我们可以定制许多盒装版本的智能家居系统,并为我们的任务提供现成的管理和控件,但劳动力成本与创建您自己的简单解决方案相当。

此外,有必要设计出能够清楚地表明是玩家改变了其状态的设备:他们打开/关闭了它,或者在字母 FALCON 上放置了特定的灯。

我们从可以在普通无线电零件商店购买的公开硬件中收集了所有元素:在运送披萨和健怡可乐之间,快递员 Chip、Dip 和 Leroy 不断来到该网站。

选择我们自己组装所有东西简化了调试和可扩展性,但是在安装过程中需要更加小心。

所有继电器和 arudin 不应在框架中可见

我们决定将所有可控元素集中到一个地方,并将它们隐藏在幕后,以便能够监控它们的性能,并在必要时小心地爬出摄像机的视线并更换出现故障的单元。

项目硬件:我们如何建造一个带有黑客任务的房间
最后,所有的东西都藏在桌子下面,并且安装了摄像头,使得桌子下面什么也看不见。 这是我们工程师爬上来的“盲点”

结果,我们实际上得到了一个智能设备:它从后端接收其每个部件的状态,并使用适当的命令更改它。

从硬件实现的角度来看,该设备控制了6个要素:

  1. 几个台灯,它们有开/关状态,由玩家控制
  2. 墙上的字母,它们可以根据玩家的命令改变颜色
  3. 服务器负载时风扇会旋转并打开活动挂图
  4. 通过 PWM 控制激光
  5. 按期吃钱的碎纸机
  6. 每次激光发射前都会发出烟雾的机器


用激光测试烟雾机

后来,在框架后面添加了一个舞台灯,其控制方式与第 1 点中的灯完全相同。舞台灯在两种情况下工作:在通电时照亮激光,在激光照射之前照亮重量以战斗模式启动。

这个智能设备是什么?

项目硬件:我们如何建造一个带有黑客任务的房间

一直以来,我们的硬件人员 Yura 都尽量不让事情复杂化,并尽可能提出最简单、最低限度的解决方案。

假设 VPS 只需运行一个脚本,该脚本接收带有设备状态的 json 并将其发送到通过 USB 连接的 Arduino。

连接到端口:

  • 16个常规继电器(它们是视频中发出咔嗒声的继电器。我们主要因为这种声音而选择它们)
  • 4 个固态继电器,用于控制 PWM 通道,例如风扇、
  • 单独的激光器 PWM 输出
  • 向 LED 灯条生成信号的输出

这是从服务器发送到中继的 json 命令的示例

{"power":false,"speed":0,"period":null,"deviceIdentifier":"FAN"}

这是命令到达 Arudino 的函数示例

def callback(ch, method, properties, body):    
request = json.loads(body.decode("utf-8"))    
print(request, end="n")     
send_to_serial(body)

为了跟踪激光最终烧穿绳子并且重物飞到水族箱上的那一刻,我们制作了一个小按钮,当重物落下时会触发该按钮并向系统发出信号。

项目硬件:我们如何建造一个带有黑客任务的房间
用于监控重物运动的按钮

接到这个信号后,用乒乓球制成的烟雾弹应该会点亮。 我们将 4 个烟雾弹直接放入服务器机箱中,并用镍铬合金线将它们连接起来,该线应该像点火器一样加热并工作。

项目硬件:我们如何建造一个带有黑客任务的房间
装有烟雾弹和中国花环的房屋

项目硬件:我们如何建造一个带有黑客任务的房间

Arduino

按照原计划,Arduino 上发生了两个动作。

首先,当收到新请求时,使用 ArduinoJson 库解析该请求。 接下来,每个受管设备都与其两个属性相匹配:

  • 电源状态“开”或“关”(标准状态)
  • 设备打开的时间段 - 从板启动开始的时间(以微秒为单位),此时需要关闭设备,即将状态恢复到标准状态

上次在接收到JSON中相应参数时设置,但无法传输,则该值被设置为0,并且没有发生重置。

Arduino 每个周期执行的第二个操作是更新状态,即检查是否需要打开某些设备或是否需要关闭任何设备。

激光笔-同威震天3000

项目硬件:我们如何建造一个带有黑客任务的房间

这是一款常规LSMVR450-3000MF 3000mW 450nm 手动对焦激光切割打标模块。

字母猎鹰

它们的制作非常简单 - 我们只需复制徽标中的字母,将它们从纸板上剪下来,然后用 LED 胶带覆盖它们。 在这种情况下,我必须将胶带焊接在一起,每个接缝上有 4 个触点,但结果是值得的。 我们的后台人员 Pasha 展现了奇迹般的技巧,在不到几个小时的时间内就完成了。

物联网设备的首次测试和完成

我们进行了第一次测试,同时新的任务也交给了我们。 事实上,在这个过程中,来自 VGIK 的真正电影制片人和摄影师 Ilya Serov 加入了团队 - 他构建了框架,添加了额外的电影灯光,并稍微改变了游戏脚本,使情节更加情感化,并且画面更具戏剧性和戏剧性。

这显着提高了质量,但出现的元件也需要连接到继电器和规定的操作算法。

另一个问题是激光:我们用不同类型的绳子和不同功率的激光做了几次实验。 在测试中,我们只是将重物垂直挂在绳子上。

使用测试令牌运行时,通过 PWM 调节的功率小于 10%,即使长时间暴露也不会损坏绳索。

在战斗模式下,激光散焦到大约直径 10 毫米的点,并自信地从大约一米的距离烧穿带有负载的绳子。

项目硬件:我们如何建造一个带有黑客任务的房间
所以激光器在测试中表现完美

当我们开始在悬挂的重物上测试房间里的所有东西时,结果发现牢固地固定激光器并不那么容易。 然后,当绳子燃烧时,它会熔化、拉伸并移出原来的焦点。

项目硬件:我们如何建造一个带有黑客任务的房间
但它不再像以前那样工作了:绳子移动了

伊利亚将激光移到绳索对面的房间一端,这样激光束就会穿过整个舞台,在画面中看起来很漂亮,这样距离就增加了一倍。

在对已经在战斗中燃烧绳子进行了多次实验后,我们决定不折磨命运,并使用镍铬合金丝确保绳子的切割。 在战斗模式下打开激光后 120 秒,它就摧毁了这条线。 我们决定将其以及分离触点触发时电线的断开和烟雾弹的点火直接硬编码到微控制器的硬件中。

项目硬件:我们如何建造一个带有黑客任务的房间
最终烧断屏幕外绳子的线

因此,Arduino 解决了第三个任务 - 计算出与执行这些命令相关的序列。

我们还决定让 Arduino 能够在电视上数钱并运行碎纸机。最初,我们假设后端会执行此操作,并且当前的余额将在网站上可见,并且在电视上我们将显示来自 YouTube 的评论作为附加互动元素,告诉观众房间中的事件是真实发生的时间。

但在试运行的过程中,伊利亚看着现场,建议在最大的屏幕上显示游戏平衡:还剩下多少钱,已经吃掉了多少,以及碎纸机下次启动的倒计时。

我们将 Arduino 与当前时间联系起来:每隔一小时,碎纸机就会启动一次。 图像通过rasberry显示在电视上,此时rasberry已经接收来自服务器的请求并将其发送到arduino执行。 带有货币指标的图片是通过调用控制台实用程序 fi 来绘制的,如下所示

image = subprocess.Popen(["fim", "-q", "-r", "1920×1080", fim_str]), где fim_str

它是根据所需的数量或时间形成的。

我们提前生成了图片:我们只是用定时器拍摄了一个现成的视频并导出了 200 张图片。

这是被编程到十字架中的机制。当最后的倒计时开始时,我们都到了现场,拿起灭火器,坐下来等待火灾(在不和谐的情况下,火势才刚刚猛烈起来)

如何制作持续一周的广播:选择摄像机

为了完成这个任务,我们需要在 YouTube 上连续播放 7 天 - 这正是我们设置的游戏最长持续时间。有两件事可能会阻止我们:

  1. 连续操作导致相机过热
  2. 网络中断

摄像机必须至少提供全高清图像,以便在房间里玩耍和观看时感到舒适。

最初,我们关注的是为流媒体制作的网络摄像头。 我们正在削减预算,所以我们不想买相机,但事实证明,他们不租相机。 与此同时,我们奇迹般地在我家发现了一台Xbox Kinect摄像头,并将其安装在我的房间里,并开始了为期一周的试播。

相机工作正常并且没有过热,但伊利亚几乎立即注意到它缺乏设置,特别是无法设置曝光。

伊利亚试图使广播类型更接近电影和视频制作的标准:通过明亮的光源、黑暗的背景和画面中的物体来传达动态变化的灯光场景。 同时,我希望保留高光和阴影中图像的细节,同时将数字噪声降至最低。

因此,尽管Kinect在测试中证明是可靠的,并且不需要视频采集卡(另一个失败点),但我们还是决定放弃它。 经过三天测试不同的摄像机后,Ilya 选择了索尼 FDR-AX53 - 一款小型、可靠的摄像机,租金便宜,但同时具有足够的可靠性和视觉特性。

我们租了一台相机,将其与视频捕捉卡一起打开一周,并意识到有了它我们可以在整个任务中持续进行广播。

制作电影:舞台布置和灯光

处理照明需要一定的优雅;我们需要用最少的手段构建照明分数:

1. 玩家找到物体时的照明(激光、重物),以及碎纸机上的常亮灯。 在这里,我们使用了 dedolight 150 - 可靠且紧凑的电影照明设备,配有低压卤素灯,可让您将光束聚焦在特定物体上,而不影响背景和其他物体。

2.实用的游戏灯——台灯、落地灯、星星、花环。 所有实用光线和谐地分布在框架内照亮图像区域,内部有色温为3200K的LED灯,落地灯中的灯覆盖有红色Rosco铝箔滤光片,营造出不寻常的色彩强调。

项目硬件:我们如何建造一个带有黑客任务的房间
我是我妈妈家的工程师,否则明天就要发布

我们如何预留互联网和电力

他们几乎像在数据中心一样处理容错问题:他们决定不偏离基本原则,并根据通常的 N+1 方案进行保留。

如果 YouTube 上的广播停止,这意味着将无法使用同一链接重新连接并继续播放。 当时正值关键时刻,而且房间位于一间普通办公室。

为此,我们使用了基于 OpenWRT 的路由器和 mwan3 软件包。它每 5 秒自动测试一次通道的可用性,并在出现中断时切换到 Yota 的备用调制解调器。结果,不到一分钟就切换到了备用通道。
项目硬件:我们如何建造一个带有黑客任务的房间
消除停电也同样重要,因为即使是短期的电涌也会导致所有计算机重新启动。

因此,我们选择了 ippon innova g2 3000 不间断电源,它可以为所有游戏设备提供备份:我们系统的总功耗约为 300 瓦。它会持续 75 分钟,对于我们的目的来说已经足够了。

我们决定牺牲额外的照明,以防房间停电——房间没有连接不间断电源。

致谢

  • 致整个团队 右室紫外可见分光光度计,谁发明并实施了这个游戏。
  • 另外,对于 RUVDS 管理员来说,为了监控服务器的工作,负载是可以接受的,并且一切正常。
  • 致最好的老板 恩沙普林 事实上,为了响应号召,“我有一个想法:我们拿一台服务器,在上面放一个水族箱,然后在上面挂一个重物,砰,砰,所有东西都被水淹没,短路,火灾!” 他总是自信地说:“做吧!”
  • 谢谢 蒂尔达出版公司 另向米哈伊尔·卡尔波夫(Mikhail Karpov)提出批评,因为他不仅半途而废,允许我们违反使用条款,甚至在我们谈论该项目时还给了我们一年的商业账户。
  • 伊利亚·谢罗夫 S_ILya 为了加入并成为该项目的联合制片人,准备爬行半个晚上,粘合LED灯带,寻找技术解决方案并尽一切努力,以便我们得到一部真正的电影。
  • 若夫内尔 当其他人举手、罗宋汤、道义支持和谈话直到早上时,我总是准备好拯救局势。
  • 萨马特 感谢您为我们联系了国内最好的渗透测试人员,他为我们提供了建议并帮助我们完成任务。
  • 丹尼米尔克 用于所有视频的酷炫视频制作。
  • 德尔费 坚定的态度和工作到最后的意愿。
  • 渡渡鸟披萨工程 几乎总是热披萨。

最要感谢的是玩家们,你们在两天不眠不休、甚至推迟工作的情况下冲进任务时所经历的所有情感。

关于破坏服务器任务的其他文章

项目硬件:我们如何建造一个带有黑客任务的房间

来源: habr.com

添加评论