
TL;DR: здесь ноль медицины и нейробиологии, только инженерный разбор прототипа DIY tRNS: архитектура, генерация сигнала (100–640 Гц hf-tRNS), VCCS, код и выводы.
Зачем?
Есть немалая вероятность, что человеческий мозг - самый сложный объект во Вселенной. Но для транскраниальных стимуляторов tDCS/tACS/tRNS все живые ткани между электродами (включая мозг) успешно моделируются активным сопротивлением (правда, заранее неизвестным и дрейфующим за время сеанса).
В этом тексте я рассматриваю исключительно инженерную сторону задачи, т.е. генерацию и контроль токов заданной формы. Медицинские аспекты, показания и интерпретации эффектов остаются за рамками поста и подробно обсуждаются в научных публикациях, на PubMed актуальной информации достаточно.
У меня уже было несколько итераций самодельных tDCS, которые я собирал в формате хобби. Коллега по опасным биокекерским практикам закинул идею, что tRNS перспективнее и эффективнее, чем tDCS. Заинтересовал, в общем.
Близкое к совершенству устройство DIY tDCS включает стабилизатор тока, потенциометр плавного пуска и миллиамерметр. А даже базовый вариант tRNS сделать в разы сложнее, потому что токи биполярные, да ещё и сложной формы, по началу было вообще непонятно, с какой стороны подступаться.
Другими словами, биокекерский азарт объединился с азартом чисто инженерного вызова.
Почему я?
Не я придумал, что мозг для tRNS можно моделировать как резистор, так придумали нейробиологи-исследователи. Как программист с бэкграундом в DSP (цифровой обработке сигналов) я понимаю, как генерировать сигналы на контроллере с заданными свойствами (спектром и распределением). Как связист по образованию я достаточно знаком со схемотехникой, чтобы при необходимости через боль разбираться со схемами на операционных усилителях.
В какой-то момент удалось разжиться достаточной мотивацией, осциллографом Hantek 6022BE, необходимыми компонентами и достаточным количеством свободного времени.
Постановка задачи
Пусть сопротивление полезной нагрузки варьируется от единиц до десятка кОм, а задача устройства сводится к пропусканию через нагрузку тока определенной формы, например, 1 мА постоянного тока для tDCS, гармонику 140 Гц с амплитудой 1 мА для tACS или полосу 100-640 Гц из белого гауссовского шума с амплитудой 1 мА для tRNS.
В разных протоколах параметры могут отличаться, но в целом параметры в примере часто встречаются в публикациях, а для tACS и tRNS сигнал как правило биполярный без постоянной составляющей. Задача сделать именно tRNS, но если получится объединить tRNS+tACS+tDCS в одном устройстве, то это будет плюсом.
Требования к точности тут весьма размытые, но интуитивно я убеждён, что грубость самого метода допускает отклонения токов в единицы процентов, это не прецизионное устройство. Постоянные погрешности и усиления мы доводим калибровкой. Частоты довольно низкие, нижний диапазон аудиоспектра, потому импульсными помехами от цифровых контуров можем пренебречь на прототипе, а ближе к финальной версии найти способ замерить все наводки от контроллера, OLED и энкодера-кнопки по факту на готовом устройстве.
Так же я не представляю себе настоящего стимулятора мозга малыми токами без встроенного индикатора с отображением параметров этих токов, я убеждён, что пользователь должен их видеть в реальном времени. Для меня это один из базовых принципов обеспечения безопасности и эффективности устройства.
Что касается оверинжиниринга, современные контроллеры и готовые модули стоят настолько дёшево, что инженерные компромиссы перевернулись с ног на голову. Если микроскоп внезапно оказался доступнее и удобнее молотка, то я разрешу себе забивать гвозди микроскопом, по крайней мере на этапе прототипирования.
Схема устройства
Сначала я с некоторой неохотой прорабатывал схему, где ток стабилизируется прямо на контроллере по обратной связи по напряжению на шунте с известным сопротивлением (которое пропорционально току на полезной нагрузке). Это была бы схема с массой компромиссов, высокими требованиями к АЦП для обратной связи, сомнительной надёжностью и необходимостью проведения экспериментов для адекватной настройки.
Управляемый источник тока
Потом к великой радости я открыл для себя VCCS (voltage-controlled current source, управляемый напряжением источник тока) в виде одной из реализаций Howland Current Pump. По сути, этот затык с управлением током был тем самым инженерным "супербоссом", без победы над которым двигаться дальше было просто несерьёзно. VCCS – это надёжный краеугольный камень устройства, на основе которого можно собирать не только tRNS, но и универсальный tES (tRNS+tACS+tDCS).

Так выглядит испытательный стенд в симуляторе. VCCS на кадый 1 В на входе выдает 1 мА на выходе и состоит из:
2-х операционных усилителей OPA134 (или двух в одном OPA2134);
4-х R2 номиналом 10 кОм, 1-го R1 (1 кОм), и 1-го R3 (9 кОм).
Генератор сигналов DCA_OUT тут выдает пилообразный сигнал, на таком сигнале легко увидеть нелинейные искажения. Потенциометр плавного пуска 100 кОм и шунт 100 Oм (на стенде напряжение на нём будем использовать для мониторинга тока через линию "B" осциллографа, в реальном устройстве - через АЦП контроллера) включены последовательно с полезной нагрузкой Rload. В симуляторе этот VCCS показал себя отлично, я менял в широком диапазоне Rload и ток через полезную нагрузку вёл себя стабильно, как раз то что нужно, и это успех!
Функциональная схема

Генератор сигнала формирует сигнал с требуемыми для протокола стимуляции характеристиками. Для прототипа это только один сигнал hf-tRNS, шумоподобный с нормальным распределением, равномерный в полосе 100-640 Гц. ESP32-S2 mini выбран за компактность, возможность подключать к смартфону через OTG (не пригодилось), доступность и неплохую вычислительную мощность, сомневаюсь, что это окончательное решение, кроме того, можно сделать несколько вариантов прошивок для разных контроллеров.
По I2S контроллер загружает сигнал в буфер Аудио ЦАП на готовом модуле c PCM5102A. Доступное и компактное решение, выдающее качественный биполярный сигнал, я решил что для выполения требований достаточно 8000 Гц (для частоты среза 640 Гц хватило бы частоты дискретизации 1280 Гц по теореме Котельникова) и 16 бит разрядности (хотя модуль способен аж на 32 бит).
Аналоговый сигнал (синие стрелки – аналоговый) с Аудио ЦАП поступает на VCCS, где сигнал из +/–1 В преобразуется в сигнал +/–1 мА той же формы.
Потенциометр выступает в роли ручного плавного пуска и стопа и может служить аварийным токоограничителем. Для того, чтобы он работал как токоограничитель, достаточно при старте крутить его не на максимум (не до 0 кОм), а до тех пор, пока монитор не покажет требуемую для сеанса амплитуду, плюс небольшой запас на случай колебания сопротивления полезной нагрузку (там может оставаться, например, 2 кОм запаса). Пусть максимальное напряжение, которое может в аварийной ституации попасть в нагрузку 12 В, тогда при минимальном сопротивлении полезной нагрузки те же 2 кОм, получим 4.1 кОм вместе с шунтом и потенциометром, даже если сопротивление источника питания равна нулю, через Полезную нагрузку нагрузку пойдет менее 3 мА. Вообще, конечно, стоит дополнительно залить часть схемы с большими напряжениями (питание операционных усилителей +12 В и –12 В) теплопроводным компаундом, чтобы гарантировать, что там ничего не коротнёт, например, от случайного попадания солевого раствора.
Блок Полезной нагрузки включает в себя коннекторы для электродов, электроды с губками и солевым раствором и собственно те живые ткани, через которые течет ток заданной формы и амплитуды.
Роль Шунта в том, что ток через него течет такой же как через полезную нагрузку, т.к. он соединяет с ней последовательно и уходит на землю, а значит напряжение на нем будет пропорционально току. Напряжение на нём для случая tRNS будет биполярным.
Чтобы биполярное напряжение снова стало униполярным и могло быть считано контроллером применяется Дифференциальный усилитель сдвигающий сигнал с Шунта в область положительных напряжений.
Униполярный сигнал считывается в контроллере через встроенный АЦП на 12 бит с заведомо избыточной частотой дискретизации, чтобы его можно было эффективнее почистить от шумов, в том числе квантовых.
Для Расчета метрик сигнала с АЦП сигнал фильтруется от шумов рассчитываются максимумы, минимумы и формируется гистограмма для оценки распределения.
На дисплее покажем гистограмму, среднее, минимум и максимум сигнала, чтобы пользователь знал, что на Полезную нагрузку подается безопасный ток, что устройство исправно, что контакт в порядке, что мощности питания достаточно и что требования по эффективности стимуляции соблюдаются.
Схема дифференциального усилителя

Как видно из иллюстрации симуляции, дифференциальный усилитель решает проблему преобразования биполярного сигнала в униполярный для последующей оцифровки на АЦП контроллера. Кстати, –0.5В удобно брать с PCM5102A, он же стерео, R-канал для управления током через нагрузку, L – для смещения в дифф. усилителе.
Идеи дальнейших доработок схемы
Можно использовать в дифф. усилителе OPA2134 (2-а OPA134 в одном корпусе), первый усилитель в роли буфера для повышения входного сопротивления, второй всё так же в роли дифференциального. Получится что-то вроде инструментального усилителя. Не то чтобы это было значимое улучшение, но это практически бесплатно.
Добавить энкодер с кнопкой в качестве ввода для пользовательского интерфейса. Для универсального устройства tES (tRNS+tACS+tDCS) это в той или иной форме станет необходимостью.
Поразмышлять над комфортом и безопасностью устройства, поизучать коммерческие аналоги, какой функционал там нужен только для медицинских исследований (sham-режим, например), а что может быть полезно в DIY для биокек-энтузиастов.
Разработать "материнскую плату", на которую будут сажаться модули и компоненты для повышения качества и скорости сборки. Схема сложновата для паечных макеток.
Код
Исходники
Исходники прошивки доступны в репозитории . По большей части я вайбкодил на ИИшках, а потом где-то упрощал и вычищал лишнее, потому комментарии в коде подробные.
файл ардуино проекта в
/ESP32tRNS/ESP32tRNS.ino;adc_control.cpp,dac_control.cppиdisplay_control.cppв той же папке – функции работы с буферами АЦП (через I2S), буферами ЦАП и отрисовки на дисплее соответственно;presets_embedded.cpp– пока единственный пресетtRNS 100-640Hz normal, грубо захардкоженный в виде вектора на 16384 элементов. Это временно, пока я не одолел SPIFFS или не придумал более изящно�� решение;/py_experiments/generator.ipynb– способ, которым я создавал тот самый пресетtRNS 100-640Hz normal, о чем подробнее расписано в следующем разделе.
Концепция генерации пресетов
Я решил, что сигнал tRNS проще будет не генерировать на контроллере, а в любом виде загрузить в виде файла или захардкодить в переменную в виде двухсекундного лупа (2,048 c, подгонял по старой привычке число отсчетов 16384 под степень числа двойки для более быстрого FFT). Да, это периодический сигнал, он будет повторяться каждые две секунды, но по всем прочим характеристикам это будет честный псевдослучайный сигнал и по спектру правильный, и по распределению.

Распределение у сигнала нормальное, спектр – квазибелый в полосе 100–640 Гц, за пределами этой полосы – нулевая мощность. Это нормально, что у шума даже сглаженный Уэлчем спектр всё равно лохматый, а не выглядит ровной прямоугольной полочкой.
Другие пресеты tRNS (0.1-100 Гц и 0.1-640 Гц) я генерировал в тем же файлом, но в прототипе решил их не добавлять, т.к. на данный момент согласно исследованиям они не представляют интереса.
Работа с буферами ЦАП и АЦП
Главное назначение прошивки устройства – качественное проигрывание пресетов через внешний АЦП через I2S.
Мы заранее готовим стереобуфер на основе пресета в правый канал и константы смещения дифференциального усилитея в левый канал и в процессе работы следим, чтобы буфер ЦАП всегда был заполнен. Далее код из dac_control.cpp.
// Записать подготовленный фрагмент во внутренний DMA буфер I2S // timeout_ticks = 0 → неблокирующий; больше 0 → ждём указанное время static bool writeFragmentToDMA(TickType_t timeout_ticks) { const uint32_t start_pos = stereo_buffer_pos; copyFragmentFromStereoBuffer(start_pos); size_t bytes_written = 0; const size_t bytes_to_write = FRAGMENT_SAMPLES * sizeof(int16_t); esp_err_t result = i2s_write(I2S_NUM, stereo_buffer_fragment, bytes_to_write, &bytes_written, timeout_ticks); if (result == ESP_OK && bytes_written > 0) { uint32_t samples_written = bytes_written / sizeof(int16_t); stereo_buffer_pos = (start_pos + samples_written) % STEREO_BUFFER_SIZE; return true; } if (result == ESP_ERR_TIMEOUT || bytes_written == 0) { // DMA заполнен - ничего страшного, позицию не меняем return false; } return false; }
Если буфер всегда поддерживается заполненным, то время контроллера освобождается для того, чтобы прочитать АЦП, рассчитать метрики и показать их на дисплее (ещё буду энкодер и кнопку опрашивать в следующих версиях) без риска, что проигрывание пресета прервётся.
Заполнение буфера АЦП (код в adc_control.cpp) происходит через DMA в continuous mode, т.е. буфер заполнятеся автоматически аппаратно с нужной частотой асинхронно и без блокировок. Когда в основном loop в ESP32tRNS.ino приходит время показать метрики на дисплей, мы берем самые свежие N сэмплов из этого буфера и по ним высчитываем всё, что хотим показать, матожидание, минимум, максимум и гистограмму. Это чисто пользовательский "показометр".
Идеи дальнейших доработок кода
Изначально я хотел реализовать заливку новых пресетов прямо через USB без перепрошивки, чтобы устройство сохраняло бинари в SPIFFS. Сделать возможность залить вообще произвольный сигнал в виде файла с лупом и метаданными, но ничего не вышло по загадочным причинам. Можно либо придумать, как забороть эту проблему, либо поступить проще и для tRNS ограничиться пресетом rf-tRNS, а tACS и tDCS ноль проблем генерировать на лету параметрически, или вообще все сигналы собирать параметрически, чуть больше кода, зато без менеджмента бинарей.
Совершенно точно нужна "пресетошная", т.е. возможность выбирать режимы и настройки tRNS (амплитуда), tACS (частота+амплитуда), tDCS (сила тока), думаю, которая немыслима без кнопочек или сенсорного экрана или энкодера с кнопкой. Склоняюсь к энкодеру с кнопкой, крутилка выбирает вариант, нажатие применяет выбор, в коде это надо будет отрисовывать интерфейс и отслеживать события энкодера. Кроме того, смещения, усиления и прочие константы тоже следует разрешить редактировать и обеспечить персистентное сохранение в EEPROM.
Можно переделать расчет гистограммы с O(N) в O(1), в теории это возможно, вычитаем влияние выбывающего из окна отсчёта и учитываем новый.
Было бы совсем отлично показывать фактический частотный спектр с АЦП на дисплее, а не только гистограмму, наверное, стоит поглядеть в сторону двухъядерных и более мощных ESP32, пока н�� тестировал реалистичность этой идеи.
Сборка

Прототип я собрал в прозрачной баночке. Винтовые крепления потенциометра и клемм для электродов радикально упростили монтаж на крышечке. Угловой адаптер USB-C потребовал прямоугольного отверстия, но тоже много сил и времени не отнял. Думаю, следующая версия будет требовать от USB только питания и можно будет заменить адаптер на винтовое гнездо. Кстати, феноменально удобное решение для прототипирования, открутил банку от крыши и вот всё перед глазами с лёгким доступом, кнопочки BOOT и RST нажал – обновил прошивку, никаких 4-х винтов не надо откручивать, никаких проводов от одной половинки корпуса к другой при вскрытии не тянется.
Компоненты смонтировал на дырчатой паечной макетной плате, пришлось тянуть "дорожки" одножильными разноцветными проводками в изоляции, что долго и муторно. Знал, что это займёт почти два дня, сделал бы лазерно-утюжный вариант "материнской платы" устройства, заодно и герберы были бы уже готовы.
Вывод
Сейчас у меня на руках прототип, который выдает правильный сигнал hf-tRNS, удалось реализовать не все хотелки, но в итоге ставка оказалась скорее выигрышной, чем нет. Остался гигантский простор для улучшений. Изначально делал устройство для себя, но пройдя весь путь, хочу познакомить сообщество с моими подходами и получить ценную обратную связь. Код и материалы доступны в открытом репозитории под permissive-лицензией, чтобы любой мог использовать и развивать решения дальше.
P.S.
В коментариях настоятельно рекомендовали проработать вопросы электробезопасности, в частности вот цитаты из предложенной статьи:
Наличие постоянного электрического контакта с телом человека или возможность появления такого контакта, от которого человек не сможет избавиться — к первому относятся, например, все медицинские приборы с нательными электродами...
Наличие вблизи других заземлённых устройств...
Хотя в самой статье я эти темы обходил, сам для себя я этого риска не осознавал. Если стимулятор запитан от компа, и если облокотиться на батарею центрального отопления, то электроды прихвачены к голове эластичной повязкой в формате постоянного электрического контакта, что создаёт опасную ситуацию. Какая там земля на батарее, какой «ноль» на USB и какая между ними разница никто не знает, у меня мультиметр показывал 75 вольт переменного, а в другой момент было около нуля. Это реалистичный риск. Благо, что рабочий стол у меня далеко от батареи отопления.
Тут надо ещё раз подчеркнуть, что устройство не претендует на медицинское применение. Чтобы доводить его до такого уровня безопасности, нужно работать с профессионалами и проходить сертификацию.
Так что запитываться действительно стоит от батареи, аккумулятора или, в случае моего прототипа, от пауэрбанка. Благодарен комментаторам за замечания.
UPD 2026.01.06
Благодарю уважаемого @poruchuk_Rzevski за комментарий и рекомендацию сделать униполярную схему, где биполярность создаётся с помощью моста. Я нашёл готовые аналоговые свитчи, даже начальный уровень ADG413 (а я хочу взять ADG433) даёт приятную картинку без нелинейных искажений, во всяком случае визуально на макете всё вообще идеально.

Получаем биполярные треугольные импульсы 640 Гц из «выпрямленного» униполярного сигнала и бинарного знакового сигнала. Модуль целевого сигнала симулируем на XFG1 смещённой пилой удвоенной частоты, а знак – на XFG2 (верхняя осциллограмма с формами сигналов, меандр 0–3.3 В). Свитч выполняет роль H-моста с удобным управлением, там половина ключей нормально замкнутые, другие нормально разомкнутые. Интуитивно мне казалось, что будет сильная нелинейность, а это был единственный потенциальный минус схемы. Пока не решил, бу��у слать прямо с контроллера через ЦАП уже такой раздельный сигнал через L и R или, если не устроит качество, использую выпрямитель + компаратор, чтобы нарезать на модуль и знак.
Потенциальные плюсы
В качестве VCCS я смело возьму XTR111 и настрою токоограничение по их стандартной схеме на 3.5–4 мА. Кроме того, пропадает требование к прецизионности резисторов, которое было в схеме Хауленда.
Униполярный сигнал легко дополнительно ограничить по току сверху, вероятно, сгодится даже LM334, разве что надо проверить, насколько он будет искажать сигнал.
Большой униполярный бустер 5 В → ±12 В из схемы уходит, появляется компактный и простой 5 В → 12 В.
Становится дороже и надо осваивать поверхностный монтаж, но зато радикально компактнее, выше безопасность, проще в настройке и ближе к мелкосерийному DIY-kit.
UPD 2026.02.16. v0.9.0: оно эволюционирует!

Код в https://github.com/e-kolkhoz/tRNS/tree/v0.9.0
Потенциальные плюсы удалось реализовать на 100%, т.е.
Компактный бустер 5->15В TPS61040 прямо на плате в виде SMD со стандартным обвесом из его даташита.
VCCS на XTR111 со встроенным токоограничением на 3.5 мА (с DAC больше 3.3 никак не придёт, если всё исправно, а VCCS настроен на 1В->1мА, но настроил резисторами дополнительное токоограничение на всякий аварийный случай).
Дополнительное аварийное токоограничение 3.5 мА на LM334 перед землёй в униполярной части контура с полезной нагрузкой.
Магию превращения униполярного тока в биполярный производит H-мост на ADG433. Реализована подача сигнала на том же DAC PCM5102A через буфер DMA через I2S, потому для синхронности я модуль сигнала (выпрямленный сигнал, униполярный) подаю через правый канал на VCCS, а на левый канал подаю сигнал знака, тоже униполярный, он подается на H-мост для коммутации полярности на нагрузке и так же на вход контроллера, чтобы синхронно с замером униполярного тока получать знак для реконструкции сигнала перед демонстрацией на экране.
Инженерные компромиссы v0.9.0

При смене полярности вблизи нуля есть некоторые артефакты свитча, я этого ждал, вообще не удивился. Добавил пару уловок в config.h в коррекцию сигнала знака, чтобы смягчить этот эффект.
// мкс, задержка VCCS? #define TACS_SIGN_SHIFT_US (-1.5f) // в кодах, компенсируем срабатывание компаратора #define TACS_SIGN_SHIFT_CODES 50
Думаю, если сделать всю схему более аналоговой с выпрямителем и компаратором, (тут может быть много факторов, как фазовые искажения на RC-фильтре DAC, может задержки в VCCS, так и тот факт, что сигнал знака тоже идёт через фильтр и выходят неидеальные меандры для ��нака синуса), то можно на таких частотах заставить свитч работать гораздо точнее, но это сделает схему более громоздкой и наверняка добавит больше нелинейности. Сейчас же даже с этими небольшими искажениями всё более чем достойно, для максимальной частоты tACS и для tRNS, судя по их спектрам, тут полный порядок.


Не компромисс, а скорее бага или даже по итогу фича. Ошибка в точке замера тока для показометра на экране. LM334 добавил в схему в последний момент, и получилось, что я снимаю напряжение для замера тока не с
Rshunt, а сLM334+Rshunt. Хорошие новости, что это некритическая часть схемы и на качество генерируемого сигнала не влияет, а только на показометр, вторая, что как будто у LM334 сопротивление имеет очень удачную нелинейность, поднимаясь в слабых токах, в которых собственный ADC в ESP32-S2 имел бы плохую чувствительность. В итоге потратил пару часов на калибровочную таблицу, которая идеально подошла ко всем трём собранным устройствам. Думаю даже оставить в следующих версиях эту багофичу как дополнительную точку замера, добавить очевидную сRshunt, будет их две, а на уровне кода выберу лучшую.
Появление UX
Появился энкодер с кнопкой (что-то вроде колёсика мышки со встроенной средней кнопкой), а вместе с ним появилось полноценное меню и пресетошная на три режима tDCS/tRNS/tACS.

Настройки и калибровки запоминаются в EEPROM. Думаю, энкодер, конечно, тактильно щёлкает при повороте и вообще сплошное удовольствие с ним работать как с контроллером ввода. Особенно если надо параметр поменять с 140 на 250, то это делается невероятно удобно, кнопками надо было бы или натыкивать 110 раз или зажимать, чтобы листалось десятками. Но габаритов он добавляет так много, что возможно, откажусь в пользу кнопок или найду радикально более компактный вариант энкодера, например, как тот, что используется в мышках.
На экране отображаются:
Параметры пресета, тип (+частота для tACS), желаемый ток, желаемое время сеанса.
Фактический ток через нагрузку (биполярный реконстрирован из фактического униполярного с помощью сигнала знака) в виде осциллограммы, для tACS есть даже синхронизация по смене знака как на осциллографах.
Множитель плавного пуска/стопа (от потенциометра я отказался в пользу цифрового управления), x1.0 означает, что рабочий фактический ток установился.
Сглаженный фактический ток (вычисляется как амплитуда по действующему значению для tACS или по трём сигмам в tRNS или по среднему в окне для tDCS)
Текущее время от начала сеанса, как дойдёт до 19:50, то включится плавный стоп (если в настройках плавный стоп 10 секунд, можно менять) и в 20:00 полностью завершится.
Нижняя линейка в пиксель толщиной - прогресс-бар сеанса, т.е. как п.5, только заполняемой шкалой.
Освоил tinyuf2 для обнвления прошивки
в меню выбираем "ОБНОВИТЬ"
устройство перезагружается в режим прошивки и притворяется флешкой при подключению к компьютеру
если положить в эту флешку файл
*.uf2, то он автоматом прошьётся этим файлом и перезагрузится обратно в рабочий режим, можно скопировать и вставить сам CURRENT.UF2, который на флешке уже есть, если режим "ОБНОВИТЬ" был выбран в настройках случайно и нужно просто вернуться в рабочий режим

Производственные драмы с корпусом
Я допускал, что самым большим челенджем будет освоение поверхностного монтажа, но это оказалось не так. Да, процесс долгий, кропотливый, работа с микроскопом, руки нужны точные, без тремора, и одну плату я всё-таки запорол, но даже не самую первую, а вторую, третью и четвертую запаял тоже хорошо. А вот на корпус я потратил вместо нескольких дней недели три, и это было неожиданно.

В описании к смоле увидел намёк, что она инженерная, подходит для корпусов с защёлками и попробовал сделать крепление к плате защёлками, в итоге корпус так коробило и вело, что быстро переделал под винты и взял другую смолу, потому что она ещё и в размеры плохо попадала. Вторая была в комплекте с принтером, в размеры попадала лучше, но была крайне хрупкой.
Хорошие результаты получились только с третьей смолой tiger3d abs-like, обещали низкой процент усадки, заказывал черную, привезли белую, но мне время критично, потому сделал такие вот изделия из чего-то вроде окаменевшей сгущёнки.
Кстати винты DIN 7991 М2х6 под шестигранник тоже разочаровали, оказывается, нет в DIN 7991 стандартных размеров шестигранника для М2, минимальный ходовой hex 1.5 не подходит, а меньше идут уже дорогие экзотические отвертки. В итоге поменял на обычные крестовые.
Результатом доволен процентов на 90%, всё равно краешки загибаются кверху немного в стиле традиционной японской архитектуры, но во всяком случае, прочно (впечатляюще прочно), размеры отличные, дырочки совпадают почти хорошо, определенная DIY-милота присутствует, но всё-таки по духу и точности это ближе к ручной работе получилось, чем к фабричной.
В общем, если б был у меня FDM принтер, а не фотолитографический LCD, прогресс бы двигался быстрее, это моя ошибка, я правда считал, что LCD - что-то вроде технологии следующего поколения для прототипирования, а не нишевая тема для художественных анимешных драконов.
Идеи дальнейшего развития
Посмотрю насколько это интересно людям, если увижу живой интерес, пойду в сторону фабричного монтажа компонентов, полностью одноплатного решения на голом контроллере с обвесом и DAC в виде чипа с обвесом, а не модульного шилда как сейчас.
Как устройство ввода энкодер хорош и приятен, но буду думать, как сделать более компактно или заменить кнопками.
В качестве электронной базы либо буду смотреть на v0.9.0, либо на прототип с прецизионными резисторами, дополнительной защитой по току и компактным вариантом биполярного бустера, плюсы и минусы есть у обоих подходов, надо проверить пару гипотез, чтобы выбрать лучший путь.
Корпус однозначно надо упрощать, ретрофутуризм v0.9.0, конечно, забавен визуально, но делается долго и крополтиво с большим количеством брака и непомерным объёмом ручной работы. Думаю, радикально уменьшу вертикальный профиль платы и гляну в сторону "сэндвичей" на винтах, закажу акриловую резку лазером для верхней прозрачной панели.
