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

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

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

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

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

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

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

Железо

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

Проект для сбора и конфигурации прошивки под свое железо можно найти тут.

Однако, листая форумы я не нашел никого, кто бы проверил сборку с такой конфигурацией, и мне предстояло быть первопроходцем. Ну и сам разработчик писал, что не проверял данную прошивку на этом железе (но должно вроде как работать). Можно, конечно пойти по простому пути и запилить это на 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.

Собрав его и попытавшись прошить 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. Это как оказалось сигнал и земля.

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

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

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

#define SERVO0_PIN 27

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

Запуск

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

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

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

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

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

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


Потом еще попробовал загрузить svg файл и отправить его на печать

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

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

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

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