專案硬體:我們如何建造一個有駭客任務的房間

專案硬體:我們如何建造一個有駭客任務的房間
幾週前我們度過了 在線尋找黑客:他們建造了一個房間,裡面裝滿了智慧型設備,並在裡面啟動了 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 選擇了 Sony 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 燈條,尋找技術解決方案並盡一切努力,以便我們獲得一部真正的電影。
  • 若夫內爾 當其他人舉手、羅宋湯、道德支持和談話直到早上​​時,我總是準備好拯救局勢。
  • 薩馬特 感謝您為我們聯繫了國內最好的滲透測試人員,他為我們提供了建議並幫助我們完成任務。
  • 丹尼米爾克 用於所有影片的酷炫影片製作。
  • 德爾費 堅定的態度和工作到最後的意願。
  • 良好 渡渡鳥披薩工程 幾乎總是熱披薩。

最要感謝的是玩家們,你們在兩天不眠不休、甚至推遲工作的情況下衝進任務時所經歷的所有情感。

關於破壞伺服器任務的其他文章

專案硬體:我們如何建造一個有駭客任務的房間

來源: www.habr.com

添加評論