Projektilaitteisto: kuinka rakensimme huoneen hakkeritehtävän kanssa

Projektilaitteisto: kuinka rakensimme huoneen hakkeritehtävän kanssa
Pari viikkoa sitten vietimme online-etsintä hakkereille: he rakensivat huoneen, jonka he täyttivät älylaitteilla ja aloittivat siitä YouTube-lähetyksen. Pelaajat voivat ohjata IoT-laitteita pelisivustolta; Tavoitteena oli löytää huoneeseen piilotettu ase (tehokas laserosoitin), murskata se ja aiheuttaa oikosulku huoneeseen.

Toiminnan lisäämiseksi laitoimme huoneeseen silppurin, johon latasimme 200 000 ruplaa: silppuri söi laskun tunnissa. Pelin voittamisen jälkeen voit pysäyttää silppurin ja ottaa kaikki jäljellä olevat rahat.

Olemme jo kertoneet läpikäyntiJa miten tausta on tehty hanke. On aika puhua laitteistosta ja sen kokoamisesta.


Huoneen siivoamisen hetken näyttämistä pyydettiin paljon - näytämme kuinka se puretaan

Laitteistoarkkitehtuuri: Huoneohjaus

Aloitimme laitteistoratkaisun suunnittelun, kun skenaario oli jo suunnilleen ymmärretty, backend oli valmis ja meillä oli tyhjä huone valmiina laitteiden asentamiseen.

Muistaen vanhan vitsin "IoT:n S tarkoittaa turvallisuutta" ("S-kirjain IoT-lyhenteessä tarkoittaa turvallisuutta") päätimme, että tällä kertaa pelin skenaarion pelaajat ovat vuorovaikutuksessa vain etu- ja takapään kanssa. sivustosta, mutta et saa mahdollisuutta päästä suoraan silitysrautaan.

Tämä tehtiin turvallisuussyistä ja näytöllä tapahtuvan näkyvyyden vuoksi: jos pelaajat pääsevät suoraan laitteistoon, olisi paljon vaikeampaa eristää turvallisia ja mahdollisesti vaarallisia toimia, kuten silppurin nopeaa vieritystä tai ohjaamista. pyrotekniikka.

Ennen suunnittelun aloittamista muotoilimme useita pelilaitteiden ohjauksen periaatteita, joista tuli suunnittelun perusta:

Älä käytä langattomia ratkaisuja

Koko pelitila on yhdessä kehyksessä, jonka jokaiseen nurkkaan pääsee käsiksi. Langattomille yhteyksille ei ollut todellista tarvetta, ja niistä tulisi yksinkertaisesti toinen epäonnistumispiste.

Älä käytä mitään erityisiä älykodin laitteita

Lähinnä räätälöinnin joustavuuden vuoksi. On selvää, että voimme räätälöidä monia laatikkoversioita älykodin järjestelmistä valmiilla järjestelmänvalvojilla ja ohjaimilla tehtäväämme varten, mutta työvoimakustannukset olisivat verrattavissa oman yksinkertaisen ratkaisun luomiseen.

Lisäksi piti keksiä laitteita, jotka osoittaisivat selvästi, että pelaajat muuttivat sen tilaa: laittoivat sen päälle/pois tai laittoivat erityisen valon kirjaimiin FALCON.

Keräsimme kaikki elementit julkisesti saatavilla olevista laitteistoista, joita voi ostaa tavallisista radio-osakaupoista: pizzan ja dieetticolan toimittamisen välissä kuriirit Chip and Dip ja Leroy tulivat jatkuvasti paikalle.

Valinta koota kaikki itse yksinkertaisti virheenkorjausta, skaalautuvuus vaati kuitenkin suurempaa huolellisuutta asennuksen aikana.

Kaikki releet ja arudin eivät saa olla näkyvissä kehyksessä

Päätimme tuoda kaikki ohjattavat elementit yhteen paikkaan ja piilottaa ne kulissien taakse, jotta voimme seurata niiden suorituskykyä ja tarvittaessa ryömiä varovasti pois kameran näkyvistä ja vaihtaa viallisen yksikön.

Projektilaitteisto: kuinka rakensimme huoneen hakkeritehtävän kanssa
Lopulta kaikki piilotettiin pöydän alle ja kamera asennettiin niin, että pöydän alle ei näkynyt mitään. Tämä oli "sokea pisteemme", jonka insinööri hiipi

Tuloksena saimme itse asiassa yhden älylaitteen: se vastaanotti jokaisen osansa tilan taustajärjestelmästä ja muutti sen sopivalla komennolla.

Laitteiston toteutuksen kannalta tämä laite ohjasi kuutta elementtiä:

  1. Useita pöytälamppuja, ne ovat päällä/pois-tilassa ja niitä ohjaavat pelaajat
  2. Kirjaimet seinällä, he voivat vaihtaa väriään pelaajien käskystä
  3. Fanit, jotka pyörivät ja avaavat fläppitaulun, kun palvelin on kuormitettuna
  4. Laserohjattu PWM:n kautta
  5. Silppuri, joka söi rahaa aikataulussa
  6. Savukone, joka sammui ennen jokaista laserlaukausta


Savukoneen testaus laserilla

Myöhemmin lisättiin lavavalo, joka seisoi rungon takana ja jota ohjattiin täsmälleen kuten lamppuja kohdasta 1. Lavavalo toimi kahdessa tapauksessa: se valaisi laserin, kun siihen kytkettiin virta, ja se valaisi painon ennen laser laukaistiin taistelutilassa.

Mikä tämä älylaite oli?

Projektilaitteisto: kuinka rakensimme huoneen hakkeritehtävän kanssa

Koko matkan Yura, laitteistokaverimme, yritti olla mutkistamatta asioita ja keksiä yksinkertaisimman, minimalistisen ratkaisun.

Oletettiin, että VPS yksinkertaisesti ajaisi skriptin, joka vastaanottaa jsonin laitteiden tilan kanssa ja lähettää sen USB:n kautta kytkettyyn Arduinoon.

Kytketty portteihin:

  • 16 tavallista relettä (ne pitivät videossa kuuluvaa naksahdusääntä. Valitsimme ne pääasiassa tämän äänen takia)
  • 4 puolijohderelettä PWM-kanavien, kuten tuulettimien, ohjaamiseen,
  • erillinen PWM-lähtö laserille
  • lähtö, joka tuottaa signaalin LED-nauhalle

Tässä on esimerkki json-komennosta, joka tuli releeseen palvelimelta

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

Ja tämä on esimerkki funktiosta, jolla komento pääsi Arudinoon

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

Seurataksemme hetkeä, jolloin laser vihdoin polttaa köyden läpi ja paino lentää akvaarioon, teimme pienen painikkeen, joka laukesi painon putoamisen jälkeen ja antoi signaalin järjestelmälle.

Projektilaitteisto: kuinka rakensimme huoneen hakkeritehtävän kanssa
Painin liikkeen seurantapainike

Tästä signaalista pingispalloista valmistettujen savupommien piti syttyä. Laitoimme 4 savusoihketta suoraan palvelinkoteloon ja liitimme ne nikromilangalla, jonka piti kuumentua ja toimia kuin sulake.

Projektilaitteisto: kuinka rakensimme huoneen hakkeritehtävän kanssa
Asunto savupommeilla ja kiinalaisella seppeleellä

Projektilaitteisto: kuinka rakensimme huoneen hakkeritehtävän kanssa

Arduino

Alkuperäisen suunnitelman mukaan Arduinolla tapahtui kaksi toimenpidettä.

Ensin, kun uusi pyyntö vastaanotettiin, pyyntö jäsennettiin ArduinoJson-kirjaston avulla. Seuraavaksi jokainen hallittu laite yhdistettiin sen kahdella ominaisuudella:

  • virtatila "on" tai "off" (vakiotila)
  • aika, jonka laite on kytketty päälle - aika mikrosekunteina kortin alusta, jolloin on aika sammuttaa se, eli tuoda tila standardiin

Viimeksi se asetettiin vastaanotettaessa vastaavaa parametria JSONissa, mutta sitä ei voitu lähettää, sitten arvoksi asetettiin 0, eikä nollausta tapahtunut.

Toinen toiminto, jonka Arduino suoritti joka syklissä, oli tilojen päivittäminen, eli sen tarkistaminen, onko jotain syytä kytkeä päälle vai oliko aika sammuttaa jokin laite.

Laserosoitin - sama Megatron 3000

Projektilaitteisto: kuinka rakensimme huoneen hakkeritehtävän kanssa

Tämä on tavallinen LSMVR450-3000MF 3000mW 450nm manuaalitarkennus laserleikkaus- ja merkintämoduuli.

Kirjeet Falcon

Ne tehtiin hyvin yksinkertaisesti - kopioimme kirjaimet logosta, leikkasimme ne pahvista ja peitimme ne sitten LED-teipillä. Tässä tapauksessa minun piti juottaa teippipalat yhteen, 4 kontaktia jokaisessa saumassa, mutta tulos oli sen arvoinen. Taustakumppanimme Pasha osoitti taitojen ihmeitä ja teki sen alle muutamassa tunnissa.

Iot-laitteen ensimmäiset testit ja viimeistely

Teimme ensimmäiset testit ja samalla meille saapui uusia tehtäviä. Tosiasia on, että prosessin keskellä todellinen elokuvatuottaja ja kameramies VGIK:stä, Ilja Serov, liittyi tiimiin - hän rakensi kehyksen, lisäsi elokuvateatterin lisävalaistusta ja muutti hieman pelin käsikirjoitusta tehdäkseen juonen tunteellisemmasta, ja kuva on dramaattisempi ja teatraalisempi.

Tämä paransi laatua merkittävästi, mutta ilmaantui elementtejä, jotka myös piti liittää releeseen ja määrätty toiminta-algoritmi.

Toinen ongelma oli laser: teimme useita kokeita erityyppisillä köysillä ja eri tehoisilla lasereilla. Testiä varten ripustimme painon pystysuoraan köyteen.

Testimerkillä juostessa PWM:n kautta säädelty teho oli alle 10 %, eikä se vaurioittanut köyttä pitkälläkään altistuksella.

Taistelutilassa laser defokusoitiin noin 10 mm:n halkaisijaltaan olevaan kohtaan ja se poltti luotettavasti köyden läpi kuormalla noin metrin etäisyydeltä.

Projektilaitteisto: kuinka rakensimme huoneen hakkeritehtävän kanssa
Joten laser toimi täydellisesti testeissä

Kun aloimme testata kaikkea huoneessa ripustetulla painolla, kävi ilmi, että laserin kiinnittäminen turvallisesti ei ollutkaan niin helppoa. Sitten kun köysi palaa, se sulaa, venyy ja siirtyy pois alkuperäisestä painopisteestään.

Projektilaitteisto: kuinka rakensimme huoneen hakkeritehtävän kanssa
Mutta se ei enää toiminut niin: köysi siirtyi

Ilja siirsi laserin köyttä vastapäätä olevan huoneen päähän, jotta lasersäde kulkisi koko lavan poikki ja näyttäisi kauniilta kehyksessä, mikä kaksinkertaisti etäisyyden.

Suoritettuamme useita lisää kokeita köyden polttamiseen jo taistelussa, päätimme olla kiduttamatta kohtaloa ja varmistaa köyden leikkaaminen nikromilangalla. Se tuhosi langan 120 sekuntia laserin käynnistämisen jälkeen taistelutilassa. Päätimme koodata tämän, samoin kuin johdon katkaisun ja savupommien syttymisen, kun erotuskosketin laukeaa, suoraan mikro-ohjaimen laitteistoon.

Projektilaitteisto: kuinka rakensimme huoneen hakkeritehtävän kanssa
Lanka, joka lopulta paloi köyden läpi näytön ulkopuolella

Siten ilmestyi kolmas tehtävä, jonka Arduino ratkaisi - selvittää näiden komentojen suorittamiseen liittyvät sekvenssit.

Päätimme myös antaa Arduinolle tarpeen laskea rahaa televisiossa ja käyttää silppuria. Aluksi oletettiin, että taustaosa tekee tämän ja nykyinen saldo näkyy verkkosivuilla, ja televisiossa näytämme YouTuben kommentteja interaktiivisena lisäelementtinä, joka kertoo katsojille, että huoneessa tapahtuvat tapahtumat tapahtuvat todellisuudessa. aika.

Mutta testiajon aikana Ilja katsoi kohtausta ja ehdotti pelin saldon näyttämistä suurimmalla näytöllä: kuinka paljon rahaa on vielä jäljellä, kuinka paljon on syöty ja lähtölaskenta silppurin seuraavaan käynnistykseen.

Sitoimme Arduinon nykyiseen aikaan: joka täysi tunti käynnistettiin silppuri. Kuva näytettiin televisiossa Rasberryn avulla, joka tuolloin jo vastaanotti pyyntöjä palvelimelta ja lähetti ne arduinoon suoritettavaksi. Kuvat rahallisilla indikaattoreilla piirrettiin kutsumalla konsoliapuohjelmaa fim jotenkin näin

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

Ja se muodostettiin vaaditun määrän tai ajan perusteella.

Luomme kuvat etukäteen: otimme vain valmiin videon ajastimella ja vietimme 200 kuvaa.

Tämä on mekaniikka, joka ohjelmoitiin ristiin. Kun viimeinen lähtölaskenta alkoi, menimme kaikki paikalle, aseistautuimme sammuttimilla ja istuimme odottamaan tulipaloa (joka oli vasta täydessä vauhdissa ristiriidassa)

Kuinka tehdä lähetys, joka toimii viikon ajan: kameran valinta

Tehtävää varten tarvitsimme jatkuvan lähetyksen YouTubessa 7 päivän ajan – juuri sen asetimme pelin enimmäiskestoksi. Kaksi asiaa saattoi pysäyttää meidät:

  1. Kameran ylikuumeneminen jatkuvan käytön vuoksi
  2. Internet-katkos

Kameran oli tarjottava vähintään Full HD -kuva, jotta huoneessa pelaaminen ja katselu olisi mukavaa.

Aluksi tarkastelimme verkkokameroita, jotka on valmistettu streamereille. Leikkasimme budjettia, joten emme halunneet ostaa kameraa, mutta kuten kävi ilmi, he eivät vuokraa niitä. Samaan aikaan löysimme ihmeen kaupalla kotoani makaavan Xbox Kinect -kameran, asensimme sen huoneeseeni ja aloitimme testilähetyksen viikon ajan.

Kamera toimi hyvin eikä ylikuumentunut, mutta Ilja huomasi melkein heti, että siitä puuttui asetuksia, erityisesti valotuksen asettaminen oli mahdotonta.

Ilja pyrki tuomaan lähetystyyppiä lähemmäksi elokuva- ja videotuotannon standardeja: välittämään dynaamisesti muuttuvaa valokohtausta kirkkailla valonlähteillä, tummennetulla taustalla ja kehyksessä olevilla kohteilla. Samalla halusin säilyttää kuvan hienostuneisuuden sekä valo- että varjokohdissa minimaalisella digitaalisella kohinalla.

Siksi, vaikka Kinect osoittautui luotettavaksi testeissä eikä vaatinut videokaappauskorttia (toinen vikakohta), päätimme luopua siitä. Kolmen päivän eri kameroiden testaamisen jälkeen Ilja valitsi Sony FDR-AX53:n - pienen, luotettavan videokameran, joka on edullinen vuokrata, mutta jolla on samalla riittävä luotettavuus ja visuaaliset ominaisuudet.

Vuokrasimme kameran, laitoimme sen päälle viikoksi videokaappauskortin kanssa ja tajusimme, että sen avulla voimme luottaa jatkuvaan lähetykseen koko matkan ajan.

Elokuvan tekeminen: näyttämö ja valaistus

Valaistuksen työstäminen vaati tiettyä armoa; meidän piti rakentaa valaistuspisteet mahdollisimman pienin keinoin:

1. Esineiden valaistus, kun pelaajat löytävät ne (laser, paino), sekä jatkuva valo silppurissa. Täällä käytimme dedolight 150 - luotettavia ja kompakteja filmivalolaitteita pienjännitehalogeenilampuilla, joiden avulla voit kohdistaa säteen tiettyyn kohteeseen vaikuttamatta taustaan ​​ja muihin esineisiin.

2. Käytännöllinen leikkivalo - pöytälamppu, lattiavalaisin, tähti, seppele. Kaikki käytännöllinen valo jakautui kehykseen harmonisesti kuva-alueen valaisemiseksi, sisällä oli LED-lamppuja, joiden värilämpötila oli 3200K, lattiavalaisimen lamppu peitettiin punaisella Rosco-foliosuodattimella epätavallisen värikorosteen luomiseksi.

Projektilaitteisto: kuinka rakensimme huoneen hakkeritehtävän kanssa
Olen insinööri äitini luona tai lanseeraus on huomenna

Kuinka varasimme internetin ja sähkön

He lähestyivät vikasietoasioita melkein kuin konesalissa: päättivät olla poikkeamatta perusperiaatteista ja varattiin tavanomaisen N+1-järjestelmän mukaan.

Jos lähetys YouTubessa pysähtyy, on mahdotonta muodostaa yhteyttä uudelleen käyttämällä samaa linkkiä ja jatkaa suoratoistoa. Se oli kriittinen hetki, ja huone sijaitsi tavallisessa toimistossa.

Tätä varten käytimme OpenWRT-pohjaista reititintä ja mwan3-pakettia. Se testasi automaattisesti kanavan saatavuuden 5 sekunnin välein ja vaihtoi tauon sattuessa Yotan varamodeemiin. Tämän seurauksena vaihto varakanavalle tapahtui alle minuutissa.
Projektilaitteisto: kuinka rakensimme huoneen hakkeritehtävän kanssa
Yhtä tärkeää oli myös sähkökatkojen eliminointi, sillä lyhytaikainenkin virtapiike aiheuttaisi kaikkien tietokoneiden uudelleenkäynnistyksen.

Siksi otimme ippon innova g2 3000 keskeytymättömän virtalähteen, joka varmuuskopioi kaikki pelilaitteet: järjestelmämme kokonaisvirrankulutus oli noin 300 wattia. Se kestäisi 75 minuuttia, aivan tarpeeksi meidän tarkoituksiin.

Päätimme uhrata lisävalaistuksen siltä varalta, että huoneesta katkesi sähkö - sitä ei ollut kytketty keskeytymättömään virtalähteeseen.

Kiitokset

  • Koko joukkueelle RUVDS, joka keksi ja toteutti pelin.
  • Erikseen RUVDS-järjestelmänvalvojille, palvelimien toiminnan seurantaan, kuormitus oli hyväksyttävää ja kaikki toimi normaalisti.
  • Parhaalle pomolle ntsaplin siitä, että vastauksena kutsuun: "Minulla on idea: otamme palvelimen, laitamme siihen akvaarion ja ripustamme sen päälle painon, puomi, pama, kaikki on veden tulvaa, oikosulku, tuli !” hän sanoo aina luottavaisesti "tee se!"
  • Kiitos Tilda Publishing ja erikseen Mikhail Karpoville siitä, että ei vain tapasi puolivälissä ja antoi meidän rikkoa käyttöehtoja, vaan jopa antoi meille yritystilin vuodeksi, kun puhuimme projektista.
  • Ilja Serov S_ILya liittymisestä ja projektin yhteistuottajaksi, valmiina ryömimään puoli yötä, liimaamaan LED-nauhaa, etsimään teknisiä ratkaisuja ja tekemään kaikkensa, jotta saamme oikean elokuvan.
  • zhovner siitä, että olet aina valmis pelastamaan tilanteen, kun muut oksentavat kätensä, borssia, moraalista tukea ja keskusteluja aamuun asti.
  • samat siitä, että olet yhdistänyt meidät maan parhaaseen pentesteriin, joka neuvoi ja auttoi meitä tehtävissä.
  • daniemilk kaikkien videoiden viileään videotuotantoon.
  • delphe lujasta kädestä ja halusta työskennellä viimeiseen asti.
  • hyvin Dodo Pizza Engineering lähes aina lämpimään pizzaan.

Ja suurin kiitos kuuluu pelaajille kaikista tunteista, joita koimme, kun ryntäsitte tehtävään kaksi päivää nukkumatta ja jopa lykkäämättä töitä.

Muita artikkeleita palvelimen tuhoamisesta

Projektilaitteisto: kuinka rakensimme huoneen hakkeritehtävän kanssa

Lähde: will.com

Lisää kommentti