Geektimes, здравствуй! Как и обещали, это продолжение прошлой статьи о нашем маленьком мире волшебства. Сегодня я расскажу о закулисье магических квестов, какие решения принимались и как мы пришли к тому, что квест имеет именно такой сценарий и вид.
Т.к. до момента построения квеста я увлекался электроникой, в частности, программированием AVR-микроконтроллеров на С, было принято решение попытаться максимально реализовать этот потенциал, что дало бы возможность добавить максимум интерактива, интереса и увлекательности квесту! К тому же, очень не хотелось делать квест похожим на десятки других (работающих на то время в нашем городе).
Во время продумывания нового сценария мы чётко определились с тем, что у нас не будет ни замков, ни ключей, ни стандартных задач, в общем включаем электронику на максимум наших возможностей!
Давайте рассмотрим техническую часть более внимательно, и сейчас я вам расскажу как сделать электронику максимально колхозно просто.
Общий обзор
Первоначальную реализацию квеста мы опустим (возможно я расскажу об этом позже), а сосредоточимся на моменте доработки (после которой квест имеет окончательный вид).
После того, как мы обговорили наше новое видение квеста, я понял, что сил одного микроконтроллера уже мало и нужно подключать компьютер, объединив все устройства в единую систему. Для понимания целостности картины была составлена схема всех устройств и их взаимодействий:
Из схемы можно подумать, что компьютер главный, однако это не совсем так, он возьмёт на себя роль управления и воспроизведения аудио треков, которых, как вы успели уже заметить из предыдущей статьи, у нас немало.
Сердцем всей системы стал микроконтроллер Atmega16 (единственным критерием выбора было достаточное количество GPIO), который по UART общается с программой на компьютере. Все остальные устройства выполнены на микроконтроллере Atmega8 (отлично подходит по количеству GPIO и имеет приемлемую цену).
Большинство плат спаяны на крутейших двусторонних макетках, соотвественно все детали в DIP-корпусах. Часть плат осталась с самого начала работы квеста.
Основное окно программы:
Расширенное окно для нештатных ситуаций:
Окно ошибки:
Основная плата только принимает(!) дискретные сигналы от других устройств (через оптопары, которые можно увидеть на фото), общается с компьютером, управляет светодиодом в чаше воспоминаний.
Основное магическое орудие: палочка
Волшебная палочка немного таки волшебная, у неё в кончик встроен неодимовый магнит. Сделал её добрый дедушка-токарь по дереву всего за 2$. Основной проблемой было впихнуть магнит максимального диаметра, сохранив кончик максимально тонким.
Теперь более подробно рассмотрим каждое устройство.
Красная ветка
Книга
Аудио-событие книги срабатывает по концевику, который вмонтирован в полку. Она изначально закрыта и чтобы открыть её, нужно поднести палочку с магнитом. Книга как мини сейф: в ней есть аккумуляторы (Li-ion 3S), геркон и транзисторный ключ, который управляет электромеханической защёлкой (чтобы не пускать весь ток через геркон. При этом можно наблюдать красивое свечение внутри геркона, но при этом он долго не проживёт и велика вероятность “залипания” контактов). Здесь всё просто — палочка поднесена, геркон пропускает ток, транзистор открыт и ригель защёлки втянут. Внутренности сейфа для носка выглядят так:
И конечный вид:
Добби
Т.к. стояла задача наиболее интерактивно реагировать на поднесение носка к Добби, выбор пал на RFID-технологию. Для этого пришлось вшить в носок небольшой брелок (как от домофона на подъезде) и нанести на носок такой же знак, как и у Добби на ладони. За самой картиной Добби стоит RFID-модуль.
Устройство выполнено на микроконтроллере Atmega8 и популярном RFID-модуле RC522. После поднесения носка (радиус срабатывания до 4 см, как раз идеально подходит), полевой транзистор открывает электромагнитную защёлку в шкатулке и с помощью пружины крышка приподнимается, на главную плату идёт сигнал и в чаше воспоминаний засвечивается красный свет.
Синяя ветка
Камин
Камин, естественно, фейковый. Выполнен из профиля и гипсокартона, обклеенного кирпичной плиткой.
Электроника собрана на Atmega8. В каждую кирпичину вмонтирован концевик и подведена светодиодная лента синего цвета. Сами кирпичи сидят с одной стороны на завесах, а с другой сделана примитивная направляющая с возвратной пружиной. При первом нажатии на любую кирпичинку засвечиваются все нажимабельные (их 7 штук) на 100мс и у картины убирается глаз с помощью шагового двигателя, на главную плату уйдёт сигнал, включится воспоминание и синий свет в чаше воспоминаний.
Шаговый двигатель и светодиодная лента управляются с помощью транзисторной сборки Дарлингтона ULN2003 (для любознательных — теоретическую часть можно почитать здесь).
Теперь каждое нажатие на любую кирпичину инвертирует её состояние (одно нажатие — вкл., следующее — выкл. и так по кругу), при первом нажатии на любой кирпич В картине скрыт инфракрасный датчик: ИК-светодиод светит, излучение отбивается от приближающегося игрока и попадает на ИК-транзистор, который с помощью колхозных точных подстроек резисторами дает на выходе дискретный сигнал 0 либо 1.
Предусмотрено также решение против паразитной засветки (особенно актуально, если юзеры начинают светить лампой на камин), в разрыв цепи основного ИК-транзистора включен ещё один (замаскированный), который при засветке просто отключает реакцию микроконтроллера.
Как только срабатывает ИК-датчик, микроконтроллер и включает моргание нужной комбинации, которую нужно нажать (засветить) и, кстати, последовательность нажатия тоже играет роль. Моргание нужной комбинации выключает все нажатые до этого кирпичи.
Когда правильная комбинация таки была нажата, открывается картина с помощью электромеханической защёлки побольше, нежели в шкатулках. Для этого даже пришлось поставить немаленький трансформатор только для этой защёлки.
(Вообще эти защёлки очень слабые, хотя в пике и потребляют немало тока. С их управлением нужно быть очень осторожным, если давать ток на неё более 5 секунд она может просто сгореть, именно так я спалил одну защёлку)
Зелёная ветка
Шкатулка
На столе стоит неприметная баночка на концевике, если ее поднять, включается зелёный свет в казане и открывается шкатулка, в которой лежит подсказка на дверь.
(Эта та самая баночка, которая нужна для пасхалки с анекдотами Добби, о которой рассказано в первой статье)
Дверь
При первом полном нажатии на ручку вниз-вверх (для этого пришлось поставить с обратной стороны двери 2 концевика, чтобы реагировать на полное нажатие ручки) начинает моргать глаз у змеи на двери.
Правильный алгоритм открытия двери можно понять исходя из подсказки:
Во время пауз (5с) микроконтроллер просто висит в delay, а во время нажатий инкрементируется переменная. Поэтому если долго и упорно нажимать на ручку, то она и так откроется, кстати, некоторые люди открывали дверь именно таким способом, сами не понимая, как они это сделали. Чтобы не делать новую плату с отдельным микроконтроллером для этой простой затеи, на плате лабиринта было найдено несколько свободных пинов и всё подключено туда.
Зеркало-сундук
На крышке сундука нанесены 10 магических символов, а изнутри под ними приклеены герконы.
Пользователю нужно поднести палочку к 3 правильным символам (последовательность роли не играет. На фото отмечены галочками), однако на других рисунках тоже стоят герконы, поднесение палочки к которым аннулирует прошлые нажатия, даже если они были правильными (чтобы невозможно было открыть сундук поднесением палочки ко всем подряд символам). При правильном выборе символов электромагнит в сундуке открывается (в сундуке стоит любимая Atmega8 и ULN2003). На этом этапе отправляется сигнал на плату циферблата лабиринта (банальная единица с пина одного МК на пин другого через транзисторный ключ) и в лабиринте начинают вращаться крутилки.
Лабиринт
Эту громадную конструкцию мы оооочень недооценили. Она забрала очень много сил и времени на создание, однако результат того стоял. Для работы “большого чёрного объекта на стене” требовалось много GPIO (всё делалось самым примитивным путём — никаких мультиплексоров/демультиплексоров, только хардкор!), поэтому пришлось разбить устройство на функциональные узлы — циферблат и сам лабиринт. Каждый узел выполнен на всё той же Atmega8.
В лабиринте впринципе всё просто (хотя тогда это казалось не совсем просто:) ). Много проблем доставила схема наличия шарика в конце своего пути. В работу открытой оптопары постоянно вмешивались рандомные помехи.
Именно эти жёлтенькие конденсаторы помогли решить проблему рандомного срабатывания оптопар.
По итогу прохождения лабиринта открывается доступ к зеленой сфере. Система предоставления доступа к нему сделана на замке от дверей автомобиля. (По соотношению цена/сила втягивания он монстр!).
Изначально не планировалось выдавать по 1 шарику для игры, однако пришлось вносить коррективы уже на финальной стадии, т.к. в шариках магнитики, они могут “слипнуться” и разъединить их очень проблематично, поэтому чтобы максимально исключить эту вероятность в игре было принято решение выдавать шарики по очереди. Подача осуществляется с помощью шагового двигателя и импровизированной заслонки из старого спиннинга.
Объединение сил
Шахматы
После долгих размышлений была продумана задача с единственным алгоритмом (при некоторых условиях, которые игрокам оговариваются). Оставалось дело за малым — реализовать систему движения шахмат и реакции на действия игроков :)
Механизм сделан из шпилек и гаек М8, китайских подшипников и дерева. В каждую фигуру вмонтирован магнит с помощью которого механизм перемещает их. Муфта соединения двигателя со шпилькой сделана из составляющей детали клеевого пистолета, которые были у нас расходным материалом, по причине дико повышенного расхода силиконового клея.
Кто знает, фигуры мы взяли из набора шахмат Гарри Поттера, они еще издают разные звуки, светятся и т.д. Я не мог оставить эти фичи просто так, переместил эти платки под доску и получилось, что когда ходят конём — он ржёт, а в конце можно услышать звук падшего короля.
После победы в шахматах открывается дверь шкафа (открывается быстро с помощью мебельной газовой направляющей).
Перед тем как перейти к самому интересному хочу рассказать о казане (чаше воспоминаний) и переговорном устройстве для общения администратора с посетителями во время игры.
Чаша воспоминаний
Начнём с того, что этот десятилитровый алюминиевый казан был найден у дедушки в гараже, как атрибут советской кухни :) Идея сделать чашу воспоминаний, из которого валил бы дым (а по факту пар), висела в мыслях давно, но к грамотной реализации мы дошли немного позже.
Туманообразователем стали ультразвуковые увлажнители в количестве 6(!!!) шт и суммарной мощностью около 100 Вт!
Увы, фото не сохранилось, однако устройство очень простое, выполненное по схеме:
Размеры делались такими, чтобы идеально поместить эту систему в стол (место для ящиков).
Переговорное устройство
Мои скудные знания аналоговой схемотехники не позволили с наскоку решить эту задачу. После долгих и неудачных попыток (но как оказалось позднее, решение было четровски близко!) я попросил своего друга из Херсона сделать мне такое устройство.
Предусилитель сделан на малошумящем операционном усилителе NE5532, после чего стоит TDA2006.
И наконец мы переходим к одной из самых сложных систем в комнате — финальном сражении с Тёмным Лордом!
Бой
Идея была реализовать хоть примерно похожий “бой” игрока (Гарри Поттера) с Волан-де-Мортом. Для большего эффекта был добавлен ветер (2 вентилятора). Мы продумывали множество вариантов, и тут мне друг подсказал об адресных светодиодах WS2812. Это сейчас даже самые ленивые ардуинщики рассказывают о том, какие крутые штуки они делали, но тогда WS2812 были менее известны, но именно они стали нашим спасением! Без них реализовать нашу задумку было просто нереально!
5м светодиодной ленты были сложены пополам, а внутри был протянут провод для геркона. Первые 5м ленты были благополучно спалены в попытке сэкономить на блоке питания для этой же ленты :)
Разработку мы начали с устаканивания таймингов:
Некоторых траблов добавило включение вентиляторов. Если подносить/убирать палочку часто, то реле (изначально пробовал включать вентиляторы через реле), микроконтроллеру просто сносило башню. В итоге я узнал об возможности управлять нагрузкой 220В через оптосиммистор. После этого я реле не использую :)
Также стоит упомянуть, что серьезных вычислительных мощностей (в масштабах Atmega8) требовалось уделить управлению адресной светодиодной лентой. Сначала работа ленты очень подвисала, мы долго с мучились, не могли понять почему. В итоге мне пришлось найти в интернете человека, который написал библиотеку для этой ленты и попросить помощи у него. Причина была банально проста: МК не успевал выполнять код в обработчике прерывания, и как только мы это пофиксили, всё заработало прекрасно!
→ Программы для микроконтроллеров
→ Программа для компьютера
По нашей задумке это должна быть последняя статья, однако мы еще много интересного хотим вам поведать, поэтому хочу анонсировать выход ещё двух статей о том, как из офиса сделать настоящий Хогвартс(1) и трэш наряду с нереализованными идеями(2).
Будет интересно!
Автор: Bolshoi_Booze