Оверинжиниринг — это прошлый век. Я работаю в жанре «эпатажный инжиниринг»: у девайса ровно одна функция, а выглядит он как пульт управления инопланетным кораблем. Я обожаю игривую ретрофутуристичную эстетику и в этом проекте выкрутила её на максимум. Главное правило ручного крафта: если готовую железку не хочется гладить аки любимую женщину и любоваться ею — вы всё провалили.

Короче, рассказываю, как придумала и оживила эту железочку. Just two guys with a crazy idea, только вот второй парень не пришел...

1. Коротко о главном

У игрушки два режима:

  1. Робот загадывает слово: ESP32 достает слово из чертогов памяти и выводит прочерки на экран. Крутишь энкодер ➡ шаговик синхронно подгоняет нужную букву на диске в иллюминатор‑окошко. Динамический мультипликатор считывает скорость: крутишь медленно ➡ идет точная пошаговая доводка, крутанул резко ➡ диск пролетает пол‑алфавита. Угадал букву ➡ вспыхивает победная анимация на светодиодном колечке и звучит победный писк. Ошибся ➡ девайс тоскливо гудит, а экран дорисовывает фрагмент виселицы.

  2. Робот отгадывает: слово загадываешь ты, а робот сам методично шуршит дисками, предлагая варианты. Внизу под энкодерами живут две кнопки («да» справа, «нет» слева), которыми ты подтверждаешь или опровергаешь догадки железки.

2. Тактильный и аудиальный фетиш

  • Колёса букв крутятся с механическим шуршанием (отчасти из‑за шаговиков, но в основном потому, что я напечатала диски слишком толстыми, и они трутся о провода внутри корпуса).

  • Энкодеры проворачиваются с тактильным откликом на каждом шаге, кнопочки приятно пружинят под пальцами.

  • Режимы переключает тяжелый промышленный тумблер (у меня какая‑то гиперкомпенсация началась, я как мужик на комично огромной тачке). Тумблер щелкает с таким оружейным лязгом, будто запускает турбину на ГЭС (хотя на самом деле просто подтягивает 15-й пин к земле).

  • Декоративные накладки отлиты из двухкомпонентного силикона на платиновой основе (40А по Шору) с пигментами для эпоксидки. Сверху детская присыпка, кстати! Получился упругий, матовый финиш, контрастирующий с холодным щелкающим металлом.

3. FDM: зазоры‑позоры

Пытаться натянуть органическую биоморфную форму на точную механику в CAD — это как сову на глобус, но сложнее. Булевы операции сбоят, оффсет ломает сетку, а FDM‑печать щедро добавляет проблем: пластик усаживается как ему вздумается, стойки под платы съезжаются, а технические отверстия наотрез отказываются принимать в себя модули кнопок и энкодеров.

Кстати, ESP‑шка у меня внутри расположена штырьками вверх, и соответственно кнопками EN и BOOT вниз. Так вот, когда я прикручивала плату к кривым стойкам, случайно зажалась кнопка BOOT, и прошивка отказывалась работать раз за разом. Первые часа два были потрачены на выяснение этого простецкого обстоятельства, зато какой урок!

Первые прототипы всегда рождаются чмоньками (кто тоже старший ребенок в семье, тот поймет). Не суди о книге по обложке, и не суди о моих прототипах по внутренностям... Платы прикручены криво на два самореза вместо запланированных красивых ровных четырех М2; посадочные места под модули кнопок снесены инструментом для выжигания по дереву (практически выплавлены); зазор между крышкой и дном вдохновлен Гранд‑Каньоном; дырки под выступающие колеса букв и дырка под Type‑C ESP‑шки — это то, на что у меня аналогий уже не хватает, ну и так далее!

Подрядчик, конечно, отдал детали после обработки дихлорметаном, но до матового идеала я дотирала их наждачкой вручную еще целую вечность. Кстати, не дотёрла в итоге...

Крышку и дно я стыковала дедовским двухкопеечным методом: тут подточила, там придро****. Кстати, для объёмной стыковки я прогревала края крышки и дна феном: PLA размягчался, и я насаживала крышку на дно. Удивительно, но это дало самый ощутимый и быстрый результат.

4. Кинематика и нули: господни неисповедимы

Вместе со скучным выводом текста на экран здесь работают два физических диска: верхний малый (10 гласных) и нижний большой (24 сектора под согласные). Чтобы показать согласную, верхний диск поворачивается специальной выемкой к смотровому окошку, открывая нижний уровень. Ощущается и звучит это как механизм сейфового замка: вжжж‑щелк‑вжжж.

В 3D я наивно мыслила привычными градусами: 360° круга делятся на 10 гласных по 36° (права буквы «Ё» меня не заботят) и на 23 согласных (+ пустой слот для ровного счёта) по 15°. Посчитав всё на калькуляторе, я решила, что умнее всех.

Но шаговик 28BYJ-48 плевать хотел на меня и на вавилонскую систему счисления. У него внутри стоит редуктор 1:64, и на полный оборот выходного вала требуется ровно 2048 импульсов...Делим 2048 на 24 сектора согласных и получаем 85.3333333... шага на букву. Мотор не умеет делать треть шага: он шагает либо 85, либо 86. Если просто отсчитывать по 85 от нуля, за один круг диск теряет 8 шагов, а через три оборота вместо буквы «К» в окошке зияет стык между секторами и пустота.

Пришлось спасать геометрию софтом: привязать центры букв к абсолютной сетке координат через round((i + 0.5) * 85.333) и написать расчет кратчайшего пути по кольцу. Теперь мотор сам мгновенно решает, куда крутить быстрее — по часовой или против стрелки (в отличие от меня: я до сих пор путаю и часовые стрелки, и право с лево).

На калибровке полезла скрытая мистика: после каждого прогона диски уползали на полбуквы. Оказалось, процедура юстировки после проверки всех 23 согласных возвращала мотор не в центр буквы «Б» (шаг 43), а на физический ноль пустого сектора (шаг 0). После 5 калибровок девайс радостно показывает воздух вместо алфавита. Сколько я пыталась починить такую пустяшную историю — признаваться не буду. Но в итоге всё было пофикшено, и юстировочные смещения намертво зашиты в энергонезависимую память NVS (Preferences).

Теперь даже после отключения питания девайс помнит свои истинные нули. Или не помнит, как повезёт. Скрытая мистика продолжается по сей день, и никто не может понять, почему оно иногда сбивается.

5. Мозги: кириллица из палок и 4к слов во флеше

Готовые библиотеки под крошечный дисплей 1.44" (ST7735 128×128) при виде кириллицы привычно показывают кракозяброчки. Тащить полноценные TTF‑шрифты в микроконтроллер — это тоже не вариант, поэтому Claude Sonnet 4.6 в соло расписал битовый массив 5×7 под все 33 буквы и собрал компактный декодер двухбайтового UTF-8. Экранчик мгновенно ожил и стал выдавать ламповый пиксельный шрифт в духе бортовых компьютеров 80-х.

В память PROGMEM утрамбован словарь на 3 997 проверенных нарицательных существительных. Никакой архаичной чепухи: массив на лету тасуется алгоритмом Фишера — Йетса с опорой на аппаратный генератор случайных чисел ESP32.

6. Мораль

Получилась абсолютно непрактичная с точки зрения массмаркета, но бесконечно тактильно и концептуально приятная вещь. Она шуршит моторчиками, тяжело лежит в руке, смачно щелкает тумблером, издает ретро‑звуки и привлекает внимание гостей. Все железочки и провода я собрала с кайфом, хотя 3D‑моделлинг, обработка корпуса и заливка силиконом меня, конечно, довели.Для первого прототипа всё окей даже на мой вкус! Но второй прототип я вижу совсем в другой эстетике: с латунными дисками и гораздо меньше. Может быть, мозги и управление вынесу в отдельный блок. В этой игре прекрасно то, что про форм‑факторы можно фантазировать бесконечно.

Спека и видосы с процессом игры, а также другие инженерные авантюры — у меня в тг‑канале!