Плоттер на основе конструктора Makeblock

Фотография плоттера с листом бумаги, на котором рисунокО конструкторе Makeblock я узнал уже после того, как завершилась его кампания на кикстартере. А жаль, поскольку был шанс приобрести наборы конструктора по достаточно низкой цене. После удачной кампании авторы продолжили развивать свои идеи и создали набор для плоттера — XY-Plotter Robot Kit v2.0. Мне он обошелся в $300 с бесплатной доставкой через EMS в рамках акции «накупи на $500».

Плоттер заинтересовал меня по двум причинам: возможность рисовать ручкой Circuit Scribe с токопроводящими чернилами и возможность проапгрейдить плоттер лазерным резаком. В этой статье я расскажу о своих впечатлениях от плоттера в его оригинальной конфигурации.  

Подробности доставки Плоттер продается в виде набора «собери сам». Вес посылки — несколько килограмм, поэтому доставка может обойтись дорого. Но я нашел китайский сервис Seeed, который при заказе на $500 высылает бесплатно через DHL / EMS. Кроме плоттера я взял у них лазерный резак, Raspberry Pi и несколько шилдов для Arduino, вписавшись в указанную сумму и убедив себя, что в будущем все это мне обязательно пригодится.Посылка пришла примерно через две недели после оформления заказа в виде увесистой и плотно набитой деталями коробки из грубого картона. Внутри все в хорошем состоянии, каждая деталь в какой-нибудь обертке, но на одной из несущих конструкций рамы я обнаружил неприятную вмятину, которая, впрочем, не повлияла на функциональность детали.

Разобранный Makeblock плоттерНа сборку плоттера у меня ушло не меньше 10 часов. План сборки содержится в PDF документе, где шаг за шагом плоттер обретает свой вид. При всей подробности инструкции, иногда приходилось разбирать и заново собирать отдельные блоки когда приходило понимание их функции. Рекомендую при сборке забегать на несколько страниц вперед.Проблемы сборки Отверстия в алюминиевых частях конструктора смещены в пределах миллиметра от их задуманного положения, что приводило к проблемам в тех местах, в которых детали собирались впритык. Я нашел два таких места: прямо на первом шаге, когда винты, скрепляющие раму, уперлись друг в друга; и при креплении платы контроллера шагового двигателя, которая не смогла ужиться с ножкой плоттера. Все это удалось решить, но я бы на месте авторов конструктора не рассчитывал на такую точность формы своих деталей.Один раз застрял винт во втулке. Дело в том, что втулки крепятся к оси маленькими установочными винтами без шляпки. На начальной стадии сборки не было указано, что потом эти втулки надо куда-то смещать и выравнивать, поэтому я их хорошо затянул. Позже обнаружилось, что винт застрял — отвертка буксует и не хочет отвинчивать. К слову, материал прилагаемых инструментов самый дешевый, метал мягкий. Я рассматривал несколько вариантов решения, от покупки новых деталек до вытаскивания винта методом накручивания еще меньшего винта с левой резьбой. Положения спасла отвертка из более твердой стали.

Короткий ролик о сборке плоттера (из интернета) [embedded content]

Собранный Makeblock плоттер

Принцип перемещения по XY Рабочей частью плоттера является платформа с карандашом, скользящая по направляющим осям. Чтобы понять, как эта платформа перемещается, взгляните еще раз на фотографию выше.Имеются два шаговых двигателя, по одному на каждую ось перемещения. С помощью передаточных ремней, закрепленных концами на платформе, вращение оси двигателя преобразуется в линейное движение платформы вдоль «рельс».

Принцип опускания и поднимания карандаша Принцип опускания и поднимания карандаша я понял только под конец сборки: Платформа с карандашем плоттера Makeblock

Карандаш жестко крепится к планке, а планка крепится на ось. Планка делится осью на два плеча — на одном карандаш, а на другом крепится резинка так, чтобы планка прижимала карандаш к бумаге. «Лопасть» сервопривода имеет два рабочих положения: вертикальное, в котором «лопасть» поднимает планку, не давая ей прижимать карандаш к бумаге, и горизонтальное, в котором «лопасть» не препятствует планке прижимать карандаш к бумаге.

Вдоль оси крепления планки существует люфт, который приводит к «дрожанию» линий. Мне удалось его убрать, добавив резинку, прижимающую планку к платформе.

Электронные блоки и их соединение Управляющим компонентом плоттера служит плата на базе Arduino Leonardo. Ее особенностью является встроенная поддержка для USB соединения с компьютером. Если обычно Arduino сбрасывается при налаживании нового последовательного соединения с компьютером, то Arduino Leonardo сохраняет свое текущее состояние, а значит с плоттером можно соединяться сколько угодно раз, сохраняя все настройки (прежде всего — нуля в XY).В плате имеется 8 портов RJ25, через которые соединяются контроллеры двух шаговых двигателей, сервопривод и четыре выключателя на случай, когда платформа упирается в раму. Питание для шаговых двигателей подводится отдельно через поставляемый блок питания с американской вилкой.

Электронные компоненты плоттера Makeblock

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

Сравнение качества получаемого изображения от количества микрошагов в шаге

Как видно из этой картинки, самое лучшее качество дает 1/8 и ¼ шага. Далее оказалось, что при разрешении 1/8 шага один из двигателей начинает буксовать и «терять» микрошаги из-за нехватки крутящего момента. Увеличение силы тока до максимума только немного улучшило положение, поэтому победителем вышел режим ¼ шага. Кстати, в режиме микрошагов двигатель шумит заметно меньше!

Сравнение качества получаемого изображения от количества микрошагов в шаге

В конце сборки необходимо запрограммировать управляющую плату плоттера. Программа реализует трансляцию так называемого G-кода, в котором комманды перемещения карандаша записаны в текстовом виде.Для преобразования векторного изображения в G-код существует много редакторов, но авторы рекомендуют использовать кроссплатформенный и бесплатный редактор Inkscape с установленным плагином для генерации G-кода Gcodetools.

Чтобы выслать плоттеру G-код на исполнение, необходимо подключиться к его управляющей плате через USB кабель и открыть последовательное соединение. Для Windows это будет какой-нибудь COM3 или COM4 порт, для MacOS это что-нибудь вроде /dev/tty.usbmodem1421

Интерфейс пользователя Интерфейс пользователя программы управлением плоттером Makeblock Авторы конструктора написали программу на Java, открывающую соединение с устройством и позволяющую управлять карандашом с помощью клавиш-стрелок, устанавливать нулевое положение, задавать разрешение по осям и высылать G-код, записанный в файле.Программа изначально рассчитана на Windows, но после загрузки нужной библиотеки запускается и под MacOS.

Я обнаружил, что иногда соединение с плоттером зависает, поэтому написал на этот случай скрипт на Python, высылающий G-код напрямую через последовательное соединение. При этом Java-программу я использую, чтобы установить исходную точку, потом запускаю скрипт.

Скрипт на Python ###############################################################################

import serial, re, time import sys, argparse

SERIAL = »/dev/tty.usbmodem1421»

parser = argparse.ArgumentParser (description = «G-code file sender») parser.add_argument (»--input», help = «file to send», required = True) args = vars (parser.parse_args ())

###############################################################################

def send (stream, command): if command[-1] != »\n»: command += »\n» sys.stdout.write (»<= " + command) stream.write(command) while True: s = stream.readline() sys.stdout.write("=> » + s) if s[0] != »#»: break

fin = open (args[«input»])

stream = serial.Serial (SERIAL, 115200)

send (stream,»$1×8 Y12 Z21») send (stream,»$2×11 Y13 Z9») send (stream,»$3×22 Y19 Z22») send (stream,»$4×23 Y18 Z23») send (stream,»$6×88.0 Y88.0 Z40.0») # set axis resolution send (stream, «G90») send (stream, «G21»)

for s in fin: s = re.sub (r»\([^)]*\)», r», s) if s.strip (): send (stream, s.strip ())

fin.close ()

############################################################################### Модификация программы Программа для управляющей платы плоттера воспринимает X, Y и Z как три оси, движение по которым задается в миллиметрах. Но дело в том, что ось Z на самом деле задается углом вращения сервопривода! В моем случае 90 градусов означает опущенный карандаш, 60 градусов — поднятый. В итоге поднятие и опускание карандаша занимает, с точки зрения программы, столько же времени, сколько рисование линии в (90 — 60) => 30 мм! Карандаш опускается и ждет, потом рисует линию, потом поднимается и ждет. Мало того, что изображение рисуется дольше (как будто к каждому непрерывному пути добавляется 30 мм), но простаивание маркера или линера на бумаге добавляет толстые точки в начале пути. Программу пришлось модифицировать, сжав расстояния по оси Z: long calculate_feedrate_delay (float feedrate) { //how long is our line length? float distance = sqrt (delta_units.x*delta_units.x + delta_units.y*delta_units.y + delta_units.z*delta_units.z / 100.f); … }

Когда я уже собирался запустить плоттер на отрисовку каких-нибудь наглядных картинок для этой статьи, обнаружилась серьезная неисправность: линии рисунка перестали сходиться друг с другом. Оказалось, что линейные подшипники процарапали борозды на направляющих осях и стали время от времени пробуксовывать. Я подозревал, что оси надо смазывать, но сомневался, поскольку в инструкции про это не было ни слова. Итак, плоттер теперь требует ремонта и смазки.Выбор смазки и ремонт Судя по этой статье, самой лучшей смазкой является взвешенный в масле тефлон. Ее производят в США под маркой Super Lube. На втором месте — синтетические трансмиссионные масла (автомобильные?). Пока не пришла тефлоновая смазка, я попробовал отечественное машинное масло, но оно не сильно помогло.Подшипники на замену я заказал на eBay по $2.55 за штуку, всего шесть штук. Направляющие оси оказались гораздо дороже, поскольку они сделаны по специальному заказу, но я решил их не менять, а провернуть, чтобы сместить борозды с путей подшипников.

Проблема с пробуксовкой натолкнула меня на мысль про контроль пропущенных шагов двигателя с помощью лазерной мыши. Судя по найденным статьям, это был бы весьма эффективный и красивый способ решения точного позиционирования шаговых двигателей.Заканчивая статью, я все же рискну и отрисую несколько рисунков в менее точном режиме ½ шага, не дожидаясь комплектующих и смазки. Изображения сделаны линером с шириной линии 0.3 мм

Сравнение рисунка плоттера с линейкой

Образец рисунка плоттера: приветствие

Образец рисунка плоттера: лабиринт

© Habrahabr.ru