Эта страница только для чтения. Вы можете посмотреть исходный текст, но не можете его изменить. Сообщите администратору, если считаете, что это неправильно. ====== Манипулятор с захватом 2 DOF ====== ===== Описание ===== Набор предназначен для самостоятельной сборки манипулятора на 2 степени свободы с механическим захватом. Первая степень отвечает за наклон захвата, вторая непосредственно отвечает за работу захвата. С помощью захвата можно перемещать различные предметы. Максимальная рабочая ширина захвата 55 мм. Манипулятор может быть установлен на шасси робота. Манипулятор приводится в движение с помощью сервоприводов. Всего в данном манипуляторе их используется 2. Чем мощнее сервоприводы, тем больший груз сможет переместить манипулятор. Например, при использовании сервоприводов с крутящим моментом около 10 кг⋅см - грузоподъемность захвата будет около 300 грамм. Мы специально не стали добавлять сервоприводы в данный набор, чтобы каждый смог подобрать их под свои индивидуальные требования. Для работы с манипулятором подойдут сервоприводы стандартного типоразмера 54х20 мм с 4 посадочными отверстиями 50х10 мм. К таковым относятся [[httpss://smartelements.ru/collection/motory-dravery-shassi/product/servoprivod-towerpro-mg995|MG995]], [[httpss://smartelements.ru/collection/motory-dravery-shassi/product/servoprivod-towerpro-mg996r|MG996R]], [[httpss://smartelements.ru/collection/motory-dravery-shassi/product/servoprivod-s3003|S3003]], [[httpss://smartelements.ru/collection/motory-dravery-shassi/product/servoprivod-ds04-nfc-360|DS04-NFC 360]], [[httpss://smartelements.ru/collection/motory-dravery-shassi/product/servoprivod-td8120mg|TD8120]] и многие другие. Подбор сервоприводов должен осуществляться на основе необходимых требований к грузоподъемности, причем чем больше рабочее плечо, тем мощнее должен быть сервопривод. Например, для работы захвата может быть использован менее мощный сервопривод, а для его наклона потребуется наоборот более мощный, поскольку рабочее плечо уже будет больше. Максимальная длина манипулятора составляет 21 см. Манипулятор выполнен из сплава алюминия с нанесенным защитным покрытием. Общий вес манипулятора без сервоприводов составляет 140 г. Набор для сборки манипулятора выполнен в формате конструктора, все его детали можно комбинировать друг с другом в различном порядке и последовательности, отличном от стандартной конструкции. Вы сможете добавить дополнительные новые элементы или наоборот убрать ненужные. <WRAP center round important 80%> Обратите внимание, что при использовании мощных сервоприводов потребуется внешнее питание - подключать все сервоприводы напрямую к контроллеру небезопасно. Требуемая мощность источника тока определяется на основе выбранных вами сервоприводов. </WRAP> Для управления манипулятором можно использовать любой контроллер, в том числе и Arduino. Для удобства работы с Arduino Uno и Arduino Mega используйте модуль джойстика - с его помощью можно управлять манипулятором вручную. Также вы можете задать программно определенный алгоритм работы манипулятора без ручного управления. ==== Комплектация ==== * комплект деталей для сборки манипулятора x1 * инструкция по сборке х1 * пакет упаковочный х1 * **Сервоприводы в комплект не входят**. ==== Ресурсы для загрузки: ==== * [[https://files.smartelements.ru/datasheet/SE_2DOF.pdf|Инструкция по сборке манипулятора]] ===== Пример работы с манипулятором ===== ==== Пример №1 ==== **Описание:** В примере управление сервоприводами манипулятора производится с помощью модуля джойстика. Каждое изменение положения джойстика, влияет на поворот сервопривода. Для примера понадобится: ^ Что нужно ^ Количество ^ | [[httpss://smartelements.ru/collection/kontrollery/product/kontroller-smart-uno|Контроллер]] | 1 | | [[httpss://smartelements.ru/collection/shildy/product/sensor-shield|Sensor shield]] | 1 | | [[httpss://smartelements.ru/collection/motory-dravery-shassi/product/manipulyator-s-zahvatom-2-dof|Манипулятор 2 DOF]] | 1 | | [[httpss://smartelements.ru/collection/motory-dravery-shassi/product/servoprivod-td8120mg|Сервопривод TD8120MG]] | 2 | <file Arduino> #include <Servo.h> // подключение библиотеки для работы с сервоприводом #define SERVOS_COUNT 2 // количество сервоприводов Servo myservos[SERVOS_COUNT]; // создание объектов для работы с сервоприводами int servos_pins[SERVOS_COUNT] = {6, 5}; // выводы подключения сервоприводов int joy_pins[SERVOS_COUNT] = {A0, A1}; // выводы подключения джойстика void setup() { for (byte i = 0; i < SERVOS_COUNT; i++) { // цикл по количеству сервоприводов myservos[i].attach(servos_pins[i], 500, 2500); // подключение и инициализация сервоприводов } } void loop() { for (byte i = 0; i < SERVOS_COUNT; i++) { // в цикле: int ang = analogRead(joy_pins[i]); // получить текущее значение от джойстика ang = map(ang, 0, 1024, 0, 180); // ограничить значение от 0 до 180 myservos[i].write(ang); // повернуть сервопривод на полученное значение } } </file> Минусом данного варианта управления джойстиком является то, что когда джойстик возвращается "домой", сервопривод повторяет его движение. Таким образом невозможно зафиксировать положение манипулятора. Исправить эту особенность мы постараемся в примере №2. ==== Пример №2 ==== **Описание:** В примере управление сервоприводами манипулятора производится с помощью модуля джойстика. Каждое изменение положения джойстика, влияет на поворот сервопривода, но при этом одно сервопривод фиксируется в определённом положении. Каждое движение джойстика, поворачивает сервопривод на ту или иную позицию. Для примера понадобится: ^ Что нужно ^ Количество ^ | [[httpss://smartelements.ru/collection/kontrollery/product/kontroller-smart-uno|Контроллер]] | 1 | | [[httpss://smartelements.ru/collection/shildy/product/sensor-shield|Sensor shield]] | 1 | | [[httpss://smartelements.ru/collection/motory-dravery-shassi/product/manipulyator-s-zahvatom-2-dof|Манипулятор 2 DOF]] | 1 | | [[httpss://smartelements.ru/collection/motory-dravery-shassi/product/servoprivod-td8120mg|Сервопривод TD8120MG]] | 2 | <file Arduino> #include <Servo.h> // подключение библиотеки для работы с сервоприводом #define SERVOS_COUNT 2 // количество сервоприводов Servo myservos[SERVOS_COUNT]; // создание объектов для работы с сервоприводами int servos_pins[SERVOS_COUNT] = {6, 5}; // выводы подключения сервоприводов int joy_pins[SERVOS_COUNT] = {A0, A1}; // выводы подключения джойстика int angs[SERVOS_COUNT] = {90, 90}; // хранение текущих углов поворота void setup() { Serial.begin(9600); // инициализация сериал порта для вывода отладочной информации for (byte i = 0; i < SERVOS_COUNT; i++) { // в цикле myservos[i].attach(servos_pins[i], 500, 2500); // подключение сервопривода } } void loop() { for (byte i = 0; i < SERVOS_COUNT; i++) { // в цикле (по количеству сервоприводов) int x = analogRead(joy_pins[i]); // получение текущей позиции джойстика int new_ang = angs[i]; // чтение текущего угла поворота сервопривода if (x < 100) { // если значение джойстика меньше 100 new_ang += 1; // увеличить угол на 1 градус } else if (x > 924) { // если значение джойстика больше 924 new_ang -= 1; // уменьшить угол на 1 градус } else { // иначе continue; // считается что джойстик не двигался } if (i == 0) { // если это первый сервопривод (сам захват) new_ang = constrain(new_ang, 80, 145); // то ограничить угол между 80 и 145 градусами } else { // иначе new_ang = constrain(new_ang, 0, 180); // ограничить между 0 и 180 } if (new_ang != angs[i]) { // если новый угол отличается от старого angs[i] = new_ang; // зафиксировать новое значение Serial.print("New ang joy #"); // вывести отладочную информацию Serial.print(i); // вывести отладочную информацию Serial.print(" is "); // вывести отладочную информацию Serial.println(new_ang); // вывести отладочную информацию myservos[i].write(new_ang); // повернуть сервопривод на новый угол } } } </file>