Решил тут поделиться с многоуважаемыми пидорами и пидорессами реактора одним своим начинанием. Думаю, кому-то оно может понравиться. В общем, у меня есть вот такой вот рыдван. Я про него на реакторе уже когда-то писал.
Ведро старое, гнилое, но трушное. В силу возраста и некоторых других факторов в силу возраста приборная панель у него носила характер чисто декоративный, то есть показывала примерно ничего.
Но если спидометр и контрольные лампочки я в итоге смог оживить, то вот с часами, которые поселились в крайнем правом котле, вскрылась настоящая засада.
Это механические часы с кукушкой с календарём и электрическим автоподводом. Устройство занятное и прикольное, исключая тот факт, что они не работает. Вскрытие показало, что пациент умер от вскрытия внутри развалилась на молекулы одна мелкая, но очень важная приводная шестерня - судя по форумам, абсолютно обычное дело для тачек тех лет, потому что старый пластик с течением времени деградирует и рассыпается даже без нагрузки.
У меня было несколько вариантов, что делать в сложившейся ситуации:
1)Забить и оставить неработающий механизм в приборке. Всё-таки узнать время в 21 веке можно и более доступными способами.
2)Купить с ebay бэушные или даже NOS-овские, то есть оригинальные, но не устанавливавшиеся на машину часы — очень дорого и при этом вероятность обнаружить внутри ту же самую поломку крайне велика.
3)Оставить внешнюю часть родной, приколхозить внутрянку от каких-то более современных электрических часов. Решение простое и прямолинейное.
4)При помощи инженерного искусства и некоторой доли гадания рассчитать параметры отсутствующей шестерни, выточить на заводе\напечатать её на 2д-принтере. Путь тернистый, но правильный
5)Попросить знакомого художника оцифровать каждый элемент циферблата родных часов, написать программу, имитирующую их работу, найти круглый экран, собрать небольшой компьютер и, в конечном счёте, сделать полную цифровую имитацию родного хронометра. Безумие чистой воды, которое я написал просто для того, чтобы сделать побольше пунктов в списке.
Нормальные люди выбрали бы любой из первых 4х путей, я же пошёл по пятому.
В общих чертах ход разработки я уже описал несколькими абзацами выше. Добавлю от себя, что поиск круглого экрана нужного размера занял довольно много времени и встал в копеечку — а когда я его уже заимел, поздновато сообразил, что можно было вполне обойтись более стандартным квадратным, просто наложив на него рамку. Я не очень умный. Однако всё равно нисколько не жалею, что всё-таки раздобыл именно круглый экран, так как он идеально вписывается в форм-фактор родного котла, и есть в его круглости нечто неуловимо прекрасное.
Итак, заручившись помощью нескольких друзей, я за несколько месяцев на игровом движке Unity воссоздал старинные часы. Получилось даже лучше, чем я ожидал — благодаря эффекту внутренней подсветки под толстым стеклом приборной панели отличить от настоящего часы можно было лишь уткнувшись в них носом.
Однако если вы думаете, что я на этом остановился — вы меня плохо знаете…
Иметь внутри торпеды достаточно мощный и шустрый компьютер, а на приборке — полноценный дисплей, использовать оба исключительно для имитации стрелочных часов — как-то зашкварно. Поэтому проект тут же перешёл во вторую стадию разработки, куда более амбициозную.
Два жанра фантастики прочно связались в моём сознании — это постапокалипсис и ретрофутуризм. Первым плодом этой любви стала моя повесть "Пыль и Ржавчина". Однако я решил пойти чуть дальше и построить реальный бортовой компьютер Хайвеймена на базе собранного нами железа. Проект амбициозный, сложный, но очень интересный. С самого начала я очертил несколько важных моментов, ставшими краеугольными камнями этой затеи:
1. Это должна быть не имитация, а полноценный функциональный компьютер, в котором будет, как минимум:
а)сбор и отображение показаний всех электронных датчиков машины+скорость и пробег по GPS с возможностью переключаться на мили/километры
б)Самописный плеер
в)Собственно, часы и календарь
г)В идеале — навигатор
д)Несколько штук разной степени декоративности, чисто для души.
2. Компьютер носит функцию исключительно информативную, то есть сообщает данные, но никак не влияет на работоспособность машины. Это подключаемая внешняя аналитическая система, которая не отправит коробку в ошибку или запретит ехать из-за низкого уровня топлива. Максимум, что она сделает — выдаст предупреждение, что вы, возможно, потеряли бензобак, но, конечно, если хотите (и можете), едьте дальше!
3. Последний, но немаловажный пункт: интерфейс всей этой обвязки должен быть в духе ламповых ретрофутуристических компьютеров. Не потому что это удобно или практично, а просто потому что я их обожаю. Кроме этого программа должна иметь возможность поддержки любого количества скинов, чтобы можно было включать ранее написанные "родные" часы или в будущем добавить любую другую "шкурку": хоть ретровейв, хоть киберпанк, хоть под орков из Вархаммера.
Как дополнительное общее требование — это не должно выглядеть вопиющим колхозом.
Многие скажут — парень, тебе бы научиться расставлять приоритеты: в машине нет полов, а ты конструируешь помесь БигБена и HAL9000! Я бы мог ответить им, что полы в нём уже давно есть, но мне просто не хочется обсуждать, как мне тратить своё время и силы, посему эту часть мы опустим.
Итак, вызов брошен! Чтобы справиться с этой задачей, я привлёк ещё больше мозгов, проект обзавёлся репозиторием на гитхабе, и работа закипела.
Код полился рекой, проект захватил не только меня, но и моего друга-инженера, для которого это был настоящий вызов. Пока он мастерски имплементировал прости господи кватернионы, я не сидел сложа руки и занялся разработкой визуальной части и навигации.
На самом деле, самое главное, что сподвигло меня на это безумие, про которое вы сейчас читаете — возможность видеть на приборной панели ископаемого дредноута примитивную вращающуюся модельку моей тачки. Эта детская фантазия, думаю, уходит корнями в древний сериал Knight Rider, у нас известны как Рыцарь Дорог, где главный герой причинял добро при помощи своего напичканного электроникой гнилобана, разумного Pontiac Trans Am 1982го года.
Опущу насыщенный процесс разработки софта, когда каждый день мы решали огромное количество безумно интересных технических задач, женили железо и софт, добавляли шейдеры, собирали интерфейс и учили программу принимать и интерпретировать пакеты данных от датчиков: это всё-таки очень узкоспециализированная информация. Вам же не терпится узнать, что получилось?
Пожалуй, просто покажу :)
Небольшие комментарии по функционалу.
Управление осуществляется при помощи джойстика и/или любого иного подключаемого устройства, хоть телефона, хоть клавиатуры. Конкретно на видео я для простоты использую мышку. Итоговый вариант будем тестить уже на машине. Программа поддерживает тачскрин, но именно в моей приборке я от него отказался, так как хочу, чтобы он был под родным стеклом.
Эффект выпуклого экрана, зерна и помех — моя отдельная гордость. Стоил нам много нервов и ресурсов, но результатом я прямо доволен. Конечно, забавно, что то, от чего 70 лет назад стремились избавиться, сегодня стараются специально имитировать. Естественно, при желании отключается одной кнопкой.
Далее по интерфейсу:
Загрузочный экран — чистой воды фикция, грузится приборка практически мгновенно. Просто мне хотелось сделать какое-то вступление. Получился самый короткий и грустный постап-рассказ.
При желании пропускается нажатием на любую клавишу.
Часы — полностью функциональные, могут отображать время как в цифровом, так и в графическом виде, переключение скина в главном меню. Заложена основа для подтягивания дополнительной информации — температуры внутри\снаружи, показаний счётчика Гейгера (Я не шучу. Мы реально это реализовали) и прогноза погоды.
Звуковое Сопровождение — написанный с нуля плеер, так как не хотелось использовать внешнее решение. Функций немного, но все необходимые с ним — отображение прогрессбара и названия текущего трека, возможность выбора треков и папок, эквалайзер громкости.
Карты — пока, к сожалению, заглушка, на подтягивание открытых API навигаторов нужно выделить время и ресурсы. Единственное, что пока не удалось реализовать из изначальной задумки.
Радар — единственная чисто декоративная функция, которую Я ПРОСТО НЕ МОГ НЕ ДОБАВИТЬ НА КРУГЛЫЙ ЭКРАНЧИК. Тут уже на меня и моего друга явно повлияла древняя игрушка Interstate`76. Пока он просто генерит рандомно точки и попискивает. Но у нас уже есть мысли и кое-какие наработки, как и радарчик сделать функциональным экраном! Приборы — здесь всё просто, списком выводятся основные показатели автомобиля, которые берутся с датчиков и постоянно обновляются с заложенным "лагом", "смягчением" и округлением, чтобы у водителя не вытекли глаза от мелькающих цифр. Из полезных, не недокументированных функций — ведение лога каждого показателя, то есть при желании можно составить графики оборотов двигателя, скорости и т.д. на любом заданном отрезке времени или пробега.
Бортовой компьютер — то, ради чего всё и задумывалось! Это честная вращающаяся моделька Кугуара, которую сделал мой хороший знакомый, на которую натянут WireFrame шейдер. Кнопки внизу позволяют переключаться между отдельными узлами — двигателем, коробкой, системой охлаждения, электрикой, задним мостом, на каждый из которых есть своя, слепленная лично мной анимированная моделька.
Несмотря на то, что экран создан чисто для эстетического удовольствия, в нём всё-таки есть кое-что полезное: на каждом узле отображается набор данных по нему. Кое-что дублируется из "Приборов", но есть и дополнительные опции, например температура и давление масла в коробке. Естественно, как только любой из показателей вываливается из пределов нормы, на приборку выводится предупреждение.
Отдельно напишу про корпус: сам экранчик интегрируется в родную приборную панель. Однако для удобства тестирования мы замоделили и распечатали на 3d-принтере специальный, стилизованный под старинный прибор корпус, в котором поместили экран и управляющую плату. Результат мне настолько понравился, что я иногда запускаю его дома, просто так.
Зачем мы вообще всё это затеяли? Лучше всего это описывает прекрасный комикс: Осталось только закончить машину, в которую можно было бы поставить эту приборку =)
Но мы работаем над этим!
PS: Пара бонусов для ценителей:
PPS: Поборникам копирайтов сразу скажу - версии этого поста есть в моём жж, д2 и на профильном ресурсе гнилобанов, автор я, рекламить не хочу, поэтому ссылки (вроде бы все) на внешние ресурсы выпилил, просто захотелось поделиться с джоем результатом домашнего проекта. Нет, на пикабу этого поста нет.
Отличный комментарий!