/ DIY

Makelangelo плоттер на плате от 3д принтера

Привет! Вот уже несколько лет я увлекаюсь рисунками на ЧПУ. Есть несколько устройств, при помощи которых я рисую. Одно из них - настенный плоттер на базе Ардуино под названием Polargraph. На нем я практиковался в рисунках больших размеров.

У проекта есть софт для подготовки рисунка и управления процессом рисования, и вообще сам проект довольно простенький и прикольный.

polargraph-controller-zoom-preview

Есть несколько стилей преобразования изображения, самый популярный из которых Sandy Nobel's style. Плюс есть возможность загрузить svg и запустить печать.

P1010716_p_c_r_200w

Однако есть несколько недостатков, один из которых - он очень медленный. Логично, что обычным маркером рисовать рисунки формата А2/А1 затратно по времени, но все же видно, что процесс мог бы быть более оптимальным и более быстрым. В добвок к этому из программы не всегда понятно каким будет конечный рисунок в плане детализации и нет даже приблизительного рассчета времени.

У меня была 1 версия данного плоттера, я решил попробовать запилить v3, даже нашел разводку платы, заказал минимальную партию из 5 штук на заводе и все детали, но тачскрин при включении замирал и больше не работал. Я так это и не пофиксил (а жаль).
photo_2021-05-30_17-33-03
photo_2021-05-30_17-33-03--2-

Будучи подписанным на множество забугорных (и не только) художников в инсте, я частенько натыкался на похожие плоттеры. Кто-то рисовал на Polargraph, а кто-то на Makelangelo. Я поглядел на Makelangelo и подумал, что вроде то же самое и нет смысла перекатываться. Но потом понял, что этот проект будет пободрее и плюс он постоянно дорабатывается и поддерживается. В процессе реализации своей конструкции я в дискорде задавал вопросы разработчику, что довольно сильно помогло мне. К тому же там уже свое коммьюнити сформировалось из таких же художников.

Железо

Makelangelo можно запустить на массе модулей - от Ardino Mega и ESP32 до плат от 3д принтеров. В конфигурации прошивки ты можешь указать свою железку и вид конструкции (у меня конструкция типа Polargraph - значит что 2 ремня и 2 движка по углам вверху, которые управляют процессом рисования в полярных координатах). Я посмторел доступные варианты релизации и решил что хочу пилить это дело на ESP32 (Wemos D1 R2) + CNC Shield V3, который был заявлен в списке поддерживаемых устройств.
photo_2022-07-28_07-30-23
Проект для сбора и конфигурации прошивки под свое железо можно найти тут.

Однако, листая форумы я не нашел никого, кто бы проверил сборку с такой конфигурацией, и мне предстояло быть первопроходцем. Ну и сам разработчик писал, что не проверял данную прошивку на этом железе (но должно вроде как работать). Можно, конечно пойти по простому пути и запилить это на Arduino Mega + Ramps (такой конфиг проверен), но Mega стоит уже конских денег даже на алике.

Прошивка

Не буду вдаваться в подробности разработки, но спустя неделю допиливания и решения ошибок, я эту идею оставил, сумев правильно настроить пины для движиков и запуск UART. Проблема переноса прошивки для Arduino на ESP-32 в работе прерываний для долгих задач контроллера - в данном случае в прошивке есть логика по обработке сегментов путей рисунка, в которой используются прерывания (видимо где-то здесь собака зарыта). Я в этом увы не силен.

И тут я вспомнил, что после апгрейда своего принтера Ender 3 на плату с тихими драйверам, у меня осталась старая плата (благо которую я не толкнул на авито). Для того чтобы запустить на ней проект, нужно сконфигурировать прошивку Marlin. Marlin - это одна из самых популярных прошивок для 3D принтеров. В данном случае разработчики Makelangelo допилили Marlin и остается только верно указать плату, настройки скорости UART, габаритов, ускорения движков, число шагов на полный оборот ну и по мелочи еще.

Статью по конфигурации прошивки можно найти в блоге разработчика.

Покопавшись в интернтерах я нашел, что плата Ender 3 базируется на мк Atmega 1284p, и ей соответствует Arduino Sanguino (в проекте данный тип платы назвается Melzi Creality). Для того чтобы скомпилить и прошить такую плату сначала нужно добавить ее в менеджер плат Arduino IDE, загрузив соответствующую по ссылке

Вообще, изучая вопрос прошивки платы, я перелопатил много материала. Нужно было узнать есть ли bootloader по дефолту в плате. Без него обновить прошивку не получится и нужно сначала залить его. Залить его по uart/usb нельзя, для этого нужен isp программатор. Попробовав залить прошивку через слайсер Cura (оказывается там есть такой функционал), я понял что bootloader'a там нет и нужно городить isp программатор, которого у меня нет. Собрать его можно на Arduino, у которой есть порт ISP.

photo_2022-07-28_06-45-01

Собрав его и попытавшись прошить bootloader из Arduino IDE, я получил ошибку. Однако, пробуя разные подходы при помощи avrdude я смог залить прошивку Marlin вместе с bootloader'ом через USB. Файлы прошивки (Marlin и Marlin + Bootloader) можно получить выбрав в Arduino IDE меню Sketch -> Export Compiled Binary. И уже этот файл скармливаем avrdude

./avrdude -p atmega1284p -c arduino -P COM3 -b 115200 -v -U flash:w:Marlin.ino_with_bootloader.sanguino.hex:i

Взял этот способ отсюда

После того как процесс обновления прошивки оказался налажен, мне понадобилось еще несколько дней чтобы подогнать некоторые значения и рассчеты. После этого осталось собрать все воедино, добавив концевики, напечатав новую гнадолу (это то, куда маркер вставляется, а не то что ты подумал) и залив соединения контаков движков термоклеем.

Сборка

В версии Polargraph не было концевиков, поэтому иногда плоттер пытался уехать с неприятным звуком за границы дозволенного. Тут же они есть. У меня концевики с 3 пинами, а к плате должны подключаться всего 2. Это как оказалось сигнал и земля.
photo_2022-07-28_07-43-47

В качестве держателя маркера у разработчиков Makelangelo есть классная 3D модель, которая отличалась от моей предыдущей тем, что она более гибкая в плане связки с тросами и более удобная для вставки грузила (для большей стабилизации маркера при письме). В оригинальном устройстве там используется небольшая гиря, я же просто мелочи напихал туда.
photo_2022-07-28_07-43-47--2-

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

Попутно пришлось решить вопрос с пином для управления сервоприводом маркера (который поднимает/опускает маркер на бумагу), т.к. в 3D принтерах такого функционала нет. Однако у Ender 3 есть 1 свободный пин, который находится среди контактов разъема под монитор. Есть даже специальные платы переходники, чтобы ты мог подсоединить экран и у тебя отдельно был бы свободный пин (с VCC и GND), который используют для подключения BLTouch (это калибратор для столов принтера). Для этого кстати пришлось немного поправить маппинг пинов в прошивке (видимо, никто на Ender 3 этого пока не делал).

#define SERVO0_PIN 27

Для того, чтобы это все держалось на плате принтера пришлось все соединения внешних модулей посадить на термоклей.

photo_2022-07-28_07-50-17

Запуск

После того как все собрано, можно запускать программу Makelangelo для управления плоттером. Она общается с платой на скорости UART 250000.2022-07-28_07h55_02

Там мы можем выбрать изображение, тип преобразования, законнектиться к плате, откалибровать до начальной точки - до срабатывания концевиков (без этого нельзя стартануть печать), и начать процесс.
Так как у меня DIY устройство без дисплея с кнопкой, то процесс старта не совсем стандартный. Обычно устройство отвечает сообщением, что устройство в режиме паузы. По идее у Marlin есть команды M108, которая должна выводить устройство из этого режима в режим печати, но срабатывает она не всегда. Помогает отключение и подключение к устройству заново, после чего сразу начинается печать.

В программе можно задать параметры скорости рисования, а также посмотреть/экспортировать команды для устройства, и узнать предполагаемое время работы.
2022-07-28_07h53_17
2022-07-28_07h53_37

Кстати, часто в процессе рисования нужно заменить маркер. Пока у меня нет дисплея с кнопкой оставки, я использую команду
G4 S100

где 100 - время паузы в секундах.

В общем с такой настройкой уже можно начинать печатать/рисовать. Первым тестом я попробовал алгоритм halftone, который преобразует изображение в набор закрашенных точек разного размера. Для А2 процесс занял 25 часов, попутно пришлось дважды поменять маркер. Результат вполне норм, как по мне, хотя внизу точность хромает, можно экспериментировать дальше.

photo_2022-07-28_07-58-55
photo_2022-07-28_07-58-58

Потом еще попробовал загрузить svg файл и отправить его на печать
photo_2022-07-28_07-58-30-1
photo_2022-07-28_07-59-05

С этим вообще все супер.

В плане улучшений, конечно, можно перевести эту контрукцию на зубчатые ремни и докупить дисплей для более удобной работы. Но пока и так сойдет)

Спасибо за внимание!

Подписывайтесь на Sleepless Tech чтобы читать больше занудных постов :)