Оглавление:

Рука робота с проводным управлением: 31 шаг
Рука робота с проводным управлением: 31 шаг

Видео: Рука робота с проводным управлением: 31 шаг

Видео: Рука робота с проводным управлением: 31 шаг
Видео: 5 СТРАШНЫХ вещей сказанных роботами 2024, Ноябрь
Anonim
Рука робота с проводным управлением
Рука робота с проводным управлением

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

3D-распечатки:

Здесь и здесь

Запасы

6 серводвигателей (MG995)

Ардуино Уно

Около 6 метров стальной проволоки с пластиковым покрытием (0,5 мм)

Коробка 23х33х10 (может и уже, короче точно не должно)

Доска деревянная 33х10

Гайки и болты

Трубка 14 см (нужна для направления струн)

4 L-образных кронштейна

Адаптер на 5 вольт

2 7-контактных клеммных колодки

Макетные провода

Компоненты, напечатанные на 3D-принтере (не мной, ссылки на элементы в описании):

3 «Болта»

2 «Элемент 1»

1 «Элемент 2»

2 «Элемент 3»

1 базовый разъем

Шаг 1. Распечатайте все 3D-компоненты

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

Шаг 2: (Необязательно) Прикрепите деревянную доску к нижней части коробки, чтобы укрепить ее

Моя коробка была довольно слабой, твоя может и не быть

Шаг 3: Измерьте и отрежьте деревянную доску по размеру коробки

Шаг 4: Отметьте положения моторов

убедитесь, что руки не касаются друг друга

Шаг 5: Отметьте положения кронштейнов и трубы

Отметьте положения кронштейнов и трубы
Отметьте положения кронштейнов и трубы

Трубку следует поместить примерно на один сантиметр перед отверстием.

Шаг 6. Просверлите отверстие для кабелей, выходящих из коробки (USB и питание)

Просверлите отверстие для кабелей, выходящих из коробки (USB и питание)
Просверлите отверстие для кабелей, выходящих из коробки (USB и питание)

Шаг 7: просверлите и распилите все отмеченные отверстия

Просверлите и распилите все отмеченные отверстия
Просверлите и распилите все отмеченные отверстия

Шаг 8: прикрепите моторы и трубу к доске

Шаг 9: прикрепите планку к коробке с помощью L-образных скоб

Шаг 10: возьмите клеммные колодки и спаяйте провода вместе

Возьмите клеммные колодки и спаяйте провода вместе
Возьмите клеммные колодки и спаяйте провода вместе

Шаг 11. Обрежьте конец шнура питания адаптера и зачистите провода

Шаг 12: Найдите и пометьте плюсовой и минусовой провода

Шаг 13: Подсоедините провода к клеммным колодкам так, чтобы все + сервопроводы и + провод от шнура питания были подключены, то же самое касается - проводов

Подсоедините провода к клеммным колодкам так, чтобы все + сервоприводы и + провод от шнура питания были подключены, то же самое касается - проводов
Подсоедините провода к клеммным колодкам так, чтобы все + сервоприводы и + провод от шнура питания были подключены, то же самое касается - проводов

Шаг 14: Отрежьте голову от провода макета

Отрежьте голову от провода макета
Отрежьте голову от провода макета

Присоедините зачищенный конец провода макета к минусовой клеммной колодке, а конец штыря - к контакту заземления в вашем Arduino. Если вы этого не сделаете, двигатели будут беспорядочно вращаться без каких-либо действий.

Шаг 15: Просверлите три отверстия в нижней части коробки для проводов, выходящих из вашей руки

Отверстия должны совпадать с отверстиями в базовом соединителе.

Шаг 16: прикрепите базовый соединитель к коробке

Присоедините базовый соединитель к коробке
Присоедините базовый соединитель к коробке

Шаг 17: используйте нож или пилку, чтобы сделать канавки для проволоки глубже

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

Канавки для проволоки для элементов 2 и 3 слишком мелкие.

Шаг 18: конструируйте руку

Постройте руку
Постройте руку

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

Шаг 19: установите Processing и Arduino

Обработка и Ардуино

Шаг 20: Вставьте код программы

Код находится внизу этой страницы

Шаг 21: Подключите выводы сервоуправления к Arduino

Подключите выводы сервоуправления к Arduino
Подключите выводы сервоуправления к Arduino

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

Шаг 22: нажмите кнопку сброса в процессе обработки, это установит все руки на 90 градусов

Шаг 23: закрепите сервомеханизмы на двигателе горизонтально

Шаг 24. Проденьте провода через руки, чтобы не было провисания

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

Шаг 25: проверьте рычаг и затяните или ослабьте провода по мере необходимости

Шаг 26: приклейте провода к сервоприводам горячим способом, чтобы сделать их прочными

Шаг 27: Примечания

Примечания
Примечания

Я использовал ювелирную проволоку 0,5 мм, но 0,4 мм должно подойти. В первоначальной конструкции использовалась проволока из ПВХ, но она слишком легко ломалась, и с ней было трудно работать.

Если вы собираетесь перемещать руку в машине или велосипеде, оберните суставы рук лентой, чтобы они не выскочили. Это особенно важно для элемента 1.

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

Шаг 28: Устранение неполадок

Отверстия для проводов в 3D-печатных элементах заделаны:

Вы добавили опору для всего элемента, а не только для отверстий под болты. Либо перепечатайте элемент, либо раскройте отверстия очень горячей иглой.

COM-порт закрыт, вы не можете общаться с ардуино:

Ваш arduino может не принимать порты USB 3 (у меня не было), вы можете купить удлинительный кабель USB 2 или использовать компьютер с портами USB 2.

Код не работает:

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

Часть руки не двигается:

Провода могли запутаться, чтобы проверить это, снимите сервомеханизм с сервопривода и попробуйте потянуть за провода рукой. Распутайте провода и, если тянуть за провода по-прежнему сложно, попробуйте использовать немного WD-40 или смазку, чтобы облегчить движение.

Шаг 29: ссылки

Не роботизированная рука:

3D-распечатки Arm:

3D-печать My Arm:

Arduino и обработка:

Шаг 30: Код

Изменено из этого кода

Код Arduino:

#include // Объявление двигателей Servo myservo1; Серво myservo2; Сервомашинка3; Сервомашинка4; Серво myservo5; Сервомашинка6; // Все двигатели по умолчанию установлены под углом 90 градусов int current1 = 90; int current2 = 90; int current3 = 90; int current4 = 90; int current5 = 90; int current6 = 90; // Минимальный и максимальный градусы, которых могут достичь двигатели int mini1 = 0; int maxi1 = 180; int mini2 = 0; int maxi2 = 180; int mini3 = 0; int maxi3 = 180; int mini4 = 0; int maxi4 = 180; int mini5 = 0; int maxi5 = 180; int mini6 = 0; int maxi6 = 180; // Градусы, которые должны быть добавлены или вычтены из текущей позиции int sizesFoward = 5; // Задержка, чтобы две функции не выполнялись в неправильном порядке int delayBetweenSteps = 100; void setup () {// Устанавливаем контрольные штифты для каждого двигателя myservo1.attach (3); myservo2.attach (4); myservo3.attach (5); myservo4.attach (6); myservo5.attach (7); myservo6.attach (8); // Устанавливаем для всех моторов настройки по умолчанию myservo1.write (current1); myservo2.write (current2); myservo3.write (current3); myservo4.write (current4); myservo5.write (current5); myservo6.write (current6); // запуск последовательной связи при 9600 бит / с Serial.begin (9600); } void loop () {if (Serial.available ()) {// если данные доступны для чтения char val = Serial.read (); // помещаем его в этот символ // Управление двигателем if (val == 'a' && current1 + degFoward mini1) {myservo1.write (current1 - degFoward); current1 = current1 - градусы вперед; задержка (задержка между шагами); } if (val == 'c' && current2 mini2) {myservo2.write (current2 - градусы вперед); current2 = current2 - градусы вперед; задержка (задержка между шагами); } if (val == 'e' && current3 mini3) {myservo3.write (current3 - градусы вперед); current3 = current3 - градусы вперед; задержка (задержка между шагами); } if (val == 'g' && current4 mini4) {myservo4.write (current4 - градусы вперед); current4 = current4 - градусы вперед; задержка (задержка между шагами); } if (val == 'i' && current5 mini5) {myservo5.write (current5 - градусы вперед); current5 = current5 - градусы вперед; задержка (задержка между шагами); } if (val == 'k' && current6 mini6) {myservo6.write (current6 - градусы вперед); current6 = current6 - градусы вперед; задержка (задержка между шагами); } // Управление скоростью if (val == 'w') {// Если нажата кнопка скорости 1, градусовFoward = 1; задержка (задержка между шагами); } if (val == 'x') {// Если нажата кнопка скорости 5 градусовFoward = 5; задержка (задержка между шагами); } if (val == 'y') {// Если нажата кнопка скорости 10 градусовFoward = 10; задержка (задержка между шагами); } if (val == 'z') {// Если нажата кнопка скорости 20 градусовFoward = 20; задержка (задержка между шагами); } if (val == 'r') {// Если нажата кнопка скорости 20 myservo1.write (90); current1 = 90; myservo2.write (90); current2 = 90; myservo3.write (90); current3 = 90; myservo4.write (90); current4 = 90; myservo5.write (90); current5 = 90; myservo6.write (90); current6 = 90; задержка (задержка между шагами); }}}

Код обработки:

import processing.serial. *; контроль импорта P5. *; // импортировать библиотеку ControlP5 Последовательный порт; ControlP5 cp5; // создать объект ControlP5 PFont font; void setup () {// то же, что и размер программы arduino (300, 700); // размер окна, (ширина, высота) printArray (Serial.list ()); // распечатывает все доступные последовательные порты // Если у вас возникла проблема, она, вероятно, исходит отсюда String portName = Serial.list () [0]; порт = новый последовательный (this, portName, 9600); // я подключил arduino к com3, в linux и mac os все будет по-другому // давайте добавим кнопку в пустое окно cp5 = new ControlP5 (this); font = createFont («Arial», 13); // настраиваемые шрифты для кнопок и заголовка // Кнопки управления скоростью cp5.addButton ("One") // "One" - это имя кнопки.setPosition (50, 50) // Координаты x и y верхнего левого угла кнопки.setSize (55, 25) // (ширина, высота).setFont (font); cp5.addButton ("Пять").setPosition (110, 50).setSize (55, 25).setFont (шрифт); cp5.addButton ("Десять").setPosition (170, 50).setSize (55, 25).setFont (шрифт); cp5.addButton ("Двадцать").setPosition (230, 50).setSize (55, 25).setFont (шрифт); cp5.addButton ("Сброс").setPosition (110, 2).setSize (55, 25).setFont (шрифт); cp5.addButton ("Servo_1_Foward").setPosition (50, 90).setSize (190, 40).setFont (шрифт); // Кнопки управления двигателем cp5.addButton ("Servo_1_Back").setPosition (50, 140).setSize (190, 40).setFont (font); cp5.addButton ("Servo_2_Foward").setPosition (50, 190).setSize (190, 40).setFont (шрифт); cp5.addButton ("Servo_2_Back").setPosition (50, 240).setSize (190, 40).setFont (шрифт); cp5.addButton ("Servo_3_Foward").setPosition (50, 290).setSize (190, 40).setFont (шрифт); cp5.addButton ("Servo_3_Back").setPosition (50, 340).setSize (190, 40) // (ширина, высота).setFont (font); cp5.addButton ("Servo_4_Foward").setPosition (50, 390).setSize (190, 40).setFont (шрифт); cp5.addButton ("Servo_4_Back").setPosition (50, 440).setSize (190, 40) // (ширина, высота).setFont (font); cp5.addButton ("Servo_5_Foward").setPosition (50, 490).setSize (190, 40).setFont (шрифт); cp5.addButton ("Servo_5_Back").setPosition (50, 540).setSize (190, 40).setFont (шрифт); cp5.addButton ("Servo_6_Foward").setPosition (50, 590).setSize (190, 40).setFont (шрифт); cp5.addButton ("Servo_6_Back").setPosition (50, 640).setSize (190, 40).setFont (шрифт); } void draw () {// то же, что и цикл в фоновом режиме Arduino (192, 215, 249); // цвет фона окна (r, g, b) или (от 0 до 255) // Добавить текст, говорящий, что управление скоростью - это управление скоростью fill (0, 10, 25); // цвет текста (r, g, b) textFont (font); текст («Контроль скорости», 50, 40); // ("текст", координата x, координата y)} // позволяет добавить некоторые функции к нашим кнопкам // поэтому, когда вы нажимаете любую кнопку, он отправляет определенный символ через последовательный порт // Я уверен, что можно отправлять строки вместо символов, и это имело бы смысл, но я не знаю, как это сделать // Команды управления скоростью void One () {port.write ('w'); } void Five () {порт.write ('x'); } void Ten () {port.write ('у'); } void Twenty () {порт.write ('z'); } // Команды управления двигателем void Servo_1_Foward () {port.write ('a'); } void Servo_1_Back () {порт.write ('б'); } void Servo_2_Foward () {порт.write ('c'); } void Servo_2_Back () {порт.write ('d'); } void Servo_3_Foward () {порт.write ('е'); } void Servo_3_Back () {порт.write ('е'); } void Servo_4_Foward () {порт.write ('g'); } void Servo_4_Back () {порт.write ('ч'); } void Servo_5_Foward () {порт.write ('я'); } void Servo_5_Back () {порт.write ('j'); } void Servo_6_Foward () {порт.write ('k'); } void Servo_6_Back () {порт.write ('l'); } void Reset () {порт.write ('r'); }

Шаг 31: дополнительные изображения

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