幾週前我們舉辦了 :他們建造了一個裝滿智慧型裝置的房間,並從裡面啟動了 YouTube 廣播。玩家可以從遊戲網站控制物聯網設備;目標是找到隱藏在房間裡的武器(強大的雷射筆),破解它並使房間短路。
為了增加一些刺激,我們在房間裡放置了一台碎紙機,並在裡面裝入 200 萬盧布:碎紙機每小時吃掉一張鈔票。透過贏得遊戲,您可以停止碎紙機並拿走所有剩餘的錢。
我們已經告訴過 和 專案.現在是時候討論硬體及其組裝方式了。

有很多請求展示打掃房間的瞬間——我們展示如何拆除它
鐵藝建築:房間管理
當場景已經大致清晰,後端已經準備好,我們有一個空房間可以安裝設備時,我們就開始設計硬體解決方案。
回想起那句老笑話“IoT 中的 S 代表安全”,我們決定這次遊戲場景中的玩家只與網站的前端和後端進行交互,但沒有機會直接接觸硬體。
這樣做是出於安全和娛樂的原因:如果玩家可以直接訪問硬件,那麼隔離安全和潛在危險的操作(例如快進碎紙機或控制煙火)就會變得更加困難。
在開始設計之前,我們制定了幾個控制遊戲設備的原則,這些原則成為了設計的基礎:
不要使用無線解決方案
整個遊戲空間都在一個畫面中,每個角落都可以到達。無線連接實際上沒有必要,而且它們只會成為另一個故障點。
不要使用任何特殊的智慧家居設備
主要是為了客製化的靈活性。顯然,我們可以為我們的任務定制許多具有現成的管理和控制的盒裝智慧家庭系統,但勞動力成本與創建我們自己的簡單解決方案相當。
此外,還需要設計出能夠清楚顯示玩家正在改變其狀態的裝置:開啟/關閉它或在字母 SOKOL 上設定特定的燈光。
我們用可以在普通電子產品商店購買的現成硬體組裝了所有組件:在披薩和健怡可樂送貨期間,Chip & Deep 和 Leroy 快遞員不斷抵達現場。
選擇自己組裝所有東西簡化了調試;然而,可擴展性在安裝過程中需要格外小心。
所有繼電器和 arudino 都不應在框架中可見
我們決定將所有控制元素集中到一個地方並隱藏在攝影機後面,以便我們可以監控它們的功能,並在必要時小心地爬出攝影機的視線並更換發生故障的單元。

最後,所有東西都藏在桌子下面,裝上鏡頭,桌子底下什麼都看不見。這就是我們的“盲點”,工程師需要爬過去。
結果,我們最終得到了一個智慧型設備:它從後端接收每個部件的狀態,並使用適當的命令進行更改。
從硬體角度來看,該設備控制6個元素:
- 幾盞檯燈,它們有開/關狀態,由玩家控制
- 牆上的字母,可以根據玩家的指示改變顏色
- 當伺服器負載過大時,風扇旋轉並開啟活動掛圖
- 透過PWM控制雷射
- 按時吃錢的施萊德
- 每次雷射發射前都會啟動一台煙霧機。

用雷射測試煙霧機
後來,增加了一個舞檯燈,它位於框架後面,其控制方式與點 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 每個週期執行的第二個操作是更新狀態,即檢查是否需要開啟某些東西或是否需要關閉某些設備。
雷射筆-同樣的Megatron 3000

這是一個普通的 LSMVR450-3000MF 3000mW 450nm 手動聚焦雷射切割和標記模組。
信隼
它們的製作非常簡單 - 我們只是從徽標上複製字母,將它們從紙板上剪下來,然後用 LED 膠帶覆蓋它們。這需要將膠帶焊接在一起,每個接縫處有 4 個觸點,但結果是值得的。我們的後端開發人員 Pasha 展現了奇蹟般的技能,在不到幾個小時的時間內就完成了這項工作。

物聯網設備的首次測試和收尾工作
我們完成了第一批測試,同時新的任務也降臨到我們頭上。事情是這樣的,在製作過程中,來自 VGIK 的真正的電影製片人兼攝影師 Ilya Serov 加入了團隊——他構建了框架,添加了額外的電影燈光,並稍微改變了遊戲腳本,以便情節更加感人,畫面更加戲劇化和戲劇化。
這顯著提高了質量,但出現的元素也需要連接到繼電器並寫下操作演算法。
另一個問題是雷射:我們用不同類型的繩索和不同功率的雷射做了幾項實驗。為了進行測試,我們只是將負載垂直懸掛在繩子上。
當使用測試令牌運行時,透過 PWM 調節的功率小於 10%,即使長時間暴露也不會損壞繩索。
對於戰鬥模式,雷射散焦到直徑約 10 毫米的點,並從約一公尺的距離自信地燒穿負載的繩索。

因此雷射在測試中運行完美。
當我們開始在房間裡用懸掛的重物測試所有東西時,我們發現將雷射牢固地固定住並不是那麼容易。因為當繩子燃燒時,它會融化、拉長並偏離原來的焦點。

但現在情況不再如此了:繩子移動了
Ilya 將雷射移到房間中與繩子相對的一端,這樣雷射光束就能穿過整個場景並在畫面中看起來很美觀,這使得距離增加了一倍。
在戰鬥中進行了幾次燃燒繩索的實驗之後,我們決定不再冒險,而是藉助鎳鉻絲確保繩索被切斷。在戰鬥模式下,雷射開啟120秒後,線程被摧毀。我們決定將其以及斷開的電線和觸發分離觸點時煙霧彈的點燃直接硬編碼到微控制器硬體中。

最終在螢幕外燒斷繩子的線
因此,Arduino 解決了第三個任務——計算出與這些命令的執行相關的序列。
我們還決定讓 Arduino 負責數電視上的錢並啟動碎紙機。最初,我們假設後端會處理這個問題,並且當前餘額會在網站上可見,而在電視上我們會顯示來自 YouTube 的評論作為額外的互動元素,暗示觀眾房間裡的事件正在實時發生。
但在試運行期間,Ilya 觀察了現場情況,建議在最大的螢幕上顯示遊戲餘額:還剩多少錢,吃了多少,以及下次啟動碎紙機的倒數計時。
我們將 Arduino 與目前時間綁定:每隔整點就會啟動碎紙機。影像透過 Raspberry 顯示到電視上,此時 Raspberry 已經從伺服器接收請求並將其轉發到 Arduino 執行。帶有貨幣指標的圖片是透過呼叫控制台實用程式 fi 繪製的,如下所示
image = subprocess.Popen(["fim", "-q", "-r", "1920×1080", fim_str]), где fim_str
並且它是根據所需的數量或時間形成的。
我們提前生成了圖像:我們只是用計時器拍攝了一段現成的影片並導出了 200 張圖像。
這是被編程到十字架中的機制。當最後的倒數計時開始時,我們都開車前往現場,帶上滅火器,坐下來等待火勢(只有在 Discord 中才能看到火勢的全盛時期)
如何製作持續一週的直播:選擇攝影機
對於這個任務,我們需要在 YouTube 上連續播放 7 天——這是我們設定的遊戲最長時長。有兩件事可能會阻止我們:
- 相機連續工作導致過熱
- 網路中斷
攝影機必須至少提供全高清影像,以使房間內的玩耍和觀看更加舒適。
最初,我們研究了為串流媒體製作的網路攝影機。我們正在削減預算,所以我們不想買相機,而且他們也不租相機。就在那時,我們奇蹟般地在我家附近找到了一個 Xbox Kinect 攝像頭,把它放在房間裡並進行了為期一周的測試直播。
相機運作良好,沒有過熱,但 Ilya 幾乎立即註意到它缺少設置,特別是無法設定曝光。
Ilya 試圖使廣播類型更接近電影和視訊製作的標準:透過明亮的光源、較暗的背景和畫面中的物體來傳達動態變化的燈光場景。同時,我希望保留高光和陰影中的影像細節,並儘量減少數位雜訊。
因此,儘管 Kinect 在測試中被證明是可靠的並且不需要視訊擷取卡(另一個失敗點),我們還是決定放棄它。經過三天對不同相機的測試,Ilya 選擇了 Sony FDR-AX53 - 這是一款小型、可靠的攝影機,租金實惠,但同時具有足夠的可靠性和影像特性。
我們租了一台攝影機,連同視訊擷取卡一起運行了一周,發現有了它,我們就可以在整個任務過程中進行連續的廣播。
製作電影:舞台與燈光
燈光工作需要一定的技巧;我們必須用最少的手段來創造一個照明分數:
1. 當玩家找到物體時,物體會發光(雷射、重物),碎紙機上也會持續發光。這裡我們使用了 dedolight 150——可靠而緊湊的電影照明燈具,配有低壓鹵素燈,可讓您將光束聚焦在特定物體上,而不會影響背景和其他物體。
2.實用玩樂燈-檯燈、落地燈、星星燈、花環燈。所有實用光線都和諧地分佈在框架內,照亮其圖像區域,裡面有色溫為 3200K 的 LED 燈,落地燈中的燈覆蓋有紅色 Rosco 箔濾光片,以營造出不尋常的色彩強調效果。

我是我媽媽的工程師,或明天發布
我們如何保留網路和電力
容錯問題的處理方式幾乎與資料中心相同:他們決定不偏離基本原則,並按照通常的 N+1 方案進行保留。
如果 YouTube 上的直播停止,則表示將無法再使用相同的連結重新連線並繼續直播。此時正值關鍵時刻,房間是一間普通的辦公室。
為此,我們使用了基於 OpenWRT 的路由器和 mwan3 套件。它每 5 秒自動測試一次頻道可用性,如果出現中斷,則切換到 Yota 的備用數據機。結果,不到一分鐘就切換到了備用頻道。

消除停電也同樣重要,因為即使是短暫的電湧也會導致所有電腦重新啟動。
這就是我們採用 ippon innova g2 3000 不間斷電源的原因,它可以為所有遊戲設備提供支援:我們系統的總功耗約為 300 瓦。它將持續 75 分鐘,這對我們的目的來說已經足夠了。
我們決定犧牲額外的照明,以防房間停電——我們沒有將其連接到 UPS。
致謝
- 致整個團隊 ,他提出了這個想法並實現了這個遊戲。
- 對於 RUVDS 管理員來說,對於監控伺服器的工作,負載是可以接受的,並且一切都在正常模式下正常運作。
- 致最好的老闆 因為響應號召“我們有一個想法:我們將拿一台服務器,在上面放一個水族箱,並在其上方懸掛一個重物,轟隆,砰,所有東西都淹沒了,短路,起火!”他總是充滿自信地說“去做吧!”
- 謝謝 特別感謝 Mikhail Karpov,他不僅不辭辛勞允許我們違反使用條款,而且在我們告知該項目後甚至還為我們提供了一年的商業帳戶。
- 致伊利亞·謝羅夫 加入並成為該項目的聯合製片人,準備熬夜粘貼 LED 燈帶,尋找技術解決方案並盡一切努力製作一部真正的電影。
- 當其他人束手無策時,他們總是願意挽救局面,並提供羅宋湯、精神支持和直到早晨的談話。
- 感謝他們為我們聯繫國內最好的筆式測試員,為我們提供建議並幫助我們完成任務。
- 為所有影片製作出精彩的影片。
- 態度堅定,願意工作到最後。
- 出色地 幾乎總是熱騰騰的披薩。
我們也要特別感謝玩家們,感謝你們兩天不眠不休、甚至延後工作,奮戰在這項任務上,帶給我們的感動。
其他關於伺服器破壞任務的文章
來源: www.habr.com
