MĂ”ni nĂ€dal tagasi korraldasime : ehitasime toa, mille tĂ€itsime nutiseadmetega ja alustasime sealt YouTube'i otseĂŒlekannet. MĂ€ngijad said juhtida IoT-seadmeid mĂ€ngu veebisaidilt; eesmĂ€rk oli leida toas peidetud relv (vĂ”imas laserkoonus), hĂ€kkida see ja tekitada toas lĂŒhise.
Et lisada pĂ”nevust, paigaldasime tuppa purustaja, kuhu laadisime 200 000 rubla: purustaja neelas iga tunni jooksul ĂŒhe kupĂŒĂŒri. MĂ€ngu vĂ”itmisel sai purustaja peatada ja kĂ”ik allesjÀÀnud rahad kĂ€tte saada.
Me oleme juba rÀÀkinud , samuti projekti jaoks. On aeg rÀÀkida riistvarast ja kuidas see kokku pandi.

Oli palju soove nÀidata toa koristamise hetke - nÀitame, kuidas me seda lahti vÔtame
Riistvara arhitektuur: toa juhtimine
Alustasime riistvaralahenduse projekteerimist, kui stsenaarium oli juba umbkaudu selge, tagaplaan valmis ja meil oli tĂŒhi tuba, valmis seadmete paigaldamiseks.
MĂ”eldes vanale nali âS tĂ€histab IoT-s turvalisustâ, otsustasime, et seekord mĂ€ngijad suhtlevad mĂ€ngus ainult saidi frontend'i ja backend'iga, kuid ei saa otse riistvarale ligi.
See tehti turvalisuse ja ekraanil toimuva atraktiivsuse kaalutlustel: otsene juurdepÀÀs mÀngijatel riistvarale muudaks oluliselt keeruliseks ohutute ja potentsiaalselt ohtlike tegevuste, nagu nÀiteks kiirendatud ƥreideri kerimise vÔi ilutulestiku juhtimise, isoleerimise.
Enne projekteerimise algust formulaarisime mitu mÀnguseadmete juhtimise printsiipi, mis said konstruktsiooni aluseks:
Ărge kasutage traadita lahendusi
Kogu mĂ€nguruum on ĂŒhes kaadris, iga nurga ulatuses, kuhu saab ulatuda. Traadita ĂŒhenduste jaoks ei olnud tegelikku vajadust ja need oleksid lihtsalt muutunud veel ĂŒheks rikke punktiks.
Ărge kasutage mingeid nutikodu spetsiaalseid seadmeid
Peamiselt paindlikkuse tĂ”ttu seadistamisel. On selge, et saame kohandada palju valmislahendusi nutikodu sĂŒsteemide jaoks valmis admin paneeliga ja juhtimisega, kuid töömahud oleksid vĂ”rreldavad oma lihtsa lahenduse loomisega.
Lisaks pidi mĂ”tlema seadmetele, mille jĂ€rgi on selgelt nĂ€ha, et mĂ€ngijad muudavad selle olekut: lĂŒlitasid sisse/vĂ€lja vĂ”i mÀÀrasid konkreetse valguse tĂ€htedele SOODE.
Kogusime kÔik elemendid avalikult kergesti kÀttesaadavast riistvarast, mida saab osta tavalistest raadiodetailide poodidest: pitsat ja dieedilat ka, suur hulk kurjuseid on pidevalt kohal, et paaridel oli Chip ja Dip ja Leroy.
Otsus kÔik ise kokku panna lihtsustas tÔrgete leidmist ja saatmist, kuid see nÔudis suuremat hoolt paigaldamisel.
KÔik releed ja Arduino ei tohi kaadrisse jÀÀda.
Otsustasime koondada kĂ”ik juhitavad elemendid ĂŒhte kohta ja peita need kaadri taha, et saaksime kontrollida nende tööd ja vajadusel diskreetselt kaamera nĂ€htavusest vĂ€lja roomata ning vĂ€lja vahetada rikki lĂ€inud moduli.

KokkuvÔttes peideti kÔik laua alla ja kaamera paigaldati nii, et laua all midagi ei paistnud. See oli meie "pime ala" inseneri roomamiseks.
LĂ”pptulemuseks saime tegelikult ĂŒhe nutika seadme: see sai tagaplaanilt teavet iga oma osa seisundi kohta ja muutis selle vastava kĂ€suga.
Riistvara teostuse seisukohalt juhtis see seade 6 elementi:
- MĂ”ned laualambid, mis on sisse/vĂ€lja lĂŒlitatavad ja mida juhivad mĂ€ngijad.
- Seinale paigutatud tÀhed, mis vÔivad mÀngijate kÀsul oma vÀrvi muuta.
- Ventilaatorid, mis pöörlevad ja avavad flippimist, kui server peab pinget.
- Laser, mida juhitakse PWM-i kaudu.
- Rikutud, mis sÔi raha ajakava jÀrgi.
- Suitsumasin, mis aktiveerus iga laseripaugu eel.

Testime suitsumasinat koos laseriga.
Hiljem lisandus veel lavavalgustus, mis seisis kaamerast eemal ja mida juhiti tĂ€pselt nagu punkti 1 lambid. Lavavalgustus aktiveerus kahes olukorras: valgustas laserit, kui sellele toidet anti, ja valgustas raskust enne laserite automaatreĆŸiimi kĂ€ivitamist.
Milline see nutikas seade vÀlja nÀgi.

Kogu tee pĂŒĂŒdis meie riistvaraspetsialist JĂŒri mitte keeruliseks minna ja vĂ€lja mĂ”elda kĂ”ige lihtsama, minimalistliku lahenduse.
Eeldati, et VPS-is töötab lihtsalt skript, mis saab seadmete olekuga seotud json'i ja edastab selle usb kaudu ĂŒhendatud Arduino'le.
Portidele olid ĂŒhendatud:
- 16 tavalist releed (just need tekitasid klÔpsu, mida oli videost kuulda. Peamiselt valisime need just selle heli tÔttu)
- 4 tahkisreleed kanali juhtimiseks PWM-iga, nÀiteks ventilaatoritest,
- erinev PWM-vÀljund laserile
- vÀljund, mis genereerib signaali LED-ribale
Siin on nÀide json-kÀskudest, mis jÔudsid releedeni serverist
{"power":false,"speed":0,"period":null,"deviceIdentifier":"FAN"}Ja siin on nÀide funktsioonist, mida kasutati kÀsu saatmiseks Arduinole
def callback(ch, method, properties, body):
request = json.loads(body.decode("utf-8"))
print(request, end="n")
send_to_serial(body)Kuna jĂ€lgida hetke, kui laser lĂ”puks köie lĂ€bi lĂ”ikab ja raskus langeb akvaariumile, tegime vĂ€ikese nupu, mis aktiveerus kaalu langemise korral ja andis sĂŒsteemile signaali.

Kaalu liikumise jÀlgimise nupp
Selle signaali puhul pidi suitsu geraaz olema, mis on valmistatud pingpongipallidest. Me paigutasime 4 suitsugeneraatorit otse serveri korpusesse ja ĂŒhendasime nende juurde nikkeli-niobiumjuhe, mis pidi kuumenema ja toimima kui sĂŒĂŒde.

Korput suitsugeneraatoritega ja Hiina laternaga

Arduino
Algse plaani kohaselt toimetas Arduino peamiselt kaht toimingut.
Esimene â uue pĂ€ringu saamisel, pĂ€ring parsiti lĂ€bi ArduinoJson teegi. Iga juhtimise all oleva seadme jaoks seostatakse kaks omadust:
- toiteolek âseesâ vĂ”i âvĂ€ljasâ (vaikimisi olek)
- periood, mille jooksul seade on sisse lĂŒlitatud â ajavahemik mikrosekunte alates plaadi kĂ€ivitamisest, kui see tuleks juba vĂ€lja lĂŒlitada, see tĂ€hendab tuua olek tagasi vaikeseisundisse
Viimase aja vÀÀrtus mÀÀrati vastava parameetri saamisega JSON-is, kuid selle edastamine polnud hÀdavajalik, siis seadistati vÀÀrtus 0-le ja lÀhtestamist ei toimunud.
Teine tegevus, mida Arduino iga tsĂŒkli jooksul tegi, oli olekute tĂ€iendamine, see tĂ€hendab kontrollimist, kas on vaja midagi sisse lĂŒlitada vĂ”i kas on aeg mĂ”ni seade vĂ€lja lĂŒlitada.
Laserpointer â see on see Megatron 3000.

See on tavaline laserimoodul lÔikamiseks ja mÀrgistamiseks LSMVR450-3000MF 3000mW 450nm kÀsitsi fookuse seadistamisega.
TĂ€htedest Sokol.
Valmistatud vĂ€ga lihtsalt â lihtsalt kopeerisime tĂ€hed logolt, lĂ”ikasime need vĂ€lja pappi ja seejĂ€rel kaostasime LED-kribuga. Selleks tuli kokku joota ribalĂ”ike kohad, 4 kontakti igas Ă”mbluses, kuid tulemus tasus end Ă€ra. Meie backend-arendaja Pasha nĂ€itas imesid, tehes seda vĂ€hem kui mĂ”ne tunni jooksul.

Esimesed testid IoT-seadmest ja viimised lihvimised.
Me tegime esimesed testid ja samuti tulid juurde uued ĂŒlesanded. Asi on selles, et protsessi keskel liitus meeskonnaga tĂ”eline filmiprodutsent ja operaator VGIk-ist, Ilya Serov â ta kehastas kaadri, lisas tĂ€iendava filmiline valgustuse ja muutis pisut mĂ€ngu stsenaariumi, et lugu oleks emotsionaalsem ja pilt dramaatilisem ning teatrilik.
See tÔi kaasa kvaliteedi mÀrkimisvÀÀrse paranemise, kuid ilmusid elemendid, mida oli samuti vaja rautada ja töö algoritm vÀlja kirjutada.
Teine probleem oli laser: tegime mitmeid katseid erinevat tĂŒĂŒpi köite ja erineva vĂ”imsusega laseritega. Katse jaoks riputasime lihtsalt kaalu köie otsas vertikaalselt ĂŒles.
Testtokeniga kÀivitamisel oli vÔimsus, mida reguleeriti lÀbi PWM-i, alla 10% ning köit ei kahjustanud isegi pikaajalise kokkupuute korral.
SĂ”jalise reĆŸiimi jaoks rasvustasime laserit umbes 10 mm lĂ€bimÔÔduga laigu kujul, mis usaldusvÀÀrselt pĂ”letaski köit kaalu all, umbes meetri kauguselt.

Nii töötas laser testide ajal suurepÀraselt.
Kuid kui olime juba hakkanud kĂ”ike testima toas riputatava raskusega, osutus laserit usaldusvÀÀrselt kinnitada ĂŒsna keeruliseks. Peale selle, kui köis pĂ”leb â see sulab, venib ja nihkub esialgsest fookusest.

Niisiis, sellega ei töötanud enam: köis nihkus.
Ilja paigaldas laseri toa vastaspoole köie otsa, et laseri kiir lÀheks lÀbi kogu stseeni ja nÀeks kaadris ilus vÀlja, seetÔttu suurenes vahemaa kahekordselt.
PĂ€rast veel mitmeid katseid köie ĂŒlekuumenemisega lahingus otsustasime mitte saatust proovida ja tagada köie lĂ”ikamine nikroomtraadi abil. See hĂ€vitas lĂ”ime 120 sekundi pĂ€rast laseri sisselĂŒlitamist lahingureĆŸiimil. Selle ning traadi ja suitsupommide sĂŒĂŒtepeatuse eemaldamise otsustasime rangelt sisse kirjutada mikrokontrolleri riistvarasse.

LĂ”im, mis lĂ”puks köie kaadrist ĂŒle kuumenes
Nii tekkis kolmas ĂŒlesanne, millega Arduino tegeles â töötada vĂ€lja jĂ€rjestused, mis olid seotud nende kĂ€skude tĂ€itmisega.
Otsustasime, et Arduino hakkab jĂ€lgima raha arvestust televiisoris ja kĂ€ivitama purustajat. Esialgu planeerisime, et selle eest vastutab tagakĂŒlg ja veebisaidil on nĂ€ha praegune bilanss, samal ajal kui televiisoris nĂ€itame YouTube'i kommentaare, mis on lisanduv interaktiivne element, mis nĂ€itab vaatajatele, et ruumis toimuvad sĂŒndmused reaalajas.
Kuid testimise kĂ€igus vaatas Ilja stseeni ĂŒle ja soovitas nĂ€idata suurimal ekraanil mĂ€ngu bilanssi: kui palju raha on veel alles, kui palju on söödud ja loendus jĂ€rgmise purustaja kĂ€ivitamise jaoks.
Ăhendasime Arduino praeguse ajaga: iga tĂ€istunni möödudes kĂ€ivitati purustaja. Televiisori pilt edastati Raspberry Pi kaudu, mis sel ajal juba sai serverilt pĂ€ringuid ja edastas need Arduino tĂ€itmiseks. Raha nĂ€itude pildid joonistati vĂ€lja konsolutiliidi fim abil umbes nii
image = subprocess.Popen(["fim", "-q", "-r", "1920Ă1080", fim_str]), kus fim_str
Ja see vormistati vajadusest lÀhtudes vastava summa vÔi aja jÀrgi.
Pildid genereerisime ette: lihtsalt vÔtsime valmis video ajastiga ja eksportisime 200 pilti.
Selline mehhaanika oli ristile programmeeritud. Kui lÔpparvamine kÀivitati, sÔitsime kÔik platsile, varustatuna tulekustutitega, ja ootasime tulekahju (mis pÔles ainult Discordis).
Kuidas teha ĂŒlekannet, mis töötab nĂ€dala: kaamera valik.
KĂŒsimuseks oli pidev ĂŒlekande tegemine YouTube'is seitse pĂ€eva â see oli maksimaalne mĂ€ngu kestus. Oli kaks asja, mis meid vĂ”iksid segada:
- Kaamera ĂŒlekuumenemine pideva töö tĂ”ttu.
- Interneti katkestus.
Kaamera pilt pidi olema vÀhemalt Full HD, et mÀngimine ja ruumi jÀlgimine oleks mugav.
Alguses vaatasime streamingutele mÔeldud veebikaamerate suunas. Me lÔikasime eelarvet, nii et kaamera ostmine ei tundunud soovitav, ja vÀlja rentida, nagu selgus, neid ei antud. Sel hetkel leidsime imekombel minu kodus oleva Xbox Kinect kaamera, panime selle tuppa ja kÀivitasime nÀdala eksperimenti.
Kaamera toimis korralikult ja ei ĂŒlekuumenenenud, kuid Ilja mĂ€rkis peaaegu kohe, et seadmest puudusid mĂ”ned seadistused, sealhulgas ei saanud seadistada sĂ€riaega.
Ilja soovitas edastada otseĂŒlekande vĂ€limuse kino-video tootmise standarditele: edastada dĂŒnaamiliselt muutuva valgusskeemiga, erksate valgusallikate, hĂ€marate taustade ja kaadris olevate objektidega. Samuti oli soov pildikvaliteedil sĂ€ilitada detailide töötlus nii valgustes kui varjudes, minimeerides samal ajal digitaalset mĂŒra.
SeetĂ”ttu, kuigi Kinect osutus testide kĂ€igus usaldusvÀÀrseks ja ei vajanud videokaardiga plaati (veel ĂŒks riketekoht), otsustasime sellest loobuda. PĂ€rast kolme pĂ€eva erinevate kaamerate testimist valis Ilja vĂ€lja Sony FDR-AX53 â vĂ€ikese usaldusvÀÀrse kaamera, mille rentaalimine on odav, kuid see pakub piisavat usaldusvÀÀrsust ja pildikvaliteeti.
Me rentisime kaamera, ĂŒhendasime selle nĂ€dalaks videokaardiga ja mĂ”istsime, et selle abil saame loota katkematule otseĂŒlekandele kogu kvesti vĂ€ltel.
Teeme filmi: stseeni ja valgustuse seadmine.
Valgustuse kallal töötamine nÔudis teatud elegantsi, pidime valguspartituuri looma minimaalsete vahenditega:
1. Esemete valgustamine, kui mĂ€ngijad neid leiavad (laser, ketas), samuti pidev valgus shredderil. Kasutati dedolight 150 â usaldusvÀÀrseid ja kompaktseid filmivalgusteid, millel on madalpinge halogeenlambid, mis vĂ”imaldavad keskenduda kitsa kiirgusega konkreetsele objektile, puudutamata tausta ja teisi esemeid.
2. Praktiline mĂ€nguvalgus â lauavalgusti, pĂ”randavalgusti, tĂ€ht, tuuleveski. KĂ”ik praktiline valgus oli kaadris harmooniliselt jaotatud, et valgustada oma pildi ala, sees olid led lambid temperatuuriga 3200K, pĂ”randavalgusti lamp oli suletud punase Rosco foliefiltriga, et luua ebatavaline vĂ€rvi aktsent-n vihje.

Ma olen ema insener vÔi homme kÀivitame
Kuidas me varusime interneti ja elektrit
LÀhenesime tÔrgeteta tööle peaaegu nagu andmekeskuses: otsustasime mitte kÔrvalekaldeid teha pÔhimeetoditest ja varusime tavapÀrase N+1 skeemi jÀrgi.
Kui YouTube'i striim katkeb, tĂ€hendab see, et sama lingiga uuesti ĂŒhendamine ja striimi jĂ€tkamine ei Ă”nnestu. See oli kriitiline hetk, kuna ruum asus tavalises kontoris.
Selle jaoks kasutasime OpenWRT-pĂ”hist ruuterit ja mwan3 paketti. See testis automaatselt iga 5 sekundi tagant kanali kĂ€ttesaadavust ja katkestuse korral lĂŒlitus varu modemile Yota. LĂ”ppkokkuvĂ”ttes toimus vahetus varukanalile vĂ€hem kui minutiga.

Samuti oli ÀÀrmiselt oluline vĂ€listada elektrikatkestused, sest isegi lĂŒhiajaline pingetĂ”us pĂ”hjustaks kĂ”igi arvutite taaskĂ€ivitamise.
SeetĂ”ttu vĂ”tsime kasutusele UPS-i ippon innova g2 3000, mis varustas kĂ”iki mĂ€nguseadmeid: meie sĂŒsteemi koguvĂ”imsus oli umbes 300 vatti. Seda piisaks 75 minutiks, mis on meie eesmĂ€rkide jaoks tĂ€iesti piisav.
Otsustasime loobuda lisavalgustusest, kui ruumis peaks elektri vĂ€lja lĂŒlitama â seda UPS-iga ei ĂŒhendatud.
TĂ€nud
- Kogu meeskonnale , kes mÀngu vÀlja mÔtles ja rakendas.
- Eraldi adminitele RUVDS, et nad jĂ€lgisid serverite tööd, koormus oli vastuvĂ”etav ja kĂ”ik töötas tavapĂ€rases rĂŒtmis.
- Parimale ĂŒlemale et alati kindlalt ĂŒtleb: "Tehke!" vastuseks kĂ”nele "on idee: me vĂ”tame serveri, paneme sellele akvaariumi ja seal all rippub raskus, bum, pah, kĂ”ik oli vee all, lĂŒhis, tulekahju!"
- AitÀh ja eraldi Mihhail Karpovile, et ta mitte ainult ei tulnud meile vastu ega lubanud meie Terminite rikkumist, vaid isegi kinkis meile aastaks Àrikonto, kui rÀÀkisime projektist.
- Ilja Serovile et ta liitus ja sai projekti kaasprodutsendiks, valmis öösel roomama, kleepima LED-linti, otsima tehnilisi lahendusi ja tegema kÔik, et meil oleks tÔeline film.
- et ta oli alati valmis olukonda pÀÀstma, kui teised kÀsi laiutasid, supp, moraalne toetus ja kÔnelused hommikuni.
- et ta sidus meid riigi parima pentesteriga, kes meid nÔustas ja aitas probleemidega.
- kÔikide videoprojektide Àgeda produtseerimise eest.
- kindla kÀe ja valmiduse eest töötada viimasele hetkele.
- Noh peaaegu alati soe pizza.
Ja suurim tÀnu kuulub mÀngijatele kÔikide emotsioonide eest, mida me koos kogesime, kui te kaks ööpÀeva pidevalt mÀngu lÀbisite, unustades isegi töö.
ĂlejÀÀnud artiklid serveri hĂ€vitamise missioonist
Allikas: habr.com
