Littlearm 2C:создание напечатанной на 3D-принтере руки робота Arduino
Компоненты и расходные материалы
| × | 1 | ||||
| × | 4 | ||||
| × | 1 |
Необходимые инструменты и машины
|
Об этом проекте
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, то есть только четыре соединения.Производственный процесс
- Робот Raspberry Pi, управляемый через Bluetooth
- Создайте своего робота для видеостриминга, управляемого через Интернет, с помощью Arduino и Raspberry Pi
- Робот-рука с открытым исходным кодом, напечатанная на 3D-принтере от Haddington Dynamics
- Робот SCARA с двумя руками
- Рука робота MeArm - Ваш робот - V1.0
- Робот-последователь линии
- Роботизированная рука, напечатанная на 3D-принтере Arduino
- Роботизированная рука, управляемая нунчук (с Arduino)
- Робот, управляемый речью
- Рука робота, управляемая через Ethernet