Оглавление:

UCL - встроенный - выберите и поместите: 4 шага
UCL - встроенный - выберите и поместите: 4 шага
Anonim
UCL - Embedded - Pick and Place
UCL - Embedded - Pick and Place

В этом руководстве будет рассказано, как делается 2D-блок выбора и размещения и как его кодировать.

Шаг 1. Компунеты

Компунец
Компунец

1x Адрио Мега

2 шаговых двигателя (мы использовали шаговый двигатель JLB, модель 17H1352-P4130)

Модуль платы контроллера привода шагового двигателя 2x L298N Dual H Bridge DC для Arduino

1x серводвигатель (у нас нет пятнышка на этом)

3 резистора по 10 кОм

2x нейлоновые волдыри

1x блок питания 12 В

Немного дерева для каркаса

Провода

Шаг 2: Строительство

Строительство
Строительство
Строительство
Строительство
Строительство
Строительство

Первым делом на этапе строительства было определиться с размером и формой механизма захвата и размещения.

Сначала мы строим древесину основной формы. Мы построили рамку для выбора и размещения размером 50 на 25 на 30 см. Все, кроме рамы, моста и подъемного рычага, было изготовлено с помощью лазерного резака.

Вот ссылка на все файлы

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

20мм

50 мм

Затем нам нужно разработать направляющую для руки. Здесь мы сделали две боковины и одну заднюю пластину.

Которая затем была склеена в виде П-образной формы. Затем мы соединили это с мостом.

Боковая пластина

Задняя пластина

Теперь, когда части для перемещения руки вверх и вниз готовы. Нам нужно двигать его вперед и назад.

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

Шаг 3: Код

Код
Код
Код
Код
Код
Код

Программирование довольно простое и состоит из 5 частей.

  1. Включение библиотек и настройка переменных для внутреннего использования и ввода-вывода
  2. Загрузите входы в RAM
  3. Секвенс, выбрав нужное движение.
  4. Управление позиционированием шагового / сервопривода
  5. Выход в мир

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

1: Перед настройкой void мы включили 2 библиотеки, необходимые для этого проекта. Шаговый и сервопривод. Использование прилагаемых библиотек избавляет вас от необходимости изучать все подробности о шаговых и серводвигателях.

#включают

#включают

const int stepsPerRevolution = 200; // измените это, чтобы оно соответствовало количеству шагов на оборот для вашего двигателя

// инициализируем библиотеку шагового двигателя на контактах с 8 по 11:

Stepper XStepper (stepsPerRevolution, 22, 23, 24, 25); Степпер YStepper (stepsPerRevolution, 28, 29, 30, 31); Сервопривод Griper; // создаем сервообъект для управления сервоприводом

Захват должен быть прикреплен в настройках void

void setup () {// инициализируем последовательный порт: Serial.begin (9600); Griper.attach (9); // присоединяет сервопривод на выводе 9 к сервообъекту

Остальная часть этого раздела - это просто настройка переменных и констант.

2: Первое, что нужно сделать в Void Loop, - это загрузить все используемые входные данные в переменную. Это сделано по двум причинам. Первая причина - ограничить тяжелые задачи ЦП по чтению ввода. Вторая причина, которая является наиболее важной, состоит в том, чтобы убедиться, что если вход используется более одного раза, он будет иметь одно и то же значение на протяжении всего сканирования. Это упрощает написание последовательного кода. Это очень распространенная практика в программировании ПЛК, но она также применима и к встроенному программированию.

// ------------------------- Вывести в ОЗУ -------------------- Xend = digitalRead (34); Yend = digitalRead (35); Ena = digitalRead (36);

3: В части кода секвены мы только что создали секвены с помощью команд Switch и case. Часть sekvens просто подает сигналы части кода, управляющей положением. Эту часть можно легко настроить для вашего приложения или использовать как есть.

4: Положение сервопривода контролируется только сервоприводом liberi и оператором if для открытия и закрытия захвата.

Управление шаговым двигателем немного сложнее. Функция сравнивает заданное значение (положение, в которое должна перейти рука) и текущее положение. Если текущая позиция ниже, функция добавляет к позиции и просит функцию Stepper liberi сделать положительный шаг. Обратное верно для высокой позиции. если положение совпадает с заданным, бит XinPos установлен, и шаговый двигатель останавливается.

// SP controal X

if (XstepCountXsp, а не Home) {

XstepCount = XstepCount-1; Xstep = -1; XinPos = 0; } если (XstepCount == Xsp) {Xstep = 0; XinPos = 1; }

5: Добавьте конец кода, двигатели управляются с помощью функций liberi.

// -------------------- Вывод ---------------------- // шаг один шаг: XStepper.step (Xstep); // шаг на один шаг: YStepper.step (Ystep);

Griper.write (GripSp);

Шаг 4: Сделано

casp6099 - Каспер Хартунг Кристенсен

rasm616d - Расмус Хансен

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