как не повеситься
Дарьяоверинжиниринг это прошлый век. я работаю в жанре эпатажный инжиниринг: у девайса ровно одна функция, а выглядит он как пульт управления инопланетным кораблем. я обожаю игривую ретрофутуристичную эстетику, и в этом проекте выкрутила её на максимум. главное правило ручного крафта: если готовую железку не хочется гладить аки любимую женщину и любоваться ею - вы всё провалили.
кароче, рассказываю, как придумала и оживила эту железочку. just two guys with a crazy idea, только второй парень не пришел........
1. тактильный и аудиальный фетиш
📎 колёса букв крутятся с механическим шуршанием (отчасти из-за шаговиков, но в основном потому, что я напечатала диски слишком толстыми, и они трутся о провода внутри корпуса)
📎 энкодеры проворачиваются с тактильным откликом на каждом шаге, кнопочки приятно пружинят под пальцами
📎 режимы переключает тяжелый промышленный тумблер (у меня какая-то гиперкомпенсация началась, я как мужик на комично огромной тачке). тумблер щелкает с таким оружейным лязгом, будто запускает турбину на ГЭС (хотя на самом деле просто подтягивает 15 пин к земле)
📎 декоративные накладки отлиты из двухкомпонентного силикона на платиновой основе (40А по шору) с пигментами для эпоксидки. сверху детская присыпка, кстати! получился упругий, матовый финиш, контрастирующий с холодным щелкающим металлом
у игрушки два режима:
- робот загадывает: esp32 достает слово из чертогов памяти и выводит прочерки на экран. крутишь энкодер -> шаговик синхронно подгоняет нужную букву на диске в иллюминатор-окошко. динамический мультипликатор считывает скорость: крутишь медленно -> идет точная пошаговая доводка, крутанул резко -> диск пролетает пол-алфавита.
угадал букву -> вспыхивает победная анимация на светодиодном колечке и звучит победный писк. ошибся -> девайс тоскливо гудит, а экран дорисовывает фрагмент виселицы. - робот отгадывает: слово загадываешь ты, а робот сам методично шуршит дисками, предлагая варианты. внизу под энкодерами живут две кнопки («да» справа, «нет» слева), которыми ты подтверждаешь или опровергаешь догадки железки.
2. fdm: зазоры-позоры
пытаться натянуть органическую биоморфную форму на точную механику в cad - это как сову на глобус, но сложнее. булевы операции сбоят, оффсет ломает сетку, а fdm-печать щедро добавляет проблем: пластик усаживается как ему вздумается, стойки под платы съезжаются, а технические отверстия (в простонародье "блядские дырки") наотрез отказываются принимать в себя модули кнопок и энкодеров. кстати, еспишка у меня внутри расположена штырьками вверх, и соответственно кнопками en и boot вниз. так вот когда я прикручивала плату к кривым стойкам, случайно зажалась кнопка boot, и прошивка отказывалась работать раз за разом. первые часа два были потрачены на выяснение этого простецкого обстоятельства, зато какой урок!
первые прототипы всегда рождаются чмоньками (кто тоже старший ребенок в семье, тот поймет). не суди о книге по обложке, и не суди о моих прототипах по внутренностям... платы прикручены криво на два самореза вместо запланированных красивых ровных четырех М2; посадочные места под модули кнопок снесены инструментом для выжигания по дереву (практически выплавлены); зазор между крышкой и дном вдохновлен гранд каньоном; дырки под выступающие колеса букв и дырка под type-c еспишки это то, на что у меня аналогий уже не хватает, ну и так далее!
подрядчик, конечно, отдал детали после обработки дихлорметаном, но до матового идеала я дотирала их наждачкой вручную еще целую вечность. кстати не дотёрла в итоге...
крышку и дно я стыковала дедовским двухкопеечным методом: тут подточила, там придрочила. кст, для объёмной стыковки я прогревала края крышки и дна феном, PLA размягчался, и я насаживала крышку на дно. удивительно, но это дало самый ощутимый и быстрый результат.
3. кинематика и нули господни неисповедимы
вместе со скучным выводом текста на экран здесь работают два физических диска: верхний малый (10 гласных) и нижний большой (24 сектора под согласные). чтобы показать согласную, верхний диск поворачивается специальной выемкой к смотровому окошку, открывая нижний уровень. ощущается и звучит это как механизм сейфового замка: вжжж-щелк-вжжж.
в 3д я наивно мыслила привычными градусами: 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). теперь даже после отключения питания девайс помнит свои истинные нули. или не помнит, как повезёт.
скрытая мистика продолжается по сей день, и никто не может понять, почему оно иногда сбивается.
4. мозги: кириллица из палок и 4к слов во флеше
готовые библиотеки под крошечный дисплей 1.44" (ST7735 128x128) при виде кириллицы привычно показывают кракозяброчки. тащить полноценные ttf-шрифты в микроконтроллер это тоже не варик, поэтому клод соннет 4.6 в соло расписал битовый массив 5х7 под все 33 буквы и собрал компактный декодер двухбайтового UTF-8. экранчик мгновенно ожил и стал выдавать ламповый пиксельный шрифт в духе бортовых компьютеров 80-х.
в память PROGMEM утрамбован словарь на 3 997 проверенных нарицательных существительных. никакой архаичной чепухи: массив на лету тасуется алгоритмом Фишера-Йетса с опорой на аппаратный генератор случайных чисел esp32.
5. мораль
получилась абсолютно непрактичная с точки зрения массмаркета, но бесконечно тактильно и концептуально приятная вещь. она шуршит моторчиками, тяжело лежит в руке, смачно щелкает тумблером, издает ретро-звуки и привлекает внимание гостей. все железочки и провода я собрала с кайфом, хотя 3д-моделлинг, обработка корпуса и заливка силиконом меня, конечно, довели.
для первого прототипа всё окей даже на мой вкус! но второй прототип я вижу совсем в другой эстетике, с латунными дисками и гораздо меньше. может быть мозги и управление вынесу в другое место. в этой игре прекрасно то, что про форм-факторы можно фантазировать бесконечно.