Интро
Как только я разобрался с кинематикой, я отправился шерстить интернет в поисках уже существующих решений и обнаружил свой проект уже готовым. Ну почти.
https://howtomechatronics.com/projects/laser-engraving-with-diy-arduino-scara-robot-complete-guide/ - лазерный гравер на SCARA-кинематике с контроллером Arduino Mega. Ровно то, что я хотел. Но этой статьи бы не было, если бы я просто скачал модельки, распечатал и собрал по инструкции.
Список всего необходимого
4x Гладкий стержень – 10 мм 400 мм
1x Ходовой трапециедальный винт – 8 мм 400 мм (можно, конечно, шпильку, но луче трапециедальный)
4x Линейные подшипники 10 мм
1x Упорный шарикоподшипник
2x Упорный шарикоподшипник 35x52x12 мм
5x Радиальный шарикоподшипник 8x22x7 мм
Болты и гайки M3, M4 и M5 различной длины
Шаговый двигатель – NEMA 17
Драйвер шагового двигателя DRV8825
Плата RAMPS 1.6
Arduino MEGA
Концевой выключатель
Источник питания постоянного тока
Лазерный модуль
3D-модели и печать
Для начала я немного доработал авторскую модель, убрав всё лишнее, а именно дополнительную поворотную ось лазера (ну а зачем крутить лазер вокруг своей оси?). Второе изменение - я расширил модуль управления. Третье - заменил лазерный модуль, в придачу и кранштейн для него. Четвёртое - перенес один из коцевых курков: ошибка автора.
Как только всё было отмоделенно, я отправился печатать. Печатал я на 3D-принтере Flying Bear Ghost 5 PETG-пластиком. Он не потечёт от нагрева шаговых двигателей в процессе работы и менее прихотливый к настройкам печати, в сравнении с ABS. Ушло примерно три дня и две катушки по килограмму. Из важного - ставьте компенсацию усадки и плотность не меньше процентов 30. Остальное на ваш вкус и принтер.
Модельки туть: https://drive.google.com/open?id=15yxUuZh-IG0YdzL7neZ2oXOIsCN8d9CC&usp=drive_fs
Изменения по электронике
Я взял драйвера DRV 8825 и лазерный модуль LASER_TREE на 5W оптической мощности, остальной оставил как у автора.
Сборка и настройка(ПЕРЕВОД)
Теперь перед нами лежит вот такая кучка деталей.
На мой взгляд, у автора есть исчерпывающая для русского человека картинка, заменяющая инструкцию по сборке:
Только клешню надо выкинуть забыть, поставить лазерный модуль. Не забудьте вставить хорошо смазанные подшипники в поворотный механизм.
Далее идём по принципу снизу вверх. Установим поворотную платформу и направляющие.
Далее собираем саму руку. Аккуратно вставляйте линейные подшипники, пластик может треснуть. монтировать проводку и ремни лучше сразу.
А дальше у автора идёт ошибка! При таком расположении концевого курка значительно усложняется расчет кинематики. Курок должен быть направлен против прямого положения руки.
Пропускаем монтаж ненужного нам привода и устанавливаем лазерный модуль.
Теперь ставим руку на направляющие и отправляемся собирать верхнюю часть.
Теперь подключаем всю электронику.
У автора получилась такая картина:
Далее я приступил к настройке драйверов. Это было не сложно, главное подобрать хорошую отвертку. Vref у меня оказался равен 0.7В. Для тех, кто не знает, для корректной работы драйвера шагового двигателя необходимо настроить ограничивающее напряжение Vref. Делается это очень просто: измеряется напряжение между GND и потенциометром на драйвере, регулируется этим же потенциометром.
Как я уже сказал, я буду использовать прошивку Marlin, которая является одной из наиболее широко используемых прошивок с открытым исходным кодом для 3D-принтеров, которая также имеет опции для лазерной гравировки и настройки робота SCARA. Мы можем загрузить прошивку Marlin либо с ее официального сайта , либо с Github.com .
Для установки прошивки Marlin на плату Arduino MEGA мы будем использовать PlatformIO IDE вместо Arduino IDE. Поскольку прошивка Marlin большая и сложная, Arduino IDE иногда может выдавать ошибки и не сможет ее скомпилировать.
PlarformIO построен на основе редактора Visual Studio Code и может быть установлен как расширение к нему. Это означает, что сначала нам нужно установить Visual Studio Code, затем найти PlatformIO в менеджере расширений и установить его оттуда.
После завершения установки мы можем нажать кнопку «Открыть проект», перейти в папку Marlin, которую мы скачали и распаковали, и нажать «Открыть Marlin».
Это загрузит все файлы Marlin в редактор, и мы сможем открывать и редактировать их. Два основных файла, в которых мы делаем все настройки в соответствии с настройками нашей машины, — это файлы Configuration.h и Configuration_adv.h.
На самом деле, прежде чем открыть папку Marlin, нам следует сначала перейти в репозиторий Configuration на Github.com, откуда мы можем скачать некоторые предварительно протестированные файлы конфигурации, которые нам подходят. В папке «Examples» нам следует перейти в папку «SCARA» и скопировать эти два файла конфигурации и вставить их в нашу папку Marlin.
Настройка прошивки Marlin(ПЕРЕВОД)
Итак, как только мы снова откроем папку Marlin с файлами конфигурации «SCARA», мы можем открыть файл Configuration.h и отредактировать некоторые параметры в соответствии с нашей машиной. Первое, что здесь нужно сделать, это выбрать тип робота SCARA, который у нас есть.
/**
* MORGAN_SCARA was developed by QHARLEY in South Africa in 2012-2013.
* Implemented and slightly reworked by JCERNY in June, 2014.
*/
//#define MORGAN_SCARA
/**
* Mostly Printed SCARA is an open source design by Tyler Williams. See:
* https://www.thingiverse.com/thing:2487048
* https://www.thingiverse.com/thing:1241491
*/
#define MP_SCARA
#if EITHER(MORGAN_SCARA, MP_SCARA)
// If movement is choppy try lowering this value
#define SCARA_SEGMENTS_PER_SECOND 100
// Length of inner and outer support arms. Measure arm lengths precisely.
#define SCARA_LINKAGE_1 228.15 // Arm 1 lenght - 228(mm)
#define SCARA_LINKAGE_2 136.2 // Arm 2 lenght - 136.5(mm)
// SCARA tower offset (position of Tower relative to bed zero position)
// This needs to be reasonably accurate as it defines the printbed position in the SCARA space.
#define SCARA_OFFSET_X 300 // (mm)
#define SCARA_OFFSET_Y 150 // (mm)Язык кода: Arduino ( arduino )
«MORGAN_SCARA» — для параллельного робота SCARA, а «MP_SCARA» — для последовательного робота SCARA, как у нас. Это основано на открытом исходном коде Тайлера Уильямса, который реализует обратную кинематику на G-кодах, сгенерированных для обычных декартовых систем.
При этом здесь нам нужно ввести длину рук робота, и в этом случае это 228 мм для первой руки и 136,5 мм для второй руки. Следующий параметр, который нам нужно задать, это нулевое положение рабочей кровати. Это значение вводится с помощью значений SCARA_OFFSET_X и Y, и это расстояние от башни или первого сочленения относительно нулевого положения кровати.
Есть еще один набор параметров, который нам нужно настроить в соответствии с нашей машиной, и это MANUAL_X_HOME_POS для X и Y. Эти значения представляют собой расстояния X и Y от конечного эффектора руки робота или лазера, когда он находится в исходном положении, относительно нулевого положения кровати, которое мы ранее установили. Чтобы получить эти значения, я сделал простой эскиз в SOLIDWORKS с двумя линиями, представляющими две руки робота SCARA.
Отсюда можно задать желаемое нулевое положение кровати и получить значения для переменных MANUAL_X_HOME_POS.
Далее нам нужно определить коннекторы концевых выключателей. В нашем случае у нас есть один концевой выключатель для каждой оси, который находится в минимальном положении.
#define USE_XMIN_PLUG
#define USE_YMIN_PLUG
#define USE_ZMIN_PLUGЯзык кода: Arduino ( arduino )
В дополнение к этому нам необходимо определить X_HOME_DIR как –1, что указывает направление концевых выключателей при возврате в исходное положение.
// Direction of endstops when homing; 1=MAX, -1=MIN
// :[-1,1]
#define X_HOME_DIR -1
#define Y_HOME_DIR -1
#define Z_HOME_DIR -1Язык кода: Arduino ( arduino )
Здесь мы также должны проверить, установлены ли все переменные __MIN_ENDSTOP_INVERTING в значение «FALSE».
Затем нам нужно настроить значения DEFAULT_AXIS_STEPS_PER_UNIT в соответствии с нашей машиной.
#define DEFAULT_AXIS_STEPS_PER_UNIT { 177.7777777, 142.2222222, 400, 93 }Язык кода: Arduino ( arduino )
Эти значения указывают, сколько шагов программа должна отправить на шаговые драйверы, чтобы двигатель переместился на одну единицу, а в данном случае это поворот сочленения на один градус. Вот как я рассчитал эти значения для своего робота SCARA.
Шаговые двигатели NEMA 17 делают 200 шагов для полного оборота, но поскольку мы используем разрешение 16 -го шага, это означает, что нам нужно отправить 3200 шагов драйверу, чтобы двигатель совершил полный оборот на 360 градусов. Кроме того, для первого сочленения у нас есть снижение скорости 20:1, что означает, что нам нужно 64000 шагов для полного оборота. Если мы разделим это значение на 360, то получим число 177,777, которое на самом деле является числом шагов, которые программа должна отправить драйверу, чтобы повернуть сочленение на одну единицу или один градус.
Вторая рука имеет снижение скорости 16:1, поэтому значение будет 142,222. Для оси Z у нас есть ходовой винт с шагом 8 мм, что означает, что один полный оборот двигателя приведет к линейному перемещению 8 мм. Одна единица здесь равна одному мм, поэтому нам нужно разделить 3200 шагов на 8, и таким образом мы получаем значение 400, которое является количеством шагов, необходимых для перемещения оси Z на одну единицу или один мм. Четвертое значение здесь относится к шаговому электродвигателю экструдера, но поскольку у нас здесь нет экструдера, нам не нужно его менять.
Направление шагового двигателя зависит от того, как мы подключили провода. Если мы ошиблись, мы можем либо поменять провода местами, либо изменить это здесь, в программном обеспечении, установив переменные INVERT_X_DIR в значение TRUE.
// Invert the stepper direction. Change (or reverse the motor connector) if an axis goes the wrong way.
#define INVERT_X_DIR false
#define INVERT_Y_DIR false
#define INVERT_Z_DIR falseЯзык кода: Arduino ( arduino )
Нам нужно сделать еще несколько изменений, чтобы заставить работать эту прошивку Marlin. Поскольку Marlin — это в первую очередь прошивка для классических декартовых принтеров, режим SCARA, который она поддерживает, имеет несколько небольших ошибок, которые еще не были решены на момент создания этого проекта. Вот изменения, которые я сделал, чтобы заставить ее работать.
В scara.cpp, строка 75 я заменил MORGAN_SCARA на MP_SCARA. В motion.cpp пришлось закомментировать строки 1716 и 1717, в cofiguration.h закомментировать VALIDATE_HOMING_ENDSTOPS, а в configuration_adv.h раскомментировать QUICK_HOME.
На самом деле, даже с этими изменениями самонаведение все еще не работало на 100% правильно, но я объясню обходной путь, который я использовал, чтобы заставить его работать.
Тем не менее, теперь мы можем нажать кнопку Upload, расположенную в левом нижнем углу редактора, и прошивка Marlin будет установлена на плату Arduino.
Пробные запуски
Подключив чудо-агрегат к Repetier-Host я отправил его на пробный запуск. В отличии от автора, у меня всё заработало с первого раза, но качество меня не устроило - драйвера дёрганные, на плате расширения вечно что-то греется(хотя не должно!) , логика передвижения прошивки очень странная и не оптимальная. Вот короткий ролик:
https://youtube.com/shorts/CicuKRPfQDo?si=gdIla80R8wzqYMv7
Вывод
Помучавшись с настройкой чужого я понял, что проще сделать своё. Поэтому я планирую отказаться от готовых прошивок. Весь проект далее будет идти на Full-Python, а значит в качестве контроллера в пару к RPI 5 для обработки машинного зрения я возьму RPI Pico без графического ядра. Также закажу новые драйвера TMC2208 и самостоятельно разведу для них плату. Об этом, кстати, будет 4 часть, а в следующей части немного поговорим о машинном зрении.
voldemar_d
В чем смысл писать на Python, а не C++?
Iozh_v_tumane Автор
В данном случае это лично моё желание. Я увереннее ощущаю себя в Python, нежели в C++. Понимаю, что возможно я потеря в производительности машинного зрения, но как будто бы тут не такая сложная обработка изображения, и не так важны доли секунд в скорости работы. Ещё на мой взгляд Python понятнее, а значит и повторяемость проекта выше.