项目的硬件:我们如何通过黑客探索来建造一个房间



几周前,我们进行了一次在线黑客调查:我们建立了一个充满智能设备的房间,并从中发起了YouTube广播。玩家可以从游戏站点控制物联网设备;目的是找到隐藏在房间里的武器(强大的激光指示器),砍掉它,并使房间短路。



为了增加一个激动人心的情节,我们在房间里放了一个碎纸机,里面装了200,000卢布:碎纸机每小时吃了一张账单。赢得比赛后,您可以停止撕碎机,并拿走所有剩余的钱。



我们已经描述了游戏的进行以及项目后端的制作方式现在该告诉您有关硬件及其运行方式的信息。





有很多要求显示打扫房间的时刻-我们展示了如何拆卸房间



铁艺建筑:房间控制



当场景已经非常清晰,后端已经准备好并且我们有一个空房间可以安装设备时,我们开始设计硬件解决方案。



回顾以前的笑话“物联网中的S代表安全性”(“物联网中的字母S代表安全性”),我们决定这次游戏场景中的玩家仅与站点的前端和后端交互,但没有机会直接获得到腺体。



这样做是出于安全和娱乐屏幕上事件的原因:通过玩家直接访问硬件,隔离安全和潜在危险的动作将更加困难,例如,加快切碎机的速度或控制烟火。



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



不要使用无线解决方案



整个游戏空间在一帧内,您可以触及每个角落。并不需要无线连接,它们将成为另一个故障点。



请勿使用智能家居中的任何特殊设备



主要是为了实现定制灵活性。显然,可以通过现成的管理面板和管理来定制许多盒装版本的智能家居系统,以完成我们的任务,但是人工成本将与创建您自己的简单解决方案相当。



另外,有必要提出一种能够清楚显示玩家改变其状态的设备:打开/关闭或在FALCON字母上特别点亮。



我们从公开可用的铁中收集了所有元素,这些铁可以在普通的无线电零件商店中购买:在运送比萨饼和减肥可乐之间,快递员Chip和Deep and Leroy不断来到现场。



自行组装所有组件的选择简化了调试,可扩展性,但是在安装过程中需要更高的准确性。



所有继电器和arudino在框架中均不可见



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





结果,所有物品都隐藏在桌子下面,并且安装了摄像头,因此在桌子下面看不到任何东西。这是工程师爬行的“盲点”。从



硬件的角度来看,此设备控制6个元素:



  1. 几个台灯,它们具有开/关状态,并由玩家控制
  2. 墙上的字母可以根据玩家的命令更改颜色
  3. 加载服务器后旋转并打开活动挂图的风扇
  4. PWM控制的激光
  5. 按计划吃钱的切碎机
  6. 烟雾机在每次激光发射前都熄灭了




我们将烟机与激光一起进行测试,



随后添加了一个舞台灯,该灯光竖立在框架后面,并与第1点的灯完全相同。在两种情况下触发了舞台灯:在通电时会点亮激光,在战斗中发射激光之前会点亮重量。模式。



这是什么智能设备?







实际上,我们最终得到了一个智能设备:它从后端接收其各个部分的状态,并使用适当的命令对其进行了更改。



假定将在计算机上运行一个简单的脚本,该脚本将接收带有设备状态的json并将其发送到通过usb连接的arduinka。后来这台计算机被rasberry取代,由于nat而被连接到后端。



连接到端口:



  • 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的



根据最初的计划,在埃杜因卡上采取了两项行动。



首先,当收到新请求时,使用ArduinoJson库解析该请求。此外,它的一些属性与每个受控设备有关:



  • «» «» ( )
  • , ( JSON , , )
  • PWM ,
  • , . 587 . , , , . .


上次设置是在JSON中接收到相应参数时设置的,但是无法传输该参数,因此将该值设置为0,并且不会发生调零。



arduinka在每个周期执行的第二个动作是状态的实现,即检查是否有必要打开某些设备或是否该关闭设备。



激光笔-相同的威震天3000







这是用于切割和标记LSMVR450-3000MF 3000mW 450nm手动聚焦的常规激光模块。



猎鹰字母



非常简单-我们仅复制徽标中的字母,将其从纸板上切下,然后粘贴在led胶带上。在这种情况下,有必要将胶带焊接在一起,每个接缝处有4个触点,但这样做是值得的。我们的后端Pasha在不到几个小时的时间内就表现出了奇迹。





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



我们进行了第一个测试,同时又遇到了新问题。事实是,在此过程中,来自VGIK的真正的电影制片人和摄影师Ilya Serov加入了团队-他制作了画框,增加了额外的电影照明,并略微改变了游戏的场景,从而使情节更具情感感,画面更具戏剧性和戏剧性。



这大大提高了质量,但是有些元件也需要连接到继电器,并且规定了运算算法。



激光是另一个问题:我们用不同类型的绳索和不同功率的激光进​​行了几次实验。对于测试,我们只需将负载垂直悬挂在绳子上。



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



在战斗模式下,激光散焦到直径约10毫米的点,并充满信心地在绳子上燃烧,距离约一米。





因此,该激光器可以完美地用于测试,



当我们已经开始使用悬挂的砝码对房间内的所有物体进行测试时,事实证明,牢固固定激光器并不是那么容易。然后,当绳索着火时,它会从原始焦点下方融化,伸展和移动。





但是,这不再起作用了:绳索移位了



Ilya将激光移到了与绳索相对的房间的末端,这样激光束就可以穿过整个场景并看起来很漂亮,使距离增加了一倍。



在已经进行了一些关于绳子燃烧的实验之后,我们决定不折磨命运,并确保使用镍铬合金丝切割绳子。在战斗模式下打开激光后120秒钟,她破坏了线程。这以及触发分离触点时烟雾弹的导线和保险丝断开,我们决定在微控制器的硬件中进行硬编码。





该线程最终将绳子烧毁在屏幕外,



因此,arduinka解决了第三个任务-确定与执行这些命令相关的序列。



我们还决定提供树莓,该树莓过去只是简单地发送从后端接收的临时JSON,并且需要在电视上跟踪资金并运行粉碎机。最初,假定后端将执行此操作,并且当前余额将在网站上可见,并且在电视上,我们将显示YouTube的评论,作为一种附加的交互式元素,提示观看者房间中的事件是实时发生的。



但是在测试运行期间,Ilya观看了现场并建议在最大的屏幕上显示游戏的平衡:还剩多少钱,被吃掉了多少以及倒数秒直到下一次切碎机开始。



我们将Raspberry绑定到当前时间:碎纸机每隔一小时启动一次。图片在树莓的帮助下显示在电视上,当时树莓已经在接收来自服务器的请求,并将其发送给arduinka。使用诸如此类的fim控制台实用程序调用来绘制带有货币指标的图片,



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



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



我们预先生成了图片:我们只是用定时器拍摄了完整的视频,并导出了200张图片。



这是在任务中编程的机制。到最后一次倒计时开始时,我们所有人都驱车前往现场,用灭火器武装自己,坐下等待火(大火燃烧,只在不和谐中燃烧)



如何播放一周的广播:选择摄像机



为了实现这一目标,我们需要在YouTube上连续播放7天,这就是我们为游戏的最长持续时间所投放的费用。有两件事可能会阻碍我们:



  1. 连续运行会导致腔室过热
  2. 互联网削减


摄像机必须至少提供全高清图片才能播放和舒适地观察房间。



最初,我们朝着为拖缆发布的网络摄像头的方向看。我们削减了预算,因此我们不想购买相机,但事实证明,这些相机无法出租。同时,我们奇迹般地发现Xbox Kinect摄像机躺在我家中,放在房间里,并开始了为期一周的测试广播。



相机的状况很好,并且没有过热,但是Ilya几乎立即注意到它没有设置,特别是无法设置曝光。



Ilya试图使广播的类型更接近于电影和视频制作的标准:通过明亮的光源,变暗的背景和帧中的物体传达动态变化的灯光场景。同时,我希望在高亮和暗处都保留图像的精细化处理,同时将数字噪声降至最低。



因此,尽管kinect在测试中证明是可靠的,并且不需要视频捕获卡(另一个故障点),但我们还是决定放弃它。经过三天的不同摄像机测试,Ilya选择了Sony FDR-AX53-小型,可靠的便携式摄像机,可负担得起,但同时又具有足够的可靠性和视觉特性。



我们租用了相机,将其与视频采集卡一起打开了一个星期,并意识到有了它,我们就可以在整个任务中依靠连续播放。



:



在照明上工作需要一定的宽限度,我们需要以最少的方法建立一个光亮的分数:



1.玩家发现物体时的照明(激光,重量)以及碎纸机上的恒定照明。在这里,他们使用了dedolight 150-具有低压卤素灯的可靠,紧凑的电影院照明设备,使您可以将光束聚焦在特定的物体上,而不会碰到背景和其他物体。



2.实用游戏灯-台灯,落地灯,星星,花环。所有实际的光线都和谐地分布在框架中以照亮其图像区域,内部装有色温为3200K的led灯,落地灯中的灯覆盖有红色的Rosco荧光滤光片,以营造出不寻常的色彩提示点缀。





我和妈妈一起是工程师或明天开始工作



我们如何备份互联网和电力



容错问题几乎像在数据中心中一样被处理:他们决定不偏离基本原理,而是按照通常的N + 1方案保留。



如果YouTube上的广播停止了,则意味着将无法使用相同的链接重新连接并继续播放流。这是关键时刻,房间在常规办公室里。



为此,我们使用了基于OpenWRT的路由器和mwan3软件包。它每5秒钟自动测试一次通道可用性,并在出现中断的情况下从Yota切换到备用调制解调器。结果,切换到备用通道花费了不到一分钟的时间。



排除断电也同样重要,因为即使是短期电涌也会导致所有计算机重新启动。



因此,我们采用了日本Innova G2 3000不间断电源,该电源将备份所有游戏设备:我们系统的总功耗约为300瓦。75分钟就足够了,足以满足我们的目的。



我们决定牺牲额外的照明,以防房间中的电能耗尽-它没有连接到不间断电源。



致谢



  • 对于发明和实施游戏的整个RUVDS团队
  • 对于RUVDS管理员来说,为了监视服务器的工作,负载是可以接受的,并且一切都在正常模式下正常工作。
  • 为了最好的老板 恩沙普林因为有这样一个事实:“有一个主意:我们将拿起一台服务器,在上面放一个鱼缸,然后在上面悬挂一个重物,轰隆,砰砰,一切都被水淹没,短路,着火了!” 他总是自信地说“做吧!”
  • Tilda Publishing , - , .
  • S_ILya , , , , , .
  • zhovner , , , , .
  • samat , , .
  • daniemilk .
  • delfphe .
  • Dodo Pizza Engineering .


最感激的是,玩家们在经历了两天不睡觉,甚至推迟工作的情况下就完成了任务,我们所经历的所有情感。



有关服务器销毁的其他文章








All Articles