В этой статье мы рассмотрим создание робота SCARA на основе платы Arduino. Я покажу вам весь процесс его создания, начиная с проектирования робота и заканчивая разработкой собственного графического пользовательского интерфейса для управления им. Это действительно очень амбициозный проект для робототехники «любительского» уровня и я надеюсь он получится у всех, кто захочет его повторить.
Обзор проекта
Робот имеет 4 степени свободы и приводится в движение 4 шаговыми двигателями NEMA 17. Кроме того, у него есть небольшой серводвигатель для управления конечным эффектором или захватом робота в данном случае. Мозгом этого робота SCARA является плата Arduino UNO, которая сопряжена с шилдом ЧПУ и четырьмя драйверами A4988 для управления шаговыми двигателями.
Используя среду разработки Processing, я создал графический пользовательский интерфейс, который включает в себя управление как прямой, так и обратной кинематикой. С помощью прямой кинематики мы можем вручную перемещать каждое сочленение робота, чтобы получить желаемое положение. Используя ползунки на левой стороне, мы можем задать угол каждого сочленения. Конечное положение конечного эффектора, значения X, Y и Z рассчитываются и печатаются на правой стороне экрана.
С другой стороны, используя инверсную кинематику, мы можем задать желаемое положение конечного эффектора, и программа автоматически рассчитает углы для каждого сочленения, чтобы робот достиг этого желаемого положения.
На самом деле я сделал программу таким образом, что мы можем использовать оба метода одновременно, на одном экране. Углы суставов, а также значения X, Y и Z конечного эффектора связаны и всегда присутствуют на экране.
Конечно, робот может работать и автоматически. Используя кнопку «Сохранить» (“Save”) в программе, мы можем сохранить каждое движение или положение робота. Затем, когда мы нажимаем кнопку «Запустить» (“Run”), робот будет выполнять сохраненные движения в цикле, от первого до последнего, снова и снова. Мы также можем регулировать скорость движения и ускорение из пользовательского интерфейса.
3D-модель робота SCARA
Для начала давайте взглянем на 3D-модель робота.
Я спроектировал этого робота SCARA с помощью программного обеспечения (ПО) 3DEXPERIENCE SOLIDWORKS.
3DEXPERIENCE SOLIDWORKS — это по сути SOLIDWORKS с облачными возможностями, которые мы получаем через платформу 3DEXPERIENCE. Все работает через облако, поэтому вы или любой из вашей команды может иметь доступ к данным или моделям в любое время и из любой точки мира. Платформа 3DEXPERIECE также включает множество полезных приложений для повышения производительности и управления.
Например, Project Planer — отличный способ организовать ваши задачи, установить сроки и отслеживать прогресс. С приложением 3D Markup вы можете просматривать, исследовать и делать заметки о моделях с любого устройства, например, с ноутбука, планшета или даже смартфона.
Также есть отдельный облачный 3D-моделер SOLIDWORKS xDesign, который работает внутри вашего браузера. Его можно использовать вместе с Solidworks или отдельно, и он отлично подходит для моделирования в любом месте, в любое время и на любом устройстве.
Узнайте больше о 3DEXPERIENCE SOLIDWORKS можно по ссылке — www.solidworks.com/HTMLearnMore
Хорошо, давайте вернемся к модели и объясним, как я придумал этот дизайн. Моей целью для робота было напечатать большинство деталей на 3D-принтере. Итак, все, что вы видите здесь, можно напечатать на 3D-принтере, даже на 3D-принтере с небольшим печатным столом. Шкивы GT2 также можно напечатать на 3D-принтере. Я использовал параметрический дизайн для их изготовления, поэтому при необходимости мы можем легко изменить их размеры. Нам просто нужно изменить количество зубцов, и все размеры автоматически обновятся, чтобы сделать шкив нужного размера.
Для первого сочленения у нас есть передаточное отношение 20:1, достигнутое в два этапа с помощью этих специально разработанных шкивов. Два ремня GT2, которые я здесь использую, имеют замкнутый контур длиной 200 мм и 300 мм. Сочленения робота состоят из двух упорных подшипников и одного радиального подшипника.
Для второго соединения у нас есть передаточное отношение 16:1, достигнутое таким же образом, а третье соединение имеет передаточное отношение 4:1 с одноступенчатым уменьшением. Соединения полые, поэтому мы можем использовать их для пропуска проводов от двигателей и микропереключателей. Для каждого из ремней есть пазы, на которые мы можем прикрепить натяжные шкивы для их натяжения.
Захват робота приводится в действие серводвигателем MG996R, и мы можем легко менять концы захвата, чтобы получить разные размеры захвата. Ось Z робота приводится в действие 8-миллиметровым ходовым винтом, в то время как весь узел руки скользит по четырем 10-миллиметровым гладким стержням и линейным шарикоподшипникам. Высота робота зависит только от длины гладких стержней, которые в данном случае составляют 40 см. Ходовой винт должен быть на 2 см короче, чтобы соответствовать этой конфигурации, или, если нет, двигатель Z можно поднять на 2 см с помощью распорных гаек.
Файлы для загрузки 3D-моделей и STL
Эту 3D-модель, а также файлы STL для 3D-печати можно получить на сайте Cults3D.
3D-печать деталей робота
Хорошо, теперь мы можем перейти к 3D-печати деталей. Я использовал свой 3D-принтер Creality CR-10 для печати всех деталей, который является действительно отличным 3D-принтером по доступной цене. Как я уже упоминал, детали также предназначены для печати на 3D-принтере меньшего размера, например, Ender3.
Для большинства деталей я использовал материал PLA+, синий, а также обычный PLA для шкивов и захвата. Мне потребовалось около 120 часов, чтобы напечатать все детали со скоростью печати 60 мм/с. Основание было самой большой деталью, на печать которой ушло около 32 часов. Однако, если мы увеличим скорость печати, мы определенно сможем печатать детали быстрее.
Вот все детали, напечатанные на 3D-принтере.
Просто небольшое замечание, что я напечатал их все с включенным горизонтальным расширением –0,1 мм в программном обеспечении для нарезки. Это позволяет деталям иметь более точные размеры и лучше подходить к другим механическим деталям, таким как подшипники, стержни и болты.
Сборка робота
Вот список компонентов, необходимых для сборки этого робота SCARA на базе Arduino. Список электронных компонентов можно найти ниже в статье.
- 4x Гладкий стержень – 10 мм 400 мм
- 1x Ходовой винт – 8 мм 400 мм
- 4x Линейные подшипники 10 мм
- 1x Упорный шарикоподшипник 40x60x13 мм
- 2x Упорный шарикоподшипник 35x52x12 мм
- 5x Радиальный шарикоподшипник 8x22x7 мм
- Болты и гайки M3, M4 и M5 различной длины
Вот размеры болтов, необходимые для этого проекта:
Сборку начинаем с основания. Сюда сначала вставляем радиальный шарикоподшипник с внутренним диаметром 35 мм и наружным диаметром 47 мм.
Затем идет первый упорный подшипник, который имеет внутренний диаметр 40 мм и внешний диаметр 60 мм. Этот подшипник будет располагаться между шкивом и основанием.
С другой стороны основания мы используем еще один упорный подшипник того же размера вместе с соединительной муфтой.
Затем мы можем соединить шкив и верхнюю часть с помощью четырех болтов M4 длиной 55 мм. Здесь нам нужно использовать самоконтрящиеся гайки и затянуть их соответствующим образом, чтобы соединение было прочным и могло свободно вращаться.
Далее нам нужно установить средний шкив. Этот шкив соединен с соединительным шкивом с ремнем GT2 300 мм. Для установки этого шкива мы используем два шарикоподшипника 608, один сверху, а другой снизу основания. Затем с помощью болта M8 45 мм, шайбы и самостопорящейся гайки мы можем закрепить шкив на месте.
Далее нам нужно установить шаговый двигатель для этого соединения. Шаговый двигатель будет работать в паре со средним шкивом с ремнем 200 мм. Для его крепления к основанию нам понадобятся четыре болта М3.
Прежде чем затягивать болты, нам нужно растянуть ремень как можно сильнее. Просто небольшое замечание, что я фактически заменил болт M8 для среднего шкива головкой вниз, чтобы он мог поместиться в основании.
На этом этапе мы должны проверить, достаточно ли натянуты ремни. Если нет, мы можем использовать несколько натяжных роликов, чтобы натянуть их лучше. Здесь я использую 35-миллиметровый болт M5 и несколько гаек, чтобы сделать натяжной ролик.
Его можно прикрепить к прорезям с обеих сторон ремня, и таким образом мы можем затянуть ремень так сильно, как нам нужно. Я в итоге затянул ремень с обеих сторон. На этом первое соединение завершено.
Я перешел к установке микропереключателя для этого соединения. Перед тем, как закрепить его на месте, я уже припаял к нему провода, так как здесь немного тесновато, чтобы сделать это потом. Нам понадобятся болты М3 20 мм и гайка, чтобы закрепить микропереключатель на месте.
Соединительная муфта проходит так близко к выключателю, что в итоге я использовал только один болт для крепления выключателя. В другое отверстие я просто вставил более короткий болт и приклеил его с нижней стороны. Таким образом, выключатель достаточно надежен и может работать должным образом.
Хорошо, теперь мы можем приступить к сборке оси Z. Сначала поверх соединительной муфты нам нужно закрепить нижнюю часть пластины оси Z.
Сверху мы можем закрепить четыре зажима для гладких стержней. Затем мы можем вставить гладкие стержни на место. Они должны плотно прилегать и доходить до соединительной части. Затем мы можем затянуть стержни с зажимами с помощью нескольких болтов М4 и гаек.
На этом этапе нам нужно вставить подшипник для ходового винта. Чтобы закончить этот раздел, мы можем просто вставить простую крышку, которая скроет все и придаст роботу более чистый вид.
Далее мы можем перейти к сборке первой руки робота. Рука будет сделана из двух частей, скрепленных болтами. В первой части нам нужно установить линейные подшипники, которые будут скользить по гладким стержням. Вставить их на место может быть немного сложно, потому что они сидят довольно плотно.
На самом деле, это зависит от того, насколько точно ваш принтер может печатать детали. Поэтому я предлагаю использовать функцию горизонтального расширения при печати деталей и настраивать ее в соответствии с вашим принтером. В моем случае я не смог установить два подшипника так, чтобы они полностью опустились, но это не так уж и важно.
Хорошо, теперь мы можем соединить две части руки вместе. Для этого мы будем использовать четыре болта M5 25 мм.
Далее мы можем установить второй шаговый двигатель. Здесь я буду использовать шкив GT2 с 20 зубьями, напечатанный на 3D-принтере. Я сделал этот шкив, используя параметрический дизайн, о котором я упоминал ранее, и он работает довольно хорошо. Здесь нам также нужно закрепить гайку ходового винта на месте.
Далее мы можем установить ремни и шкивы для второго соединения. Здесь нам понадобится один ремень длиной 400 мм и один длиной 300 мм. Процедура их установки практически такая же, как и для первого соединения.
Здесь для второго и третьего соединений мы фактически используем подшипники меньшего размера по сравнению с первым. Радиальный шарикоподшипник имеет внутренний диаметр 30 мм и внешний диаметр 42 мм, а упорный подшипник имеет внутренний диаметр 35 мм и внешний диаметр 52 мм.
Перед установкой второй соединительной муфты нам необходимо вставить шесть 20-миллиметровых болтов М4 в шестигранные пазы.
Они будут служить для крепления второго рычага к шарниру. При необходимости для натяжения ремней мы можем использовать тот же метод, который был объяснен ранее с натяжными роликами. Наконец, я закрепил второй микропереключатель на месте, и сборка рычага номер один была завершена.
Я продолжил крепление второго рычага к соединительной муфте. Здесь мы используем те болты в соединительной муфте, которые мы установили ранее, чтобы закрепить верхнюю часть второго рычага.
В этот момент я хотел проверить, насколько люфтят соединения. Конечно, я ожидал некоторого люфта из-за ремней, но на самом деле люфт между двумя частями соединений был гораздо больше. Я заметил, что проблема в том, что отверстия, куда вставляются болты, немного больше самих болтов. Чтобы решить эту проблему, нам нужно более плотное прилегание болтов к отверстиям.
Итак, в моем случае я расширил отверстия сверлом 4,5 мм и использовал болты М5 вместо болтов М4 для скрепления двух частей соединения вместе. Однако я обновил 3D-модель так, чтобы отверстия были 3,5 мм, и вы могли использовать болты М4 для соединения этих двух частей вместе. Я также вернулся к первому соединению и сделал то же самое. Теперь люфт в соединениях почти исчез, за исключением небольшого люфта, который мы получаем от ремней.
Хорошо, теперь мы можем продолжить сборку второй руки. Здесь сначала нам нужно установить шаговый двигатель для третьего сочленения.
В этом случае я использую шаговый двигатель меньшего размера, поэтому рука немного легче. Тем не менее, это шаговый двигатель NEMA 17, но с более короткой длиной 24 см.
Опять же, у нас та же процедура установки ремней и шкива для третьего сочленения, за исключением того, что здесь мы используем только одноступенчатую редукцию с ремнем 400 мм. Далее, перед тем как прикрепить эту нижнюю часть рычага к верхней части, нам нужно подключить двигатель и микропереключатель и пропустить их провода через второе сочленение.
На этом этапе нам также нужно вставить провода для конечного эффектора. В моем случае я вставил 4-проводной кабель от шагового двигателя, который я буду использовать для управления серводвигателем моего захвата, которому требуется 3 провода.
Далее нам необходимо вставить в пазы верхнего рычага гайки М4, которые будут служить для крепления к нему нижней части.
Перед тем как соединить их, нам следует пропустить провода под этими крючками, чтобы они не соприкасались с движущимися частями.
Провода, выходящие из второго соединения, могут зацепиться за гайки на шкиве, поэтому я сделал простой держатель для проводов, чтобы удерживать провода подальше от гаек.
Мы должны расположить провода так, чтобы они проходили по одной стороне рычага, чтобы избежать контакта с движущимися частями. Наконец, мы можем вставить крышку первого рычага.
Крышка крепится к руке с помощью защелкивающегося соединения. На этом сборка руки робота завершена.
Итак, теперь мы можем вставить всю эту сборку в стержни оси Z.
Затем нам нужно подготовить верхнюю пластину оси Z, которая будет удерживать верхние концы стержней. Здесь сначала мы можем установить микропереключатель для оси Z, а затем прикрепить зажимы к пластине.
Прежде чем установить верхнюю пластину на место, я сначала вставил простую крышку, как показано ниже, чтобы скрыть зажимы, болты и микропереключатель. Затем мы можем вставить и затянуть верхнюю пластину на стержнях с помощью зажимов.
Далее нам нужно вставить ходовой винт на место.
Тот, что у меня был, был немного длиннее, поэтому я обрезал его до 38 см с помощью ножовки по металлу. Далее мы можем прикрепить четвертый шаговый двигатель на место. Здесь нам нужно использовать соединительную муфту вала 5 мм на 8 мм для соединения двигателя с ходовым винтом.
Наконец, мы можем пропустить провода через крышку и закрепить ее на верхней пластине с помощью двух болтов.
Хорошо, теперь мы можем заняться организацией кабелей. Я использовал кабельные муфты для соединения проводов и очистки беспорядка. Я также использовал несколько стяжек для этой цели.
Прежде чем укладывать провода в кабельные муфты, рекомендуется пометить каждый из них, чтобы ничего не подключить неправильно.
Теперь осталось сделать конечный эффектор робота. На самом деле мы можем сделать и прикрепить к роботу любой конечный эффектор. Я решил сделать простой захват, который приводится в действие серводвигателем MG996R. Захват основан на двух 6-миллиметровых стержнях, по которым скользят обе стороны.
Две скользящие стороны соединены с сервоприводом с помощью рогового сервопривода, нескольких 3D-печатных звеньев и болтов и гаек M3. Я использовал болты и гайки M3 для всей сборки захвата. Пространство для крепления болтов и гаек довольно узкое, поэтому вам потребуются некоторые нервы для сборки некоторых из этих деталей.
Но что хорошо в этой конструкции, так это то, что мы можем легко менять концы захвата. Они могут быть шире или уже, или иметь определенную форму. Мы можем прикрепить захват к руке робота с помощью нескольких болтов и гаек M4.
Наконец, мы можем подключить серводвигатель к проводам, которые мы установили ранее.
И все, наш робот-манипулятор SCARA полностью собран. Теперь осталось подключить электронные компоненты этого проекта.
Схема робота SCARA
Итак, мы будем использовать плату Arduino UNO в сочетании с шилдом ЧПУ и четырьмя шаговыми приводами A4988.
Хотя это робот и кажется более сложным, это вся электроника, которая нам нужна для этого проекта. Стоит отметить, что вместо Arduino UNO мы могли бы использовать Arduino MEGA в сочетании с платой контроллера 3D-принтера RAMPS.
Тем не менее, я напечатал на 3D-принтере корпус для Arduino UNO, который можно легко прикрепить к основанию робота. Я буду использовать разрешение в четверть шага для управления шаговыми двигателями, поэтому я установил несколько перемычек на соответствующие контакты. Теперь мы можем подключить шаговые двигатели и микропереключатели к шилду ЧПУ.
Вот принципиальная схема этого робота SCARA и то, как все должно быть подключено.
Для питания робота нам понадобится источник питания 12 В, способный обеспечить минимум 4 А, но я бы рекомендовал источник питания 12 В 6 А. Конечно, это зависит от того, как установлено ограничение тока драйвера шагового двигателя, и я бы рекомендовал установить его на минимально возможном уровне.
В конце я зажал все провода в корпусе, стараясь при этом оставить радиаторы приводов свободными, и добавил к нему крышку.
Необходимые компоненты
- Плата Arduino Uno (купить на AliExpress).
- Шаговые двигатели NEMA 17 (купить на AliExpress).
- A4988 Stepper Driver Module (модуль драйвера шагового двигателя) (купить на AliExpress).
- Arduino CNC Shield (купить на AliExpress).
- Серводвигатель MG996R (купить на AliExpress).
- Концевой выключатель.
- Источник питания постоянного тока.
Реклама: ООО «АЛИБАБА.КОМ (РУ)» ИНН: 7703380158
Завершение сборки
Робот SCARA теперь готов, и теперь нам нужно закрепить основание на чем-нибудь. Для этого я буду использовать 20-миллиметровый кусок дерева. В нижней части основания робота у нас есть 12 отверстий для его крепления. Поэтому я распечатал чертеж основания робота и использовал его, чтобы сделать отверстия в дереве.
В нижней части я их утапливал, так как буду использовать болты с плоской головкой, чтобы они были заподлицо с деревянной поверхностью. Я вставил гайки M4 в пазы основания, а затем закрепил деревянное основание на основании робота.
В идеале, чтобы закрепить робота на месте, мы могли бы прикрепить его к столу болтами, но я просто воспользуюсь для этой цели зажимами.
Вот и все, наш робот SCARA полностью готов.
Как работает робот SCARA
Существует два метода управления роботами с точки зрения позиционирования и ориентации: с использованием прямой и обратной кинематики.
Прямая кинематика используется, когда нам необходимо определить положение и ориентацию рабочего органа по заданным углам сочленения.
С другой стороны, обратная кинематика используется, когда нам нужно найти углы сочленений для заданного положения конечного эффектора. Этот метод более широко применяется в робототехнике, поскольку большую часть времени мы хотим, чтобы робот позиционировал свой инструмент в определенном месте или в определенных координатах X, Y и Z.
С помощью обратной кинематики мы можем рассчитать углы суставов/сочленений по заданным координатам.
Уравнения, которые я буду использовать как для прямой, так и для обратной кинематики, взяты из правил и формул тригонометрии.
Объяснение кода программ для робота SCARA
В конце статьи вы найдете коды Arduino и Processing.
Вот как уравнения выглядят в коде, написанном в среде разработки Processing.
1 2 3 4 5 6 7 |
// FORWARD KINEMATICS void forwardKinematics() { float theta1F = theta1 * PI / 180; // degrees to radians float theta2F = theta2 * PI / 180; xP = round(L1 * cos(theta1F) + L2 * cos(theta1F + theta2F)); yP = round(L1 * sin(theta1F) + L2 * sin(theta1F + theta2F)); } |
Итак, с помощью прямой кинематики мы вычисляем значения X и Y рабочего органа в соответствии с заданными углами сочленений двух рук робота, theta1 и theta2, а также их длинами L1 и L2.
С другой стороны, при использовании обратной кинематики мы вычисляем углы суставов, theta2 и theta1, в соответствии с заданным положением или координатами X и Y.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
// INVERSE KINEMATICS void inverseKinematics(float x, float y) { theta2 = acos((sq(x) + sq(y) - sq(L1) - sq(L2)) / (2 * L1 * L2)); if (x < 0 & y < 0) { theta2 = (-1) * theta2; } theta1 = atan(x / y) - atan((L2 * sin(theta2)) / (L1 + L2 * cos(theta2))); theta2 = (-1) * theta2 * 180 / PI; theta1 = theta1 * 180 / PI; // Angles adjustment depending in which quadrant the final tool coordinate x,y is if (x >= 0 & y >= 0) { // 1st quadrant theta1 = 90 - theta1; } if (x < 0 & y > 0) { // 2nd quadrant theta1 = 90 - theta1; } if (x < 0 & y < 0) { // 3d quadrant theta1 = 270 - theta1; phi = 270 - theta1 - theta2; phi = (-1) * phi; } if (x > 0 & y < 0) { // 4th quadrant theta1 = -90 - theta1; } if (x < 0 & y == 0) { theta1 = 270 + theta1; } // Calculate "phi" angle so gripper is parallel to the X axis phi = 90 + theta1 + theta2; phi = (-1) * phi; // Angle adjustment depending in which quadrant the final tool coordinate x,y is if (x < 0 & y < 0) { // 3d quadrant phi = 270 - theta1 - theta2; } if (abs(phi) > 165) { phi = 180 + phi; } theta1=round(theta1); theta2=round(theta2); phi=round(phi); cp5.getController("j1Slider").setValue(theta1); cp5.getController("j2Slider").setValue(theta2); cp5.getController("j3Slider").setValue(phi); cp5.getController("zSlider").setValue(zP); } |
В зависимости от того, в каком квадранте установлена позиция, мы вносим некоторые корректировки в углы сочленений с помощью этих операторов «if». Для этой конфигурации робота мы фактически вычисляем обратную кинематику всего с двумя звеньями. Третий угол, который я называю «фи», используется для установки ориентации захвата.
Графический интерфейс пользователя создан с использованием библиотеки controlP5 для Processing IDE. С помощью этой библиотеки мы можем легко создавать кнопки, слайдеры, текстовые поля и т. д.
Например, мы используем ползунки на левой стороне для управления углами сочленений, а с помощью текстовых полей мы можем ввести позицию, в которую мы хотим, чтобы пошел наш робот. С каждым действием, которое мы выполняем здесь с программой, мы отправляем данные на плату Arduino через последовательный порт.
1 2 3 4 5 6 7 8 9 |
if (gripperValuePrevious != gripperValue) { if (activeIK == false) { // Check whether the inverseKinematics mode is active, Executre Forward kinematics only if inverseKinematics mode is off or false gripperAdd = round(cp5.getController("gripperValue").getValue()); gripperValue=gripperAdd+50; updateData(); println(data); myPort.write(data); } } |
Эти данные включают в себя углы сочленений, значение захвата, значения скорости и ускорения, а также индикаторы, позволяющие определить, нажали ли мы кнопки сохранения или запуска.
1 2 3 4 5 6 7 8 9 10 11 |
public void updateData() { data = str(saveStatus) +","+str(runStatus) +","+str(round(cp5.getController("j1Slider").getValue())) +","+str(round(cp5.getController("j2Slider").getValue())) +","+str(round(cp5.getController("j3Slider").getValue())) +","+str(round(cp5.getController("zSlider").getValue())) +","+str(gripperValue) +","+str(speedSlider) +","+str(accelerationSlider); } |
Все эти данные приходят в виде одной длинной строки в Arduino. Поэтому здесь сначала нам нужно извлечь данные из этой строки и поместить их в отдельные переменные.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
if (Serial.available()) { content = Serial.readString(); // Read the incomding data from Processing // Extract the data from the string and put into separate integer variables (data[] array) for (int i = 0; i < 10; i++) { int index = content.indexOf(","); // locate the first "," data[i] = atol(content.substring(0, index).c_str()); //Extract the number from start to the "," content = content.substring(index + 1); //Remove the number from the string } /* data[0] - SAVE button status data[1] - RUN button status data[2] - Joint 1 angle data[3] - Joint 2 angle data[4] - Joint 3 angle data[5] - Z position data[6] - Gripper value data[7] - Speed value data[8] - Acceleration value */ |
Теперь с этими переменными мы можем выполнять действия с роботом. Например, если мы нажмем кнопку СОХРАНИТЬ, мы сохраним текущие значения углов сочленений в отдельном массиве.
1 2 3 4 5 6 7 8 9 |
// If SAVE button is pressed, store the data into the appropriate arrays if (data[0] == 1) { theta1Array[positionsCounter] = data[2] * theta1AngleToSteps; //store the values in steps = angles * angleToSteps variable theta2Array[positionsCounter] = data[3] * theta2AngleToSteps; phiArray[positionsCounter] = data[4] * phiAngleToSteps; zArray[positionsCounter] = data[5] * zDistanceToSteps; gripperArray[positionsCounter] = data[6]; positionsCounter++; } |
Если мы нажмем кнопку RUN, мы выполним сохраненные шаги и так далее.
Для управления шаговыми двигателями я использовал библиотеку AccelStepper. Хотя это отличная библиотека для управления несколькими шаговыми двигателями одновременно, она имеет некоторые ограничения, когда дело доходит до управления таким роботом. При управлении несколькими шаговыми двигателями библиотека не может реализовать ускорение и замедление, которые важны для более плавной работы робота.
1 2 3 4 5 6 7 8 9 10 11 |
stepper1.moveTo(stepper1Position); stepper2.moveTo(stepper2Position); stepper3.moveTo(stepper3Position); stepper4.moveTo(stepper4Position); while (stepper1.currentPosition() != stepper1Position || stepper2.currentPosition() != stepper2Position || stepper3.currentPosition() != stepper3Position || stepper4.currentPosition() != stepper4Position) { stepper1.run(); stepper2.run(); stepper3.run(); stepper4.run(); } |
Мне все же удалось реализовать ускорение и замедление с помощью библиотеки, но они не такие плавные, как хотелось бы.
Полный код программ
Вот полные коды Arduino и обработки для этого проекта робота Arduino SCARA: Робот SCARA — Arduino и коды обработки
Заключение
Итак, наконец, как только мы загрузим код в Arduino, мы сможем запустить программу обработки, подключить питание, и робот Scara начнет двигаться в свою исходную позицию.
С этого момента мы можем делать с ним все, что захотим. Мы можем играть вручную или настроить его на автоматическую работу. Конечно, мы можем прикрепить любой конечный эффектор и делать с ним крутые штуки. Например, мы можем даже прикрепить горячий конец 3D-принтера к роботу и таким образом сделать робота 3D-принтером, или прикрепить лазерную головку и сделать из него лазерный резак.
Прежде чем закончить эту статью, я хотел бы дать вам еще несколько заметок об этом проекте. Я обнаружил, что робот имеет не такую жесткую конструкцию, как я ожидал.
Я полагаю, проблема в том, что почти весь робот SCARA, ось Z и руки поддерживаются только первым сочленением. Весь вес и инерционные силы, возникающие при движении, могут создавать значительную нагрузку на основание, где расположено первое сочленение, и поскольку это просто пластик, он имеет тенденцию немного изгибаться. Кроме того, эти ремни не безлюфтовые, поэтому мы также уменьшаем жесткость робота с помощью этого. Однако я думаю, что общий проект достаточно хорош, чтобы вы узнали, как работают роботы SCARA, и придают вам смелости построить его самостоятельно.