Оглавление:

Барабанный плоттер с ЧПУ: 13 шагов (с изображениями)
Барабанный плоттер с ЧПУ: 13 шагов (с изображениями)

Видео: Барабанный плоттер с ЧПУ: 13 шагов (с изображениями)

Видео: Барабанный плоттер с ЧПУ: 13 шагов (с изображениями)
Видео: ЧПУ плоттер на Arduino своими руками 2024, Ноябрь
Anonim
Image
Image
Барабанный плоттер с ЧПУ
Барабанный плоттер с ЧПУ

В этом руководстве описывается плоттер формата A4 / A3, сделанный из отрезка пластиковой трубы, двух шаговых двигателей BYJ-48 и сервопривода SG-90. По сути, это плоский плоттер, свернутый в барабан.

Один двигатель вращает барабан, а другой - печатающую головку. Сервопривод используется для подъема и опускания пера.

Этот плоттер имеет ряд преимуществ перед традиционным планшетным плоттером:

  • значительно меньшая занимаемая площадь
  • требуется только одна линейная направляющая
  • просто построить
  • дешевый

Встроенный интерпретатор принимает вывод gcode из Inkscape.

Связь с плоттером осуществляется по каналу Bluetooth.

Плоттер совместим с графическим планшетом с ЧПУ, описанным в моем руководстве

Хотя этот плоттер не является прецизионным инструментом, его точность вполне соответствует его прямому назначению - переносу акварельных контуров на бумагу.

Шаг 1: Схема

Схема
Схема

Схема состоит из микроконтроллера Arduino UNO R3 и специального экрана, на котором монтируются дискретные компоненты. Питание подается через внешний регулятор на 5 вольт на 1 ампер. Средний ток составляет около 500 мА.

Шаговые двигатели BYJ-48 подключены к PORTB (контакты D8, D9, D10, D11) и PORTC (контакты A0, A1, A2, A3). Сервопривод подъемника ручки SG-90 прикреплен к штифту D3.

Резисторы на 560 Ом, которые можно не устанавливать, обеспечивают некоторую защиту Arduino от короткого замыкания, если что-то пойдет не так. Они также упрощают подключение экрана, поскольку действуют как «перемычки» на шинах питания.

Резисторы 1k2 и 2K2 предотвращают повреждение модуля Bluetooth HC-06 [1], понижая выходное напряжение 5 вольт от Arduino до 3,3 вольт.

[1] Отключите модуль Bluetooth HC-06 при загрузке кода в Arduino через порт USB. Это позволит избежать конфликтов последовательного порта.

Шаг 2: линейный привод

Линейный привод
Линейный привод
Линейный привод
Линейный привод
Линейный привод
Линейный привод

Линейный привод состоит из алюминиевого стержня длиной 3 мм x 32 мм, полосы алюминиевого листа и четырех небольших шкивов на шарикоподшипниках.

Алюминий доступен в большинстве хозяйственных магазинов. Шкивы U624ZZ 4x13x7 мм с U-образной канавкой доступны на сайте

Все, что вам нужно - это простые ручные инструменты. Отрежьте алюминиевую планку по размеру вашего плоттера.

Мотор в сборе

Установите шаговый двигатель BJY-48 через штангу на одном конце и прикрепите шкив GT2 с 20 зубьями и диаметром 5 мм к валу двигателя. Теперь установите другой шкив GT2 на другом конце штанги, чтобы шкив мог свободно вращаться. Для этого я использовал трубчатую (радио) проставку диаметром 5 мм и болт 3 мм.

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

Наконец, прикрепите каретку к ремню газораспределительного механизма с помощью кабельной стяжки.

Коляска в сборе

Каретка в сборе сделана из полосы алюминиевого листа [1], к которой привинчены шкивы U624ZZ. При необходимости используйте 4-миллиметровую шайбу, чтобы отделить шкивы от алюминиевого листа.

Шкивы, которые имеют канавку 4 мм, охватывают верхнюю и нижнюю части алюминиевого стержня, так что нет вертикального перемещения, но алюминиевая полоса свободно перемещается влево и вправо.

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

Перед тем, как сгибать алюминиевую полоску в форме буквы «U», просверлите сверху и снизу отверстия, соответствующие диаметру ручки. Теперь завершите изгибы.

Прикрепите ремень привода ГРМ к каретке с помощью кабельной стяжки и болта 3 мм между двумя верхними шкивами.

Узел подъемника ручки

Прикрепите сервопривод SG-90 к верхней части каретки с помощью одной или двух кабельных стяжек.

Бросьте ручку в два просверленных отверстия. Убедитесь, что перо свободно перемещается вверх и вниз.

Прикрепите к ручке «воротник» так, чтобы ручка не касалась барабана, когда сервопривод находится в верхнем положении ручки.

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

Шаг 3: Барабан

Барабан
Барабан
Барабан
Барабан
Барабан
Барабан

Барабан представляет собой отрезок пластиковой трубы с двумя деревянными заглушками [1].

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

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

Размеры барабана

Размеры барабана определяются размером вашей бумаги. Барабан диаметром 100 мм поддерживает книжную ориентацию A4 и альбомную ориентацию A3. Барабан диаметром 80 мм поддерживает только альбомную ориентацию формата A4. Используйте барабан как можно меньшего диаметра, чтобы уменьшить инерцию… двигатели BYJ-48 очень маленькие.

Диаметр барабана 90 мм идеально подходит для бумаги формата A4 для портретной и альбомной ориентации A3, поскольку противоположные края, когда они наматываются на барабан, перекрываются примерно на 10 мм, что означает, что у вас есть только один шов, который нужно приклеить.

Вращение барабана

Каждая ось проходит через алюминиевый концевой кронштейн, так что барабан может свободно вращаться. Торцевое смещение предотвращается с помощью шкива GT-2, 20 зубьев, диаметра 6 мм, прикрепленного к оси на одном конце. Непрерывный ремень ГРМ GT-2 связывает шаговый двигатель BJY-48 с барабаном. Для двигателя требуется шкив с диаметром отверстия 5 мм.

[1] Пластиковые заглушки доступны для труб большинства диаметров, но от них отказались, поскольку они надеваются на трубу, а не внутри, а пластик имеет тенденцию к изгибу. Они, вероятно, были бы в порядке, если бы вместо болтов использовалась неразрезная ось … но тогда вам потребуется какой-то метод крепления оси к концевым заглушкам.

Шаг 4: Советы по строительству

Убедитесь, что перо движется по центру барабана. Этого можно добиться, вырезав углы из деревянных опор. Если перо смещено по центру, оно будет стремиться соскользнуть вниз по стенке барабана.

Важно точно просверлить два отверстия для ручки. Любое колебание направляющей пера или каретки вызовет колебания по оси X.

Не перетягивайте ремни ГРМ GT-2… они просто должны быть натянуты. Шаговые двигатели BYJ-48 не обладают большим крутящим моментом.

Шаговые двигатели BJY-48 часто демонстрируют небольшой люфт, который незначителен вдоль оси X, но вызывает беспокойство, когда дело доходит до оси Y. Причина этого в том, что один оборот двигателя оси Y соответствует одному обороту барабана, в то время как каретка ручки требует много оборотов двигателя оси X, чтобы пройти по длине барабана. Любой люфт оси Y можно устранить, поддерживая постоянный крутящий момент на барабане. Самый простой способ - прикрепить небольшой груз к нейлоновому шнурку, обмотанному вокруг барабана.

Шаг 5: алгоритм рисования линий Брезенхема

Алгоритм рисования линий Брезенхема
Алгоритм рисования линий Брезенхема
Алгоритм рисования линий Брезенхема
Алгоритм рисования линий Брезенхема

Этот плоттер использует оптимизированную версию [1] алгоритма рисования линий Брезенхэма. К сожалению, этот алгоритм действителен только для наклонов линий меньше или равных 45 градусам (т. Е. Одному октанту круга).

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

Вывод

Оставшуюся часть этого шага можно пропустить, если вы знакомы с алгоритмом Брезенхема.

Проведем линию от (0, 0) до (x1, y1), где:

  • x1 = 8 = горизонтальное расстояние
  • y1 = 6 = расстояние по вертикали

Уравнение прямой, проходящей через начало координат (0, 0), задается уравнением y = m * x, где:

m = y1 / x1 = 6/8 = 0,75 = наклон

Простой алгоритм

Простой алгоритм построения этой линии:

  • int x1 = 8;
  • int y1 = 6;
  • поплавок m = y1 / x1;
  • сюжет (0, 0);
  • for (int x = 1; x <= x1; x ++) {
  • int y = круглый (м * х);
  • сюжет (x, y);
  • }

Таблица 1: Простой алгоритм

Икс м м * х у
0 0.75 0 0
1 0.75 0.75 1
2 0.75 1.5 2
3 0.75 2.25 2
4 0.75 3 3
5 0.75 3.75 4
6 0.75 4.5 5
7 0.75 5.25 5
8 0.75 6 6

У этого простого алгоритма есть две проблемы:

  • основной цикл содержит медленное умножение
  • он использует числа с плавающей запятой, что также является медленным

График зависимости y от x для этой линии показан выше.

Алгоритм Брезенхема

Брезенхэм ввел понятие ошибочного члена «е», который инициализируется нулем. Он понял, что значения m * x, показанные в таблице 1, могут быть получены путем последовательного добавления «m» к «e». Далее он понял, что y увеличивается только в том случае, если дробная часть m * x больше 0,5. Чтобы его сравнение оставалось в диапазоне 0 <= 0,5 <= 1, он вычитает 1 из «e» всякий раз, когда y увеличивается.

  • int x1 = 8;
  • int y1 = 6;
  • поплавок m = y1 / x1;
  • int y = 0;
  • float e = 0;
  • сюжет (0, 0);
  • for (int x = 1; x <= x1; x ++) {
  • е + = м;
  • if (e> = 0,5) {
  • е - = 1;
  • y ++;
  • }
  • сюжет (x, y);
  • }

Таблица 2: Алгоритм Брезенхема

Икс м е e-1 у
0 0.75 0 0 0
1 0.75 0.75 -0.25 1
2 0.75 0.5 -0.5 2
3 0.75 0.25 2
4 0.75 1 0 3
5 0.75 0.75 -0.25 4
6 0.75 0.5 -0.5 5
7 0.75 0.25 5
8 0.75 1 0 6

Если вы изучите алгоритм и таблицу 2, вы заметите это;

  • основной цикл использует только сложение и вычитание … умножения нет
  • шаблон для y такой же, как для таблицы 1.

Но мы все еще используем числа с плавающей запятой… давайте исправим это.

(Оптимизированный) алгоритм Брезенхема

Алгоритм Брезенхема с плавающей запятой можно преобразовать в целочисленную форму, если мы масштабируем 'm' и 'e' на 2 * x1, и в этом случае m = (y1 / x1) * 2 * x1 = 2 * y1

За исключением масштабирования m и e алгоритм аналогичен приведенному выше, за исключением:

  • мы добавляем 2 * y1 к 'e' каждый раз, когда увеличиваем 'x'
  • мы увеличиваем y, если e больше или равно x1.
  • мы вычитаем 2 * x1 из 'e' вместо 1
  • x1 используется для сравнения вместо 0,5

Скорость алгоритма можно еще больше увеличить, если цикл использует ноль для теста. Для этого нам нужно добавить смещение к термину ошибки «e».

  • int x1 = 8;
  • int y1 = 6;
  • int m = (y1 << 1); // константа: наклон увеличен на 2 * x1
  • int E = (x1 << 1); // константа: 2 * x1 для использования в цикле
  • int e = -x1; // смещение -E / 2: теперь тест выполняется с нулем
  • сюжет (0, 0);
  • int y = 0;
  • for (x = 1; x <= x1; x ++) {
  • е + = м;
  • if (e> = x1) {
  • е - = E
  • y ++;
  • }
  • сюжет (x, y);
  • }

Таблица 3: (Оптимизированный) алгоритм Брезенхема

Икс м E е e - E у
0 12 16 -8 0
1 12 16 4 -12 1
2 12 16 0 -16 2
3 12 16 -4 2
4 12 16 8 -8 3
5 12 16 4 -12 4
6 12 16 0 -16 5
7 12 16 -4 5
8 12 16 8 -8 6

И снова шаблон для y такой же, как и в других таблицах. Интересно отметить, что таблица 3 содержит только целые числа и что отношение m / E = 12/16 = 0,75, которое представляет собой наклон m линии.

Этот алгоритм чрезвычайно быстр, поскольку основной цикл включает только сложение, вычитание и сравнение с нулем. Умножение не используется, кроме случаев, когда мы инициализируем значения для 'E' и 'm' с помощью «сдвига влево», чтобы удвоить значения x1 и y1.

[1] Эта оптимизированная версия алгоритма Брезенхема взята из статьи «Рисование линии и окружности Брезенхэма», авторское право © 1994-2006, W. Randolph Franklin (WRF). Его материалы могут быть использованы для некоммерческих исследований и образования при условии, что вы укажете его и дадите обратную ссылку на его домашнюю страницу

Шаг 6: Код

Загрузите прикрепленный файл в папку с таким же именем, затем загрузите его в плоттер с помощью вашей Arduino IDE (интегрированной среды разработки).

Перед загрузкой отключите модуль bluetoorh HC-06. Это необходимо, чтобы избежать конфликта последовательного порта с кабелем USB.

Код третьей стороны

В дополнение к приведенному выше коду.ino вам потребуются следующие пакеты программного обеспечения, которые являются бесплатными / пожертвованными:

  • Teraterm, доступный по адресу
  • Inkscape, доступный по адресу

Инструкции по установке и использованию каждого из вышеперечисленных сторонних пакетов можно найти в моей статье

Шаг 7: Меню

Меню
Меню

Установите соединение Bluetooth с вашим плоттером с помощью «Teraterm».

Включите "Caps Lock", так как все команды в верхнем регистре.

Введите букву «M», и появится меню, как показано выше.

Меню достаточно понятно само по себе:

  • M (или M0) вызывает меню
  • G0 позволяет вам направить перо к определенной координате XY с поднятым пером.
  • G1 позволяет вам направить перо к определенной координате XY при опущенном перо.
  • T1 позволяет вам расположить перо над координатой 0, 0. Введите «E» для выхода.
  • T2 позволяет масштабировать рисунок. Например, «T2 S2.5» масштабирует ваш рисунок на 250%. Масштаб по умолчанию - 100%.
  • T3 и T4 позволяют поднимать или опускать перо.
  • T5 рисует тестовую таблицу «ABC».
  • T6 рисует «цель».
  • T7 рисует набор радиальных линий, цель которых - убедиться, что алгоритм Брезенхема работает в каждом из восьми «октантов».

Примечания:

  • все движения пера используют масштаб рисунка, установленный с помощью пункта меню T2
  • числа «17:» и «19:» - это коды подтверждения терминала «Xon» и «Xoff» от интерпретатора arduino.

Шаг 8: Калибровка

Значения X_STEPS_PER_MM и Y_STEPS_PER_MM указаны для барабана диаметром 90 мм.

Значения для других диаметров барабана можно рассчитать с помощью следующих соотношений:

  • окружность барабана ПИ * диаметр
  • 2048 шагов равны одному обороту каждого вала двигателя
  • один оборот шкива GT-2 соответствует линейному перемещению зубчатого ремня на 40 миллиметров

Другой способ - ввести следующие команды,

  • G1 X0 Y100
  • G1 X100 Y100

затем измерьте длину результирующих линий и "масштабируйте" значения для X-STEPS_PER_MM и Y_STEPS_PER_MM

Шаг 9: Предварительная обработка Gcode

Предварительная обработка Gcode
Предварительная обработка Gcode
Предварительная обработка Gcode
Предварительная обработка Gcode

Для этого плоттера требуется только четыре gcodes Inkscape (а именно: G0, G1, G2, G3). Код будет выполняться значительно быстрее, если мы удалим все ненужные gcodes и комментарии.

Для этого вам понадобится копия «Блокнота ++». Этот бесплатный текстовый редактор содержит поисковую систему "регулярных выражений" для поиска и удаления нежелательного текста. Notepad ++ доступен по адресу

Откройте файл, который нужно изменить, с помощью Notepad ++ и поместите курсор в начало файла.

Выберите «Просмотр / Показать символ / Все символы», а затем «Найти / заменить…» в верхней строке меню.

Установите флажок «Регулярное выражение» (см. 1-е изображение) и введите каждую из следующих кодовых последовательностей в поле поиска.

После каждой записи нажимайте «Заменить все»:

  • %
  • (.*)
  • ^ M. * $
  • Z. * $

Вышеупомянутые регулярные выражения удаляют все символы%, все комментарии, показанные в скобках, все коды M, все коды Z и следующие за ними коды.

Теперь установите флажок «Расширенное выражение» (см. 2-е изображение) и введите следующую кодовую последовательность:

г / п / г / п / г / п

Это выражение удаляет нежелательные символы возврата каретки и перевода строки, созданные первой последовательностью.

Сохраните файл под другим именем, используя «Сохранить как».

Выполнено.

Шаг 10: результаты

Полученные результаты
Полученные результаты

Этот плоттер был создан как «доказательство концепции» и никогда не был идеальным. При этом результаты не так уж и плохи. Они определенно соответствуют моей дизайнерской цели по переносу акварельных контуров на бумагу.

Первые три изображения - это встроенные тестовые таблицы T5, T6, T7 соответственно.

"Привет, мир!" Шаблон был отправлен на плоттер по bluetooth. «Предварительно обработанная» копия этого файла прилагается.

Шаг 11: Обновление кода

Обновление кода
Обновление кода

Код этого плоттера обновлен до Drum_Plotter_V2.ino.

Отличия от оригинального Drum_Plotter.ino включают:

  • более плавное позиционирование пера
  • теперь распознает инструкции G02 gcode (дуги по часовой стрелке)
  • теперь распознает инструкции G03 gcode (дуги против часовой стрелки)

На прилагаемой диаграмме показан мой метод расчета угла дуги.

Шаг 12: Drum_plotter_v3.ino

Прилагается обновление кода для "Барабанного плоттера с ЧПУ".

"drum_plotter_v3.ino" исправляет небольшую ошибку, которая влияла на точность плоттера.

История изменений

Версия 2:

Добавлены двухдуговые кривые

Версия 3:

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

  • (int) заменено на round () в функции move_to ().
  • Доработан алгоритм поиска "октанта" функции draw_line ()
  • Интерпретатор теперь использует строковые функции, а не указатели, что упрощает дизайн. Например, теперь мы можем искать «МЕНЮ», а не искать букву «М», а затем извлекать целое число, которое следует за ней. Это позволяет вам персонализировать плоттер с вашими собственными командами.

Шаг 13: Drum_plotter_plotter_v4.ino

16 января 2017 г.:

Код для этого драм-плоттера был дополнительно оптимизирован. Добавлены дополнительные функции.

Изменения включают:

  • более быстрый алгоритм draw_line ()
  • соответствующая функция move_to ()
  • счетчики шагов
  • исправление незначительной ошибки

Для получения дополнительной информации прочтите комментарии в прилагаемом файле "drum_plotter_v4.ino".

Щелкните здесь, чтобы просмотреть другие мои инструкции.

Рекомендуемые: