Первое, что обычно слышу, когда показываю этот кубик и говорю что его можно использовать в настольных играх - "а можно его бросать, чтобы он показывал цифры?"
И теперь кубик может показывать не просто цифры, а любые картинки с карточки памяти. Но бросать его не надо. Достаточно потрясти и поставить на стол (можно даже просто неподвижно подержать в руках после тряски).
Поскольку на гранях кубика классные экранчики с большим количеством пикселей, хотелось показать какой-то крутой контент. Сначала экспериментировал с Heroes of Might and Magic III.
Но посмотрев очередное видео от ребят из "Viva La Dirt League", у меня появилась идея сделать картинки с их DnD персонажами. Кстати здесь есть их фанаты?
То, что вы видите на видео, это не полностью реализованная концепция. Сейчас получается в каждом отдельном кубе изображения одного героя (для каждого персонажа и локаций сделано около 50-60 картинок). В текущей реализации при тряске куба выдаются разные картинки по редкости. Самые эпичные появляются не так часто.
Чуть позже планирую дописать прошивку, чтобы можно было выбирать при броске из нескольких персонажей.
Всё больше и больше работая с нейросетями, меня каждый раз поражают возможности технологий. Сейчас их использовал для создания картинок с персонажами.
Получилось сделать так, что почти на всей сетке кадров показывается одинаковый персонаж, но в разных локациях и с разным случайным действием.
Начнем с VLDL:
VLDL Барадун
VLDL Боджер
Также получилось сделать чтобы сетка отображала целую историю с персонажем (получается грани куба могут показать цельный сюжет):
VLDL Боджер
Теперь перейдем к Heroes of Might and Magic III. Кроме просто персонажа в разных локациях, потом попросил нейросеть сделать абсурдные и мемные моменты. И это получилось с переменным успехом:
Герои 3. Арбалетчик. Да, я знаю, что на груди у него другой знак должен быть. Но для теста пойдет и так =)
Вот здесь как раз попросил мемные моменты с арбалетчиком. Четко сидит =)))
Вот с ангелом вышло прям шикарно. Еще и с подписями под ситуации.
И когда неожиданно нейросеть выдала кривую раскадровку, больше похожую на комикс, появилась идея попросить именно страницу комикса. И вот что получилось:
Всё тот же Боджер, сцена конфискации кузни
И еще один момент с Боджером, вычитал в инете, что в игре был момент с казино.
Да, возможно комиксы выглядят не настолько идеальными, можно увидеть косяки и неточности, но результат меня всё равно впечатляет.
Получается, как вариант, в будущем можно сделать полноценную игру на кубик, где после броска на редкую сценку, к ней прилагалась страница комикса, которую можно скачать с куба по USB-C или WI-FI.
Предлагайте свои варианты в комментариях, каких персонажей можно было бы попробовать визуализировать и как использовать такую механику с тряской и случайными картинками.
У меня вот идея, например, карты таро / предсказания или что-то подобное.
И кстати, кому интересно, в моем TG-канале обновления по проекту выходят чаще
Как и обещал - самоделка из вейпа). НЕ РЕКЛАМА и не призыв! Как сказал Юрий Хой - не курите, пацаны.
В принципе всё видно и просто, нужен высоковольтный модуль с али и кнопка. Модули есть с холодной (с высоковольтным умножителем) и горячей плазмой. Самый простой способ понять, это почитать отзывы. Если пишут что бумажку поджигает, а такой тест проводят все), значит подходит. Деревяшки тоже поджигает, подойдет для лесных выживальщиков).
Разрядник лучше готовый взять, от старой зажигалки для плит. У меня не было и самое простое что пришло в голову - две проволоки, в центре пластиковый пруток. На него шайбы, я сделал из кожкартона, и термоусадка. С таким неудобно поджигать духовку. Попробую переделать, а за основу думаю взять бронепровод от зажигания авто/мото и трубку.
ОСТОРОЖНЕЕ с высоким напряжением, шарахнет - будет новое, яркое воспоминание. Не включайте без разрядника, может модуль пробить внутри.
Получилась добротная зажигалка, с зарядкой type-c и индикацией . Заряжаю примерно раз в месяц. Всех благ!
В данной статье будет рассматриваться разработка коммутатора, для приема, обработки и передачи потока данных от GNSS-приемника и энкодера, осуществляться передача ведущему устройству будет по интерфейсу RS-485.
Интерфейс RS-485 - представляет собой промышленный стандарт физического уровня передачи данных, широко применяемый в распределенных системах управления, телеметрии и автоматизации, его ключевая особенность - использование дифференциального сигнала, что обеспечивает высокую помехоустойчивость и надежность передачи данных на значительные расстояния (до 1200 метров).
В основе работы лежит двухпроводная линия (выводы А иВ), по которой передается информация в виде разности потенциалов:
Логическая "1" фиксируется при условии, что напряжение на линии Аниже, чем на линии B;
Логический "0" соответствует ситуации, когда потенциал линии А выше потенциала линии В.
Такой метод передачи данных позволяет минимизировать влияние электромагнитных помех, так как внешние наводки одинаково взаимодействуют на обе линии и компенсируются при дифференциальном приеме.
В стандартных трансиверах интерфейса RS-485 передатчик и приемник интегрированы в одном корпусе и подключены к общей двухпроводной линии, направление выбирается выводом микроконтроллера, уровень на которой определяет в каком режиме микросхема, в приеме или в передаче.
Данная схема реализует архитектуру «ведущий-ведомый» (Master-Slave). Процесс взаимодействия можно разделить на два ключевых этапа:
Этап опроса и обнаружения устройств При инициализации системы ведущее устройство отправляет ведомому устройству (коммутатору) запрос на получение списка активных подключенных устройств. В данном примере запрашивается статус энкодера и приемника GNSS.
Ведомое устройство, формирует и возвращает ведущему буфер данных, содержащий информацию о наличии активности или отсутствии связи с каждым из опрошенных устройств.
Этап сбора данных После успешного обнаружения активных устройств ведущее устройство инициирует цикл опроса для сбора данных. Последовательно отправляются запросы на получение данных: дистанциис энкодера и навигационной информациис приемника GNSS.
Ведомое устройство агрегирует запрашиваемые параметры, формирует пакет данных и передает его ведущему устройству для последующей обработки.
Таким образом, коммутатор в данной системе обеспечивает централизованный сбор и передачу данных от периферийных устройств к управляющему ведущему устройству по запросу.
В данной схеме используется GNSS-приемник работающий по RS-232, о том как с ним работать я писал статью [Прием и парсинг NMEA-данных от GPS-приемника], в этой статье коммутатор будет принимать данные от GNSS приемника, собирать их в пакет и отправлять ведущему устройству по RS-485.
Для взаимодействия приема и передачи данных, коммутатор и ведущее устройство работают по внутреннему протоколу по аналогии MODBUS ASCII - являющийся одним из вариантов широко распространенного промышленного протокола Modbus, предназначаемого для организации обмена между ведущим и ведомым устройствами по последовательным линиям связи (RS-232/RS-422/RS-485).
Минимальный пример формата кадра MODBUS ASCII
Символ начала сообщения - ( : );
Адрес устройства - указывает, какому устройству предназначен кадр;
Код функции - определяет тип выполняемой операции (чтение, запись, диагностика);
Данные - содержат полезную нагрузку (адреса регистров, значения, количество слов);
Контрольная сумма - обеспечивает контроль целостности передачи данных;
Символы конца строки - (\r\n) - фиксация завершения кадра.
Байты 0xAB и 0xBA образуют преамбулу, по которой ведомое устройство синхронизирует начало кадра;
Поле «Длина команды» содержит длину в байтах начиная с поля 4 и заканчивая полем с символом 0x3E (‘>’) включительно.
Байт 0x09 - является кодом команды (в данном примере, запрос статуса);
Поля <тип энкодера>, <тип GNSS> задают конфигурацию активных модулей;
Символ '>' (0x3E)обозначает конец пакета.
Ведомое устройство (Slave) приняв пакет, формирует ответ:
0x5A, 0xA5, <длина команды>, 0x09, <установленный энкодер>, <установленный GNSS>, <тип GNSS>, '>' Здесь преамбула от ведомого устройства будет такая 0x5A, 0xA5.
Если параметр команды «Установка активного экодера» равен 1 и энкодер физически не подключен, то значение текущего типа энкодера «Установленный энкодер» становится равным -1.
Если в ответе на команду[9] параметр «Установленный GNSS » равен -1, значит GNSS не подключен, если 1 – то подключен.
Тип GNSS: 1 – одиночный режим, 4 – режим с дифференциальной коррекцией, 5 – режим дифференциальной коррекции с плавающим решением.
Cхема электрическая принципиальная
Объяснение по схеме
DD2 Микроконтроллер STM32F030CCT6 выполняет функции центрального управляющего узла коммутатора данных.
Характеристики МК
Ядро: ARM Cortex-M0, тактовая частота до 48 МГц;
Память: 256 КБ Flash для хранения ПО, 32 КБ SRAM для оперативных данных;
В микроконтроллере будет задействовано сразу 3 UART-порта:
UART_1 - предназначен для работы с GNSS-приемником;
UART_2 - предназначен для работы с энкодером;
UART_3 - предназначен для работы с ведущим устройством.
Выводы NRST и BOOT0
Вывод NRST(reset) используется для аппаратного сброса МК, подключается через резистор R16(10кОм) к питанию +3В — подтягивает NRST к логической «1», конденсатор С19(0,1мкФ), формирует RC-цепочку, используется для подавления помех и автосброса при включении питания, данный пример схемы гарантирует корректный старт МК после подачи питания, защищает от ложных срабатываний при скачках напряжения.
Вывод BOOT0 определяет, откуда МК будет загружать программу после сброса:
BOOT0 = 0 — загрузка из Flash‑памяти(основной режим работы);
BOOT0 = 1 — загрузка из системной памяти (встроенный загрузчик через UART, I2C, SPI).
В схеме вывод подтянут резистором R13(10кОм) к земле (логический «0»), это обеспечивает автоматическую загрузку программы из flash‑памяти после старта, если потребуется использовать встроенный загрузчик, можно временно подать «1» на BOOT0.
Обвязка питания VCC и VA
МК имеет несколько выводов питания:
VCC — основное цифровое питание (3.3В);
VA — питание аналоговой части (АЦП, компараторы и т. д.).
На выводах VCC и VA уставлен конденсатор С18 (0.1мкФ), он фильтрует высокочастотные помехи, возникающие при переключении логики, конденсатор ставиться как можно ближе к выводам МК, также дополнительно установлен танталовый конденсатор С20 (4.7мкФ), он сглаживает низкочастотные колебания и стабилизирует питание аналоговой части.
Узел кварцевого резонатора BQ
Кварцевый резонатор подключается к выводам МК (5 и 6), также добавляются нагрузочные конденсаторы С13 и С14 (12пФ), они обеспечивают корректный запуск и устойчивую работу генератора, формируя необходимую нагрузочную емкость.
После подачи напр.питания МК запускает внутренний RC-генератор, но при активации внешнего кварцевого генератора на выводах (5 и 6) начинает работать схема усилителя с положительной обратной связью, при которой:
На выводы 6(А) и 7(В) микросхемы DA3, поступают данные от энкодера, выводы подключены через согласующие резисторы:
Резистор R5(120 Ом) - предотвращает отражение сигналов в линии;
Резисторы R3 и R6(1,5 кОм) - подтягивающие, обеспечивающие корректное определение логических уровней на линии.
Резисторы R11 и R12(10 кОм) - устанавливают стабильный логический уровень на управляющих выводах RE и DE, таким образом они предотвращают ложные переключения при старте системы.
Подключение выводов к МК:
RO(выход приемника) - подключается к PA3;
DI(вход) - подключается к PA2;
DE и RE - подключаются PA1;
выводы А и B - подключаются к энкодеру.
Микросхема DA4, используется для приема и передачи данных ведущему устройству, схема подключения резисторов точно такая же как и у DA3,
Подключение выводов к МК:
RO(выход приемника) - подключается к PB11;
DI(вход) - подключается к PB10;
DE и RE - подключаются PB1.
выводы А и B - подключаются к ведущему устройству.
Узел подключения GNSS-приемника
Микроконтроллеры STM32, работают с логическими уровнями TTL/CMOS - обычно это 3.3В или 5В, интерфейс RS-232, напротив, использует более высокие и отрицательные напряжения ( от ±3В до ±12В), что делает их напрямую несовместимыми.
Если подключить напрямую модуль-GPS (RS-232) к выводам МК-STM32, это может не только привести к искажению данных, но и физически повредить выводы. ADM3202 решает эту задачу, переводя сигналы из одного уровня в другой, в обоих направлениях.
ADM3202 - это двухканальный приемопередатчик уровней RS-232 - TTL, выполняет сразу две задачи:
Преобразование входящих RS-232 сигналов в безопасные TTL-уровни(RX-канал);
Преобразование исходящих TTL-сигналов микроконтроллера в RS-232(TX-канал).
Для формирования требуемых амплитуд RS-232, внутри микросхемы используется помповый преобразователь напряжения(chage pump) с четырьмя внешними конденсаторами, это позволяет работать от одного источника питания (от 3В до 5.5В).
Вид осциллограммы передаваемых данных модуля-gnss(rs-232) до преобразования ADM3202
Осциллограмма амплитуды данных от модуля-gps(rs-232) до преобразования ADM3202
Показатель амплитуды данных от модуля gps(rs-232) до преобразования = delta [ 10.6V ], нельзя подключать к микроконтроллеру STM32.
Вид осциллограммы передаваемых данных модуля-gnss(rs-232) после преобразования ADM3202
Осциллограмма амплитуды данных от модуля-gnss(rs-232) после преобразования ADM3202
Показатель амплитуды данных от модуля gnss(rs-232) после преобразования = delta [ 3.6V ], можно подключать к микроконтроллеру STM32.
Узел преобразователя и стабилизатора напряжения
Микросхема DA1 - MP2315 представляет собой синхронный понижающий DC-DC преобразователь с интегрированными силовыми MOSFET-ключами. Высокая частота переключения (до 2.2 МГц), компактный корпус и широкий диапазон входных напряжений (от 4.5 В до 24 В), ссылка на техническую документацию MP2315 [https://www.alldatasheet.com/datasheet-pdf/pdf/1035056/MPS/MP2315.html].
Микросхема DA2 — LP2985 представляет собой малошумящий стабилизатор, предназначен для преобразования входного напряжения +5В в стабильное напряжение +3В, используемое МК и периферийными узлами, ссылка на техническую документацию LP2985 [https://www.alldatasheet.com/datasheet-pdf/pdf/99706/TI/LP2985.html].
Модель печатной платы коммутатора
Слой TOP (верхний слой) и слой BOTTOM(нижний слой) подключены к GND
Прикладываю схему и модель печатной платы cсылка на скачивание Commutator_STM32(.sch/.pcb) [ https://t.me/ChipCraft В закрепленном сообщении [ #исскуствомк_Схема_Commutator_STM32]
Прикладываю также программу для открытия P-CAD Viewer, да... она очень и очень древняя, но я данную программу по построению схем и печатных плат полюбил очень давно, и в основном проектирую только в ней, cсылка на скачивание P-CAD Viewer [ https://t.me/ChipCraft В закрепленном сообщении [ #исскуствомк_проектирование_sch/pcb — Программа для просмотра схем и печатных плат]
Краткая инструкция по открытию файлов
Для того чтобы открыть схему, необходимо открыть программу SCHView(располагается в папке P-CAD 2006 Viewer) и в ней уже открыть файл, для того чтобы открыть печатную плату, необходимо открыть программу PCBView и в ней уже открыть файл.
Настройка микроконтроллера STM32F030CCTx в CubeIDE(Ведомое устройство)
Настройка RCC и SYS (в RCC выбираю Crystal/Ceramic Resonator, так как у меня внешний кварц)
Настройка выводов узла подключения энкодера
Вывод PA1 предназначен для управления DA3 (MAX14841), он подключен к DE и RE, для приема и передачи данных энкодера, необходимо поднимать и опускать вывод МК, работа схемы:
На выводе МК = 1 (высокий уровень, "поднят"):
DE = 1 — драйвер включен (выходы A и B активны и передают данные из DI).
RE = 1 — приемник выключен (выход RO отключен).
Микросхема находится в режиме передачи.
На выводе МК = 0 (низкий уровень, "опущен"):
DE = 0 — драйвер выключен (выходы A и B в высокоимпедансном состоянии).
RE = 0 — приемник включен (данные с A и B передаются на RO).
Микросхема находится в режиме приема.
Настройка USART2
Энкодер передает данные на скорости [230400], в Baud Rate выставляю скорость, остальные параметры без изменений
Заходим во вкладку NVIC Settings и включаем прерывания
Заходим во вкладку DMA Settings и подключаем DMA
Настройка выводов узла приема и передачи данных с ведущим устройством
Вывод PB1 предназначен для управления DA4 (MAX14841), он подключен к DE и RE, для приема и передачи данных с ведущим устройством, необходимо поднимать и опускать вывод МК, работа схемы:
На выводе МК = 1 (высокий уровень, "поднят"):
DE = 1 — драйвер включен (выходы A и B активны и передают данные из DI).
RE = 1 — приемник выключен (выход RO отключен).
Микросхема находится в режиме передачи.
На выводе МК = 0 (низкий уровень, "опущен"):
DE = 0 — драйвер выключен (выходы A и B в высокоимпедансном состоянии).
RE = 0 — приемник включен (данные с A и B передаются на RO).
Микросхема находится в режиме приема.
Настройка USART3
Ведущее устройство передает и принимает данные на скорости [230400], в Baud Rate выставляю скорость, остальные параметры без изменений
Заходим во вкладку NVIC Settings и включаем прерывания
Ссылка на скачивание исходного кода [ https://t.me/ChipCraft В закрепленном сообщении [ #исскуствомк_исходный_код — Исходный код для STM32F030CCTx_Switch_GPS_DP].
Модуль uart_processing.c
Данный модуль реализует обработку обмена по трем интерфейсам UART, используемым в составе коммутатора:
UART1 - прием данных от GNSS-приемника;
UART2 - взаимодействие с датчиками перемещения(ДПИ, ДП32, Encoder);
UART3 - взаимодействие с ведущим устройством.
Функция void fillBuff_com9(int8_t typeDP)
Формирует ответ на девятую команду протокола, которая служит для запроса или установки типа подключенного датчика перемещения
Режим запроса статуса (typeDP == 1), возвращается текущее значение параметра gParams.type_DP которое отражает активный тип подключенного датчика.
Режим смены конфигурации (typeDP != 1) проверяется, отличается ли новый тип от ранее установленного (gParams.typeDP_fromAB), если произошла смена конфигурации, выполняются переинициализация датчиков.
После выполнения логики, функция формирует ответный пакет в буфере uart_rx_buf_com9:
преамбула (0x5A, 0xA5);
идентификатор команды (0x09);
Тип ДП(retDP);
признак активности GPS (gParams.isGPS);
статус RTK (isRTK_GPS);
конец сообщения (>).
Функция uart_Handler()
Это центральный узел, который предназначается для взаимодействия с ведущим устройством
Логика работы:
Анализ приема:
Проверяется флаг uartRxABDone, сообщающий о завершении приема пакета по интерфейсу USART3;
Валидность пакета подтверждается преамбулой (0xAB и 0xBA) и соответствием длины данных (uart_rx_buf_AB[2]).
Декодирование команды:
в зависимости от байта команды uart_rx_buf_AB[3] выполняется одна из ветвей:
0x09(девятая команда) - вызывается fillBuff_com9() и передается ведущему устройству;
'Y' (данные от датчиков перемещения) - вызывается dpi_getDP_buffer(), формирует буфер дистанции и передается ведущему устройству;
0x02 (версия прошивки) - формируется ответ в формате Vx.x.x> и передается ведущему устройству.
Обработка завершения передачи:
Если пакет подготовлен, управление передается функции uart_transmitAB();
В противном случае запускается повторный прием (uart_startRecievingAB), гарантирует непрерывность работы, после успешной отправки пакета, сбрасывается флаг uartTxIRDone_AB, восстанавливается линия приема и освобождается RS-485 (сброс сигнала DE_RE).
Модуль uart_Proc_dp.c
Краткое описание функций:
dpi_getDp_buffer() - получение актуального пакета для передачи;
dpi_getDist() - узнать накопленное расстояние;
dpi_resetDist() - сбросить счетчик дистанции и внутренние буферы;
dpi_getDpi_connect_status() - определение состояния подключения.
Данный модуль предназначен для работы с несколькими типами датчиков перемещения
ДПИ (по интерфейсу RS-485)
Команда 0xBA 0xDC используется для запроса дистанции;
Ответ от ДПИ передается в 6-байтном формате: 4 байта дистанции + 2 байта контрольной суммы CRC.
Функция uartHandlerDp анализирует входящий пакет;
CRC вычисляется по алгоритму побайтового суммирования с инверсией результата;
Если CRC корректна, обновляется переменная dist, в которой хранится расстояние в импульсах;
Результат упаковывается в буфер uart_rx_buf_dpi[];
dpi_time_send и dpi_time_status_connect задают цикличность запросов и ограничение времени ожидания;
Если ответа нет более 100мс, датчик считается отключенным (gParams.typeDP=-1).
ДП32(работа по генерации импульсов)
подключается напрямую к линии RX микроконтроллера и генерирует импульсы
Прерывание по фронту PB3 фиксирует факт прихода импульса;
Таймер TIM6 используется для определения направления перемещения()
2 импульса - > движение назад (счетчик уменьшается)
3 импульса - > движение вперед (счетчик увеличивается)
Настройка TIM6:
Выбрать GPIO_EXTI;
Повесить прерывание, зайти в NVIC и включить.
Encoder (данный тип датчика выдает только импульсы в одном направлении, т.е. дистанция будет всегда положительная)
Каждый фронт на входе PB3 увеличивает счетчик dpEnc_counter, обновление также транслируется с преамбулой (0x5A и 0xA5).
Инициализация параметров (setDefaultParams()), формируются стандартные настройки модуля, включая все протоколы обмена и параметры периферийных интерфейсов;
Перезапуск USART2, сначала деинициализирую и потом инициализирую, помогает корректно работать RS-485 перед началом работы;
Инициализация функций:
uart_GNSS_init() - подготавливает буферы и структуры для приема данных от GNSS -приемника;
uart_Proc_dp_init() - настройка логики обработки данных от датчиков перемещения.
Старт обмена данными:
uart_startRecieving_DP() - запуск приема от датчиков;
uart_startTransmiting_DP() - формирование и отправка первого запроса к датчику;
uart_startRecieving_AB() - начало приема пакетов от ведущего устройства;
uart_startRecieving_GNSS() - включение приема от GNSS-приемника.
Основной цикл работы
Внутренний цикл wihle(1) реализует вызов трех основных обработчиков:
uart_Handler() - обеспечивает обмен с ведущим устройством по RS-485
uart_Handler_GNSS() - выполняет разбор входящего навигационного потока в формате NMEA, а также контроль активности GNSS-приемника;
uart_Handler_DP() - реализует обработку данных с датчиков перемещения.
Просмотр работы приема и передачи данных между ведущим и ведомым устройством, через терминал
С помощью преобразователя USB/RS-485 подключаюсь к DA4 и тестирую
Если статья показалась Вам интересной, буду рад выпустить для Вас еще множество статей исследований по всевозможным видам устройств, так что, если не хотите их пропустить — буду благодарен за подписку на мой ТГ-канал.
Здравствуйте. Прошу помощи. Есть в планах сделать с сыном шахматы из эпоксидной смолы (доску, фигуры). Хотелось бы иметь подсветку доски. Но не простую. Клетка с фигурой подсвечивается зелёным. Когда фигура покидает клетку, клетка какое то время светится синим (цвета к слову). Я так понимаю мне нужны будут конденсаторы, светодиоды, магниты и какое-то подобие гирконов. В электронике не силен и был бы благодарен за объяснение или схему сего чуда. Если пост нарушает правила сообщества, вынесите пожалуйста.
Коротко - как месяц работал над прошивкой ядра куба, сделал первую игру, неожиданно хайпанул на Пикабу, бился с ИИ и открыл для себя нейросеть - Кракена.
Куб среди кубиков =)
В августе собрал прототип с проводками и разными техническими сложностями. В сентябре пришло время сделать что-то действительно играбельное. Спойлер: получилось, но с приключениями и очередной порцией борьбы с ИИ.
Первые шаги: борьба с экранами и производительностью
1 сентября — у кого день знаний, а у кого день куба =)
В августе был колхоз с проводками, и здесь он продолжается. Но теперь более аккуратный. И придется паять не 5, а 6 проводов, потому что напутал и с подключением второго SPI.
Хотя бы 2 экрана завелись. Правда квадраты бегают медленно.
2 сентября — Не зря в универе учился на прогера. Вспомнил идею распараллеливания задач на ядрах компьютера. История повторяется, но теперь попытка выжать максимум из двух ядер Esp32.
Использовал все известные мне ИИ для кода claude, grok, deepseek. Каждый из них косячит по разному.
Но в итоге получил 17FPS на всех экранах. Выжал почти максимум с рисования — если исходить из 80МГц частоты и полной заливки 240×240px (измерялось время отрисовки каждого кадра в цикле при отправке данных на все экраны).
3 сентября — можно сказать, что в этот день я выдохнул, поняв что все hardware системы работают: карта, дисплеи, датчик, микросхема повербанка, проц. Да, с проводками, но уже работают же =)
Открыл для себя систему задач (FreeRTOS) в микроконтроллере ESP32. За счет внутреннего планировщика и еще пары сотен строк кода удалось вытянуть около 24FPS на всех дисплеях (при этом у нас еще тратится время на создание каждый раз новых буферов 240*240 для экранов).
4 сентября — кроме поста с дневником за предыдущий месяц, понемногу допаивал разъемы. На столе платы для еще 9 кубиков.
Первая сборка
9 сентября — первый куб собран. Ну почти, где-то не сходится и не защелкивается. И вот только думал показать бегущую радугу вместо квадратиков… А она не работает. На одном экране градиент показывается, на других дублируется. Хотя код одинаковый.
10 сентября — технические замеры собранного куба. Вес 180 грамм — ощутимый, как телефон в другом формфакторе. Температура вообще никакая при 2 часах работы. Потребление 330мА из батареи.
Итого: ~5 часов работы при обычном использовании. Первая версия, она такая.
Нашел косяк с градиентами. Мучился с ИИ в поиске бага — оказалось просто порядок байт для отправки на дисплей не тот. Вот такое программирование с нейросетями — поиск одних багов по кругу.
12 сентября — день улетел на разработку главного программного сердца.
Класс управления почти дописал. Не понятно почему простая задача заняла столько времени. Может ИИ тупил, может я оверинжинирил.
Придумал систему абстрактного интерфейса из клетчатых страниц — с ней можно легко прогить интерфейсы игр.
13 сентября — Hello Snake! Первая игра на кубе. После кружочков захотелось сделать что-то сразу прикольное и рабочее. Засиделся до 4 ночи, но оно того стоило.
14 сентября — теперь понял зачем нужно было учили такому количеству математики на ИТ-факультете. Все эти координаты, геометрия и формулы сейчас понадобились. Сделал полную бесшовную модель координат для граней куба и довел змейку до красивого состояния.
Снова посетило чувство успокоения — закончил сложный этап. Можно отдохнуть. А то со своим умением уходить в поток сильно залип. От идеи до рабочего устройства и первой игры прошло всего 1.5 месяца.
Играть навесом через штатив неудобно — смотреть и на поле и на фотик.
Пикабу-хайп
14-15 сентября — Пост на пикабу прям неожиданно залетел. Такого охвата мне ни одна соцсеть не давала.
Огромное спасибо Пикабу за такую поддержку! Это реально мотивирует продолжать разработку и делиться прогрессом.
Радует, что получилось создать проект, который понятен и интересен широкому кругу людей. А не предыдущие световые устройства, где и конкуренция огромная и сложно как-то выделиться.
Кроме ответов на комментарии занимался программированием. Всё таки не зря придумали объектно ориентированное программирование и разбивку задач на небольшие подзадачи. А с нейросетями прям иногда хочется это форсировать, а в итоге получается ерунда.
И еще заставить ИИ нарисовать бесшовные фоны и тайловую графику сложно. Придется как то выкручиваться.
17 сентября — не всегда получается попадать в нужную аудиторию при живых встречах. Когда встречаешься с серьезными людьми на бизнес завтраках, им такие игрушки не интересны.
Планирую использовать куб для настолок, но конечно на фоне обычных игральных костей он смотрится огромным. Но функционала во много раз больше.
Основные платы спаяны. Осталось поставить аксели к главным платам и заняться самым страшным — пайкой проводов.
Рутина, генеративный ИИ и разочарования
18 сентября — на столе будущие 9 кубиков. Когда с кодом не получается, пайка точно пойдет без проблем.
От управления зарядником в этой версии придется отказаться — передача данных работает через раз. Уровень батареи через проц показываться будет, система повербанка работать будет даже без I2C управления.
Идея: анимировать известных персонажей через генеративный ИИ и использовать видосики при “броске” куба. Как в газетах в фильме "Гарри Поттер" небольшие анимации.
А самая интересная идея — персонализированные герои на основе фото. Кем видит себя игрок — магом, воином — такая анимация на кубе.
19 сентября — сложности видео-генераций. Поверил в нейросети и думал что простые задачи по анимированию портретов легко решатся. Ощущение что ИИ заточены делать что-то киношное с движениями камеры.
Спустил кучу токенов на бестолковые генерации. Попробовал все нейросети в агрегаторе. Самый адекватный результат — Seedance, самая дешевая модель. Но ей всё равно хотелось подвигать персонажа.
Думал сэкономить и генерить сразу несколько эмоций — вообще ни в какую. Либо эмоции одинаковые, либо слайдшоу.
19 сентября — столкнулся с тем, что нейросети не могут работать с тем материалом, о котором у них инфы мало в базах данных.
Задача была в написании полного класса распознавания жестов от акселя и отделения его от управления экраном. Но почти все нейросети вообще не понимали что от них хотят и терялись в классах. Особенно если им прислать ТЗ и старый код, они возьмут многое из старого кода, а не переработает его на основе задания.
Самое печальное — если писать самому код, то будет еще медленнее чем ругаться с ИИ. Из двух зол меньшее, как говорится.
причем название One Cube вообще свободное. В инете под таким именем только давно закрывшийся сервер майнкрафта.
27 сентября — день Кракена. Всё началось с идеи: а что если написать патент на куб? Чтобы спокойно проектировать и никто бы не сделал такой же по закону.
Врубил все сети:
Perplexity — поиск в инете
Claude Opus глубокий поиск — выдал отчет что вроде всё хорошо
Кракен не просто ИИ. Это исследователь, сборщик и аналитик огромных массивов актуальных данных.
Он взял мою заявку на патент, разобрал на части и выдал 10+ страничный юридически грамотный разбор. При этом нашел древнющий патент от 2007 года с такой же формулой полезной модели (US 20070247439A1).
С одной стороны грустно — не получу бумажку. С другой — никто не сможет защититься патентом, потому что уже не подходит под НОВИЗНУ.
Конкурируем только по самому устройству — дизайну, удобству, играм.
Потом задал другой запрос: построй маркетинговую стратегию для куба с минимальными вложениями. Кракен выдал много полезной информации. Предложил мероприятия, издания и ресурсы чтобы охватить наиболее релевантную аудиторию.
И вдумайтесь: такие исследования в КРАКЕНЕ стоят 2.4 доллара. А это работа больших маркетинговых агенств. И кстати, советую попробовать. При регистрации на иностранный емейл дают 20 долларов на тесты.
30 сентября — 45 проводочков и серийный колхоз. Теперь проводочки для оставшихся 9 кубов на месте. Не красиво, но работает.
ЧТО ПОЛУЧИЛОСЬ ЗА СЕНТЯБРЬ
✅ Первая полноценная игра — "Змейка 6D" с бесшовной системой координат ✅ Железо доведено до ума — 17-24 FPS на всех экранах, всё стабильно работает ✅ Первые игроки и живая обратная связь — людям интересно и нравится идея ✅ Хайп на Пикабу — 48000 просмотров и 345 плюсов ✅ Измерены характеристики: 180г, ~5ч работы, 17-24 FPS рендер всех экранов ✅ Программное ядро — система управления акселерометром, модульная архитектура ✅ Серийная партия — 10 кубиков в процессе сборки ❌ Проводки (надеюсь в следующей партии больше таких косяков не будет) ❌ Генерация видео через ИИ сложнее ожидаемого ❌ Патент не получится (но никто не защитится тоже)
Открытия:
Железо:
Выжал максимум с SPI
RGB565 — неизбежный компромисс между качеством и скоростью
TASK-система ESP32 творит магию с асинхронностью
Управление акселерометром работает независимо от положения в пространстве
ИИ и нейросети:
Генеративный ИИ для видео видимо заточен под кино, а не генерацию типовых вещей
Для нестандартных задач (например, система управления акселем) ИИ тупит сильно
Parallel AI (КРАКЕН) — мощнейший инструмент за 2.4 доллара (может за минуты изучить 5000+ страниц релевантных источников)
P.S. Подписывайтесь на TG-канал, если интересно следить за разработкой куба в реальном времени.
P.P.S. Еще раз огромное спасибо Пикабу за поддержку поста про змейку! Без вашей реакции мотивация была бы совсем другой. Это реально помогает продолжать 🙏
Доброго времени суток всем. Этот пост для меня начало пути во всех смыслах: и как первый пост на любимом и читаемом много лет Пикабу, так и в новом проекте по созданию высокопрооходимых полноприводных машин самостоятельной постройки.
Итак к проекту.
1. Цель проекта: создание полноприводного багги по формуле 4х4 для нужд СВО. 2. Описание объекта: полноприводный легкий автомобиль с каркасной пространственной рамой на агрегатах ваз ( нива 4х4) 3. Ресурсы материальные к выполнению: полная тележка энтузиазма, помещение для сборки, комплект всевозможных автомобильных инструментов вплоть до пресса 30т, газового резака и пары сварочных полуавтоматов. 4. Ресурсы коллектива: я и кореш на подмоге
Пока не густо. Знаю.
Как появилась такая идея и как мы дошли до жизни такой. Регулярно попадаются новости люди собирают всем миром деньги для покупки разного рода мелкой техники для сво (багги, квадрики, мотоциклы). Почему МО не дает таких заказов для своих оборонных предприятий для меня загадка, может сильно заняты чем то поважнее и им не до этой мелочи. А это мелочь там ой как сильно нужна. Вот и получается приходится закупать это все дело у наших новых китайских друзей. Здесь альтернатив почти нет (вездеходы шерп и кваррики сокол не в счет, парни красавцы, делают вещи, не знаю только про поставки на фронт есть или нет). Пораскинув серым подумалось, может сделать тестовый образец и откатать технологию????
В общем решился. Надо делать.
Всем спасибо за прочтение. Буду держать вас в курсе, как продвигаются дела.
Буду рад вашим советам, подсказкам и полезной информации.
Тапками не закидывайте сильно.
Ожидаемый примерный результат проекта на картинке (зависит от добытых чертежей каркаса)