Привет! Хочу поделиться своим опытом доводки до ума китайского CNC-роутера и фрезеровки на нём всяких DIY-печатных плат. Например, вот таких:

Зачем?
В среде энтузиастов самодельной электроники фрезерование печатных плат по популярности занимает почётное последнее место — все наперебой будут советовать ЛУТ, фоторезист, или заказать на JLCPCB.
Основная проблема с заказом — долгое время ожидания (неделя-две). Особенно бесит, когда хочется получить готовое к употреблению издение сегодня. Плюс, у меня редко когда бывает, что схема идеально работает с первого раза (даже после многих циклов прототипирования на breadboard-е), а две-три итерации запросто могут растянуть весь процесс на месяц с лишним, в течение которого весь энтузиазм уже пропадает.
ЛУТ и фоторезист же накладывают нетривиальные ограничения на радиус кривизны рук. С фоторезистом у меня и вовсе получается из рук вон плохо: то он не накатится и отвалится во время травления, то пересветится, то недосветится, то ещё что. Я сделал несколько подходов к снаряду, и процент брака составлял стабильные 100%. ЛУТ чуть получше, но всё равно время от времени случались проблемы с обрывом дорожек, потому что при переносе отвалилась одна крупичка тонера.
Фрезерование плат в этом свете выгодно отличает стопроцентная воспроизводимость результатов — там просто нет шагов, которые должен выполнять живой человек на глаз; 100% механической работы делает бездушная машина, у которой не дрожат руки и не двоится в глазах.
Для примера, ТТХ платы с фотки выше:
- дорожки/просветы: 0.4/0.2 мм;
- плата двусторонняя; точность совмещения слоёв в пределах 0.2 мм (оценивалось на глаз);
- микросхемы в SSOP/TQFP; рассыпуха — SMD 0805.
Для DIY, особенно с такими кривыми руками, как у меня — на мой взгляд, неплохо.
Какие бывают CNC-роутеры
Ассортимент CNC-роутеров, доступных простым смертным, насколько я его понимаю, делится примерно на три категории:
Всякое фрименное
Стоит от $4k. Может, оно даже работает — не знаю, не пробовал. Я не настолько упарываюсь по DIY, чтобы отваливать несколько тысяч денег за станок, так что сразу проходим мимо.
CNC 2418
...и его отродья (1610, 3018, etc). Цифры здесь обозначают размеры рабочей области.
Выглядит это чудо китайской промышленности примерно так:

Легко опознаётся по подвижному столу (по оси Y) и смешной пластмассовой C-образной скобке, в которую запрессованы подшипники оси X и вся ось Z.
У него есть ровно два достоинства: он дешёвый (порядка $200), и они продаются вагонами на амазоне, с доставкой на следущий день. Всё остальное — недостатки.
Про жёсткость конструкции и биение инструмента тут уже говорили; могу подтвердить лично, как весь станок перекашивало к хренам, потому что я его случайно поставил углом на лист текстолита (я уж не говорю про люфты по 2 мм). Меня же больше всего добило, что у него пластмассовые втулки подшипиков скольжения; угадайте, через сколько часов эскплуатации треснули все четыре.
В общем, рекомендовать не буду, даже в качестве «изначального варианта на поиграться». Как говорил один мой знакомый (по другому поводу), «знакомство с девушками не стоит начинать с резиновой куклы».
CNC 2030
aka 3040, 6040.
Несмотря на схожее название, имеет очень мало общего с предыдущим экспонатом (ну кроме страны происхождения).

Тоже продукт китайской промышленности, но классом повыше — по крайней мере, он весь металлический, с жёсткостью получше, и люфтов почти нет. Механика другая, стол неподвижный, а каретка ездит по всем трем осям.
В принципе, его жёсткости и прочности даже хватает, чтобы на черепашьих подачах резать мягкие металлы (медь, алюминий, вот это всё). Но лучше, конечно, так не издеваться над бедным инструментом.
Им вовсю торгуют на алиэкспрессе. Стоит оно чуть подороже, от $300 за bare frame (без моторов, без электроники), до ~$700–1000 за полный комплект.
Основная его проблема — обязательно, в 100% случаев, с необходимостью, у него будет хрен знает что вместо мозгов. Предполагается, что вот эта чёрная коробочка справа, которая рулит шаговыми двигателями на раме, будет подключаться к параллельному порту в десктопе и управляться Mach3. Если у кого нет десктопа, железного параллельного порта (нет, USB-to-LPT переходники не подойдут) или 32-битной винды (в 2026 году от р.х.) — ну чо, очень жаль.
Ну а управление шпинделем с компьютера там в принципе не предусмотрено: шпиндель включается отдельной механической кнопкой на коробочке; если очень повезёт, там может ещё быть ручка для ручного управления оборотами (естественно, без обратной связи).
Если же при покупке явно попросить USB-вариант — они всё равно пришлют вариант под параллельный порт, но вложат в коробку купленный в соседнем переходе тот самый USB-to-LPT переходник (который не работает), а потом будут два месяца на хорошем китайском английском доказывать тебе, что идиот тут ты (с последним тезисом я в принципе и не спорю).
Но поскольку радиус кривизны рук у меня в принципе достаточен для того, чтобы прикрутить к ардуине жёлтую лампочку — берём вот это вот, и доводим электронику до ума своими силами!
В принципе, можно вообще не заморачиваться со штатным блоком управления и купить просто frame; может быть, с моторами. Но тогда придётся много чего докупать россыпью; в итоге может оказаться дороже, чем расковырять мозги и переиспользовать часть оттуда.
Disclaimer: я вообще ни разу не электронщик, так что всё нижеопианное — не единственный, и даже с шансами не самый лучшй способ довести его до пригодного к работе состояния. Могу только сказать, что он работает: я проверял.
Внутре у ней неонка
Перед описанием доработок — краткий ликбез: что встречается по дороге от G-Code до тока через обмотку шаговика.
G-Code — это конечный продукт жизнедеятельности всякого CAD/CAM и стандартный «язык программирования» всех станков с ЧПУ (и до кучи 3D-принтеров), который задаёт программу обработки в терминах «переместиться в точку с координатамии {20,30,10}; включить шпиндель на 9000 об/мин; переместиться в точку {20,50,10} с линейной скоростью 80 мм/мин» и так далее.
Язык родом из 1960-х и довольно смешной: с одной стороны, он текстовый. С другой — никаких мнемоник, все команды числовые (так, пример выше записывается как G00 X10 Y20 Z30; S9000 M3; G01 Y50 F80). С третьей — каких фич там только нет: и тебе круговое/спиральное движение инструмента, и тебе нарезание резьб одной командой, и тебе шесть систем координат, и даже подпрограммы! Хорошо хоть локальных переменных в подпрограммах нет.
Неудивительно, что многие современные интерпретаторы G-Code не поддерживают всё это великолепие и обходятся минимальным джентльменским набором из «включить/выключить шпиндель на таких-то оборотах» и «поехать по прямой в заданную точку с заданной линейной скоростью». Предполагается, что живые люди сейчас не выписывают G-Code руками, а программа-генератор не переломится разложить все окружности, эллипсы и прочие сплайны Безье в ломаные с нужной точностью.
Дальше в цепочке у нас motion controller, который читает и интерпретирует G-Code и переводит его в команды вида «а теперь поворачиваем шаговик оси X ещё на один шаг по часовой стрелке» — в том числе с соблюдением требуемой скорости перемещения и ограничений по ускорению (нет, нельзя просто так одномоментно остановить довольно тяжёлую каретку, второй закон Ньютона никто не отменял).
Эти самые команды передаются через три пары проводов (один провод на направление и один на шаговый импульс) соответственно трём контроллерам шаговых двигателей, которые уже рулят непосредственно шаговиками и выдерживают нужный ток в нужных обмотках в нужное время.

То, что идёт в комплекте к станку под видом его мозгов — это примерно вот такая плата (картинка рандомная из интернета):

Если станок покупался совсем без мозгов, то нечто подобное тривиально находится на амазоне/ebay/aliexpress по запросу «TB6560 stepper motor driver».
Под радиатором там почти наверняка будет три штуки TB6560AHQ (в целом довольно неплохих драйверов, которые умеют в дробные шаги, ограничение тока, защиту от перегрева, и могут стабильно выдавать 2 ампера на шаговики, чего для этого станка более чем достаточно), рядом батарея оптронов для гальванической развязки входа, ну и какой-нибудь блок питания на +24 / +48 V. Если повезёт, то импульсный.
Предполагается, что вот этим страшным кабелем оно будет подключаться к тому самому хардверному параллельному порту в десктопе. Дело в том, что у хардверных параллельных портов очень простой и тупой API: это literally один байт в памяти (ну ладно, на самом деле 12 бит на выход и 5 на вход), битами которого можно рулить как хочешь (ну если операционка разрешит), и который прямо и без затей отображается на 8 контактов в разъёме — что делало его очень популярным в 1990-х во всяком околокомпьютерном DIY. Так сказать, GPIO before GPIO was a thing.
Ну а уже упоминавшийся Mach3 — это как раз motion controller, который читает G-Code и вовремя дёргает битами этого самого параллельного порта. Ну то есть если повезёт, то вовремя — винда (да и вообще весь PC) очень так себе умеет в realtime.
Bootstrapping
Ардуинка
По счастью, человечество придумало такую штуку, как Grbl — GPL-licensed motion controller, который шьётся в ATMega328, и умеет интерпретировать G-Code, который прилетает на его UART.
Отсюда несложным образом следует шаг первый:
- берём в шкафу первую попавшуюся ардуину — только внимательно проверив, что там действительно ATMega328 под капотом (последние версии uno не подойдут). Годится Uno Rev3 или оригинальный Nano, ну или любой из миллиарда клонов.
- качаем Grbl, компилируем, шьём.
- берём семь проводов, DB25-разъем, и соединяем адруинку с контроллером шаговиков.
- приматываем это всё синей изолентой, чтобы не отвалилось и не закоротило, где не надо, цепляем ардуину к компу, открываем терминал на появившийся
/dev/ttyUSB0, пишем тудаG0 X10и смотрим, как весело оно дрыгает моторчиками.
Ура, мы соединили станок и теперь умеем им как-то худо-бедно управлять при помощи технологий этого тысячелетия.
Probing
Вывод A5 на нашей ардуинке — это probe pin; если его закоротить на землю, контроллер поймёт, что инструмент упёрся в деталь (и его позицию в этот момент можно считать за высоту 0). Выставлять ноль на глаз не стоит, мощности станка с запасом хватит, чтобы поломать фрезу/сверло нафиг.
Соответствено, берём ещё два провода, одним соединяем землю ардуины с инструментом (на самом деле проводимости между шпинделем и корпусом мотора достаточно, чтобы можно было просто зажать его под ближайшую гайку), а вторым — probe pin с обрабатываемой деталью.
Я вырезал маленький прямоугольный кусочек из фольгированного текстолита, припаял второй провод к нему, и теперь приклеиваю его к детальке, если она проводящая, или просто подкладываю под шпиндель, когда надо, если нет.

Всё, с этого момента у нас станок в принципе работает, и всё остальное для него можно теперь делать на нём же.
Концевики
На той же самой Grbl wiki есть страница про то, как подключить к ней концевые выключатели.
Я взял простейшие и самые дешёвые на амазоне, дальше вырезал под них три пластинки (я вырезал из алюминия, но сейчас взял бы текстолит), насверлил дырок (в пластинах и в станке), и прикрутил выключатели к пластине, а пластину — к станку.

Вики рекомендует ставить по два концевика на каждую ось (с каждого конца), но я не заморачивался и поставил по одному. На оси Z он должен быть сверху (я сначала поставил снизу — это было конструктивно проще, но по итогам обошлось мне в десяток сломанных свёрел и фрез), на XY можно ставить где угодно (у меня они стоят слева на X и сверху на Y).
Дальше есть нетривиальная проблема с подсоединенем концевиков к ардуине: встроенный в адруину pull-up довольно слабенький (47K), а двухметровый провод до концевика, идущий рядом с силовыми проводами к двигателям, с хорошими шансами поймает на себя радио маяк.
Возможные варианты решения:
- забить и понадеяться, что будет работать;
- собрать RC-фильтр (как показано на той же странице на вики) навесным монтажом или на breadboard-е;
- заморочиться и сделать полновесную маленькую плату с RC-фильтрами, или даже с оптронной развязкой;
- купить на амазоне optocoupler board и примотать его синей изолентой.
После того, как концевики привинтили к станку и подключили к контроллеру, надо не забыть сконфигурировать homing cycle, настроить размеры рабочей области и включить soft limits.
Теперь можно не переживать, что кривая программа (или руки оператора) загонят каретку за пределы рабочей области и поломают втулки на двигателях.
Шпиндель
На нашей ардуинке есть вывод 11, которым она будет пытаться рулить мотором шпинделя посредством PWM. Однако пока что нет ничего, что бы этот PWM слушало.
В принципе, в продаже бывают комплекты из мотора и контроллера (типа такого), у которого на контроллере есть PWM-вход. В теории (я сам не проверял), должно быть достаточно соединить PWM-выход ардуины с PWM-входом контроллера, и будет щастье.
Если такого умного контроллера нет (или если, как в моём случае, станок был куплен вместе с мотром, а тратить ещё $100 не хочется), можно пока что воспользоваться той кнопкой включения мотора, что была в родных мозгах, или просто подсоединить мотор к любому попавшемуся источнику питания на 24...48 V (у меня был под рукой lab power supply, и я на первых порах пользвался им).
Забегая вперёд, потом я сделал нормальную плату управления двигателем, с обратной связью по току и напряжению (её фотка в самом начале поста).
Как я на этом вырезаю платы
Начало стандартное: рисуем плату в своём любимом CAD-е (я предпочитаю KiCad), сгружаем результат в Gerber / Excellon.
Дальше нужно перегнать это всё в G-Code. Я это делаю во FlatCAM — на EasyElectronics когда-то было подробное описание этой тулы.
Я для себя подобрал такие настройки:
Fine pass (делается гравировальным штихелем):
- Tool diameter: 0.2 mm (вообще-то он 0.1 мм, но я предпочитаю оставлять запас на всякие мелкие биения, несоосности, криво зажатый штихель в патроне, и т.д.)
- 3 passes
- Overlap: 0.375
- Cut Z: 0.1;
- Multi-depth; depth/pass: 0.05;
- Feed rate: 75.
Coarse pass (делается фрезой 1 мм):
Вообще это необязательный этап (плата будет прекрасно работать и без него, и даже смотреться лучше), но в таком случае, когда я распаиваю плату, велика вероятность посадить припойную кляксу на неиспользуемые медные участки — получается визуально ну такоэ (хотя на работоспособность не влияет).

- Tool diameter: 1.2;
- 2 passes;
- Cut Z: 0.1;
- Overlap: 0.375;
- Feed rate: 200.
Сверловка
- Cut Z: 1.9 (в предположении, что текстолит имеет толщину 1.6);
- Feed rate: 60.
Имеет смысл прочитать исходный Excellon-файл и сократить поголовье диаметров (иначе у меня регулярно возникают отверстия 0.57, 0.59 и 0.60 мм).
Обрезка платы (делается фрезой-кукурузой 1 мм)
- Cut Z: 1.8;
- Multi-depth; depth/pass: 0.45;
- Feed rate: 50.
Экспортируем G-Code: сверловку, (coarse + fine) x (верх + низ), и обрезку.
Дальше приклеиваем лист текстолита к столу станка (я клею на банальнейший двусторонний скотч миллиметровой толщины) и скармилваем ему весь этот G-code.
На этом этапе нас ждёт несколько интересных подводных граблей.
Во-первых (и в самых главных), как бы плата ни крепилась к станку, она неизбежно будет стоять неровно. Учитывая глубину резки в 0.05 мм за проход, крохотный перекос в те самые 0.05 мм обязательно приведёт к поломке гравера — так что нужно простучать плату по сетке и скорректировать все gcodes нужным образом.
Во-вторых, если мы делаем двустороннюю плату, нужно, прорезав верх, перевернуть плату и приклеить её идеально на то же самое место — руками это делать нереально.
Решение, опять же, программное: когда делаем верхний слой, сверлим по углам четыре реперных отверстия (самым тонким сверлом, которое у нас есть: я использую 0.5 мм). Когда перевернули плату другой стороной, подводим штихель к реперным отверстиям и тыкаем в них носом; после этого пускай комп считает, как именно нужно переместить/повернуть все координаты в программе.
В-третьих, когда мы перевернули плату, её нужно снова простучать для автолевелинга; однако плату мы уже просверлили, и при автолевелинге нужно случайно не попасть в просверенную дырку.
Поскольку по основной профессии я всё-таки программист, мне оказалось проще написать свою тулзу для решения всех этих проблем, чем пытаться разбираться с существующими поделиями (да, у меня пет-проджект на плюсах, и что вы мне сделаете). Естественно, никакой документации там даже близко нет 🙃
По итогам workflow вырезания PCB выглядит примерно так:
> load border border.gc
> load drill drill.gc
> load mill top-fine.gc
> orient
# ставим сверло 0.5 мм
> drillrefs
> run drill
# ставим гравер
> run hmap+mill
# ставим 1 мм фрезу
> load mill top-coarse.gc
> run mill
# отрываем плату, переворачиваем, приклеиваем другой стороной
# ставим гравер
> reset workflow
> mirror 1
> load border border.gc
> load drill drill.gc
> load mill bottom-fine.gc
> userefs
> run hmap+mill
# ставим 1 мм фрезу
> load mill bottom-coarse.gc
> run mill
> run cut
Отрываем, чуть-шкурим самой мелкой шкуркой, лудим, распаиваем. Profit!
Safety warning: с гравировальными штихелями нужно обращаться ОЧЕНЬ ОСТОРОЖНО. Они очень острые и очень хрупкие. Я как-то раз загнал его в руку на половину длины и не заметил этого, и это мне ещё сильно повезло, что он не обломился внутри. После этого опыта граверы я больше руками не беру: только пинцетом или пассатижами.
Дорабатываем мозги
Заменяем ардуинку
Кто как, а я испытываю сильную идиосинкразию к ардуинам за пределами прототипов — в куче проводов, соединяющих всё и вся, начинаешь очень быстро путаться. В конце концов, если весь этот опус про то, как резать на станке печатные платы — почему бы не вырезать на нём управляющую плату для него самого? Заодно и присобачить туда оптические развязки для всех входных линий.
Схема в принципе несложная (чо там, берём контроллер и две счетверённых отпопары), но возникает вопрос, как соединять контроллер с компом.
Можно более-менее воспроизвести ардуину: взять ATMega328 и FT323R (или любой из его китайских клонов). Схема максимально простая (соединяем крест-накрест TXD и RXD контроллера и FT232), но сам не проверял. Из минусов — FT232 бывает только в SSOP-корпусе, так что для тех, кто боится SMD-монтажа, это не вариант.
Можно воткнуть рядом с контроллером гребёнку и нахлобучить сверху Raspberry Pi Zero W (нужно купить с нераспаянным разъёмом, и вместо того, чтобы впаивать в RPi гребёнку сверху, впаять в неё ответную часть снизу).

В конце концов, кому нужен CNC-роутер, на который нельзя зайти по SSH?
Соединение контроллера и RPi тут тоже простое (так же соединяем TXD и RXD крест-накрест), но надо иметь в виду, что RPi работает на 3.3V, и надо либо запитывать контроллер тоже от 3.3V (к счастью, его можно взять прямо с GPIO-гребёнки), либо ставить какой-то согласователь уровней.
Это, кажется, единственный вариант, где все компоненты доступны в Through-Hole-варианте, так что можно обойтись без SMD (для тех, кто его органически не переваривает).
Наконец, можно выкинуть позорный ATMega328 и воткнуть на его место куда более модный ESP32. Родной Grbl такого, конечно, не поддерживает, но у него есть форк, который умеет аж 4 оси, SD-карточку, и сам цепляется за wifi (или притворяется access point-ом), и даже имеет какой-то вмеру убогий веб-интерфейс!
И даже RPi не нужно.


Остаётся собрать всё это в красивой коробочке, с блоком питания и контроллерами шаговиков.

Дырки под разъемы я тоже вырезал на этом же станке. Учитывая, что это сталь, хоть и тоненькая — не пытайтесь повторить это дома.
Управление шпинделем
Я пытался было резать на этом оргстекло и пластик (ну не было у меня 3D-принтера тогда ещё) и быстро столкнулся с проблемой: на больших оборотах трущаяся фреза расплавляет пластик вместо того, чтобы резать его.
Я пытался было извращаться с водяным охлаждением (делаем ванночку, ставим в неё станок, покупаем где-то на амазоне погружной насос для аквариума, всё соединяем, швы текут, вся квартира в воде, пластиковая стружка забивает помпу, а станок чудом не заржавел к хренам по итогам всех этих издевательств), пока кто-то не поделился со мной вселенской мудростью: убавь обороты!
Оказывается, на 2000-3000 RPM пластик прекрасно режется и не плавится, и никакие извращения не нужны.
Но становятся нужны другие извращения: чтобы дать такие малые обороты, нужно подать на движок что-то где-то порядка 8 вольт (из паспортных 48). На таких малых оборотах момент тоже получается крохотный, и от любой мало-мальской нагрузки движок останавливается (его можно затормозить тупо пальцами), а фреза ломается.
Нужна какая-то более умная схема, которая бы отслеживала обороты двигателя и момент, и сама подкручивала напряжение, если надо.
На той же EasyElectronics в своё время была статья про характеристики двигателя постоянного тока. Из самого интересного:
- напряжение на двигателе складывается из омических потерь (ток через обмотку, помноженный на сопротивление обмотки) и противо-ЭДС;
- ток через обмотку пропорционален моменту;
- противо-ЭДС пропорциональна оборотам двигателя.
Таким образом, мы можем поиграться с движком и экспериментально установив коэффициенты пропорциональности (тут для доводки и настройки может понадобиться лазерный тахометр). А затем, померяв напряжение на двигателе и ток через него, мы несложной арифметикой можем узнать обороты двигателя и момент.
Ну а дальше берём ADS1256 (4-канальный дифференциальный 24-битный АЦП), тот самый позорный ATMega328 (на котором сделаем PID-регулятор), и соединяем синенькие с красненькими по даташиту.


Ошметья в середине платы — это я сдуру воткнул туда линейный преобразователь 48 -> 5 V (на резисторном делителе и транзисторе), чтобы питать кулер на этом радиаторе, а транзистор почему-то не захотел рассеивать 100 mA * (48 - 5) V = 4.3W и сгорел. На схеме я его переделал на ШИМ, но переделывать плату уже не стал, нашёл свободные 5 вольт на соседней.
Ещё из приколов — я в первой версии (которая на фотке) не воткнул подтяжки входа драйвера MOSFET-а на землю (R31 на схеме). Контроллер стартует с этой линией в Z-state, на неё естественно наводится какое-то радио маяк, и драйвер радостно наваливает полные +48V на движок на первые сколько-то миллисекунд (пока контроллер не прочухается и не придавит линию к земле). В результате станок заводится с очень характерным «дрынь» — прямо как старый запорожец.
Индикация оборотов
У этой платы управления двигателем, естественно, есть ISP-разъем (In-Scheme Programming), куда выведены линии SPI-интерфейса атмеги. Без него не получится: я перепрошивал контроллер, наверное, больше сотни раз, пока отлаживал прошивку. Но после того, как поведение платы наконец меня устроило, эти линии просто остались болтаться без дела.
Это возмутительно, подумал я: целых три линии бесплатно висят в воздухе! Пускай пользу приносят.
У меня в шкафу нашлась пара четырёхразрядных семисегментных индикатора. А почему бы мне не применить их так, чтобы плата рассказывала про обороты движка и момент, раз она всё равно их меряет?
Дальше всё банально: прошивку чуть-чуть поменяем так, чтобы она выплёвывала намерянное в SPI, и делаем ещё одну плату (благо, техпроцесс уже отработан).



Мотор на полных 48 вольта даёт 12 тыс оборотов в минуту, так что показометр показывает декаобороты — чтобы в 4 разряда влезло. А момент померять мне и вовсе было нечем, так что вместо момента в итоге показываем ток через обмотку. Абсолютно бессмысленно, но выглядит прикольно.
Подключаем пылесос
А почему бы и нет, подумал я. В конце концов, от работающего станка много пыли и стружек — хорошо было бы, если бы оно само самопылесосилось по ходу дела.
В G-Code есть аж целых три команды (M7, M8, и M9), которые управляют «работой системы охлаждения», а FluidNC умеет их интерпретировать и назначить какую-нибудь ногу рулить этой самой системой охлаждения. Дело за малым: повесить на неё ещё один оптрон и ещё один полевик:

(может, можно было и проще, но зачем, если драйвер полевика и так был?)
Осталось купить на амазоне 24-вольтовый пылесос, выкинуть из него все внутренности, кроме мотора, и сотворить для него аспиратор (его я уже напечатал на к тому времени появившемся у меня 3D-принтере).
Впрочем, конкретно пылесос я почти не использвал (он был как бы не шумнее, чем сам станок), и при переезде он продолбался; так что фоток не будет. Но в принципе свободный 24-вольтовый выход, которым можно рулить из G-Code, в хозяйстве пригодится.
И что на этом можно делать?
Можно вырезать печатные платы, естественно. Но в принципе ими дело не ограничивается.
Можно сделать упоротую держалку для телефона в машину, с беспроводной зарядкой.


Очень хотелось мне держалку для телефона в машину — на магнитах (чтобы можно было не глядя примерно кинуть телефон в её сторону) и с беспроводной зарядкой (а то с каким энтузиазмом гуглокарты жрут батарею, думаю, знают все). Сотворить такую было несложно, но быстро обнаружилось, что при зарядке телефон перегревается (особенно летом на ярком солнце) и быстро входит в раздражающий цикл «начали зарядку — прекратили по перегреву — снова начали».
Решение — берём медную пластину (заказанную на том же самом амазоне), и выфрезеровываем в ней решётку радиатора (на него потом присобачим кулер), карман для катушки, карман для платы зарядки и дырки под магниты, и упаковываем всё в пластмассовый корпус (я его тоже выфрезеровывал, но сейчас бы тупо напечатал).
Можно взять Spiegen Armor protective case — это literally лучший чехол на телефоны, который я когда-либо видел, я ронял в нём телефоны бесконечное число раз, в том числе на асфальт и экраном вниз, и (тьфу-тьфу) хоть бы что и телефону и чехлу — и вырезать в нём карманы для тех самых трёх магнитов, которым оно будет цепляться за эту зарядку.

Сейчас с этим попроще, они таки научились делать MagFit-ы, но этой конструкции у меня пять лет! Плюс я не очень знаю, насколько крепко этот magfit будет держаться, не проверял.
Можно отпилить от CPU-кулера чуть-чуть радиатора снизу, чтобы не упирался в неформатную плашку памяти (это я пытался собирать SFFPC, в который упорно не хотела ставиться водянка, и пытался хоть что-то сделать с охлаждением CPU).

На переднем фоне — борозда на столе от того, что я что-то там вырезал и напутал с глубинами реза. Так я узнал, что станок в принципе может резать алюминий.
Ну и наконец, можно вырезать из текстолита вставки в 3D-printables, где нужна механическая прочность. Сломать текстолитовую детальку куда сложнее, чем пластмассовую. В этом смысле 3D-принтер и фрезер хорошо дополняют друг друга.
Вместо заключения
По деньгам по итогам вышло где-то $700 за сам станок, и где-то как-то долларов на 100-150 компонент для доведения до ума (плюс-минус). По времени — около двух-трёх недель чистого времени (в моём случае растянутого на много-много ковидных выходных). Как мне кажется, неплохое соотношение, если в итоге получается конструкция, способная грызть металл.
Нужно ли оно среднестатистическому любителю DIY? Да хрен его знает. Могу сказать совершенно точно, что от того, что в кладовке появляется станок, идеи, что бы такого на нём сделать, магически не появляются (в этом он чем-то схож с 3D-принтером). Но если они есть — достаточно прикольная штука.
У меня он всё-таки большую часть времени пылится в шкафу (наличие full-time работы сказывается) — но иногда бывает весьма полезен. В конце концов, когда в 2023 году я переезжал из NYC в Лондон и безжалостно выкинул всё, что не влезло в два чемодана, станок я таки перевёз.
Ну то есть как перевёз: свинтил с него все моторы и привёз их вместе с той самой синенькой коробочкой, а раму за те самые 300 фунтов купил уже на новом месте.



