Решил сделать что-то почти бесполезное, для развлечения и что-бы быстро. Получилась вот такая машинка, которая рисует мне фломастером на этикетках из рулона:
Как я её сделал, сначала механическая часть.
У меня есть 3D-принтеры, есть фрезер, задействовал все доступные мне технологии. Но, думаю, можно обойтись дрелью, ножовкой и куском алюминиевого уголка, просто будет не так красиво, и не так легко. Я ленивый и мне лучше когда за меня работает железный болван.
Раскурочил три CD привода, из одного выдрал две направляющие, из двух других взял всю механику в сборе. От механики оторвал, откусил и открутил всё, что не нужно.
На FDM напечатал раму, в раме отверстия под квадратные закладные гайки, к раме прикрутил всю механику и электронику. Для взаимной перпендикулярности в двух плоскостях обоих осей на раме есть полочка, к которой прижимается ось Х.Так я получил почти готовую ось X и Y. Вот так выглядит модель рамы.
На привод оси Y прикрутил двумя шурупами столик, который тоже напечатал на FDM и уже на него и сверху поставил стальную пластину, которую вырезал на фрезере из крышки одного из приводов. Просто лежит сверху столика и загнуты ушки. Стальная, что бы можно было крепить объект рисования магнитами, не придумывать дополнительный крепёж.
CD приводы для каннибализации лучше выбирать постарше, у них менее вычурная рама, легче измерять и вообще простота - это совершенство. Но! У моих ход всего 36мм и одна направляющая из стали, а вторая пластиковая, пишут в интернетах, что есть с ходом 50мм, ну и конечно с двумя металлическими направляющими было бы лучше. Ну уж как есть - так есть. Хотя 36 и 50мм - это почти в полтора раза больше, если бы я знал заранее, то постарался бы выбрать привода с бОльшим ходом.
Важный момент: зацепление пары гайка-винт на обоих осях было очень хилым, пришлось вставить по дополнительной пружине в этот узел и сразу всё наладилось, хотя всё равно хотелось бы больше, тогда можно было бы ещё задрать ускорения.
Ось Z я сделал на сервоприводе SG90, с углом поворота 180 градусов, купил на Али: да, можно было приделать ещё одни кишки от сидирома, но так было бы сложнее, не так красиво и получилось бы больше люфтов и сама голова тяжелее, а моторчики приводов и так хилые.
Детали я напечатал на SLA, использовал готовые направляющие ф3 мм, которые выдрал из привода, сервопривод и две пружинки. Направляющие зажимаются в красную деталь винтами, фиолетовые две палки и жёлтая печатались в один заход, что бы точно были одинаковыми, отверстия я развернул сверлом - фотополимер тоже усаживается слегка. Сервопривод тоже прикручен М3, отверстия рассверлены, нет у меня М2,5. Для этих двух винтов гайки вплавлены, для квадратных было мало места. Инструмент можно ставить под углом, не знаю пока зачем, но сделал. На серву поставил из комплекта самую короткую "руку", большой ход не нужен.
Получилось очень точно, двигается легко, падает под своим весом, легко настраивать силу нажима инструмента. Удачно получилось, в общем.
Теперь про электронику, аппаратная, так сказать, часть. Всё собрано вокруг Arduino Nano 3.0 с Али Экспресса. Купил CNC Shield V4 и два драйвера моторов DRV8825. Моторы у нас те, которые поставили изготовители приводов. И моторы эти - не торт! Всего 20 шагов, у нормальных моторов 200 шагов на оборот, т.е. точность у нас будет так себе, достаточная для такой поделки, но только потому, что всё жидкое и с люфтами. Поэтому нужно ставить как можно больше микрошаг, драйверы нам дают до 32, т.о. выходит 640 шагов на оборот максимум, и у меня получается 144 шага на миллиметр, что не много, на самом деле. Волноваться за маленький момент на валу мотора из за микрошага не стоит, драйверы позволяют вдуть любой, самый неразумный ток в мотор, а ограничивать будут не моторы, а пара винт-гайка привода. С другой стороны рабочее поле невелико и даже закрасить его полностью не займёт много времени, поэтому моторы не успеют перегреться.
ВАЖНО! Выставить шаги перемычками на на CNC Shield V4 не получится: перемычками можно подключить ноги управления к земле, а они и так подтянуты на землю на плате драйвера, а нужно подтянуть их к питанию. Поэтому я просто убрал все перемычки, то есть теперь все ноги М0-М1-М2 просто в воздухе висят, а прямо на драйвере поставил соплю на М1-М2 и подключил отдельным проводком к +5В таким образом поделив шаг на 32. Было бы правильно подключить к 3.3В, но с таким напряжением только один пин, а нужно два. В даташите указан высокий уровень от 2.2В до 5.25В, формально ничего не нарушаем, но всё же всего четверть вольта запаса чутка напрягает. С моторов убрал старые шлейфы и припаял провода, на концы проводов поставил разъёмы JST XH, можно использовать вместо противных Дюпонов.
И вот мы переходим к установке тока: увеличение тока при вращении подстроечника против часовой, начальный поставить на минимум и потихоньку увеличивать, я поставил такой, что бы не проскакивала пара гайка-винт. Ток в мотор можно посчитать по формуле Ichop=Vref/5Rsense
, напряжение можно измерить между землёй и движком подстроечника, а сопротивление шунта просто глазами на плате драйвера.
Ещё про драйверы, последнее - напряжение питания по даташиту от 8,2 до 45В, я питаю 12В блоком питания на 2 ампера. Нужно иметь ввиду, что максимальное напряжение питание ограничено не драйверами, а стабилизаторами и электролитическими конденсаторами, так что поступайте разумно.
Управление сервоприводом. Снова ВАЖНО: тока с ЮСБ не хватало для нормальной работы сервы, мало того контроллер сбрасывался, бывало ещё и писал мусор в в память или вообще напрочь сбивал прошивку. Я взял и припаял прямо на край платы 7805 и электролитический конденсатор, как раз есть 12В и земля в одном месте, просто торчит за габарит. Сделал так, что бы, если понадобится, надеть радиатор - не понадобился, поэтому можно полностью прятать на задней стороне платы. Так, если брать питание со стабилизатора всё работает стабильно. Родной разъём разобрал, натянул термоусадку, и подключил серву отдельными проводами: на землю, на выход стабилизатора, на вход концевика +Z - позже объясню.
Всё, аппаратная часть готова и, наверное, работает. Теперь вдохнём в аппарат душу. Нужно скачать Arduino IDE и установить. Подключить к компу и тут может ждать первая засада: китайские Arduino могут быть с разными мостами USB-Serial, у меня стоял CH340 и подошёл драйвер 2024 года. Но может быть так, что придётся попробовать несколько драйверов, схема простая - сносим один и ставим другой. Драйвера 2019-2022-2023-2024 приложены внизу. Вообще в интернетах пишут, что мосты могут быть совсем любыми, смотрим глазами на название и ищем драйвер в интеренете. Ну, подключились, теперь что прошивать.
Справочно: оригинальный - GRBL.
Вот здесь берём прошивку MIGRBL, она отличается тем, что по Z двигает не шаговик, а сервопривод, но у Mega328P можно вывести ШИМ только на несколько ног, в том числе, которая была для концевика Z+. Поэтому вход сервы и ставится на выход Limit Z+. Содержимое распаковываем по адресу ~\Documents\Arduino\libraries\
- это путь по умолчанию для сторонних библиотек. Идём туда и по адресу ищем файл ~\Documents\Arduino\MIGRBL\cpu_map\cpu_map_atmega328p.h
и там ищем // Define step pulse output pins
. В этой секции и следующей сделаем вот так:
// Define step pulse output pins. NOTE: All step bit pins must be on the same port. #define STEP_DDR DDRD #define STEP_PORT PORTD //#define X_STEP_BIT 2 // Uno Digital Pin 2 //#define Y_STEP_BIT 3 // Uno Digital Pin 3 //#define Z_STEP_BIT 4 // Uno Digital Pin 4 #define X_STEP_BIT 5 #define Y_STEP_BIT 6 #define Z_STEP_BIT 7 #define STEP_MASK ((1<<X_STEP_BIT)|(1<<Y_STEP_BIT)|(1<<Z_STEP_BIT)) // All step bits // Define step direction output pins. NOTE: All direction pins must be on the same port. #define DIRECTION_DDR DDRD #define DIRECTION_PORT PORTD //#define X_DIRECTION_BIT 5 // Uno Digital Pin 5 //#define Y_DIRECTION_BIT 6 // Uno Digital Pin 6 //#define Z_DIRECTION_BIT 7 // Uno Digital Pin 7 #define X_DIRECTION_BIT 2 #define Y_DIRECTION_BIT 3 #define Z_DIRECTION_BIT 4 #define DIRECTION_MASK ((1<<X_DIRECTION_BIT)|(1<<Y_DIRECTION_BIT)|(1<<Z_DIRECTION_BIT)) // All direction bits
Да, на CNC Shield V4 перепутаны ноги степ-дир и мы приводим это в порядок. В приложенной внизу прошивке изменения уже сделаны. Всё, теперь можно сохранять и прошивать Ардуину. Запускаем Arduino IDE и выбираем в меню Files --> Examples --> MIGRBL --> grblUpload
. Откроется новое окно, старое можно закрыть. Соединяем Ардуину с компом кабелем, в выпадающем меню Select Board выбираем правильный COM и в списке выбираем Arduino Nano. Нажимаем на верху на зелёную стрелочку вправо и всё скомпилируется и зальётся. Теперь сама машинка готова.
Управлять ей можно с помощью программки Universal-G-Code-Sender. Просто распаковать архив в удобное место и запустить. Для удобства можно выбрать Tools --> Create shortcut
и UGS положит на десктоп шоткат, не нужно будет лазать по файловой системе и искать.
Нужно настроить прошивку, для этого подключить машинку и выбрать в меню Machine --> Firmware Settings
, откроется меню с настройками, там всё понятно. Если что вот подробная справка.
Вот уже можно подрыгать осями, уже есть результат. Что бы поднять - опустить Z нужно отправить команду M3 S90, к примеру, где S90 - это угол, на который нужно повернуть серво.
Ну и последнее, как подготовить г-код. Я пробовал и в SolidWorks, но это всё-таки не очень удобно, мне показался самым удобным вариант с Inkscape. Скачиваем, устанавливаем. Если нужно несколько версий, то можно скачать архив и просто распаковать в любое место, работает без установки.
Так же нужно скачать плагин, содержимое архива распаковать в директорию пользовательских расширений, где она можно посмотреть, если выбрать Edit --> Preferences --> System --> User extensions.
Я, для удобства, сделал поддиректорию с произвольным именем и распаковал файлы туда. Всё, можно запускать Inkscape.
Делаем новый файл размером в рабочее поле рисовалки, у меня будет 35х35мм, рисуем примитивную фигуру, для начала, кружок или квадрат, ставим в центр листа -Shift+Ctrl+A, делаем тонкую обводку и убираем заливку, выбираем и оконтуриваем объект. Что бы получить г-код делаем File --> Save as... --> 3-axis gcode plotter (*.gcode)
. В открывшемся окне нужно сделать несколько настроек, мне быстрее показать картинки, чем писать:
Нажимаем ОК и открываем полученный файл в Universal Gcode Sender, пока он нерабочий, вот картинка ниже, слева, вместо номеров строк красные восклицательные знаки:
Просто выделяем весь верхний кусок до 11 одиннадцатой строки и удаляем, файл сохраняем нажав на кнопку с дискетой:
Вот такой файл уже будет работать и его можно запустить на исполнение. Квадрат/кружок можно измерить и понять что и куда нужно подкрутить в настройках, что бы всё было правильно. Думаю, что дальше уже можно разбираться самостоятельно. Вот так оно работает у меня:
Я эту штуку сделал как рисовалку этикеток и промежуточную пробу к механической руке хотя бы формата А4. Успешно применяю, к примеру, понарисовал целый патронташ наклеек за полчаса и за пару минут наклеил.
Что ещё может помочь: для рисования букв могут понадобится скелетные шрифты. Прикладываю и архив с ними, в нём же будут и другие шрифты, например ГОСТ А и Б. Откуда они у меня приблудились я уже и не помню и особенно разбираться что там хорошее и полезное не хочу. Вот, пожалуй и всё.