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

Littlearm 2C:создание напечатанной на 3D-принтере руки робота Arduino

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

Arduino Nano R3
× 1
Сервоприводы (Tower Pro MG996R)
Сервоприводы MG90S
× 4
Доска Meped
× 1

Необходимые инструменты и машины

3D-принтер (общий)

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

LittleArm 2C разработан как комплект, который дети могут легко использовать, чтобы в классах STEM можно было реализовать больше учебных программ по робототехнике. Он стал более прочным, и его намного проще собирать, чтобы дети могли пользоваться им.

Все детали можно легко напечатать на 3D-принтере, и они разработаны таким образом, чтобы рука оставалась гладкой и простой. Вся конструкция состоит из менее 15 винтов.

Для управления рукой вы можете использовать наше приложение для Windows (которое изначально было написано здесь на языке Python) или через Bluetooth с приложением для Android, которое мы сделали для него.

Полные инструкции по сборке LittleArm 2C можно найти здесь.

Файлы 3D-печати можно скачать здесь.

Код

  • LittleArm 2C Arduino Sketch
LittleArm 2C Arduino Sketch C / C ++
 // Код LittleArm 2C arduino // Позволяет последовательное управление роботизированной рукой LittleArm 2C, напечатанной на 3D-принтере // Создано Slant Concepts # include  // библиотека arduino # include  // стандартный c библиотека # define PI 3.141Servo baseServo; Серво плечоServo; Серво elbowServo; Servo gripperServo; // +++++++++++++++ Глобальные переменные ++++++++++++++++++++++++++++ +++ struct JointAngle {// структура - это способ организации переменных в группу int base; внутреннее плечо; int elbow;}; struct JointAngle желаемыйAngle; // желаемые углы сервопривода желаемыйGrip; // неправильное положение захвата gripperPos; // текущая позиция команды gripperint; // набор углов сочленения int desireDelay; // задержка между шагами сервоприводов // int ready =0; // маркер, используемый для сигнализации о завершении процесса // +++++++++++++++ ФУНКЦИОНАЛЬНЫЕ ДЕКЛАРАЦИИ ++++++++++++++++++ ++++++++ int servoParallelControl (int thePos, Servo theServo); // Это функция для управления сервоприводами // ++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++ void setup () // Программа установки подготовила плату Arduino к работе {Serial.begin (9600); // Включаем USB-соединение (последовательный порт) и заставляем его обмениваться данными со скоростью 9600 бит в секунду baseServo.attach (5); // присоединяет сервопривод на выводе 5 к сервообъекту плечаServo.attach (4); // подключает сервопривод на выводе 4 к сервообъекту elbowServo.attach (3); // прикрепляет сервопривод на выводе 3 к сервообъекту gripperServo.attach (2); // присоединяет сервопривод на выводе 2 к сервообъекту Serial.setTimeout (50); // Прекращает попытки поговорить с компьютером, нет ответа через 50 миллисекунд. Гарантирует, что arduino не считывает серийный номер слишком долго Serial.println ("запущен"); // Выводим на компьютер «Запущено» baseServo.write (90); // исходное положение сервоприводов плечоServo.write (100); elbowServo.write (110); // ready =0;} // основной цикл Arduino. Здесь должна быть размещена вся ваша основная программа .void loop () {if (Serial.available ()) {// Если данные поступают через порт USB на Arduino, то ... // ready =1; // Готово установлено в 1, чтобы указать, что команда выполняется // Команды отправляются с компьютера в форме "#, #, #, #, #, \ n" // Код ниже "анализирует" эту команду в целые числа, которые соответствуют // базовому углу, углу плеча, углу локтя, углу захвата и задержке сервоприводов соответственно. желаемыйAngle.base =Serial.parseInt (); желаемыйAngle.shoulder =Serial.parseInt (); желаемыйAngle.elbow =Serial.parseInt (); желаемыйGrip =Serial.parseInt (); желаемыйDelay =Serial.parseInt (); if (Serial.read () =='\ n') {// если последний байт равен '\ n', прекратить чтение и выполнить команду '\ n' означает 'готово' Serial.flush (); // очищаем все остальные команды из буфера Serial.print ('d'); // отправляем завершение команды "d" означает "завершено выполнение"}} // Эти значения являются статусом того, достигло ли соединение своего положения // переменные, объявленные внутри некоторой части программы, например эти , называются «локальными переменными» int status1 =0; // базовый статус int status2 =0; // статус плеча int status3 =0; // статус локтя int status4 =0; // статус захвата int done =0; // это значение сообщает, когда все суставы достигли своих позиций while (done ==0) {// Цикл, пока все суставы не достигнут своих позиций &&ready ==1 // перемещаем сервопривод в желаемое положение // Этот блок код использует «Функции», чтобы сделать его более сжатым. status1 =servoParallelControl (желаемыйAngle.base, baseServo, желаемыйDelay); status2 =servoParallelControl (желаемый угол.плечо, плечоСерво, желаемая задержка); status3 =servoParallelControl (desireAngle.elbow, elbowServo, желаемыйDelay); status4 =servoParallelControl (желаемыйGrip, gripperServo, желаемыйDelay); // Проверяем, все ли суставы достигли своих позиций if (status1 ==1 &status2 ==1 &status3 ==1 &status4 ==1) {done =1; // Когда done =1, цикл остановится}} // конец while} // +++++++++++++++++++++++++++++ + ОПРЕДЕЛЕНИЯ ФУНКЦИЙ +++++++++++++++++++++++++++++++++++++++++ int servoParallelControl (int thePos , Servo theServo, int theSpeed) {// Форма функции:outputType FunctionName (inputType localInputName) // Эта функция перемещает сервопривод на определенное количество шагов к желаемой позиции и возвращает, находится ли он рядом или достиг этой позиции // thePos - желаемое положение // thServo - адресный вывод сервопривода, который мы хотим переместить // theSpeed ​​- задержка между шагами сервопривода int startPos =theServo.read (); // читаем текущую позицию сервопривода, с которым мы работаем. int newPos =startPos; // newPos удерживает позицию сервопривода при его перемещении // определяет, где находится позиция относительно команды // если текущая позиция меньше желаемой, перемещает позицию вверх if (startPos <(thePos-5)) { newPos =newPos + 1; theServo.write (newPos); задержка (скорость); возврат 0; // Сообщаем основной программе, что сервопривод не достиг своей позиции} // Иначе, если текущая позиция больше желаемой, переместите сервопривод вниз else if (newPos> (thePos + 5)) {newPos =newPos - 1; theServo.write (newPos); задержка (скорость); возврат 0; } // Если сервопривод находится в пределах + -5 в желаемом диапазоне, то сообщаем главной программе, что сервопривод достиг желаемого положения. else {return 1; }} // завершаем параллельное управление сервоприводом 

Схема

Если вы используете доску Meped Board, для которой был разработан Littlearm, то есть только четыре соединения.

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

  1. Робот Raspberry Pi, управляемый через Bluetooth
  2. Создайте своего робота для видеостриминга, управляемого через Интернет, с помощью Arduino и Raspberry Pi
  3. Робот-рука с открытым исходным кодом, напечатанная на 3D-принтере от Haddington Dynamics
  4. Робот SCARA с двумя руками
  5. Рука робота MeArm - Ваш робот - V1.0
  6. Робот-последователь линии
  7. Роботизированная рука, напечатанная на 3D-принтере Arduino
  8. Роботизированная рука, управляемая нунчук (с Arduino)
  9. Робот, управляемый речью
  10. Рука робота, управляемая через Ethernet