У друга имеется отличный металлоискатель Nokta Makro Simplex Plus/Legend, но обнаружился один минус, в креплении его катушки, в частности сам крепёжный винт, который со временем стал проворачиваться несмотря на упорную резьбу, из-за чего нужно постоянно поправлять катушку, так как её не затянуть как следует. Попробовали спроектировать и напечатать свой болт и гайку с простой метрической резьбой из PLA, активно пользовались металлоискателем в течении сезона, болт хорошо продержался, катушка держит нужный угол, не сворачивается.
К вопросу о эволюции вида двухзарядного арбалета работы мастера Хонхеля.
Изображение ни разу не каноничное(((
«У арбалета оказалась довольно странная конструкция: он был двойным. Первый болт устанавливался в нижнее ложе, второй — в верхнее. Тетива на обоих механизмах натягивалась с помощью короткого рычага. Гладкая отполированная ручка, пара спусковых крючков. Оружие было изящным, черного цвета и гораздо меньше моего. Мечта.
— Вы позволите, мастер Хонхель?
Карлик улыбнулся, протянул мне диковинку и два болта. Вещица оказалась легкой до невозможности. Я вставил болт в специальную прорезь, затем второй, потянул рычаг. Он поддался на удивление свободно. Щелчок — и тяжелые стрелы замерли в ложе. Молодцы карлики, додумались, как облегчить натягивание тетивы!
Я поискал глазами мишень, нашел на дальнем шкафу старый, запылившийся шлем, взглядом попросил у Хонхеля разрешения и, прицелившись, нажал на спуск.
— С предохранителя снимите, мастер, — насмешливо произнес карлик. — И цельтесь через вон ту стрелку, специально ведь сделано.»
Разумеется, таких аппаратов в реальности не было, поэтому пришлось придумывать внешний вид самому.
Было сложно, и пришлось продумывать самые разве варианты- какая должна быть рукоять, как выглядит рычаг, банально какой размер у малыша.
Но вроде бы получилось, и теперь у Гаррета будет хорошее оружие)
1/7
Теперь осталось только украсить модель- добавить текстуры, гравировку, и так далее.
Коротко - как я месяц делал игровую платформу в виде куба с нуля (и еще не доделал), побил некоторые рекорды по производительности дисплеев и был не рад исправлять ошибки проводками.
В июле мне предложили сделать светящийся кубик для игр — типа D16, чтобы светилась выпавшая грань. Заказчик испарился, но мысль засела в голове. Подумал — а что если не просто свет, а поставить дисплеи на каждую грань и упростить до D6? И вообще сделать из этого маленькую тактильную игрововую консоль. Такого точно никто не делал. И понеслось…
Первый концепт кубика
За месяц из простой идеи пока что получился полуготовый куб с проводками, но с рабочими основыми системами. Расскажу как это было — со всеми техническими проблемами и небольшими победами.
Проектирование и осознание масштаба
30 июля — день когда всё началось. Начал прикидывать техническую сторону: ESP32, акселерометр, 6 дисплеев по 240x240 пикселей. В теории выглядит просто — процессор, акселерометр, питание, экраны. На практике оказалось иначе.
31 июля — 1 августа — начало 3D проектирования. Проект зацепил серьёзно. 15 лет назад поступал в универ на программиста, чтобы делать компьютерные игры. И как то не заладилось. И вот через 10 лет выпадает шанс воплотить давнюю мечту.
Одна из первых итераций 3D модели
Обожаю этот ИИ рендер
Первые версии материнской платы для куба
Борьба с ограничениями железа
2 августа — первое столкновение с реальностью. Для нормальной картинки нужно хотя бы 25-30 FPS, но по предварительным расчетам упирался то в память, то в скорость передачи данных. Изначально планировал готовый модуль ESP32, но для буфера кадров памяти у него вообще нет.
Вместо линейника на плате появился DC-DC преобразователь и проц переехал на заднюю сторону платы
В итоге полдня переделывал плату, чтобы поставить ESP32-S3 с 8МБ PSRAM - оперативки (наш «огромный» буфер для кадров). Опять по старинке придется припаивать голый проц на плату.. Но зато какая мощь, во всех прошлых проектах такой памяти вообще не было.
3 августа - день, когда спроектировал все платы для заказа на заводе. Небольшой спойлер - наделал всяких ошибок подключения.. Ну хотя бы не критичных, не пришлось выкидывать платы в ведро.
Как выглядит кубик внутри. Только тут не показаны батареи.
В тот день открыл для себя возможности ИИ для кодинга и продумывания архитектуры проекта. Конечно, нейросети могут выдавать тысячи строк кода (как мне тогда и выдало).
Но лучше код делать по модулям и разбираться в том, что ИИ наваял. Половина кода может работать вообще не так, как хотелось.
Главное при должном понимании и подходе, ИИ очень помогает и ускоряет разработку ПО.
4 августа — а что если использовать ИИ не только для генерации кода, но и для картинок персонажей? Да запросто))) Для игр уровня железа этого куба, 2D картинки вполне будут работать.
Не самая лучшая идея просить ИИ сгенерить сразу несколько персонажей
А вот одного персонажа в определенном стиле и в 2х ракурсах - вообще отлично.
Первые тесты и корпус
5 августа — напечатал первый корпус для куба. Рамки вокруг экранов получились большие, но таков путь — железо диктует размеры.
Зато скругленные грани дают приятную тактильность и куб удобно крутить.
Реально очень удобно лежит в руке. Несколько дней с ним ходил, крутил в руках.
7 августа — начал программировать игровую архитектуру. Создание игр оказалось не таким как представлял. На кубик приходится писать вообще всё с нуля — ядро системы, драйверы, игровую логику. Хорошо что в универе учили основам системного программирования.
Еще один ИИ рендер =)
Сразу замахнулся на "локомотивные" игры — Diablo, стратегии. Но быстро понял реальность: маленькие экраны требуют переосмысления классических жанров. Disciples может с натяжкой и упрощением получится, а вот Героев 3 портировать скорее всего не получится — слишком много мелких юнитов на экране.
8-9 августа — чисто дни вайб-кодинга. Создать игровые движки с нуля это конечно идея.. Хотя бы нейросети помогают в понимании всех систем. Но по крайней мере основную архитектуру составил. В одиночку бы такое делал не день, а с месяц минимум.
Основная буйная идея - собирать игры как LEGO. Сделать несколько модульных систем, которые будут брать свои данные из специальных json-файлов.
А чтобы не писать вручную технические json-файлы, можно закидывать описание в ИИ, чтобы он подогнал всё под определенный формат.
И кажется, что если такая система будет работать - можно будет собирать игры разных жанров из базовых модулей достаточно быстро и просто.
Небольшое отступление. По образованию я ж айтишник (окончил факультет ПМиК). Нас учили именно программировать ядро систем. То есть все эти внутренние алгоритмы, ассемблер, математика (в один год было 5 разных направлений математики).
Но самое неприятное в программировании ядра - это скука при работе. Не видишь какого-то визуального явного подтверждения (обратной связи) по тому, что прогишь и кажется что занимаешься какими то бесполезными буковками на экране.
С этим я столкнулся в начале разработки прошивки куба. И сразу решил откопать какой нибудь экранчик, чтобы уже видеть хоть какие то картинки при работе.
Тестовый стенд и первые визуальные результаты
12-14 августа — вообще при любой работе стараюсь не изобретать велосипед.
Откопав старенькую плату от фризлайт лампы, подцепил к ней экран. Найдя в инете библиотеку графики EmberGL для ESP32, решил попробовать поработать с готовым решением.
Библиотека как старый жигуль из гаража - запустилась не с первого раза (особенно учитывая что её не обновляли уже 3 года). Пару часов пинания кода с помощью ИИ, и получился первый прямоугольник с градиентом и потом 3D. Там был пример с головой обезьяны на 4000 полигонов. И оно даже работало.. Но это прям максимум для ESP32. И причем без текстурирования.
Красивое 3D, но бесполезное..
Интересное открытие: операции с float выполняются процессором с той же или даже большей скоростью, чем с обычными целыми числами.
15-16 августа — работал над системой загрузки картинок и анимаций.
Идея: генерим картинку с персонажем. Делаем из него видео. Видео разбиваем на кадры, складываем на флешку, потом показываем по очереди.
Разбивка и удаление лишних кадров
Первый тест анимации на OpenGL как то оказался медленным..
Настоящее железо и первые результаты
17-19 августа — приехали экраны и тот самый проц с памятью.
Решил отойти от EmberGL в сторону простого самописного драйвера. То инициализация не та, то цвета неправильные, то порядок бит в той библиотеке.
Экран завелся не с первого раза. Зато какой прирост производительности новый проц дал с оптимизированным кодом чтения с памяти (+SPI 4line) и работе с PSRAM. Давайте посмотрим на эволюцию производительности нашего козлика из Diablo.
Обычный проц и медленное чтение с карты
Новый проц и быстрое чтение кадров с карты памяти
Реактивый козел))))) Новый проц и показ кадров из PSRAM
По замерам проца, последние видео это 20 и 90FPS соответственно. Убойная производительность конечно. Видел в инете тесты, там такие скорости обновления не выжимали в принципе)))
20-21 августа — раз у нас такой быстрый показ кадров, почему бы не показать что-то более интересное. Как насчет упрощенной физики жидкости и показа кино (только без звука)?
С последним пришлось немного помучаться. Обычный MP4 проц открыть не может, но с последовательностью BMP565 вполне справляется.
В статье пропускаю все технические сложности и работу с программированием. Главное же результат и какие то забавные моменты.
Например, на этапе с кино впустую потратил 4 часа, пытаясь разобраться в ошибке чтения файлов. А оказывается надо было поправить всего одну циферку при инициализации.
Cамое печальное, raw bmp весит прям очень много. На минутный ролик надо около 110мб.
Конечно можно заметить, что кино выглядит немного пиксельным и с провалами в тенях. Но это особенности сжатия исходного RGB888 в RGB565 для экрана. У последнего формата данных меньше градаций цветов + сжатие jpg сразу видно.
Платы, сборка и фиаско
26-29 августа — мне ранее говорили что видимые винты крепления корпуса не очень красиво и занялся этой задачей.
Решено сделать внутрянку куба на несущей раме, чтобы потом всё вставить в корпус и закрыть крышкой.
С первого раза конечно не получилось. Защелки надо печатать боком, чтобы нагрузка была поперек линий печати. Если гнуть по линии спекания слоев, оно просто отламывается.
Мой первый корпус на защелках
И корпус то это достаточно просто.. Напечатал и пробуй.
А что если читать кино не как bmp, а mjpg. Около дня ковыряния кода, и оно получилось. И главное весит копейки, около 6МБ на минуту, а не 110МБ+. И хитрый трюк - накидывать шум и легкое размытие на кадры, и так получается меньше пиксельности.
30 августа — наконец-то пришли подарки от китайского деда мороза))) Ну то есть новые платы.
Вот такое почти готовое приезжает с Китая. Заводская пайка, все дела =)
На память старый тестовый модуль и новая плата
Конечно сразу взялся за пайку проца и разъемов. Замучился конечно из-за двухсторонней пайки..
Главное, что процессор легко прошивается на новой плате, SD-карта работает. Выжал с карты 10 МБ/с вместо 8.3. Это ещё плюс 5-7 FPS для видео.
31 августа — ИНЖЕНЕРНОЕ ФИАСКО. Когда сказал вслух, что "новая разработка — это исправление недочётов" - накаркал проблему.
Колхозный проводной ад
Из-за большого количества подключённых пинов к процессору упустил, что надо ещё подключать линии включения экранов. Результат: ПРОВОДКИ, которые я ненавижу. Плата для меня — инженерная картина, где всё должно быть аккуратно. А тут проводки.. Но главное что работает. И всё исправляется хотя бы так, а не заказом новой платы и ожидания в месяц.
И под конец месяца поставил акселерометр, обновил прошивку и оно работает.
ЧТО ПОЛУЧИЛОСЬ ЗА АВГУСТ
Основная плата работает (проц, аксель, чтение с карты, дисплей)
Проводки вместо красивой разводки
Куб в полуразобранном состоянии
Игр пока нет, только тесты
Заложена основа для будущей программной системы
Корпус собирается на защелках
Открытия:
ИИ кардинально ускоряет разработку ПО
Железо и чужие библиотеки всегда преподносят сюрпризы
Проверять разводку плат три раза, а не один
Впереди ещё месяцы работы над прошивкой, играми и отладкой. Но основа заложена: железо работает, производительность неплохая, архитектура более менее продумана.
Предлагайте свои идеи, что хотели бы видеть из игр/приложений в кубике. У меня уже в планах змейка 6D, визуальная алхимия частиц, какие нибудь квесты. Очень хочется сделать мини Diablo / GTA2. И конечно что то простое точно будет - выдать число, или предсказание как magic 8-ball.
Также в далеком будущем есть планы перейти на ESP32-P4. Вот там прям вычислительная машина (для своего размера и потребления энергии). И возможно поставить звук, вибрацию, часы реального времени, экраны побольше..
А этом кубике еще на один проводок планируется пищалка - пассивный зуммер =)
И кстати, в моем TG-канале новые новости о проекте почти каждый день =)
Черт дернул попробовать попечатать. Первые пробы были комом, но вот уже начал себе печатать башню для кубиков. Я уже много раз слышал, что стоимость такого на маркетплейсах дешевле, но душа требует страдать фигней. есть кто посоветует, можно ли принтер расположить на лоджии и как тогда утеплить? И если нет, то как провести в маленькую комнату вытяжку?