- PVSM.RU - https://www.pvsm.ru -

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

Фотография плоттера с листом бумаги, на котором рисунок

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

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

Доставка

Подробности доставки

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

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

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

Сборка

На сборку плоттера у меня ушло не меньше 10 часов. План сборки содержится в PDF документе [7], где шаг за шагом плоттер обретает свой вид. При всей подробности инструкции, иногда приходилось разбирать и заново собирать отдельные блоки когда приходило понимание их функции. Рекомендую при сборке забегать на несколько страниц вперед.

Проблемы сборки

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

Один раз застрял винт во втулке. Дело в том, что втулки крепятся к оси маленькими установочными винтами без шляпки. На начальной стадии сборки не было указано, что потом эти втулки надо куда-то смещать и выравнивать, поэтому я их хорошо затянул. Позже обнаружилось, что винт застрял — отвертка буксует и не хочет отвинчивать. К слову, материал прилагаемых инструментов самый дешевый, метал мягкий. Я рассматривал несколько вариантов решения, от покупки новых деталек до вытаскивания винта методом накручивания еще меньшего винта с левой резьбой. Положения спасла отвертка из более твердой стали.

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

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

Механика

Принцип перемещения по XY

Рабочей частью плоттера является платформа с карандашом, скользящая по направляющим осям. Чтобы понять, как эта платформа перемещается, взгляните еще раз на фотографию выше.

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

Принцип опускания и поднимания карандаша

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

Платформа с карандашем плоттера Makeblock

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

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

Электроника

Электронные блоки и их соединение

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

В плате имеется 8 портов RJ25, через которые соединяются контроллеры двух шаговых двигателей, сервопривод и четыре выключателя на случай, когда платформа упирается в раму. Питание для шаговых двигателей подводится отдельно через поставляемый блок питания с американской вилкой.

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

Поиск оптимального микрошага двигателей

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

В теории [9] увеличение количества микрошагов улучшает плавность линий и уменьшает шум, но и существенно понижает крутящий момент двигателей. Я попробовал сравнить качество получаемого изображения в зависимости от количества микрошагов:

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

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

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

Управление

В конце сборки необходимо запрограммировать управляющую плату плоттера. Программа реализует трансляцию так называемого G-кода [10], в котором комманды перемещения карандаша записаны в текстовом виде.

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

Чтобы выслать плоттеру 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 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);
    ...
}

Результат

Когда я уже собирался запустить плоттер на отрисовку каких-нибудь наглядных картинок для этой статьи, обнаружилась серьезная неисправность: линии рисунка перестали сходиться друг с другом. Оказалось, что линейные подшипники [13] процарапали борозды на направляющих осях [14] и стали время от времени пробуксовывать. Я подозревал, что оси надо смазывать, но сомневался, поскольку в инструкции про это не было ни слова. Итак, плоттер теперь требует ремонта и смазки.

Выбор смазки и ремонт

Судя по этой [15] статье, самой лучшей смазкой является взвешенный в масле тефлон. Ее производят в США под маркой Super Lube [16]. На втором месте — синтетические трансмиссионные масла (автомобильные?). Пока не пришла тефлоновая смазка, я попробовал отечественное машинное масло, но оно не сильно помогло.

Подшипники на замену я заказал на eBay [17] по $2.55 за штуку, всего шесть штук. Направляющие оси оказались гораздо дороже, поскольку они сделаны по специальному заказу, но я решил их не менять, а провернуть, чтобы сместить борозды с путей подшипников.

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

Заканчивая статью, я все же рискну и отрисую несколько рисунков в менее точном режиме 1/2 шага, не дожидаясь комплектующих и смазки. Изображения сделаны линером с шириной линии 0.3 мм

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

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

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

Автор: barabanus

Источник [19]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/e-lektronika/78712

Ссылки в тексте:

[1] Makeblock: http://habrahabr.ru/post/237079/

[2] кикстартере: https://www.kickstarter.com/projects/1397854503/makeblock-next-generation-of-construct-platform

[3] XY-Plotter Robot Kit v2.0: http://www.makeblock.cc/xy-plotter-robot-kit-v2-0-with-electronic/

[4] Circuit Scribe: http://habrahabr.ru/post/205406/

[5] лазерным резаком: http://www.makeblock.cc/laser-engraver-upgrade-pack-500mw-for-xy-plotter-robot-kit-v2-0/

[6] Seeed: http://www.seeedstudio.com/depot/

[7] PDF документе: https://github.com/Makeblock-official/XY-Plotter-2.0/blob/master/XY%20Plotter%20V2.0%20Assembly%20Instruction.pdf

[8] здесь: http://wiki.makeblock.cc/index.php?title=Me_Stepper_Driver

[9] В теории: http://www.micromo.com/microstepping-myths-and-realities

[10] G-кода: https://ru.wikipedia.org/wiki/G-code

[11] Inkscape: https://inkscape.org/en/

[12] Gcodetools: http://www.shapeoko.com/wiki/index.php/User:BHSPitMonkey/Inkscape_and_Gcodetools_Tutorial

[13] линейные подшипники: http://www.makeblock.cc/linear-motion-slide-unit-8mm-pair/

[14] направляющих осях: http://www.makeblock.cc/linear-motion-shaft-d8x496mm/

[15] этой: http://reprap.org/wiki/Lubrication#Linear_bearings

[16] Super Lube: http://www.super-lube.com/synthetic-oil-with-ptfe-high-viscosity-ezp-56.html

[17] заказал на eBay: http://www.ebay.com/sch/i.html?_from=R40&_trksid=p2050601.m570.l1313.TR0.TRC0.H0.Xsc8uu&_nkw=sc8uu&_sacat=0

[18] статьям: http://reprap.org/wiki/Bamboo_Printer#Optical_2D_feedback

[19] Источник: http://habrahabr.ru/post/247045/