Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Робот SCARA | Как собрать собственного робота на базе Arduino

<основной класс="главный сайт" id="главный">

В этом уроке мы научимся собирать робота SCARA на базе Arduino. Я покажу вам весь процесс его создания, начиная с проектирования робота и заканчивая разработкой собственного графического пользовательского интерфейса для управления им.

Вы можете посмотреть следующее видео или прочитать письменное руководство ниже.

Обзор

Робот имеет 4 степени свободы и приводится в движение 4 шаговыми двигателями NEMA 17. Кроме того, он имеет небольшой серводвигатель для управления концевым эффектором или захватом робота в этом случае. Мозгом этого робота SCARA является плата Arduino UNO, соединенная с ЧПУ-щитом и четырьмя шаговыми драйверами A4988 для управления двигателями.

Используя среду разработки Processing, я создал графический интерфейс пользователя, в котором есть элементы управления прямой и обратной кинематикой. С Forward Kinematics мы можем вручную перемещать каждый сустав робота, чтобы получить желаемое положение. Используя ползунки с левой стороны, мы можем установить угол каждого сустава. Окончательное положение концевого эффектора, значения X, Y и Z рассчитываются и печатаются в правой части экрана.

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

На самом деле я сделал программу таким образом, чтобы мы могли использовать оба метода одновременно на одном экране. Углы суставов, а также значения X, Y и Z концевого зажима связаны и всегда отображаются на экране.

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

3D-модель робота SCARA

Для начала давайте взглянем на 3D-модель.

Я спроектировал этого робота SCARA с помощью 3DEXPERIENCE SOLIDWORKS, которая также является спонсором этого видео.

3 3DEXPERIENCE SOLIDWORKS — это, по сути, SOLIDWORKS с облачными возможностями, которые мы получаем через платформу 3DEXPERIENCE. Все работает через облако, поэтому вы или кто-либо из вашей команды может иметь доступ к данным или моделям в любое время из любой точки мира. Платформа 3DEXPERIECE также включает множество полезных приложений для повышения производительности и управления.

Например, Project Planer — отличный способ упорядочить задачи, установить сроки и отслеживать прогресс. С помощью приложения 3D Markup вы можете просматривать, исследовать и делать заметки о моделях с любого устройства, например ноутбука, планшета или даже смартфона.

Существует также отдельный облачный модуль 3D-моделирования под названием SOLIDWORKS xDesign, который запускается в вашем браузере. Его можно использовать вместе с Solidworks или отдельно, и он отлично подходит для моделирования в любом месте, в любое время и на любом устройстве.

Итак, большое спасибо Solidworks за спонсирование такого образовательного контента. Если вы хотите узнать, подходят ли вам SOLIDWORKS и платформа 3DEXPERIENCE, перейдите по следующим ссылкам ниже.

Попробуйте 3DEXPERIENCE бесплатно по моей специальной ссылке:www.solidworks.com/HTMTryNow

Узнайте больше о 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-модель, а также изучить ее в своем браузере на Thangs:

Загрузите 3D-модель сборки на Thangs.

Файлы STL для 3D-печати:

3D-печать деталей робота

Итак, мы можем перейти к 3D-печати деталей. Я использовал свой 3D-принтер Creality CR-10 для печати всех деталей, это действительно отличный 3D-принтер по доступной цене. Как я уже упоминал, детали также подходят для 3D-принтеров меньшего размера, например Ender3.

Для большинства деталей я использовал материал PLA+, синий, а также обычный PLA для шкивов и захвата. Мне потребовалось около 120 часов, чтобы напечатать все детали со скоростью печати 60 мм/с. База была самой большой частью для печати, которая заняла около 32 часов. Однако, если мы увеличим скорость печати, мы определенно сможем печатать детали быстрее.

См. также: Лучшие 3D-принтеры для начинающих и производителей [обновление 2021 г.]

Вот все детали, напечатанные на 3D-принтере.

Небольшое замечание:я напечатал все их с включенным горизонтальным расширением –0,1 мм в программном обеспечении для нарезки. Это позволяет деталям иметь более точные размеры и лучше сочетаться с другими механическими частями, такими как подшипники, стержни и болты.

Сборка робота

Вот список компонентов, необходимых для сборки этого робота SCARA на основе Arduino. Список компонентов электроники можно найти ниже в разделе принципиальных схем статьи.

Вот размеры болтов, необходимые для этого проекта:

Начинаем сборку с основы. Сначала мы вставляем радиальный шарикоподшипник с внутренним диаметром 35 мм и внешним диаметром 47 мм.

Затем идет первый упорный подшипник с внутренним диаметром 40 мм и внешним диаметром 60 мм. Этот подшипник будет находиться между шкивом и основанием.

С другой стороны основания мы используем еще один упорный подшипник того же размера вместе с соединительной муфтой.

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

Далее нам нужно установить средний шкив. Этот шкив работает в паре с шарнирным шкивом с ремнем GT2 300 мм. Для установки этого шкива мы используем два шарикоподшипника 608, один на верхней, а другой на нижней стороне основания. Затем с помощью болта М8 45 мм, шайбы и самоконтрящейся гайки можно закрепить шкив на месте.

Далее нам нужно установить шаговый двигатель для этого соединения. Шаговый двигатель будет соединен со средним шкивом с ремнем 200 мм. Для крепления к основанию нам понадобятся четыре болта М3.

Прежде чем затягивать болты, нам нужно максимально растянуть ремень. Небольшое замечание:я фактически заменил болт M8 для среднего шкива головкой вниз, чтобы он мог поместиться в основании.

На этом этапе мы должны проверить, достаточно ли натянуты ремни. Если нет, мы можем использовать несколько натяжных шкивов, чтобы лучше их затянуть. Здесь я использую 35-мм болт M5 и несколько гаек, чтобы сделать натяжной ролик.

Его можно прикрепить к прорезям с обеих сторон ремня, поэтому мы можем затянуть ремень так, как захотим. В итоге я натянул ремень с обеих сторон. На этом первое соединение завершено.

Я перешел к установке микровыключателя для этого соединения. Перед тем, как закрепить его на месте, я уже припаял к нему провода, так как здесь немного туго, чтобы делать это после. Нам понадобятся 20-мм болты M3 и гайка, чтобы закрепить микропереключатель на месте.

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

Итак, теперь мы можем начать сборку оси Z. Во-первых, поверх соединителя нам нужно закрепить нижнюю часть пластины по оси Z.

Поверх него мы можем закрепить четыре зажима для гладких стержней. Затем мы можем вставить гладкие стержни на место. Они должны плотно прилегать и доходить до соединительной части шарнира. Затем мы можем затянуть стержни с зажимами с помощью нескольких болтов и гаек M4.

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

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

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

Итак, теперь мы можем соединить две части руки вместе. Для этой цели мы будем использовать четыре 25-мм болта M5.

Далее мы можем установить второй шаговый двигатель. Здесь я буду использовать напечатанный на 3D-принтере шкив GT2 с 20 зубьями. Я сделал этот шкив, используя параметрическую конструкцию, о которой упоминал ранее, и она работает достаточно хорошо. Здесь нам также необходимо закрепить гайку ходового винта на месте.

Далее мы можем установить ремни и шкивы для второго шарнира. Здесь нам нужен один ремень длиной 400 мм и один длиной 300 мм. Процедура их установки почти такая же, как описано для первого соединения.

Здесь для второго и третьего шарнира мы фактически используем меньшие подшипники по сравнению с первым. Радиальный шарикоподшипник имеет внутренний диаметр 30 мм и внешний диаметр 42 мм, а упорный подшипник имеет внутренний диаметр 35 мм и внешний диаметр 52 мм.

Перед установкой второй соединительной муфты нам необходимо вставить шесть 20-мм болтов M4 в шестигранные пазы.

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

Я продолжил крепление второго рычага к шарнирному соединителю. Здесь мы используем те болты в соединителе, которые мы установили ранее, чтобы закрепить верхнюю часть второго рычага.

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

Итак, в моем случае я расширил отверстия с помощью сверла 4,5 мм и использовал болты M5 вместо болтов M4 для соединения двух частей соединения вместе. Тем не менее, я обновил 3D-модель, чтобы отверстия были 3,5 мм, и вы могли использовать болты M4, чтобы соединить эти две части вместе. Я также вернулся к первому суставу и сделал то же самое. Теперь люфта в шарнирах почти нет, за исключением небольшого люфта, который мы получаем от ремней.

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

В этом случае я использую шаговый двигатель меньшего размера, поэтому рука стала немного легче. Тем не менее, это шаговый двигатель 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 А. Конечно, это зависит от того, как установлено ограничение тока драйвера шагового двигателя, и я бы посоветовал установить его на минимально возможном уровне.

В конце я зажал все провода в корпусе, стараясь при этом оставить свободными радиаторы дисков, и добавил к нему крышку.

Завершение сборки

Робот SCARA теперь завершен, и теперь нам нужно прикрепить базу к чему-нибудь. Для этой цели я буду использовать кусок дерева толщиной 20 мм. В нижней части основания робота у нас есть 12 отверстий для его крепления. Итак, я распечатал чертеж основания робота и использовал его, чтобы проделать отверстия в дереве.

С нижней стороны я их раззенковал, так как буду использовать болты с плоской головкой, чтобы они слились с деревянной поверхностью. Я вставил гайки M4 в пазы основания, а затем прикрепил деревянное основание к основанию робота.

Теперь в идеале, чтобы зафиксировать робота на месте, мы могли бы прикрутить его к столу, или я просто использую для этой цели зажимы.

Вот и все, наш робот SCARA полностью готов. Однако в этом видео осталось посмотреть, как работает робот.

См. также: Робот-манипулятор Arduino своими руками с управлением смартфоном

Как работает робот SCARA

Существует два метода управления роботами с точки зрения позиционирования и ориентации:использование прямой или обратной кинематики.

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

С другой стороны, инверсная кинематика используется, когда нам нужно найти углы сочленения для данного положения рабочего органа. Этот метод имеет больше смысла в робототехнике, так как большую часть времени мы хотим, чтобы робот располагал свой инструмент в определенном месте или в определенных координатах X, Y и Z.

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

Уравнения, которые я буду использовать как для прямой, так и для обратной кинематики, взяты из правил и формул тригонометрии.

Программирование робота SCARA — Arduino и код обработки

В нижней части статьи вы можете найти коды Arduino и Processing.

Вот как уравнения выглядят в коде, написанном в среде разработки Processing.

// 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));
}Code language: Arduino (arduino)

Таким образом, с прямой кинематикой мы вычисляем значения X и Y рабочего органа в соответствии с заданными углами соединения двух рук роботов, theta1 и theta2, а также их длинами L1 и L2.

С другой стороны, с инверсной кинематикой мы вычисляем углы сочленения, тета2 и тета1, в соответствии с заданным положением или координатами X и Y.

/ 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);
}Code language: Arduino (arduino)

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

Графический пользовательский интерфейс создан с использованием библиотеки controlP5 для Processing IDE. С помощью этой библиотеки мы можем легко создавать кнопки, ползунки, текстовые поля и так далее.

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

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);
    }
  }Code language: Arduino (arduino)

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

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);
}Code language: Arduino (arduino)

Все эти данные поступают в Arduino в виде одной длинной строки. Итак, сначала нам нужно извлечь данные из этой строки и поместить их в отдельные переменные.

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
    */Code language: Arduino (arduino)

Теперь с этими переменными мы можем совершать действия с роботом. Например, если мы нажмем кнопку СОХРАНИТЬ, мы сохраним текущие значения углов соединения в отдельном массиве.

// 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++;
    }Code language: Arduino (arduino)

If we click the RUN button, we execute the stored steps and so on.

For controlling the stepper motors, I used the AccelStepper library. Although this is a great library for controlling multiple steppers at the same time, it has some limitations when it comes to controlling a robot like this. When controlling multiple steppers, the library cannot implement acceleration and deceleration, which are important for smoother operation of the robot.

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();
  }Code language: Arduino (arduino)

I still managed to implement acceleration and deceleration with the library, but they are not as smooth as I wanted to be.

Here are full Arduino and Processing codes for this Arduino SCARA robot project:

Wrap up

So finally, once we upload the code to the Arduino, we can run the processing program, connect the power and the scara robot will start moving to its home position.

From there on, we can do whatever we want the it. We can play around manually or set it to work automatically. Of course, we can attach any kind of end-effector and make cool stuff with it. For example, we can even attach a 3D printer hot end to the robot and so make the robot a 3D printer, or attach a laser head and make it a laser cutter. I do plan try these two ideas, so make sure you subscribe to my channel so you don’t miss them in some of my future videos.

Before this video ends, I would like to give you few more notes about this project. I found the robot to be not as rigid as I expected.

I guess the problem is that almost the entire SCARA robot, the Z-axis and the arms are supported only by the first joint. The whole weight and the inertial forces generated when moving, can make quite a stress to base where the first joint is located, and as it’s just a plastic it tends to bend a little bit. Also, these belts are not backlash free so we reduce the robot rigidity with that too. However, I think the overall project is good enough so you to learn how SCARA robots work, and gives you the courage to build one for yourself.

Feel free to ask any question in the comments section below and check my Arduino Projects Collection.


Производственный процесс

  1. Взлом Lego EV3:создайте свой собственный объектный датчик «глаза»
  2. Создайте своего робота для видеостриминга, управляемого через Интернет, с помощью Arduino и Raspberry Pi
  3. Технический документ:как определить потенциал своего робота
  4. Как построить Саурона, повелителя роботов
  5. Как создать монитор энергии и регистратор данных Arduino
  6. Как взломать ИК-пульты
  7. Полное руководство:как выбрать правильный робот SCARA
  8. Littlearm 2C:создание напечатанной на 3D-принтере руки робота Arduino
  9. Как сделать автоматическое открывание дверей на базе Arduino
  10. Как создать дорожную карту автоматизации за 7 шагов