41

Квест в реальности или партия raspberry pi + arduino.

День добрый! Меня занесло строить квест румы, хоть я до этого arduino в глаза ни разу не видел, меня это не остановило. Хочу рассказать о моих решениях принятых при проектировании и о реализации задуманного.


Для начала сочтёмся на том, что же такое квест в реальности или "эскейп рум", по словам вики:

- " это интеллектуальная игра, в которой игроков запирают в помещении, из которого они должны выбраться за вре..." бла-бла-бла.

Квесты бывают ну очень разными: страшные до мерзости перфомансы, веселые и шумные семейные квесты, для больших и маленьких компаний, основанные на исторических событиях, VR квесты и далее. На любой вкус и цвет как говориться.

Что такое квест для инженера:

* Помещение;

* Много проводов, очень много (освещение, звук, камеры и сами загадки);

* Горстка различных датчиков (щелевые, шумовые, магнитные и т.п.);

* Электромеханические и магнитные замки;

* ПК\raspberry\arduino и т.п.;

* Загадки.



Всё начинается с ТЗ, в идеальном мире.

Квест обязан быть антивандальным. Дети уничтожают любые загадки грубой физической силой, подростки под действием весны забывают о правилах и суют всё подряд туда куда не стоит, взрослые не видя очевидное делают не очевидное. В правилах конечно описывают знаки "СТОП" обозначающие неиграбельность в задачах антуражные предметы - но согласитесь, это не красиво и выбивает из ритма игры.


+ Позаботитесь о том, что бы камеры и колонки стояли как можно дальше друг от друга во избежание "глухоты" камеры. Нам ведь важно слышать игроков, а не саундтрек;

+ Камеры не должны быть рядом с освещением, или светильник не должен быть направлен на камеру;

+ Камеры должны охватывать возможный максимум помещения, т.е. минимум слепых зон. Оператор должен видеть всё что делают игроки в квесте - что бы квест не сломали, или что бы квест не сломал игроков;

+ Прячьте всю проводку, будь то 220 или звук. Всю прятать в ноль по максимуму, где нельзя спрятать - в гофру!;

+ Ведите кабель с запасом: если надо 1 кабель 5 метров, ведите 2-3 кабеля 7 метров. ТЗ в квестах часто бывает динамичным;


Решите до прокладки кабелей будите ли управлять квестом и каким методом: тумблеры в операторской, веб панель, приложение для смартфона. И каким образом будут работать все механизмы: будут ли они независимы друг от друга, или будет единый центр.


Передо мной стала задача в независимых механизмах на arduino. RaspberryPi использовал как центральный мост между всеми ардуинами и операторами. На деле если raspberry вдруг перестанет отвечать - квест будет играть дальше и без неё, но пропадёт возможность из браузера управлять квестом.



Поэтому все элементы заводились в один ящик, получилась дикая каша :) Главное всё подписывать!

Все задачки (arduino) в квесте независимы друг от друга, но все они связаны с raspberry по шине I2C для того что бы сообщать центру о решении задачи. Или же raspberry может сообщить адруинке о том, что задачку считать "решенной" и активировать последствия. На raspberry поднят веб сервер apache для управление квестом через веб панель.



Общение raspberry и веб панели происходит за счёт файла JSON. В качестве общения малины и ардуин я использовал библиотеку WiringPi. Весь код писал на C++, подружил плюсы и JSON с помощью библиотеки JSON for Modern C++. Панель для управления квестом написана на PHP с использованием bootstrap для кроссплатформенной верстки и скорости разрабокти.

Решение не дешёвое и запутанное - зато адская выживаемость. Сломается элемент квеста - не беда, можно выкрутиться и не выводить игроков для ремонта механизма. А поломки в квестах - "это норма".


За время постройки удивительные свойства показали ардуины - настоящие бронетранспортёры! Вот к примеру если подключить df player неправильно, высокий шанс не услышать с него больше музыки :). А вот сама ардуина после плевком в меня сизым дымом работала дальше :D


С++ был выбран т.к. с python или bash я знаком еще хуже, на самом деле ведь совершенно не важно на чём написано.


Пример куска кода С++ для малинки. Для квестов код очень прост, ничего вычурного, справиться и второкурсник.

Буду очень рад критике и вопросам.

Первый пост - судите строго!

Arduino & Pi

1.5K поста20.8K подписчиков

Правила сообщества

В нашем сообществе запрещается:

• Добавлять посты не относящиеся к тематике сообщества, либо не несущие какой-либо полезной нагрузки (флуд)

• Задавать очевидные вопросы в виде постов, не воспользовавшись перед этим поиском

• Выкладывать код прямо в посте - используйте для этого сервисы ideone.com, gist.github.com или схожие ресурсы (pastebin запрещен)

• Рассуждать на темы политики

• Нарушать установленные правила Пикабу