Интересный робот-манипулятор на Arduino. Настольная робо-рука манипулятор из оргстекла на сервоприводах своими руками Сборка механической части
Из особенностей данного робота на платформе Arduino можно отметить сложность его конструкции. Роборука состоит из множества рычагов, которые позволяют ей двигаться по всем осям, хватать и перемещать различные вещи, используя всего 4 серво-мотора. Собрав собственными руками такого робота, Вы точно сможете удивить своих друзей и близких возможностями и приятным видом данного устройства! Помните, что для программирования Вы всегда сможете воспользоваться нашей графической средой RobotON Studio!
Если у Вас появятся вопросы или замечания, мы всегда на связи! Создавайте и выкладывайте свои результаты!
Особенности:
Чтобы собрать робота манипулятора своими руками, вам понадобится довольно много компонентов. Основную часть занимают 3D печатные детали, их около 18 штук (печатать горку необязательно).Если вы скачали и распечатали все необходимое, то вам потребуются болты, гайки и электроника:
- 5 болтов М4 20мм, 1 на 40 мм и соответствующие гайки с защитой от раскрутки
- 6 болтов М3 10мм, 1 на 20 мм и соответствующие гайки
- Макетка с соединительными проводами или шилд
- Arduino Nano
- 4 серво мотора SG 90
После сборки корпуса ВАЖНО убедиться в его свободной подвижности. Если ключевые узлы Роборуки двигаются с трудом, серво-моторы могут не справиться с нагрузкой. Собирая электронику, необходимо помнить, что подключать цепь к питанию лучше после полной проверки соединений. Чтобы избежать поломки серво-приводов SG 90, не нужно крутить руками сам мотор, если нет необходимости. В случае, если нужно разработать SG 90, нужно плавно подвигать вал мотора в разные стороны.
Характеристики:
- Простое программирование ввиду наличия малого количества моторов, причем одного типа
- Наличие мертвых зон для некоторых серво-приводах
- Широкая применимость робота в повседневной жизни
- Интерсная инженерная работа
- Необходимость использования 3D принтера
Создаем робот-манипулятор с использованием дальномера, реализуем подсветку.
Резать основание будем из акрила. В качестве двигателей используем сервопривода.
Общее описание проекта робота-манипулятора
В проекте использовано 6 серводвигателей. Для механической части использован акрил толщиной 2 миллиметра. В качестве штатива пригодилось основание от диско-шара (один из двигателей вмонтирован внутрь). Также использован ультразвуковой датчик расстояния и светодиод диаметром 10 мм.
Для управления роботом используется Arduino плата питания. Сам источник питания - блок питания компьютера.
В проекте изложены исчерпывающие пояснения по разработке робо-руки. Отдельно рассмотрены вопросы питания разработанной конструкции.
Основные узлы для проекта манипулятора
Давайте начнем разработку. Вам понадобятся:
- 6 серводвигателей (я использовал 2 модели mg946, 2 mg995 , 2 futuba s3003 (mg995/mg946 по характеристикам лучше, чем futuba s3003, но последние намного дешевле);
- акрил толщиной 2 миллиметра (и небольшой кусок толщиной 4 мм);
- ультразвуковой датчик расстояния hc-sr04 ;
- светодиды 10 мм (цвет - на ваше усмотрение);
- штатив (используется в качестве основания);
- схват аллюминиевый (стоит около 10-15 долларов).
Для управления:
- Плата Arduino Uno (в проекте использована самодельная плата, которая полностью аналогична Arduino);
- плата питания (вам придется ее сделать самим, к этому вопросу мы вернемся позже, он требует отдельного внимания);
- блок питания (в данном случае используется блок питания компьютера);
- компьютер для программирования вашего манипулятора (если вы используете для программирования Arduino, значит, среда Arduino IDE)
Конечно же, вам пригодятся кабели и некоторые базовые инструменты вроде отверток и т.п. Теперь мы можем перейти к конструированию.
Сборка механической части
Перед началом разработки механической части манипулятора, стоит отметить, что чертежей у меня нет. Все узлы делались "на коленке". Но принцип очень простой. У вас есть два звена из акрила, между которыми надо установить серводвигатели. И другие два звенья. Тоже для установки двигателей. Ну и сам схват. Подобный схват проще всего купить в интеренете. Практически все устанавливается с помощью винтов.
Длина первой части около 19 см; второй - около 17.5; длина переднего звена около 5.5 см. Остальные габариты подбирайте в соответсвии с размерами вашего проекта. В принципе, размеры остальных узлов не так важны.
Механическая рука должна обеспечивать угол поворота 180 градусов в основании. Так что мы должны установить снизу серводвигатель. В данном случае он устанавливается в тот самый диско-шар. В вашем случае это может быть любой подходящий бокс. Робот устанавливается на этот серводвигатель. Можно, как это показано на рисунке, установить дополнительное металлическое кольцо-фланец. Можно обойтись и без него.
Для установки ультразвукового датчика, используется акрил толщиной 2 мм. Тут же снизу можно установить светодиод.
Детально объяснить как именно сконструировать подобный манипулятор сложно. Многое зависит от тех узлов и частей, которые есть у вас в наличии или вы приобретаете. Например, если габариты ваших сервоприводов отличаются, звенья арма из акрила тоже изменятся. Если изменятся габариты, калибровка манипулятора тоже будет отличаться.
Вам точно придется после завершения разработки механической части манипулятора удлинить кабели серводвигателей. Для этих целей в данном проекте использовались провода из интернет-кабеля. Для того, чтобы все это имело вид, не поленитесь и установите на свободные концы удлиненных кабелей переходники - мама или папа, в зависимости от выходов вашей платы Arduino, шилда или источника питания.
После сборки механической части, мы можем перейти к "мозгам" нашего манипулятора.
Схват манипулятора
Для установки схвата вам понадобится серводвигатель и несколько винтов.
Итак, что именно необходимо сделать.
Берете качалку от сервы и укорачиваете, пока она не подойдет к вашему схвату. После этого закручиваете два маленьких винта.
После установки сервы, проворачиваете ее в крайнее левое положение и сжимаете губки схвата.
Теперь можно установить серву на 4 болта. При этом следите, чтобы двигатель был все так же в крайнем левом положении, а губки схвата закрыты.
Можно подключить сервопривод к плате Arduino и проверить работоспособность схвата.
Учтите, что могут возникнуть проблемы с работой схвата, если болты/винты слишком сильно затянуты.
Добавление подсветки на манипулятор
Можно сделать ваш проект ярче, добавив на него подсветку. Для этого использовались светодиоды. Делается несложно, а в темноте выглядит очень эффектно.
Места для установки светодиодов зависят от вашего креатива и фантазии.
Электросхема
Можно использовать вместо резистора R1 потенциометр на 100 кОм для регулировки яркости вручную. В качестве сопротивлени R2 использовались резисторы на 118 Ом.
Перечень основных узлов, которые использовались:
- R1 - резистор на 100 кОм
- R2 - резистор на 118 Ом
- Транзистор bc547
- Фоторезистор
- 7 светодиодов
- Переключатель
- Подключение к плате Arduino
В качестве микроконтроллера использовалась плата Arduino. В качестве питания использовался блок питания от персонального компьютера. Подключив мультиметр к красному и черному кабелям, вы увидите 5 вольт (которые используются для серводвигателей и ультразвукового датчика расстояния). Желтый и черный дадут вам 12 вольт (для Arduino). Делаем 5 коннекторов для сервомоторов, параллельно подключаем позитивные к 5 В, а негативные - к земле. Аналогично с датчиком расстояния.
После этого подключите оставшиеся коннекторы (по одному с каждой сервы и два с дальномера) к распаянной нами плате и Arduino. При этом не забудьте в программе в дальнейшем корректно указать пины, которые вы использовали.
Кроме того, на плате питания был установлен светодиод-индикатор питания. Реализуется это несложно. Дополнительно использовался резистор на 100 Ом между 5 В и землей.
10 миллиметровый светодиод на роботе тоже подключен к Arduino. Резистор на 100 Ом идет от 13 пина к к позитивной ноге светодиода. Негативный - к земле. В программе его можно отключить.
Для 6 серводвигателей использовано 6 коннекторов, так как 2 серводвигателя снизу используют одинаковый сигнал управления. Соответствующие проводники соединяются и подключаются к одному пину.
Повторюсь, что в качестве питания используется блок питания от персонального компьютера. Либо, конечно, вы можете приобрести отдельный источник питания. Но с учетом, того, что у нас 6 приводов, каждый из которых может потреблять около 2 А, подобный мощный блок питания обойдется недешево.
Обратите внимание, что коннекторы от серв подключаются к ШИМ-выходам Arduino. Возле каждого такого пина на плате есть условное обозначение ~. Ультразвуковой датчик расттояния можно подключить к пинам 6, 7. Светодиод - к 13 пину и земле. Это все пины, которые нам понадобятся.
Теперь мы можем перейти к программированию Arduino.
Перед тем как подключить плату через usb к компьютеру, убедитесь, что вы отключили питание. Когда будете тестировать программу, также отключайте питание вашей робо-руки. Если питание не выключить, Arduino получит 5 вольт от usb и 12 вольт от блока питания. Соответственно, мощность от usb перекинется к источнику питания и он немного "просядет".
На схеме подключения видно, что были добавлены потенциометры для управления сервами. Потенциометры не являются обязательным звеном, но приведенный код не будет работать без них. Потенциометры можно подключить к пинам 0,1,2,3 и 4.
Программирование и первый запуск
Для управления использовано 5 потенциометров (вполне можно заменить это на 1 потенциометр и два джойстика). Схема подключения с потенциометрами приведена в предыдущей части. Скетч для Arduino находится здесь.
Снизу представлены несколько видео робота-манипулятора в работе. Надеюсь, вам понравится.
На видео сверху представлены последние модификации арма. Пришлось немного изменить конструкцию и заменить несколько деталей. Оказалось, что сервы futuba s3003 слабоваты. Их получилось использовать только для схвата или поворота руки. Так что виесто них были установлены mg995. Ну а mg946 вообще будут отличным вариантом.
Программа управления и пояснения к ней
// управляются привода с помощью переменных резисторов - потенциометров.
int potpin = 0; // аналоговый пин для подключения потенциометра
int val; // переменная для считывания данных с аналогового пина
myservo1.attach(3);
myservo2.attach(5);
myservo3.attach(9);
myservo4.attach(10);
myservo5.attach(11);
pinMode(led, OUTPUT);
{ //servo 1 analog pin 0
val = analogRead(potpin); // считывает значение потенциометра (значение между 0 и 1023)
// масштабирует полученное значение для использования с сервами (получаем значение в диапазоне от 0 до 180)
myservo1.write(val); // выводит серву в позицию в соответствии с рассчитанным значением
delay(15); // ждет, пока серводвигатель выйдет в заданное положение
val = analogRead(potpin1); // серва 2 на аналоговом пине 1
val = map(val, 0, 1023, 0, 179);
myservo2.write(val);
val = analogRead(potpin2); // серва 3 на аналоговом пине 2
val = map(val, 0, 1023, 0, 179);
myservo3.write(val);
val = analogRead(potpin3); // серва 4 на аналоговом пине 3
val = map(val, 0, 1023, 0, 179);
myservo4.write(val);
val = analogRead(potpin4); //серва 5 на аналоговом пине 4
val = map(val, 0, 1023, 0, 179);
myservo5.write(val);
Скетч с использованием ультразвукового датчика расстояния
Это, наверное, одна из самых эффектных частей проекта. На манипулятор устанавливается датчик расстояния, который реагирует на препятствия вокруг.
Основные пояснения к коду представлены ниже
#define trigPin 7
Следующий кусок кода:
Мы присвоили всем 5-ти сигналам (для 6 приводов) названия (могут быть любыми)
Следующее:
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(led, OUTPUT);
myservo1.attach(3);
myservo2.attach(5);
myservo3.attach(9);
myservo4.attach(10);
myservo5.attach(11);
Мы сообщаем плате Arduino к каким пинам подключены светодиоды, серводвигатели и датчик расстояния. Изменять здесь ничего не стоит.
void position1(){
digitalWrite(led, HIGH);
myservo2.writeMicroseconds(1300);
myservo4.writeMicroseconds(800);
myservo5.writeMicroseconds(1000);
Здесь кое-что можно менять. Я задал позицию и назвал ее position1. Она будет использована в дальнейшей программе. Если вы хотите обеспечить другое движение, измените значения в скобках в диапазоне от 0 до 3000.
После этого:
void position2(){
digitalWrite(led,LOW);
myservo2.writeMicroseconds(1200);
myservo3.writeMicroseconds(1300);
myservo4.writeMicroseconds(1400);
myservo5.writeMicroseconds(2200);
Аналогично предыдущему куску, только в данном случае это position2. По такому же принципу вы можете добавлять новые положения для перемещения.
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration/2) / 29.1;
Теперь начинает отрабатывать основной код программы. Не стоит его изменять. Основная задача приведенных выше строк - настройка датчика расстояния.
После этого:
if (distance <= 30) {
if (distance < 10) {
myservo5.writeMicroseconds(2200); //открыть схват
myservo5.writeMicroseconds(1000); //закрыть схват
Теперь вы можете добавлять новые перемещения в зависимости от расстояния, измеренного ультразвуковым датчиком.
if(distance <=30){ // данная строка обеспечивает переход в position1, если расстояние меньше 30 см.
position1(); //по сути арм отработает все, что вы зададите между скобками { }
else{ // если расстояние больше 30 см, переход в position2
position()2 // аналогично предыдущей строке
Можно в коде поменять расстояние ну и творить все, что вы пожелаете.
Последние строки кода
if (distance > 30 || distance <= 0){
Serial.println("Out of range"); //вывод в серийном монитеоре сообщения, что мы вышли за заданный диапазон
Serial.print(distance);
Serial.println(" cm"); //расстояние в сантиметрах
delay(500); //задержка в 0.5 секунды
Конечно, можно перевести тут все в миллиметры, метры, изменить отображающееся сообщение и т.п. Можно немного поиграться с задержкой.
Вот, собственно и все. Наслаждайтесь, модернизируйте свои собственные манипуляторы, делитесь идеями и резутатами!
Это проект робота, который содержит шесть степеней свободы манипулятора. Устройство может применяться на производственной линии, как заготовка для конвейерной ленты, работая с паллетами на рабочей станции. Главной целью проекта было проверить, является ли манипулятор достаточно точным для сборки деталей, когда они движутся на конвейере. Эта сборка, конечно, не нашла широкого применения в промышленности, но всё возможно в будущем.
Как он работает?
Существует инкрементный датчик на нижней стороне электродвигателя, который подает информацию к основному блоку процессора манипулятора, чтобы иметь возможность рассчитать фактическую скорость и смещение конвейера.
На стороне конвейера есть несколько индуктивных датчиков, которые могут обнаруживать паллеты алюминия, когда они проходят мимо них. Используя эту информацию, захват руки робота может следовать паллету с той же скоростью, и может сделать все монтажные работы. Скорость конвейерной ленты можно регулировать с помощью двух преобразователей частот. Паллет может быть остановлен в нескольких точках с пневматической пробкой, и он возвращается в исходное положение с помощью селектора пневматическим способом.
Для создания робота было бы неплохо использовать 3D-принтер, который подойдет для печати больших объектов (максимальный размер ~ 1,2 м * 0,8 м). Было бы здорово увеличить головку манипулятора, а также использовать вентилятор компьютера для того, чтобы пластиковые нити остыли быстро. В общем, немного объектов будет необходимо для печатного объекта.
Видеопрезентация работы:
Здесь можно увидеть робота и его рабочую станцию во время выполнения одной простой задачи сборки на 30% от максимальной скорости:
Шаг 1. Робот без рабочей станции:
Так выглядит промышленная рука-манипулятор без какой-либо рабочей станции.
Шаг 2. Разборка конвейерной ленты от старых частей:
Если у вас есть возможность использовать некоторые старые части из конвейерной ленты, вы можете разобрать их, убрав часть от масла и других загрязнений, и повторно собрать один "новый" конвейер нужной длины и размеров, и вернуть все недостающие части.
Шаг 3. Подключение датчика:
Для того, чтобы определить скорость двигателя (и, следовательно, скорость конвейера), поверните ось к нижней стороне электродвигателя. Также ось двигателя необходима, чтобы иметь возможность изменить расширение устройства. На другом конце расширения нужно установить инкрементный датчик Megatron (MHL40 8 1000 5 BZ NA). Основные части датчика: источник света (светодиод), который светит через диск с отверстиями. На другой стороне этого диска есть датчик света, который считает импульсы входящего света, и передает эти сигналы на главный процессор робота. Первая настройка необходима для того, чтобы синхронизировать роботизированную систему координат, переместить конвейерную ленту, и вращать датчик на этом расстоянии.
После этого робот вычисляет сигналы датчика расстояния в его системе координат. Одной из самых сложных и трудоемких задач (после повторного собрания механической части конвейера) было сделать правильные настройки для этой синхронизации. Для этого необходимо написать программу, которая обрабатывает преобразователи частоты для запуска конвейера и открыть-закрыть пневматические пробки, и, конечно, необходимо переместить робота в области и нужные позиции. Основные направления этой синхронизации кода доступны в руководстве по работе с роботом (Mitsubishi RV-3SDB) в формате PDF. Ниже доступен код с настройками.
Шаг 4. Преобразователи частоты:
Преобразователи частоты необходимы, чтобы иметь возможность контролировать скорость вращения двигателя. Он работает первоначально с частотой 50 Гц, но это слишком быстро для этой процедуры. Установите частоту 33Гц на базовой настройке. Благодаря скорости изменения входа селектора, есть также возможность изменения скорости в программном коде робота. Преобразователь частоты поставляется в использованном варианте, но делает свою работу очень хорошо. Также аварийный выключатель (большая красная кнопка) необходим для подключения по соображениям безопасности.
Шаг 5. Создание паллет:
Все части паллет являются ручной работой. Были сделаны только "заготовки". К сожалению, возможность 3D печати не доступна здесь, так как эти части должны быть сделаны из алюминия или из пластика. На верхней части паллет нужно установить шарикоподшипники, чтобы иметь лучшие обороты по краям. Большой кусок алюминия необходим из-за близости индуктивных датчиков.
Шаг 6. Завершение конвейерной ленты:
После нужно добавить стартовую точку и конечную точку конвейерной ленты. Также интегрирован выход селектора. Он работает с пневматическими переключателями.
Шаг 7.
Пневматические переключатели останавливают и пропускают паллет. В начальной точке есть индуктивный датчик приближения, чтобы убедиться, что паллет настроен перед началом сборки. Затем коммутатор освобождает паллет, который проходит мимо второго датчика на близком расстоянии. Это дает сигнал на главный процессор, который обрабатывает сигналы датчика, называемые "живые". Расстояние измеряется отсюда. Есть и другая пробка и датчик на конце линии. (Существует возможность поставить более паллет на конвейере в одно и то же время, но тем самым необходима безопасность остановки, прежде чем дать паллету способ выбора.)
"Электрическая часть" рабочей станция находится только в предварительной версии: она должна быть вмонтирована в электрическую кабину. (Вопрос только в деньгах.)
Шаг 8. Программирование робота:
Основные команды для кода сборки:
- M_Out (N) = 1: включение или выключение выходов (например, пневматических переключателей или двигателей)
- Wait M_In(n) = 1: подождите нарастающий сигнал (например, сигналы индуктивных датчиков)
- m1 = M_Enc (1): при запуске функции отслеживания он дает мгновенное значение кодера к m1 целому.
- Trk On,pfog,m1: включение функции отслеживания движений робота.
- Trk Off: выключение функции отслеживания и возвращения к "нормальной" системе координат робота.
Servo On "Robot szervo bekapcsolása
Ovrd 70 "70%-os sebesség
Mov phome2 "a darab várakozási pozícióba álljon
"Futószalag összeszerelő ág nullázása (mert a frekvenciaváltó felfutó és lefutó élre is reagál).
M_Out(5)=0 "összeszerelő ág hátramenet nullázása
M_Out(6)=0 "összeszerelő ág előremenet nullázása
M_Out(8)=0 "visszavezető ág előremenet nullázása
M_Out(9)=0 "visszavezető ág hátramenet nullázása
"
"Vizsgálat kezdés előtt: ha a paletta nincs a kiindulási ponton, oda kell vinni.
If M_In(4)=0 Then GoSub *visszavezet "ha az első induktív jele 0, akkor nincs ott a paletta
*visszavezet
If M_In(4)=1 Then GoTo *indit "mivel ez rekurzív programrész, ha mar ott a paletta, kilépünk
M_Out(6)=1 "összeszerelő futószalag ág előre megy egy kicsit
M_Out(2)=1 "váltó külső állásba tesz
M_Out(2)=0 "váltó nyomás visszavesz
Dly 7 "eddigre biztos a végére ér a paletta az összeszerelő ágnak
M_Out(1)=1 "váltó belső állásba tesz
M_Out(1)=0 "leveszi a váltóról a nyomást
M_Out(6)=0 "összeszerelő futószalag ág leállítása
Dly 0.5
M_Out(9)=1 "visszavezető ág futószalag beindul visszafelé
M_Out(5)=1 "összeszerelő ág hátramenetbe kapcsol
Wait M_In(4)=1 "addig vár, amíg az első induktív nem érzékel
M_Out(8)=0 "visszavezető futószalag leáll
Dly 1 "a paletta már a kiindulási pontban van
M_Out(5)=0 "összeszerelő ág hátra leáll
If M_In(4)=1 Then GoTo *indit
Return
*indit
M_Out(6)=1 "összeszerelő ág előremenetben indítása
M_Out(4)=1 "1. szelep behúz
M_Out(2)=1 "váltó külső állás
M_Out(2)=0 "váltóról leveszi a nyomást
Wait M_In(6)=1 "indítást érzékelő induktív bejelez
m1=M_Enc(1) "ekkor felvesszük az enkóder pozícióját (szinkronizálás)
"*var
"abban az esetben szükséges csak, ha az indító érzékelő a robot munkaterén kívül van
"PC=TrWcur(1,pjel,m1) "meg kell várnia a paletta beérkezését a munkatérbe
"If PosCq(PC)<>1 Then GoTo *var "beért-e a munkatérbe?
"If PC.Y>350 Then GoTo *var "beért-e a szerelési távolságba? (350mm)
"If PC.Y<0 Then GoTo *var "probléma esetén már túlment volna "a szerelési távolságon
Trk On,pjel,m1 "tracking indítása
"pjel: fixen beállítandó érték, a robot koordinátarendszerében az induktív "bejelzésekor a munkadarab pozíciója
"m1: az enkóder pozíciója, amikor a munkadarab elérte az induktívot
"innentől egy mozgó koordináta rendszerben leszünk, amelynek középpontja a munkadarab
Mov phenger,10 "felvesszük az első darabot
Mvs phenger
Dly 0.25
Hclose 1
Dly 0.25
Mvs phenger, 10
Mov pkp,50
Mvs pkp
Dly 0.25
HOpen 1 "leraktuk a hengert
Dly 0.25
Mov pkp, 50
Mov pdugattyu, 10 "dugattyúért megy
Mvs pdugattyu
Dly 0.25
Hclose 1 "felvettük a dugattyút
Dly 0.25
Mvs pdugattyu, 10
Mov pkp, 50
Mvs pkp
Dly 0.25
HOpen 1 "leraktuk a dugattyút
Dly 0.25
Mov pkp, 50
Mov prugo, 10 "rugóért megy
Mvs prugo
Dly 0.25
Hclose 1 "felvettük a rugót
Dly 0.25
Mvs prugo, 10
Mov pkp, 50
Mvs pkp
Dly 0.25
HOpen 1 "leraktuk a rugót
Dly 0.25
Mov pkp, 50
Trk Off
Wait M_In(7)=1 "addig vár, amíg az harmadik(összeszerelő ág vége) induktív nem érzékel
M_Out(4)=0 "1. szelep kienged
M_Out(0)=1 "2. szelep (összeszerelő végpont) behúz
Wait M_In(7)=0 "addig vár, amíg az harmadik(összeszerelő ág vége) induktív előtt mar nincs ott a darab (tehát kifutott a végpontig)
Dly 1
M_Out(6)=0 "összeszerelő ág futószalag előre leállít
M_Out(1)=1 "váltó belső állás
M_Out(1)=0 "váltó belső állást kell nullázni
M_Out(0)=0 "2. szelep (összeszerelő végpont) kienged
M_Out(5)=1 "összeszerelő futószalag hátra indul
M_Out(9)=1 "visszavezető futószalag előre indul
Wait M_In(6)=1 "addig vár, amíg az visszavezető induktív nem érzékel (de nem történik semmi)
Wait M_In(4)=1 "addig vár, amíg az összeszerelő induktív nem érzékel (vissza nem ért a darab)
M_Out(5)=0 "összeszerelő futószalag hátra leáll
M_Out(9)=0 "visszavezető ág futószalag leáll
Mov phome2
Servo Off
Hlt
"
"kimenetek és bemenetek listája
"szelepek
"M_Out(0)=1 "2. szelep (összeszerelő végpont) behúz
"M_Out(0)=0 "végpont szelep kienged
"M_Out(1)=1 "váltó belső állásra vált
"M_Out(1)=0 "váltó belső állás nyomás levesz
"M_Out(2)=1 "váltó külső állásra állít
"M_Out(2)=0 "itt nem kell nyomást levenni
"M_Out(3)=1 "3.szelep (visszavezető ág) behúz
"M_Out(3)=0 "3. szelep kienged
"M_Out(4)=1 "1. szelep behúz
"M_Out(4)=0 "1. szelep kienged
"
"Futószalag ágak nullázása (mindig kell, mert mindig a korábbi érték ellentétjére indul vagy áll meg).
"M_Out(5)=0 "futószalag leáll nullázással kezdünk
"M_Out(6)=0 "futószalag leáll nullázással kezdünk
"M_Out(8)=0 "másik futószalag előre leáll
"M_Out(9)=0 "másik futószalag előre leáll
"
"M_Out(5)=1 "összeszerelő ág futószalag hátra indul
"M_Out(5)=0 "összeszerelő ág futószalag leáll
"M_Out(6)=1 ""összeszerelő ág futószalag előre indul
"M_Out(6)=0 ""összeszerelő ág futószalag előre leáll
"M_Out(8)=1 "visszavezető ág futószalag hátra indul
"M_Out(8)=0 " visszavezető ág futószalag hátra leáll
"M_Out(9)=1 " visszavezető ág futószalag előre indul
"M_Out(9)=0 " visszavezető ág futószalag előre leáll
"
"induktívok
"Wait M_In(4)=1 "addig vár, amíg az első induktív nem érzékel
"Wait M_In(5)=1 "addig vár, amíg az indító induktív nem érzékel
"Wait M_In(6)=1 "addig vár, amíg az visszavezető induktív nem érzékel
"Wait M_In(7)=1 "addig vár, amíg az harmadik(összeszerelő ág vége) induktív nem érzékel
Привет, гиктаймс!
Проект uArm от uFactory собрал средства на кикстартере уже больше двух лет назад. Они с самого начала говорили, что это будет открытый проект, но сразу после окончания компании они не торопились выкладывать исходники. Я хотел просто порезать оргстекло по их чертежам и все, но так как исходников не было и в обозримом будущем не предвиделось, то я принялся повторять конструкцию по фотографиям.
Сейчас моя робо-рука выглядит так:
Работая не спеша за два года я успел сделать четыре версии и получил достаточно много опыта. Описание, историю проекта и все файлы проекта вы сможете найти под катом.
Пробы и ошибки
Начиная работать над чертежами, я хотел не просто повторить uArm, а улучшить его. Мне казалось, что в моих условиях вполне можно обойтись без подшипников. Так же мне не нравилось то, что электроника вращается вместе со всем манипулятором и хотелось упростить конструкцию нижней части шарнира. Плюс я начал рисовать его сразу немного меньше.С такими входными параметрами я нарисовал первую версию. К сожалению, у меня не сохранилось фотографий той версии манипулятора (который был выполнен в желтом цвете). Ошибки в ней были просто эпичнейшие. Во-первых, ее было почти невозможно собрать. Как правило, механика которую я рисовал до манипулятора, была достаточно простая, и мне не приходилось задумываться о процессе сборки. Но все-таки я его собрал и попробовал запустить, И рука почти не двигалась! Все детли крутились вокруг винтов и, сли я затягивал их так, чтобы было меньше люфтов, она не могла двигаться. Если ослаблял так, чтобы она могла двигаться, появлялись невероятные люфты. В итоге концепт не прожил и трех дней. И приступил к работе над второй версией манипулятора.
Красный был уже вполне пригоден к работе. Он нормально собирался и со смазкой мог двигаться. На нем я смог протестировать софт, но все-таки отсутствие подшипников и большие потери на разных тягах делали его очень слабым.
Затем я забросил работу над проектом на какое-то время, но вскоре принял решении довести его до ума. Я решил использовать более мощные и популярные сервоприводы, увеличить размер и добавить подшипники. Причем я решил, что не буду пытаться сделать сразу все идеально. Я набросал чертежи на скорую руки, не вычерчивая красивых сопряжений и заказал резку из прозрачного оргстекла. На получившемся манипуляторе я смог отладить процесс сборки, выявил места, нуждающиеся в дополнительном укреплении, и научился использовать подшипники.
После того, как я вдоволь наигрался с прозрачным манипулятором, я засел за чертежи финальной белой версии. Итак, сейчас вся механика полностью отлажена, устраивает меня и готов заявить, что больше ничего не хочу менять в этой конструкции:
Меня удручает то, что я не смог привнести ничего принципиально нового в проект uArm. К тому времени, как я начал рисовать финальную версию, они уже выкатили 3D-модели на GrabCad. В итоге я только немного упростил клешню, подготовил файлы в удобном формате и применил очень простые и стандартные комплектующие.
Особенности манипулятора
До появления uArm, настольные манипуляторы подобного класса выглядели достаточно уныло. У них либо не было электроники вообще, либо было какое-нибудь управление с резисторами, либо было свое проприетарное ПО. Во-вторых, они как правило не имели системы параллельных шарниров и сам захват менял свое положение в процессе работы. Если собрать все достоинства моего манипулятора, то получается достаточно длинный список:- Система тяг, позволяющих разместить мощные я тяжелые двигатели в основании манипулятора, а также удерживающие захват параллельно или перпендикулярно основанию
- Простой набор комплектующих, которые легко купить или вырезать из оргстекла
- Подшипники почти во всех узлах манипулятора
- Простота сборки. Это оказалось действительно сложной задачей. Особенно трудно было продумать процесс сборки основания
- Положение захвата можно менять на 90 градусов
- Открытые исходники и документация. Все подготовлено в доступных форматах. Я дам ссылки для скачивания на 3D-модели, файлы для резки, список материалов, электронику и софт
- Arduino-совместимость. Есть много противников Arduino, но я считаю, что это возможность расширения аудитории. Профессионалы вполне могут написать свой софт на C - это же обычный контроллер от Atmel!
Механика
Для сборки необходимо вырезать детали из оргстекла толщиной 5мм:С меня за резку всех этих деталей взяли около $10.
Основание монтируется на большом подшипнике:
Особенно трудно было продумать основание с точки зрения процесса сборки, но я подглядывал за инженерами из uArm. Качалки сидят на штифте диаметром 6мм. Надо отметить, что тяга локтя у меня держится на П-образном держателе, а у uFactory на Г-образном. Трудно объяснить в чем разница, но я считаю у меня получилось лучше.
Захват собирается отдельно. Он может поворачиваться вокруг своей оси. Сама клешня сидит прямо на валу двигателя:
В конце статьи я дам ссылку на суперподробную инструкцию по сборке в фотографиях. За пару часов можно уверенно все это скрутить, если все необходимое есть под рукой. Также я подготовил 3D-модель в бесплатной программе SketchUp. Её можно скачать, покрутить и посмотреть что и как собрано.
Электроника
Чтобы заставить руку работать достаточно всего навсего подключить пять сервоприводов к Arduino и подать на них питание с хорошего источника. У uArm использованы какие-то двигатели с обратной связью. Я поставил три обычных двигателя MG995 и два маленьких двигателя с металлическим редуктором для управления захватом.Тут мое повествование тесно сплетается с предыдущими проектами. С некоторых пор я начал преподавать программирование Arduino и для этих целей даже подготовил свою Arduino-совместимую плату . С другой стороны как-то раз мне подвернулась возможность дешево изготовить платы (о чем я тоже писал). В итоге все это закончилось тем, что я использовал для управления манипулятором свою собственную Arduino-совместимую плату и специализированный шилд.
Этот шилд на самом деле очень простой. На нем четыре переменных резистора, две кнопки, пять разъемов для сервопривода и разъем питания. Это очень удобно с точки зрения отладки. Можно загрузить тестовый скетч и записать какой-нибудь макрос для управления или что-нибудь вроде того. Ссылку для скачивания файла платы я тоже дам в конце статьи, но она подготовлена для изготовления с металлизацией отверстий, так что мало пригодна для домашнего производства.
Программирование
Самое интересное, это управление манипулятором с компьютера. У uArm есть удобное приложение для управления манипулятором и протокол для работы с ним. Компьютер отправляет в COM-порт 11 байт. Первый из них всегда 0xFF, второй 0xAA и некоторые из оставшихся - сигналы для сервоприводов. Далее эти данные нормализуются и отдаются на отработку двигателям. У меня сервоприводы подключены к цифровым входам/выходам 9-12, но это легко можно поменять.Терминальная программа от uArm позволяет изменять пять параметров при управлении мышью. При движении мыши по поверхности изменяется положение манипулятора в плоскости XY. Вращение колесика - изменение высоты. ЛКМ/ПКМ - сжать/разжать клешню. ПКМ + колесико - поворот захвата. На самом деле очень удобно. При желании можно написать любой терминальный софт, который будет общаться с манипулятором по такому же протоколу.
Я не буду здесь приводить скетчи - скачать их можно будет в конце статьи.
Видео работы
И, наконец, само видео работы манипулятора. На нем показано управление мышью, резисторами и по заранее записанной программе.Ссылки
Файлы для резки оргстекла, 3D-модели, список для покупки, чертежи платы и софт можно скачать в конце моейПривет, гиктаймс!
Проект uArm от uFactory собрал средства на кикстартере уже больше двух лет назад. Они с самого начала говорили, что это будет открытый проект, но сразу после окончания компании они не торопились выкладывать исходники. Я хотел просто порезать оргстекло по их чертежам и все, но так как исходников не было и в обозримом будущем не предвиделось, то я принялся повторять конструкцию по фотографиям.
Сейчас моя робо-рука выглядит так:
Работая не спеша за два года я успел сделать четыре версии и получил достаточно много опыта. Описание, историю проекта и все файлы проекта вы сможете найти под катом.
Пробы и ошибки
Начиная работать над чертежами, я хотел не просто повторить uArm, а улучшить его. Мне казалось, что в моих условиях вполне можно обойтись без подшипников. Так же мне не нравилось то, что электроника вращается вместе со всем манипулятором и хотелось упростить конструкцию нижней части шарнира. Плюс я начал рисовать его сразу немного меньше.С такими входными параметрами я нарисовал первую версию. К сожалению, у меня не сохранилось фотографий той версии манипулятора (который был выполнен в желтом цвете). Ошибки в ней были просто эпичнейшие. Во-первых, ее было почти невозможно собрать. Как правило, механика которую я рисовал до манипулятора, была достаточно простая, и мне не приходилось задумываться о процессе сборки. Но все-таки я его собрал и попробовал запустить, И рука почти не двигалась! Все детли крутились вокруг винтов и, сли я затягивал их так, чтобы было меньше люфтов, она не могла двигаться. Если ослаблял так, чтобы она могла двигаться, появлялись невероятные люфты. В итоге концепт не прожил и трех дней. И приступил к работе над второй версией манипулятора.
Красный был уже вполне пригоден к работе. Он нормально собирался и со смазкой мог двигаться. На нем я смог протестировать софт, но все-таки отсутствие подшипников и большие потери на разных тягах делали его очень слабым.
Затем я забросил работу над проектом на какое-то время, но вскоре принял решении довести его до ума. Я решил использовать более мощные и популярные сервоприводы, увеличить размер и добавить подшипники. Причем я решил, что не буду пытаться сделать сразу все идеально. Я набросал чертежи на скорую руки, не вычерчивая красивых сопряжений и заказал резку из прозрачного оргстекла. На получившемся манипуляторе я смог отладить процесс сборки, выявил места, нуждающиеся в дополнительном укреплении, и научился использовать подшипники.
После того, как я вдоволь наигрался с прозрачным манипулятором, я засел за чертежи финальной белой версии. Итак, сейчас вся механика полностью отлажена, устраивает меня и готов заявить, что больше ничего не хочу менять в этой конструкции:
Меня удручает то, что я не смог привнести ничего принципиально нового в проект uArm. К тому времени, как я начал рисовать финальную версию, они уже выкатили 3D-модели на GrabCad. В итоге я только немного упростил клешню, подготовил файлы в удобном формате и применил очень простые и стандартные комплектующие.
Особенности манипулятора
До появления uArm, настольные манипуляторы подобного класса выглядели достаточно уныло. У них либо не было электроники вообще, либо было какое-нибудь управление с резисторами, либо было свое проприетарное ПО. Во-вторых, они как правило не имели системы параллельных шарниров и сам захват менял свое положение в процессе работы. Если собрать все достоинства моего манипулятора, то получается достаточно длинный список:- Система тяг, позволяющих разместить мощные я тяжелые двигатели в основании манипулятора, а также удерживающие захват параллельно или перпендикулярно основанию
- Простой набор комплектующих, которые легко купить или вырезать из оргстекла
- Подшипники почти во всех узлах манипулятора
- Простота сборки. Это оказалось действительно сложной задачей. Особенно трудно было продумать процесс сборки основания
- Положение захвата можно менять на 90 градусов
- Открытые исходники и документация. Все подготовлено в доступных форматах. Я дам ссылки для скачивания на 3D-модели, файлы для резки, список материалов, электронику и софт
- Arduino-совместимость. Есть много противников Arduino, но я считаю, что это возможность расширения аудитории. Профессионалы вполне могут написать свой софт на C - это же обычный контроллер от Atmel!
Механика
Для сборки необходимо вырезать детали из оргстекла толщиной 5мм:С меня за резку всех этих деталей взяли около $10.
Основание монтируется на большом подшипнике:
Особенно трудно было продумать основание с точки зрения процесса сборки, но я подглядывал за инженерами из uArm. Качалки сидят на штифте диаметром 6мм. Надо отметить, что тяга локтя у меня держится на П-образном держателе, а у uFactory на Г-образном. Трудно объяснить в чем разница, но я считаю у меня получилось лучше.
Захват собирается отдельно. Он может поворачиваться вокруг своей оси. Сама клешня сидит прямо на валу двигателя:
В конце статьи я дам ссылку на суперподробную инструкцию по сборке в фотографиях. За пару часов можно уверенно все это скрутить, если все необходимое есть под рукой. Также я подготовил 3D-модель в бесплатной программе SketchUp. Её можно скачать, покрутить и посмотреть что и как собрано.
Электроника
Чтобы заставить руку работать достаточно всего навсего подключить пять сервоприводов к Arduino и подать на них питание с хорошего источника. У uArm использованы какие-то двигатели с обратной связью. Я поставил три обычных двигателя MG995 и два маленьких двигателя с металлическим редуктором для управления захватом.Тут мое повествование тесно сплетается с предыдущими проектами. С некоторых пор я начал и для этих целей даже подготовил свою Arduino-совместимую плату . С другой стороны как-то раз мне подвернулась возможность дешево изготовить платы (о чем я тоже ). В итоге все это закончилось тем, что я использовал для управления манипулятором свою собственную Arduino-совместимую плату и специализированный шилд.
Этот шилд на самом деле очень простой. На нем четыре переменных резистора, две кнопки, пять разъемов для сервопривода и разъем питания. Это очень удобно с точки зрения отладки. Можно загрузить тестовый скетч и записать какой-нибудь макрос для управления или что-нибудь вроде того. Ссылку для скачивания файла платы я тоже дам в конце статьи, но она подготовлена для изготовления с металлизацией отверстий, так что мало пригодна для домашнего производства.
Программирование
Самое интересное, это управление манипулятором с компьютера. У uArm есть удобное приложение для управления манипулятором и протокол для работы с ним. Компьютер отправляет в COM-порт 11 байт. Первый из них всегда 0xFF, второй 0xAA и некоторые из оставшихся - сигналы для сервоприводов. Далее эти данные нормализуются и отдаются на отработку двигателям. У меня сервоприводы подключены к цифровым входам/выходам 9-12, но это легко можно поменять.Терминальная программа от uArm позволяет изменять пять параметров при управлении мышью. При движении мыши по поверхности изменяется положение манипулятора в плоскости XY. Вращение колесика - изменение высоты. ЛКМ/ПКМ - сжать/разжать клешню. ПКМ + колесико - поворот захвата. На самом деле очень удобно. При желании можно написать любой терминальный софт, который будет общаться с манипулятором по такому же протоколу.
Я не буду здесь приводить скетчи - скачать их можно будет в конце статьи.