http://habrahabr.ru/post/247045/
О конструкторе
Makeblock я узнал уже после того, как завершилась его кампания на
кикстартере. А жаль, поскольку был шанс приобрести наборы конструктора по достаточно низкой цене. После удачной кампании авторы продолжили развивать свои идеи и создали набор для плоттера —
XY-Plotter Robot Kit v2.0. Мне он обошелся в $300 с бесплатной доставкой через EMS в рамках акции «накупи на $500».
Плоттер заинтересовал меня по двум причинам: возможность рисовать ручкой
Circuit Scribe с токопроводящими чернилами и возможность проапгрейдить плоттер
лазерным резаком. В этой статье я расскажу о своих впечатлениях от плоттера в его оригинальной конфигурации.
Доставка
Подробности доставкиПлоттер продается в виде набора «собери сам». Вес посылки — несколько килограмм, поэтому доставка может обойтись дорого. Но я нашел китайский сервис
Seeed, который при заказе на $500 высылает бесплатно через DHL / EMS. Кроме плоттера я взял у них лазерный резак,
Raspberry Pi и несколько шилдов для
Arduino, вписавшись в указанную сумму и убедив себя, что в будущем все это мне обязательно пригодится.
Посылка пришла примерно через две недели после оформления заказа в виде увесистой и плотно набитой деталями коробки из грубого картона. Внутри все в хорошем состоянии, каждая деталь в какой-нибудь обертке, но на одной из несущих конструкций рамы я обнаружил неприятную вмятину, которая, впрочем, не повлияла на функциональность детали.
Сборка
На сборку плоттера у меня ушло не меньше 10 часов. План сборки содержится в
PDF документе, где шаг за шагом плоттер обретает свой вид. При всей подробности инструкции, иногда приходилось разбирать и заново собирать отдельные блоки когда приходило понимание их функции. Рекомендую при сборке забегать на несколько страниц вперед.
Проблемы сборкиОтверстия в алюминиевых частях конструктора смещены в пределах миллиметра от их задуманного положения, что приводило к проблемам в тех местах, в которых детали собирались впритык. Я нашел два таких места: прямо на первом шаге, когда винты, скрепляющие раму, уперлись друг в друга; и при креплении платы контроллера шагового двигателя, которая не смогла ужиться с ножкой плоттера. Все это удалось решить, но я бы на месте авторов конструктора не рассчитывал на такую точность формы своих деталей.
Один раз застрял винт во втулке. Дело в том, что втулки крепятся к оси маленькими установочными винтами без шляпки. На начальной стадии сборки не было указано, что потом эти втулки надо куда-то смещать и выравнивать, поэтому я их хорошо затянул. Позже обнаружилось, что винт застрял — отвертка буксует и не хочет отвинчивать. К слову, материал прилагаемых инструментов самый дешевый, метал мягкий. Я рассматривал несколько вариантов решения, от покупки новых деталек до вытаскивания винта методом накручивания еще меньшего винта с левой резьбой. Положения спасла отвертка из более твердой стали.
Короткий ролик о сборке плоттера (из интернета) Механика
Принцип перемещения по XYРабочей частью плоттера является платформа с карандашом, скользящая по направляющим осям. Чтобы понять, как эта платформа перемещается, взгляните еще раз на фотографию выше.
Имеются два шаговых двигателя, по одному на каждую ось перемещения. С помощью передаточных ремней, закрепленных концами на платформе, вращение оси двигателя преобразуется в линейное движение платформы вдоль «рельс».
Принцип опускания и поднимания карандашаПринцип опускания и поднимания карандаша я понял только под конец сборки:
Карандаш жестко крепится к планке, а планка крепится на ось. Планка делится осью на два плеча — на одном карандаш, а на другом крепится резинка так, чтобы планка прижимала карандаш к бумаге. «Лопасть» сервопривода имеет два рабочих положения: вертикальное, в котором «лопасть» поднимает планку, не давая ей прижимать карандаш к бумаге, и горизонтальное, в котором «лопасть» не препятствует планке прижимать карандаш к бумаге.
Вдоль оси крепления планки существует люфт, который приводит к «дрожанию» линий. Мне удалось его убрать, добавив резинку, прижимающую планку к платформе.
Электроника
Электронные блоки и их соединениеУправляющим компонентом плоттера служит плата на базе
Arduino Leonardo. Ее особенностью является встроенная поддержка для USB соединения с компьютером. Если обычно
Arduino сбрасывается при налаживании нового последовательного соединения с компьютером, то
Arduino Leonardo сохраняет свое текущее состояние, а значит с плоттером можно соединяться сколько угодно раз, сохраняя все настройки (прежде всего — нуля в XY).
В плате имеется 8 портов RJ25, через которые соединяются контроллеры двух шаговых двигателей, сервопривод и четыре выключателя на случай, когда платформа упирается в раму. Питание для шаговых двигателей подводится отдельно через поставляемый блок питания с американской вилкой.
Поиск оптимального микрошага двигателейПо время написания этой статьи я неожиданно обнаружил, что плоттер требует регулировки двух параметров контроллеров шаговых двигателей: количество микрошагов на один шаг и силу тока, определяющую крутящий момент. Подробнее об установке этих параметров
здесь, но в инструкции об этом ни слова!
В теории увеличение количества микрошагов улучшает плавность линий и уменьшает шум, но и существенно понижает крутящий момент двигателей. Я попробовал сравнить качество получаемого изображения в зависимости от количества микрошагов:
Как видно из этой картинки, самое лучшее качество дает 1/8 и 1/4 шага. Далее оказалось, что при разрешении 1/8 шага один из двигателей начинает буксовать и «терять» микрошаги из-за нехватки крутящего момента. Увеличение силы тока до максимума только немного улучшило положение, поэтому победителем вышел режим 1/4 шага. Кстати, в режиме микрошагов двигатель шумит заметно меньше!
Управление
В конце сборки необходимо запрограммировать управляющую плату плоттера. Программа реализует трансляцию так называемого
G-кода, в котором комманды перемещения карандаша записаны в текстовом виде.
Для преобразования векторного изображения в G-код существует много редакторов, но авторы рекомендуют использовать кроссплатформенный и бесплатный редактор
Inkscape с установленным плагином для генерации G-кода
Gcodetools.
Чтобы выслать плоттеру G-код на исполнение, необходимо подключиться к его управляющей плате через USB кабель и открыть последовательное соединение. Для Windows это будет какой-нибудь
COM3 или
COM4 порт, для MacOS это что-нибудь вроде
/dev/tty.usbmodem1421Интерфейс пользователя Авторы конструктора написали программу на 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 X8 Y12 Z21")
send(stream, "$2 X11 Y13 Z9")
send(stream, "$3 X22 Y19 Z22")
send(stream, "$4 X23 Y18 Z23")
send(stream, "$6 X88.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 за штуку, всего шесть штук. Направляющие оси оказались гораздо дороже, поскольку они сделаны по специальному заказу, но я решил их не менять, а провернуть, чтобы сместить борозды с путей подшипников.
Проблема с пробуксовкой натолкнула меня на мысль про контроль пропущенных шагов двигателя с помощью лазерной мыши. Судя по найденным
статьям, это был бы весьма эффективный и красивый способ решения точного позиционирования шаговых двигателей.
Заканчивая статью, я все же рискну и отрисую несколько рисунков в менее точном режиме 1/2 шага, не дожидаясь комплектующих и смазки. Изображения сделаны линером с шириной линии 0.3 мм