Perangkat keras proyek: bagaimana kami membangun ruangan dengan pencarian peretas

Perangkat keras proyek: bagaimana kami membangun ruangan dengan pencarian peretas
Beberapa minggu yang lalu kami menghabiskan waktu pencarian online untuk peretas: mereka membangun sebuah ruangan, yang mereka isi dengan perangkat pintar dan meluncurkan siaran YouTube dari sana. Pemain dapat mengontrol perangkat IoT dari situs game; Tujuannya adalah untuk menemukan senjata yang disembunyikan di dalam ruangan (laser pointer yang kuat), meretasnya dan menyebabkan korsleting di dalam ruangan.

Untuk menambah aksinya, kami menempatkan mesin penghancur di dalam ruangan, tempat kami memuat 200 rubel: mesin penghancur tersebut memakan satu lembar uang per jam. Setelah memenangkan permainan, Anda dapat menghentikan mesin penghancur dan mengambil semua sisa uang.

Kami sudah memberi tahu penelusuranDan bagaimana backend dibuat proyek. Saatnya berbicara tentang perangkat keras dan cara perakitannya.


Ada banyak permintaan untuk menunjukkan momen membersihkan ruangan - kami menunjukkan cara kami membongkarnya

Arsitektur Perangkat Keras: Kontrol Ruangan

Kami mulai merancang solusi perangkat keras ketika skenarionya sudah dipahami secara kasar, backend sudah siap, dan kami memiliki ruangan kosong yang siap untuk memasang peralatan.

Mengingat lelucon lama β€œS dalam IoT berarti Keamanan” (β€œHuruf S dalam singkatan IoT berarti Keamanan”), kami memutuskan bahwa kali ini para pemain dalam skenario game hanya berinteraksi dengan front-end dan back-end. dari situsnya, tetapi tidak mendapatkan kesempatan untuk langsung ke setrika.

Hal ini dilakukan demi alasan keamanan dan tontonan dari apa yang terjadi di layar: dengan akses langsung ke perangkat keras oleh pemain, akan jauh lebih sulit untuk mengisolasi tindakan yang aman dan berpotensi berbahaya, misalnya, pengguliran cepat pada mesin penghancur atau pengontrolan. kembang api.

Sebelum memulai perancangan, kami merumuskan beberapa prinsip pengendalian perangkat gaming yang menjadi dasar perancangan:

Jangan gunakan solusi nirkabel

Seluruh ruang bermain berada dalam satu bingkai, yang setiap sudutnya dapat dijangkau. Koneksi nirkabel sebenarnya tidak diperlukan dan koneksi tersebut hanya akan menjadi titik kegagalan lainnya.

Jangan gunakan perangkat rumah pintar khusus apa pun

Terutama demi fleksibilitas penyesuaian. Jelas bahwa kami dapat menyesuaikan banyak versi kotak sistem rumah pintar dengan admin dan kontrol siap pakai untuk tugas kami, namun biaya tenaga kerja akan sebanding dengan membuat solusi sederhana Anda sendiri.

Selain itu, diperlukan perangkat yang dapat menunjukkan dengan jelas bahwa pemainlah yang mengubah statusnya: mereka menyalakan/mematikannya atau memberi lampu khusus pada huruf FALCON.

Kami mengumpulkan semua elemen dari perangkat keras yang tersedia untuk umum yang dapat dibeli di toko komponen radio biasa: antara mengantarkan pizza dan diet cola, kurir Chip and Dip dan Leroy terus-menerus datang ke situs tersebut.

Pilihan untuk merakit semuanya sendiri menyederhanakan proses debug, namun skalabilitas memerlukan kehati-hatian yang lebih besar selama instalasi.

Semua relay dan arudin tidak boleh terlihat di frame

Kami memutuskan untuk membawa semua elemen yang dapat dikontrol ke satu tempat dan menyembunyikannya di belakang layar agar dapat memantau kinerjanya dan, jika perlu, dengan hati-hati merangkak keluar dari pandangan kamera dan mengganti unit yang rusak.

Perangkat keras proyek: bagaimana kami membangun ruangan dengan pencarian peretas
Pada akhirnya, semuanya disembunyikan di bawah meja, dan kamera dipasang sehingga tidak ada yang terlihat di bawah meja. Ini adalah β€œtitik buta” kami bagi para insinyur untuk merayap

Hasilnya, kami mendapatkan satu perangkat pintar: perangkat tersebut menerima status masing-masing bagiannya dari backend dan mengubahnya dengan perintah yang sesuai.

Dari sudut pandang implementasi perangkat keras, perangkat ini mengontrol 6 elemen:

  1. Beberapa lampu meja, memiliki status hidup/mati dan dikendalikan oleh pemain
  2. Huruf di dinding, dapat diubah warnanya atas perintah pemain
  3. Kipas yang memutar dan membuka flipchart ketika server sedang dimuat
  4. Laser dikontrol melalui PWM
  5. Penghancur yang memakan uang sesuai jadwal
  6. Mesin asap yang meledak sebelum setiap tembakan laser


Menguji mesin asap dengan laser

Kemudian, lampu panggung ditambahkan, yang berdiri di belakang bingkai dan dikontrol persis seperti lampu dari titik 1. Lampu panggung bekerja dalam dua kasus: menerangi laser ketika daya diterapkan padanya, dan menerangi beban sebelum laser diluncurkan dalam mode pertempuran.

Apa perangkat pintar ini?

Perangkat keras proyek: bagaimana kami membangun ruangan dengan pencarian peretas

Bagaimanapun, Yura, ahli perangkat keras kami, berusaha untuk tidak memperumit masalah dan memberikan solusi yang paling sederhana dan minimalis.

Diasumsikan bahwa VPS hanya akan menjalankan skrip yang menerima json dengan status perangkat dan mengirimkannya ke Arduino yang terhubung melalui USB.

Terhubung ke port:

  • 16 relay biasa (merekalah yang mengeluarkan bunyi klik yang terdengar di video. Kami memilihnya terutama karena suara ini)
  • 4 relay solid state untuk mengendalikan saluran PWM, seperti kipas,
  • keluaran PWM terpisah untuk laser
  • keluaran yang menghasilkan sinyal ke strip LED

Berikut adalah contoh perintah json yang masuk ke relay dari server

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

Dan ini adalah contoh fungsi yang perintahnya sampai ke Arudino

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

Untuk melacak momen ketika laser akhirnya membakar tali dan beban terbang ke akuarium, kami membuat tombol kecil yang terpicu saat beban turun dan memberi sinyal ke sistem.

Perangkat keras proyek: bagaimana kami membangun ruangan dengan pencarian peretas
Tombol untuk memantau pergerakan beban

Saat sinyal ini, bom asap yang terbuat dari bola pingpong seharusnya menyala. Kami menempatkan 4 suar asap langsung ke dalam casing server dan menghubungkannya dengan utas nichrome, yang seharusnya memanas dan bekerja seperti penyala.

Perangkat keras proyek: bagaimana kami membangun ruangan dengan pencarian peretas
Perumahan dengan bom asap dan karangan bunga Cina

Perangkat keras proyek: bagaimana kami membangun ruangan dengan pencarian peretas

Arduino

Menurut rencana awal, dua tindakan terjadi di Arduino.

Pertama, ketika permintaan baru diterima, permintaan tersebut diurai menggunakan perpustakaan ArduinoJson. Selanjutnya, setiap perangkat yang dikelola dibandingkan dengan dua propertinya:

  • status daya "hidup" atau "mati" (keadaan standar)
  • periode saat perangkat dihidupkan - waktu dalam mikrodetik dari awal pengoperasian papan, saat tiba waktunya untuk mematikannya, yaitu, membawa status ke standar

Terakhir kali disetel saat menerima parameter terkait di JSON, tetapi tidak dapat dikirim, maka nilainya disetel ke 0 dan tidak ada penyetelan ulang yang terjadi.

Tindakan kedua yang dilakukan Arduino setiap siklus adalah memperbarui status, yaitu memeriksa apakah ada kebutuhan untuk menghidupkan sesuatu atau sudah waktunya mematikan perangkat apa pun.

Penunjuk laser - Megatron 3000 yang sama

Perangkat keras proyek: bagaimana kami membangun ruangan dengan pencarian peretas

Ini adalah modul pemotongan dan penandaan laser fokus manual LSMVR450-3000MF 3000mW 450nm biasa.

Surat Falcon

Pembuatannya sangat sederhana - kami cukup menyalin huruf dari logo, memotongnya dari karton, lalu menutupinya dengan pita LED. Dalam hal ini, saya harus menyolder potongan selotip menjadi satu, 4 kontak di setiap jahitan, tetapi hasilnya sepadan. Backender kami Pasha menunjukkan keajaiban keterampilan, melakukannya dalam waktu kurang dari beberapa jam.

Tes pertama perangkat iot dan penyelesaiannya

Kami melakukan tes pertama dan pada saat yang sama tugas baru datang kepada kami. Faktanya adalah bahwa di tengah proses, produser film dan juru kamera asli dari VGIK, Ilya Serov, bergabung dengan tim - ia membuat bingkai, menambahkan pencahayaan bioskop tambahan dan sedikit mengubah skrip permainan untuk membuat plot lebih emosional, dan gambarnya lebih dramatis dan teatrikal.

Ini meningkatkan kualitas secara signifikan, tetapi muncul elemen yang juga perlu dihubungkan ke relai dan algoritma operasi ditentukan.

Masalah lainnya adalah laser: kami melakukan beberapa percobaan dengan berbagai jenis tali dan laser dengan kekuatan berbeda. Untuk pengujiannya, kami cukup menggantungkan beban secara vertikal pada seutas tali.

Saat dijalankan dengan token uji, daya yang diatur melalui PWM kurang dari 10% dan tidak merusak tali bahkan dengan paparan yang lama.

Untuk mode pertempuran, laser didefokus pada kira-kira suatu titik dengan diameter 10 mm dan dengan percaya diri membakar tali dengan beban dari jarak sekitar satu meter.

Perangkat keras proyek: bagaimana kami membangun ruangan dengan pencarian peretas
Jadi laser bekerja dengan sempurna dalam pengujian

Saat kami mulai menguji semuanya dengan benar di dalam ruangan dengan beban yang ditangguhkan, ternyata mengamankan laser dengan aman tidaklah mudah. Kemudian, ketika tali tersebut terbakar, ia meleleh, meregang, dan keluar dari fokus aslinya.

Perangkat keras proyek: bagaimana kami membangun ruangan dengan pencarian peretas
Tapi cara itu tidak lagi berhasil: talinya bergeser

Ilya memindahkan lasernya ke ujung ruangan di seberang tali sehingga sinar lasernya akan melintasi seluruh panggung dan terlihat indah dalam bingkai, sehingga jaraknya menjadi dua kali lipat.

Setelah melakukan beberapa percobaan lagi dengan membakar tali dalam pertempuran, kami memutuskan untuk tidak menyiksa nasib dan mengamankan potongan tali menggunakan kawat nichrome. Itu menghancurkan utas 120 detik setelah menyalakan laser dalam mode pertempuran. Kami memutuskan untuk melakukan hardcode ini, serta pemutusan kabel dan penyalaan bom asap ketika kontak pemisah dipicu, langsung ke perangkat keras mikrokontroler.

Perangkat keras proyek: bagaimana kami membangun ruangan dengan pencarian peretas
Benang yang akhirnya terbakar menembus tali di luar layar

Dengan demikian, muncul tugas ketiga yang dipecahkan Arduino - untuk menyusun urutan yang terkait dengan pelaksanaan perintah ini.

Kami juga memutuskan untuk memberikan Arduino kebutuhan untuk menghitung uang di TV dan menjalankan mesin penghancur. Awalnya, diasumsikan bahwa backend akan melakukan hal ini dan saldo saat ini akan terlihat di situs web, dan di TV kami akan menampilkan komentar dari YouTube sebagai elemen interaktif tambahan, memberi tahu pemirsa bahwa peristiwa di ruangan itu terjadi secara nyata. waktu.

Namun selama uji coba, Ilya melihat pemandangan itu dan menyarankan untuk menunjukkan saldo permainan di layar terbesar: berapa banyak uang yang tersisa, berapa banyak yang sudah dimakan, dan hitungan mundur ke permulaan mesin penghancur berikutnya.

Kami mengikat Arduino dengan waktu saat ini: setiap jam penuh mesin penghancur dimulai. Gambar tersebut ditampilkan di TV menggunakan rasberry, yang pada saat itu sudah menerima permintaan dari server dan mengirimkannya ke Arduino untuk dieksekusi. Gambar dengan indikator moneter dibuat dengan menyebut fim utilitas konsol seperti ini

image = subprocess.Popen(["fim", "-q", "-r", "1920Γ—1080", fim_str]), Π³Π΄Π΅ fim_str

Dan itu dibentuk berdasarkan jumlah atau waktu yang dibutuhkan.

Kami membuat gambar terlebih dahulu: kami cukup mengambil video siap pakai dengan pengatur waktu dan mengekspor 200 gambar.

Ini adalah mekanisme yang diprogram ke dalam salib. Pada saat hitungan mundur terakhir dimulai, kami semua pergi ke lokasi, mempersenjatai diri dengan alat pemadam kebakaran dan duduk menunggu api (yang hanya terjadi dalam perselisihan)

Cara membuat siaran yang berfungsi selama seminggu: memilih kamera

Untuk misi ini, kami memerlukan siaran terus menerus di YouTube selama 7 hari - itulah yang kami tetapkan sebagai durasi maksimum permainan. Ada dua hal yang dapat menghentikan kami:

  1. Kamera terlalu panas karena pengoperasian terus menerus
  2. Pemadaman internet

Kamera harus menyediakan setidaknya gambar Full HD agar bermain dan menonton di dalam ruangan menjadi nyaman.

Awalnya, kami melihat webcam yang diproduksi untuk streamer. Kami memotong anggaran, jadi kami tidak ingin membeli kamera, tetapi ternyata mereka tidak menyewanya. Pada saat yang sama, kami secara ajaib menemukan kamera Xbox Kinect tergeletak di rumah saya, memasangnya di kamar saya dan memulai siaran uji coba selama seminggu.

Kamera berfungsi dengan baik dan tidak terlalu panas, tetapi Ilya segera menyadari bahwa kamera tersebut kekurangan pengaturan, khususnya tidak mungkin untuk mengatur eksposur.

Ilya berupaya mendekatkan jenis siaran dengan standar produksi film dan video: menyampaikan adegan cahaya yang berubah secara dinamis dengan sumber cahaya terang, latar belakang gelap, dan objek dalam bingkai. Pada saat yang sama, saya ingin mempertahankan elaborasi gambar baik dalam sorotan maupun bayangan, dengan noise digital minimal.

Oleh karena itu, meskipun Kinect terbukti andal dalam pengujian dan tidak memerlukan kartu pengambilan video (titik kegagalan lainnya), kami memutuskan untuk meninggalkannya. Setelah tiga hari menguji kamera yang berbeda, Ilya memilih Sony FDR-AX53 - camcorder kecil dan andal yang murah untuk disewa, namun pada saat yang sama memiliki keandalan dan karakteristik visual yang memadai.

Kami menyewa kamera, menyalakannya selama seminggu bersama dengan kartu pengambilan video, dan menyadari bahwa dengan itu kami dapat mengandalkan siaran berkelanjutan sepanjang pencarian.

Pembuatan film : pementasan panggung dan lighting

Mengerjakan pencahayaan membutuhkan ketelitian tertentu; kami perlu membangun skor pencahayaan dengan cara minimal:

1. Penerangan objek saat pemain menemukannya (laser, beban), serta cahaya konstan pada mesin penghancur. Di sini kami menggunakan dedolight 150 - perangkat penerangan film yang andal dan ringkas dengan lampu halogen bertegangan rendah, yang memungkinkan Anda memfokuskan sinar pada objek tertentu tanpa mempengaruhi latar belakang dan objek lainnya.

2. Lampu permainan praktis - lampu meja, lampu lantai, bintang, karangan bunga. Semua cahaya praktis didistribusikan secara harmonis dalam bingkai untuk menerangi area gambar, terdapat lampu LED dengan suhu warna 3200K di dalamnya, lampu pada lampu lantai dilapisi dengan filter foil Rosco merah untuk menciptakan aksen warna yang tidak biasa.

Perangkat keras proyek: bagaimana kami membangun ruangan dengan pencarian peretas
Saya seorang insinyur di rumah ibu saya atau peluncurannya besok

Bagaimana kami memesan internet dan listrik

Mereka mendekati masalah toleransi kesalahan hampir seperti di pusat data: mereka memutuskan untuk tidak menyimpang dari prinsip dasar dan melakukan pencadangan sesuai dengan skema N+1 yang biasa.

Jika siaran di YouTube berhenti, artinya tidak mungkin terhubung kembali menggunakan tautan yang sama dan melanjutkan streaming. Itu adalah saat yang kritis, dan ruangan itu terletak di kantor biasa.

Untuk ini kami menggunakan router berbasis OpenWRT dan paket mwan3. Secara otomatis menguji ketersediaan saluran setiap 5 detik dan, jika terjadi gangguan, beralih ke modem cadangan dengan Yota. Hasilnya, peralihan ke saluran cadangan terjadi dalam waktu kurang dari satu menit.
Perangkat keras proyek: bagaimana kami membangun ruangan dengan pencarian peretas
Menghilangkan pemadaman listrik juga sama pentingnya, karena lonjakan listrik jangka pendek pun akan menyebabkan semua komputer reboot.

Oleh karena itu, kami menggunakan catu daya tak terputus ippon innova g2 3000, yang akan mencadangkan semua perangkat game: total konsumsi daya sistem kami sekitar 300 Watt. Itu akan berlangsung selama 75 menit, cukup untuk tujuan kita.

Kami memutuskan untuk mengorbankan penerangan tambahan jika listrik di dalam ruangan padam - tidak tersambung ke catu daya yang tidak pernah terputus.

Ucapan Terima Kasih

  • Untuk seluruh tim RUVDS, yang menemukan dan mengimplementasikan permainan tersebut.
  • Secara terpisah, kepada administrator RUVDS, untuk memantau pekerjaan server, beban dapat diterima dan semuanya berfungsi seperti biasa.
  • Untuk bos terbaik ntsaplin karena fakta bahwa sebagai tanggapan atas panggilan tersebut, β€œSaya punya ide: kita akan mengambil server, meletakkan akuarium di atasnya, dan menggantungkan beban di atasnya, boom, bang, semuanya terendam air, korsleting, api !” dia selalu dengan percaya diri mengatakan β€œlakukan!”
  • Terima kasih Penerbitan Tilda dan secara terpisah kepada Mikhail Karpov karena tidak hanya bertemu di tengah jalan dan mengizinkan kami melanggar Ketentuan Penggunaan, tetapi bahkan memberi kami akun bisnis selama satu tahun ketika kami membicarakan proyek tersebut.
  • Ilya Serov S_ILya untuk bergabung dan menjadi salah satu produser proyek, siap merangkak setengah malam, menempelkan strip LED, mencari solusi teknis dan melakukan segalanya sehingga kami mendapatkan film yang nyata.
  • zhovner karena selalu siap menyelamatkan keadaan ketika orang lain angkat tangan, borscht, dukungan moril dan perbincangan hingga pagi hari.
  • samat untuk menghubungkan kami dengan pentester terbaik di negara ini, yang menasihati kami dan membantu kami dalam tugas.
  • daniemilk untuk produksi video keren semua video.
  • delphe untuk tangan yang tegas dan kemauan untuk bekerja sampai akhir.
  • Baik Rekayasa Pizza Dodo untuk pizza yang hampir selalu hangat.

Dan rasa terima kasih yang sebesar-besarnya kami sampaikan kepada para pemain atas semua emosi yang kami alami saat Anda menyerbu pencarian selama dua hari tanpa tidur dan bahkan menunda pekerjaan.

Artikel lain tentang misi menghancurkan server

Perangkat keras proyek: bagaimana kami membangun ruangan dengan pencarian peretas

Sumber: www.habr.com

Tambah komentar