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

Локальная и удаленная программируемая роботизированная рука

Компоненты и расходные материалы

Arduino Mega 2560
× 1
SainSmart DIY 3-осевая модель руки робота-палетоукладчика для Arduino UNO MEGA2560
× 1
Комплект для рук робота MeArm DIY
× 1
ЖК-экран с подсветкой Adafruit RGB - 16x2
× 1
Android-устройство
× 1
Поворотный потенциометр (общий)
10 кОм
× 4
Кнопочный переключатель SparkFun, 12 мм
× 3
LED (общий)
КРАСНЫЙ, СИНИЙ, ЗЕЛЕНЫЙ, ЖЕЛТЫЙ
× 4

Приложения и онлайн-сервисы

IDE Arduino
MIT App Inventor 2

Об этом проекте

Целью данного руководства является пошаговая разработка проекта управления и программирования манипулятора робота, имитирующего основные функции промышленного робота.

Шаг 1. Технические характеристики

Робот выполняет две основные функции:

  • Программа :Запись положений рук в трех измерениях (каждая запись представляет собой «шаг»)
  • Выполнить :Выполните последовательно позиции, записанные в «Программе». Робот будет запускать программу до тех пор, пока не будет использована команда «ABORT».

Основные характеристики:

  • В проекте можно управлять роботами с 3 или 4 степенями свободы.
  • Роботом можно управлять в режимах "ЛОКАЛЬНЫЙ" и "УДАЛЕННЫЙ" (последний - через Android-устройство).
  • На этапе программирования пользователь может изменить режим управления с "МЕСТНЫЙ" на "УДАЛЕННЫЙ" и наоборот.
  • Информация для пользователя будет предоставляться через цветные светодиоды, двухстрочный светодиодный дисплей и звук (зуммер).
  • Звуковой сигнал также можно активировать удаленно.

Шаг 2. Проект

Блок-схема на предыдущем шаге показывает «Спецификацию материалов», которая будет использоваться в этом проекте.

Я выбрал Arduino MEGA, чтобы не беспокоиться о количестве доступных портов Arduino (ввод / вывод). UNO, например, будет работать без проблем, но следует использовать метод расширения порта. Есть несколько вариантов, которые можно легко найти в Интернете, например, декодер 74138.

Здесь Первый прототип программируется в «локальном режиме».

Для сети Bluetooth будет использоваться HC-06.

Приложение Android, используемое для « удаленного режима ", был разработан с использованием инструмента MIT Appinventor2, который представляет собой мощную единую платформу для такого рода приложений на базе устройств Android. Приложение доступно для бесплатной загрузки в магазине Google:MJRoBot Arduino Robot Arm Control.

Видео ниже может дать вам представление о том, каким должен быть окончательный проект с удаленным программированием:

Шаг 3. Разработка проекта

Роботизированные руки можно классифицировать по количеству «суставов» или «степеней свободы» (DOF), которые они имеют.

  • " База "или" Талия ", обычно может поворачивать руку на 180o или 360o, в зависимости от типа используемого сервопривода (здесь, в этом проекте, использовался сервопривод на 180o).
  • " Плечо ", отвечает за" подъем или опускание "руки по вертикали.
  • " Локоть "заставит руку" двигаться вперед или назад ".
  • " Коготь "или" Захват "работает, открываясь или закрываясь для" захвата вещей ".

Шаг 4. Схема

Сервомоторы будут использоваться для привода суставов, подключенных напрямую к Arduino. Обратите внимание, что нередки случаи, когда в основании используются «Шаговые двигатели» для увеличения крутящего момента и точности. Правильный выбор сервоприводов очень важен (есть дешевые китайские сервоприводы, которые очень плохо сконструированы, такие как MG995, которые, к сожалению, поставляются с моим SanSmart 3DOF AARM). Но для предложения этот проект работал нормально.

Источник постоянного тока для сервоприводов должен быть отделен от Arduino и других компонентов. Внешний источник питания 5 или 6 В должен работать без проблем (проверьте технические данные своих серворов, чтобы убедиться в правильности диапазона напряжений). Обычной практикой также является использование конденсаторов емкостью 470 мкФ между VCC и GND, чтобы минимизировать шум, создаваемый двигателями постоянного тока внутри серворов. Обязательно подключите все «земли» (внешний источник питания к контакту Arduino GND).

Если сервоприводы имеют проблемы и сильно вибрируют, отрегулируйте «задержки» вашего кода. Важно, чтобы сервоприводы успели добраться до определенной точки до получения новой команды. Также стоит проверить, являются ли сервоприводы цифровыми или аналоговыми, как будто они механически похожи, цифровые работают с частотой 300 Гц, а аналоговые - 50 Гц. Стандартная библиотека Arduino " Servo.h "был разработан для аналоговых сервоприводов и может быть изменен при необходимости для лучшего функционирования с цифровыми сервоприводами.

На приведенном выше рисунке показана полная схема.

Шаг 5. Код

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

ArmDefine.h

Этот файл также должен установить минимальный, максимальный и начальный углы сервопривода. Код, включенный в это руководство, имеет два набора параметров для роботизированных манипуляторов, которые я тестировал в своем проекте (конечно, следует использовать только группу констант):

  // MeArm 4-DOF # define minGrip 15 #define minBase 0 #define minShou 60 #define minElbw 60 #define maxGrip 45 #define maxBase 170 # define maxShou 180 #define maxElbw 150 #define midGrip 30 #define midBase 87 # define midShou 138 #define midElbw 100 / * SS 3-DOF #define minGrip 75 #define minBase 5 #define minShou 5 #define minElbw 0 #define maxGrip 125 #define maxBase 150 # define maxShou 155 #define maxElbw 0 #define midGrip 100 # определить midBase 90 # определить midShou 90 # определить midElbw 0 * /  

У каждого типа руки свой набор параметров, и важно, чтобы вы подобрали для себя то, что вам нужно. Я предлагаю, чтобы изначально потенциометры (потенциометры) оставались в средней точке, а отображение выходов ШИМ было установлено на значения по умолчанию: Max =255 , Мин. =0 и Mid =126 (" #defines "выше). Затем начните менять потенциометры (один за другим) и следите за последовательным монитором (или ЖК-дисплеем), какие должны быть минимальные и максимальные значения, при которых рычаг работает правильно. Это будут окончательные значения, которые будут использоваться для настройки (измените мои исходные значения в ArmDefine.h) .

Для «записи» наборов координат (или шагов), которые должен воспроизвести робот, я буду использовать массивы данных:

  int gripPosition [100]; int basePosition [100]; int shouPosition [100]; int elbwPosition [100]; int positionIndex =0; // Индекс, который будет использоваться в массиве позиций, используемом для записанных задач  

Обратите внимание, что я не сохраняю "сохраненную" позицию, и в конце программы "робот" индекс возвращается к нулю, и робот будет ждать записи новой последовательности (программа потеряна). В качестве альтернативы вы можете хранить эти массивы данных, например, в EEPROM Arduino. При этом программа будет выполнена снова или даже у вас может быть несколько сохраненных программ.

Шаг 6. Логика программы

Основной блок («Цикл») действительно довольно прост:

Проверить, использовалась ли команда на выполнение «программы» (последовательность шагов).

  • Если да, запустите.
  • В противном случае «программа» не завершена и все равно необходимо написать новые шаги.
  • Если определена «новая позиция», добавьте ее в программу.
  • Сначала проверяет сообщения, поступающие в последовательный буфер с устройства Android.
  • Затем проверяет, выбран ли режим управления «Локальный» или «Удаленный» (по умолчанию - «Локальный»).
  • Вернитесь к началу и повторите шаг 1.
  void loop () {checkBTcmd (); defineLocalRemote (); execTaskCmd =digitalRead (execTaskPin); if (execTaskCmd ==|| HIGH command =="runon") {RunProgram (); } еще recArmPosition (); command ="";}  

Функция checkBTcmd () собирает строку, используя отдельные символы, поступающие из модуля BT. Эта строка передается в переменную « command ".

Функция defineLocalRemote () считает переменную " command "проверка того, получена ли одна команда на изменение режима на удаленный или наоборот. Команда тревоги также анализируется здесь. Для логики программы, если" Тревога "срабатывает в устройстве Android, рука обязательно должна перейти к удаленному режим.

Функция RunProgram () выполняет подготовку, включает / выключает светодиоды и т. д. и особенно вызывает функцию: ExecuteTask () . Последняя функция содержит логику выполнения последовательности шагов. Функция увеличивает " positionIndex "отправка данных о положении в руку по одному с помощью инструмента: armPosition (захват, основание, плечо, локоть) .

Наконец, функция, которая действительно управляет сервоприводами и записывает «шаги», - это recArmPosition () . В зависимости от получения команды Android эта функция будет определять положение сервоприводов, которое может осуществляться через потенциометры или через «ползунки» приложения Android. При каждом изменении положения эта функция отправляет координаты сервоприводам с помощью armPosition функция (хват, основание, плечо, локоть). Считывание реального положения горшков или ползунков и соответствующая активация сервоприводов происходит к моменту запуска команды «СОХРАНИТЬ» или «ПРОГРАММА». В этот момент индекс позиции массивов увеличивается и шаг сохраняется.

Чтобы упростить понимание, весь код был основан на его конкретных функциях. " Настройка " "," Цикл "и практически все функции, описанные выше, находятся в файле: MJRoBot_Arm_Robot_Task_Prgm.ino

Более общие функции, такие как команда чтения BT: void checkBTcmd () ; генератор звука: void beep (int pin, int freq, long ms) и устранение неполадок: логическое отклонение (int pin) ; находятся в файле: General_Functions.ino

Важный факт:поскольку Arduino выполняет инструкции на основе тактовой частоты 16 МГц, ожидается, что кнопки управления будут считываться сотни или даже тысячи раз в секунду, поэтому важно сделать кнопку «debouncing», которая устанавливает шаг записи. .

Четвертый и последний файл: Arm_Ctrl_and_Display.ino

В этом файле находятся функции считывания потенциометра: bool readPotenciometer () ; чтение ползунков Android: bool readSliders () ; размещение сервоприводов: void armPosition (int gripp, int basee, int плечо, локоть int) . Другие функции, включенные в файл, предназначены для отображения данных на ЖК-дисплее, последовательного монитора, сигналов тревоги и т. Д.

На видео показано, как роботизированная рука 4DOF "meArm" программируется удаленно через приложение Android . .

Полный исходный код проекта можно найти на GITHUB:

https://github.com/Mjrovai/MJRoBot-Programmed-Arm

или здесь:

F49C85FIL8CVX0P.ino FC4OQJNIL8CVX1C.h FBYPQAMIL8CVX1D.ino F2SBAXVIL8CVX1E.ino

Шаг 7. Заключение

Как всегда, я надеюсь, что этот проект поможет другим найти свой путь в захватывающем мире электроники, робототехники и Интернета вещей! Чтобы узнать больше о проектах, посетите мой блог:MJRoBot.org

Салудо с юга мира! Увидимся на моем следующем уроке!

Спасибо

Марсело

Код

  • Фрагмент кода №1
  • Фрагмент кода №2
  • Фрагмент кода №3
Фрагмент кода №1 Arduino
 // MeArm 4-DOF # define minGrip 15 #define minBase 0 #define minShou 60 #define minElbw 60 #define maxGrip 45 #define maxBase 170 # define maxShou 180 #define maxElbw 150 #define midGrip 30 #define midBase 87 # define midShou 138 #define midElbw 100 / * SS 3-DOF #define minGrip 75 #define minBase 5 #define minShou 5 #define minElbw 0 #define maxGrip 125 #define maxBase 150 #define maxShou 155 #define maxElbw 0 #define midGrip 100 # определить midBase 90 # определить midShou 90 # определить midElbw 0 * / 
Фрагмент кода 2 Arduino
 int gripPosition [100]; int basePosition [100]; int shouPosition [100]; int elbwPosition [100]; int positionIndex =0; // Индекс, который будет использоваться в массиве позиций, используемом для записанных задач 
Фрагмент кода 3 Arduino
 void loop () {checkBTcmd (); defineLocalRemote (); execTaskCmd =digitalRead (execTaskPin); if (execTaskCmd ==|| HIGH command =="runon") {RunProgram (); } еще recArmPosition (); command ="";} 
Github
https://github.com/Mjrovai/MJRoBot-Programmed-Armhttps://github.com/Mjrovai/MJRoBot-Programmed-Arm

Схема

Рука робота
https://github.com/Mjrovai/MJRoBot-Programmed-Arm/blob/master/Arm_Robot_Task_Program_Man_BT_16_fev_16/Arm%20Robot%20Diagram.png

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

  1. Универсальный пульт дистанционного управления с использованием Arduino, 1Sheeld и Android
  2. Робототехническое оружие в производстве и его преимущества
  3. Различия между роботом-манипулятором и роботизированной рукой
  4. ЖК-анимация и игры
  5. Вольтметр своими руками с использованием Arduino и смартфона
  6. Использование Интернета вещей для удаленного управления манипулятором
  7. Роботизированная рука, напечатанная на 3D-принтере Arduino
  8. Роботизированная рука, управляемая нунчук (с Arduino)
  9. DIY вольтметр с Arduino и дисплеем Nokia 5110
  10. Простая и умная роботизированная рука с использованием Arduino