معدات المشروع: كيف قمنا ببناء غرفة مع مهمة القراصنة



قبل أسبوعين ، أجرينا بحثًا عبر الإنترنت عن المتسللين : بنينا غرفة مليئة بالأجهزة الذكية وأطلقنا بثًا على YouTube منها. يمكن للاعبين التحكم في أجهزة إنترنت الأشياء من موقع اللعبة ؛ كان الهدف هو العثور على سلاح مخبأ في الغرفة (مؤشر ليزر قوي) واختراقه واختراق الغرفة.



لإضافة مخطط مثير ، وضعنا آلة التقطيع في الغرفة ، حيث قمنا بتحميل 200000 روبل: أكلت آلة التقطيع فاتورة في الساعة. بعد الفوز باللعبة ، كان من الممكن إيقاف آلة التقطيع وأخذ جميع الأموال المتبقية.



لقد وصفنا بالفعل مرور اللعبة ، وكذلك كيفية إنشاء الواجهة الخلفية للمشروع. حان الوقت لإخبارك عن الأجهزة وكيف كانت تسير.





كان هناك الكثير من الطلبات لإظهار لحظة تنظيف الغرفة - أظهرنا كيف نقوم بتفكيكها



العمارة الحديدية: التحكم في الغرفة



بدأنا في تصميم حل الأجهزة عندما كان السيناريو واضحًا بالفعل تقريبًا ، وكانت الواجهة الخلفية جاهزة ولدينا غرفة فارغة جاهزة لتركيب المعدات.



تذكر النكتة القديمة "إن S في IoT تعني الأمان" ("الحرف S في اختصار IoT يرمز إلى الأمان") ، قررنا هذه المرة أن اللاعبين في سيناريو اللعبة يتفاعلون فقط مع الواجهة الأمامية والخلفية للموقع ، لكن لا تتاح لهم الفرصة للحصول مباشرة الى الغدة.



تم القيام بذلك لأسباب تتعلق بالسلامة والترفيه لما يحدث على الشاشة: من خلال الوصول المباشر للاعبين إلى الأجهزة ، سيكون من الصعب للغاية عزل الإجراءات الآمنة والخطيرة ، على سبيل المثال ، تسريع آلة التقطيع أو التحكم في الألعاب النارية.



قبل البدء في التصميم ، قمنا بصياغة عدة مبادئ للتحكم في أجهزة الألعاب ، والتي أصبحت أساس التصميم:



لا تستخدم الحلول اللاسلكية



مساحة اللعب بأكملها في إطار واحد ، يمكنك الوصول إلى كل ركن منها. لم تكن هناك حاجة حقيقية للاتصالات اللاسلكية وستصبح مجرد نقطة فشل أخرى.



لا تستخدم أي أجهزة خاصة من المنزل الذكي



في الغالب من أجل مرونة التخصيص. من الواضح أنه من الممكن تخصيص العديد من الإصدارات المعبأة لأنظمة المنزل الذكي باستخدام لوحة تحكم وتحكم جاهزة لمهمتنا ، ولكن تكاليف العمالة ستكون قابلة للمقارنة مع إنشاء حل بسيط خاص بك.



بالإضافة إلى ذلك ، كان من الضروري ابتكار أجهزة تُظهر بوضوح ما يغير اللاعبون حالته بالضبط: قاموا بتشغيل / إيقاف تشغيل أو وضع ضوء معين على أحرف FALCON.



لقد جمعنا جميع العناصر من الحديد المتاح للجمهور ، والذي يمكن شراؤه من متاجر قطع غيار الراديو العادية: بين تسليم البيتزا وكولا الدايت ، جاء الناقلون Chip و Deep و Leroy باستمرار إلى الموقع.



ومع ذلك ، فإن اختيار تجميع كل شيء بأنفسنا قد سهل التصحيح ، وقابلية التوسع ، يتطلب مزيدًا من الدقة أثناء التثبيت.



يجب ألا تكون جميع المرحلات و arudino مرئية في الإطار



قررنا إحضار جميع العناصر التي يمكن التحكم فيها في مكان واحد وإخفائها خلف الكواليس حتى نتمكن من التحكم في الأداء ، وإذا لزم الأمر ، الزحف بعناية خارج مجال رؤية الكاميرا واستبدال الوحدة الفاشلة.





ونتيجة لذلك ، تم إخفاء كل شيء تحت الطاولة ، وتم تثبيت الكاميرا بحيث لا يمكن رؤية أي شيء أسفل الطاولة. كانت هذه "



النقطة العمياء" لزحف المهندس. من وجهة نظر الأجهزة ، يتحكم هذا الجهاز في 6 عناصر:



  1. العديد من مصابيح الطاولة ، لديها حالة تشغيل / إيقاف ويتم التحكم فيها من قبل اللاعبين
  2. رسائل على الحائط ، يمكنهم تغيير لونهم بأمر من اللاعبين
  3. المراوح التي تدور وتفتح اللوح القالب عندما يكون الخادم تحت الحمل
  4. الليزر المتحكم فيه PWM
  5. التقطيع الذي أكل المال في جدول
  6. آلة دخان انفجرت قبل كل ضربة ليزر




نقوم باختبار آلة الدخان مع الليزر. في



وقت لاحق ، تمت إضافة ضوء المرحلة ، والذي يقف خلف الإطار ويتم التحكم فيه تمامًا مثل المصابيح من النقطة 1. تم تشغيل ضوء المرحلة في حالتين: قام بإضاءة الليزر عند توصيل الطاقة إليه وإضاءة الوزن قبل إطلاق الليزر في القتال الوضع.



ماذا كان هذا الجهاز الذكي؟







لقد انتهى الأمر بالفعل بجهاز ذكي واحد: لقد استقبل حالة كل جزء من أجزائه من الواجهة الخلفية وقم بتغييرها بالأمر المناسب.



كان من المفترض أن يتم تشغيل برنامج نصي بسيط على الكمبيوتر الذي يستقبل json بحالة الأجهزة ويرسلها إلى arduinka المتصل عبر USB. في وقت لاحق تم استبدال هذا الكمبيوتر بالتوت ، وتم توصيله بالواجهة الخلفية بسبب نات.



متصلة بالمنافذ:



  • 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 قنوات دخان مباشرة في علبة الخادم وجلبنا خيط نيتشروم إليهم ، والذي كان من المفترض أن يسخن ويعمل مثل الصمامات.





الجسم بقنابل الدخان وإكليل صيني







اردوينو



على اردوينكا ، وفقًا للخطة الأصلية ، تم اتخاذ إجراءين.



أولاً ، عند تلقي طلب جديد ، تم تحليل الطلب باستخدام مكتبة ArduinoJson. علاوة على ذلك ، ارتبطت العديد من خصائصه بكل جهاز يتم التحكم فيه:



  • «» «» ( )
  • , ( JSON , , )
  • PWM ,
  • , . 587 . , , , . .


تم تعيين آخر مرة عند استلام المعلمة المقابلة في JSON ، ولكن لا يمكن إرسالها ، ثم تم ضبط القيمة على 0 ولم يحدث التصفير.



الإجراء الثاني الذي تؤديه arduinka في كل دورة هو تفعيل الحالات ، أي التحقق مما إذا كان من الضروري تشغيل شيء ما أو ما إذا كان الوقت قد حان لإيقاف تشغيل الجهاز.



مؤشر الليزر - نفس ميجاترون 3000







هذه وحدة ليزر تقليدية لقطع ووسم LSMVR450-3000MF 3000mW 450nm مع التركيز اليدوي.



رسائل الصقر



أصبح الأمر بسيطًا للغاية - قمنا فقط بنسخ الأحرف من الشعار ، وقطعها من الورق المقوى ، ثم لصقها بشريط LED. في هذه الحالة ، كان من الضروري لحام قطع الشريط معًا ، و 4 جهات اتصال في كل خط ، لكن النتيجة كانت تستحق العناء. أظهر باشا الخلفي لدينا معجزات في المهارة ، حيث قام بذلك في أقل من بضع ساعات.





أول اختبارات جهاز iot والتشطيب



أجرينا الاختبارات الأولى وفي نفس الوقت واجهتنا مشاكل جديدة. الحقيقة هي أنه في منتصف العملية ، انضم إليا سيروف ، منتج أفلام ومصور حقيقي من VGIK ، إلى الفريق - قام ببناء الإطار وإضافة إضاءة سينمائية إضافية وغيّر بشكل طفيف سيناريو اللعبة بحيث كانت الحبكة أكثر عاطفية ، وكانت الصورة أكثر درامية ومسرحية.



أدى هذا إلى زيادة الجودة بشكل كبير ، ولكن كانت هناك عناصر تحتاج أيضًا إلى توصيلها بالمرحل وتم تحديد خوارزمية التشغيل.



تبين أن الليزر يمثل مشكلة أخرى: لقد أجرينا عدة تجارب على أنواع مختلفة من الحبال والليزر ذات القوى المختلفة. للاختبار ، قمنا ببساطة بتعليق الحمل عموديًا على حبل.



عند إطلاقه برمز اختبار ، كانت القوة القابلة للتعديل من خلال PWM أقل من 10٪ ولم يتلف الحبل حتى بعد التعرض الطويل.



بالنسبة للوضع القتالي ، تم إلغاء تركيز الليزر إلى بقعة بقطر 10 ملم تقريبًا وتم حرقها بثقة عبر الحبل بحمل من مسافة حوالي متر.





لذلك عمل الليزر بشكل مثالي في الاختبارات ،



عندما بدأنا بالفعل اختبار كل شيء في الغرفة على وزن معلق ، اتضح أنه لم يكن من السهل إصلاح الليزر بشكل آمن. ثم ، عندما يشتعل الحبل ، يذوب ويمتد وينتقل من تحت التركيز الأصلي.





لكن هذه الطريقة لم تعد تعمل: تم إزاحة الحبل



إيليا حرك الليزر إلى نهاية الغرفة المقابلة للحبل حتى يمر شعاع الليزر عبر المشهد بأكمله ويبدو جميلًا في الإطار ، مما ضاعف المسافة.



بعد إجراء بعض التجارب الأخرى مع احتراق الحبال بالفعل في المعركة ، قررنا عدم تعذيب القدر وتأمين قطع الحبل بسلك نيتشروم. لقد دمرت الخيط بعد 120 ثانية من تشغيل الليزر في وضع القتال. هذا ، بالإضافة إلى فصل السلك وفتيل القنابل الدخانية عند بدء التلامس المنفصل ، قررنا تثبيت الكود الصحيح في أجهزة وحدة التحكم الدقيقة.





الخيط ، الذي أحرق الحبل في النهاية خارج الشاشة



، وهكذا ظهرت مهمة ثالثة أن arduinka حلت - لحساب التسلسلات المرتبطة بتنفيذ هذه الأوامر.



قررنا أيضًا إعطاء توت العليق ، والذي كان يستخدم ببساطة لإرسال JSON المخصص المستلم من الواجهة الخلفية ، وضرورة تتبع الأموال على التلفزيون وتشغيل آلة التقطيع. في البداية ، كان من المفترض أن تقوم الواجهة الخلفية بذلك وأن الرصيد الحالي سيكون مرئيًا على الموقع ، وعلى التلفزيون سنعرض التعليقات من YouTube كعنصر تفاعلي إضافي يدفع المشاهدين إلى أن الأحداث في الغرفة تحدث في الوقت الفعلي.



لكن أثناء التشغيل التجريبي ، شاهد إيليا المشهد واقترح إظهار توازن اللعبة على أكبر شاشة: مقدار الأموال المتبقية ، والمقدار الذي تم تناوله ، والعد التنازلي حتى بداية آلة التقطيع التالية.



لقد ربطنا التوت بالوقت الحالي: كل ساعة كاملة بدأ التقطيع. تم عرض الصورة على التلفزيون بمساعدة التوت ، والذي كان في تلك اللحظة يتلقى بالفعل طلبات من الخادم ويرسلها للتنفيذ إلى arduinka. تم رسم الصور ذات المؤشرات النقدية باستخدام استدعاء الأداة fim console مثل هذا



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



وتم تشكيله بناءً على المقدار أو الوقت المطلوب.



قمنا بإنشاء الصور مقدمًا: لقد التقطنا للتو الفيديو النهائي بجهاز توقيت وقمنا بتصدير 200 صورة.



هذا هو الميكانيكي الذي تمت برمجته في البحث. بحلول الوقت الذي بدأ فيه العد التنازلي الأخير ، سافرنا جميعًا إلى الموقع ، وسلّحنا أنفسنا بطفايات الحريق وجلسنا لانتظار الحريق (الذي اشتعل بالقوة وأساسي فقط في الخلاف)



كيفية عمل بث يعمل لمدة أسبوع: اختيار الكاميرا



بالنسبة للمهمة ، كنا بحاجة إلى بث مستمر على YouTube لمدة 7 أيام - وهذا هو المبلغ الذي حددناه كأقصى مدة للعبة. كان هناك شيئان يمكن أن يعوقاننا:



  1. ارتفاع درجة حرارة الغرفة من التشغيل المستمر
  2. قطع الإنترنت


كان على الكاميرا أن تعطي صورة Full HD على الأقل من أجل اللعب ومراقبة الغرفة بشكل مريح.



في البداية ، نظرنا في اتجاه كاميرات الويب التي تم إصدارها لمنشئي البث المباشر. لقد خفضنا الميزانية ، لذا لم نرغب في شراء كاميرا ، لكن كما اتضح ، لم تكن متاحة للإيجار. في نفس اللحظة ، وجدنا بأعجوبة كاميرا Xbox Kinect ملقاة في منزلي ، ووضعناها في الغرفة وبدأنا بثًا تجريبيًا لمدة أسبوع.



تعاملت الكاميرا جيدًا ولم ترتفع درجة حرارتها ، لكن إيليا لاحظ على الفور تقريبًا أنها تفتقر إلى الإعدادات ، على وجه الخصوص ، كان من المستحيل ضبط التعريض.



سعى إيليا لجعل نوع البث أقرب إلى معايير إنتاج الأفلام والفيديو: لنقل مشهد ضوئي متغير ديناميكيًا بمصادر إضاءة ساطعة وخلفية مظلمة وعناصر في الإطار. في الوقت نفسه ، كنت أرغب في الحفاظ على تفاصيل الصورة في كل من الإبرازات والظلال ، مع الحد الأدنى من التشويش الرقمي.



لذلك ، على الرغم من أن kinect أثبت أنه موثوق في الاختبارات ولا يتطلب بطاقة التقاط فيديو (نقطة فشل أخرى) ، قررنا التخلي عنها. بعد ثلاثة أيام من اختبار الكاميرات المختلفة ، اختار إيليا Sony FDR-AX53 - كاميرا فيديو صغيرة وموثوقة وميسورة التكلفة للإيجار ، ولكن في نفس الوقت تتمتع بالموثوقية الكافية والخصائص المرئية.



استأجرنا كاميرا ، وقمنا بتشغيلها لمدة أسبوع بالتزامن مع بطاقة التقاط الفيديو ، وأدركنا أنه باستخدامها يمكننا الاعتماد على البث المستمر طوال المهمة بأكملها.



:



يتطلب العمل على الإضاءة نعمة معينة ، فقد احتجنا إلى بناء درجة إضاءة بأدنى حد من الوسائل:



1. إضاءة الأشياء عندما يعثر عليها اللاعبون (الليزر ، الوزن) ، بالإضافة إلى الضوء المستمر على آلة التقطيع. استخدموا هنا ديدولايت 150 - أجهزة إضاءة سينمائية مدمجة وموثوقة مع مصابيح هالوجين منخفضة الجهد ، والتي تسمح لك بتركيز الشعاع على موضوع معين ، دون لمس الخلفية والأشياء الأخرى.



2. مصباح عملي للعب - مصباح طاولة ، مصباح أرضي ، نجمة ، إكليل. تم توزيع كل الضوء العملي بشكل متناغم في الإطار لإلقاء الضوء على منطقة الصورة ، وفي الداخل كانت هناك مصابيح LED بدرجة حرارة لون 3200 كلفن ، والمصباح الموجود في المصباح الأرضي مغطى بفلتر Rosco الأحمر الورقي لإنشاء تلميح لون غير عادي.





أنا مهندس مع أمي أو سأطلق غدًا



كيف قمنا بعمل نسخة احتياطية من الإنترنت والكهرباء



تم التعامل مع مسألة التسامح مع الخطأ تقريبًا كما هو الحال في مركز البيانات: قرروا عدم الانحراف عن المبادئ الأساسية واحتفظوا بها وفقًا لمخطط N + 1 المعتاد.



إذا توقف البث على YouTube ، فهذا يعني أنه سيكون من المستحيل إعادة الاتصال باستخدام نفس الرابط ومتابعة البث. كانت لحظة حرجة ، وكانت الغرفة في مكتب عادي.



لهذا الغرض ، استخدمنا جهاز توجيه يستند إلى OpenWRT وحزمة mwan3. يقوم تلقائيًا باختبار توفر القناة كل 5 ثوانٍ ، وفي حالة الانقطاع ، يتم التحويل إلى مودم النسخ الاحتياطي من Yota. نتيجة لذلك ، استغرق التبديل إلى القناة الاحتياطية أقل من دقيقة.



كان من المهم أيضًا استبعاد انقطاع التيار الكهربائي ، لأنه حتى زيادة الطاقة على المدى القصير سيؤدي إلى إعادة تشغيل جميع أجهزة الكمبيوتر.



لذلك ، أخذنا إيبون إنوفا g2 3000 مزود الطاقة غير المنقطع ، والذي كان من شأنه أن يدعم جميع أجهزة الألعاب: كان إجمالي استهلاك الطاقة لنظامنا حوالي 300 واط. ستكون كافية لمدة 75 دقيقة ، وهي كافية تمامًا لأغراضنا.



قررنا التضحية بإضاءة إضافية في حالة انقطاع التيار الكهربائي في الغرفة - لم يتم توصيلها بمصدر طاقة غير منقطع.



شكر وتقدير



  • إلى فريق RUVDS بأكمله ، الذي اخترع ونفذ اللعبة.
  • بشكل منفصل لمشرفي RUVDS ، من أجل مراقبة عمل الخوادم ، كان التحميل مقبولًا وعمل كل شيء بشكل طبيعي في الوضع العادي.
  • إلى أفضل رئيس نتسابلينلحقيقة أنه استجابة للنداء "هناك فكرة: سنأخذ خادمًا ونضع حوضًا مائيًا عليه ونعلق ثقلًا فوقه ، بوم ، دوي ، كل شيء مغمور بالماء ، ماس كهربائى ، نار!" يقول دائمًا بثقة "افعلها!"
  • Tilda Publishing , - , .
  • S_ILya , , , , , .
  • zhovner , , , , .
  • samat , , .
  • daniemilk .
  • delfphe .
  • Dodo Pizza Engineering .


والامتنان الأكبر للاعبين على كل المشاعر التي عشناها أثناء اقتحامك للمهمة دون نوم لمدة يومين وحتى تأجيل العمل.



مقالات أخرى عن المسعى مع تدمير الخادم








All Articles