Робот-платформа с манипулятором на ATmega

Робот-платформа с манипулятором на ATmega Конструкторы

Основные узлы для проекта манипулятора

Давайте начнем разработку. Вам понадобятся:

Для управления:

  • Плата Arduino Uno (в проекте использована самодельная плата, которая полностью аналогична Arduino);
  • плата питания (вам придется ее сделать самим, к этому вопросу мы вернемся позже, он требует отдельного внимания);
  • блок питания (в данном случае используется блок питания компьютера);
  • компьютер для программирования вашего манипулятора (если вы используете для программирования Arduino, значит, среда Arduino IDE)

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

Что же нам нужно купить?

Все цены привожу на момент написания статьи (июль 2020 года):

1) 6 моторчиков DYNAMIXEL AX-12A

Я покупал по цене 7200 руб за 1 штуку, но, кажется, можно найти и за 6000 при большом желании. Будем считать, что вам не повезет и вы тоже купите за 7200.Суммарная стоимость: 43 200 руб

2) 3D принтер

Подойдет любой простенький, можно уложиться в 20 000 руб.

3) Arduino Uno Power Shield

Стоимость: ~4 000 руб

4) Опционально (но я очень рекомендую): Лабораторный источник питания

Стоимость: ~3 500 руб

Общее описание проекта робота-манипулятора

В проекте использовано 6 серводвигателей. Для механической части использован акрил толщиной 2 миллиметра. В качестве штатива пригодилось основание от диско-шара (один из двигателей вмонтирован внутрь). Также использован ультразвуковой датчик расстояния и светодиод диаметром 10 мм.

Для управления роботом используется Arduino плата питания. Сам источник питания – блок питания компьютера.

В проекте изложены исчерпывающие пояснения по разработке робо-руки. Отдельно рассмотрены вопросы питания разработанной конструкции.

А что с реальной рукой?

Переместимся из мира 3D моделей в суровую реальность. У нас есть собранный ранее манипулятор. Хотелось бы его как-то подвигать. Сделаем это с помощью Arduino UNO и Power Shield.

Подключим первый моторчик манипулятора (который снизу) к Power Shield’у и блоку питания следующим образом:

Да, data pin моторчика мы соединим сразу с 3 и 4 выводом Arduino. Пытливый читатель мануала Dynamixel (вот он) сразу заметит, что связь с внешним миром у моторчика организована по Half Duplex Asynchronous Serial Communication, а это означает, что data pin используется сразу и для получения команд и для ответа.

По умолчанию, на аппаратном уровне Arduino умеет работать только с Full Duplex UART. Эту проблему можно обойти, используя Soft Serial библиотеку, что мы и сделаем. Именно использование Half Duplex режима объясняет подключение data pin мотора к 3 и 4 выводам шилда одновременно.

Помимо полудуплексного обмена работа с Dynamixel через Arduino имеет еще пару занимательных моментов, которые могут быть не совсем очевидны с самого начала. Сведем их все воедино.

Делаем 3d модель

Класс! Рука у нас есть, но ведь ей же нужно как-то управлять. Хочется максимально использовать достижения человечества, поэтому установим себе ROS.

Для того, чтобы полноценно работать с манипулятором в ROS – нужно сделать его URDF модель. Она будет нам необходима для того, чтобы управлять робо-рукой с помощью пакета MoveIT!На момент написания статьи последняя стабильная сборка доступна для Melodic/Ubuntu 18.04, чем и объясняется мой выбор версии системы и фреймворка в начале статьи.

Построение URDF модели – довольно трудоемкая (и, на мой взгляд, самая скучная) часть данного проекта. Нужно немного допилить напильником stl модели компонентов и соединить их воедино в XML-образном файле, вручную подбирая правильные коэффициенты смещения деталей друг относительно друга.

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

Добавление подсветки на манипулятор

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

Места для установки светодиодов зависят от вашего креатива и фантазии.

Как подвигать наш манипулятор?

1) Сначала скачаем нужную библиотеку. Она называется ardyno и ее можно получить через Arduino Library Manager, либо тут (ссылка)

2) По умолчанию Dynamixel AX-12A хотят работать с baud rate = 1000000. Однако Software Serial Interface не потянет такую скорость, поэтому baud rate стоит снизить до 57600. Таким образом, начало файла с вашей программой будет выглядеть примерно вот так:

#include "DynamixelMotor.h"

// communication baudrate
const long unsigned int baudrate = 57600;

SoftwareDynamixelInterface interface(3, 4);

3) Все наши моторчики соединены друг с другом последовательно. Значит, чтобы обращаться к каждому из них — нужно знать его ID? Это действительно так, объект DynamixelMotor при инициализации получает два параметра: interface (одинаков для всех, его мы задали в предыдущем пункте) и id (должен быть у всех разный, иначе поведение будет у манипулятора весьма странное)

DynamixelMotor motor(interface, id);

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

#include "DynamixelMotor.h"

// communication baudrate
const long unsigned int baudrate = 57600;

// id of the motor
const uint8_t id=1;

SoftwareDynamixelInterface interface(3, 4);

DynamixelMotor motor(interface, id);

void setup()
{
  interface.begin(baudrate);
  delay(100);
 
  // check if we can communicate with the motor
  // if not, we turn the led on and stop here
  uint8_t status=motor.init();
  if(status!=DYN_STATUS_OK)
  {
    pinMode(LED_BUILTIN, OUTPUT);
    digitalWrite(LED_BUILTIN, HIGH);
    while(1);
  }

  motor.changeId(NEW_ID);
}

void loop()
{}

Изначально все моторчики имеют id=1, именно поэтому мы и указываем вверху

const uint8_t id=1;

NEW_ID для каждого моторчика нужно заменить на число от 1 до 6 (да, ок, первый моторчик можно не трогать). Нумеруем их в порядке от нижнего к верхнему.

Ура! у нас есть полноценный манипулятор, который мы можем двигать, а также имеется 3D модель к нему. Можно брать ROS и программировать любые крутые штуки. Но это уже рассказ для отдельной статьи (и не одной). Данное же повествование подошло к концу, спасибо за внимание!

Конкурентные решения на рынке


Опишу, однако, кратко примеры того, что я рассматривал на рынке:

Построение захвата

Конструкция концевого захвата основана на двух вращающихся в противоположных направлениях зубчатых колесах, которые используют рычаги, чтобы открывать и закрывать захваты в поперечном направлении. Это позволяет использовать в конструкции относительно небольшие детали, но при этом открытое отверстие составляет около 65 мм, а значит рука может поднимать довольно широкие предметы.

  1. Первый шаг – просверлить два отверстия диаметром 3 мм с каждой стороны детали. На шестеренках этих были две удобные маркировки пресс-формы.
  2. Далее надо использовать небольшие боковые ножи, чтобы снять внутреннюю ступицу детали. Это дело должно быть удалено чтобы позволить шестерне быть прикрепленной к конечному прихвату на более позднем этапе.
  3. Затем, чтобы закрепить зубчатое колесо на сервоприводе и на втором креплении зубчатого колеса, необходимо просверлить две сервоголовки, чтобы размеры соответствовали деталям от Лего. Позже они прикрепляются болтами.

Для создания прихвата нужно будет распечатать CAD-шаблон для деталей и вырезать их из алюминия. Для деталей использовался пруток размером 60 мм x 1000 мм x 4 мм и вырезались куски, используя комбинацию торцовочной пилы, лобзика и напильника для придания им формы.

Начните с обрезки кронштейна сервопривода. Для данного серво использовался DGServo S05NF, который небольшой и легкий, но все же имеет металлическую шестереночную передачу и высокий крутящий момент. Сервопривод крепится к кронштейну с помощью 2-х винтов М3:

Далее отрежьте верхний кронштейн. Он должен иметь фланцевый подшипник протянутый через нижнюю сторону и два винта М3. Для каждого винта требуются 3 гайки, которые выступают в роли распорок для поднятия кронштейна от сервопривода:

Теперь соберите серво головку. Она состоит из шестерни, одной из просверленных ранее серво-головок и длинной рычажной части:

Далее идет другая передача и рычаг. Эта часть похожа на сервопривод, но имеет длинный болт М3, который служит в качестве оси. Чтобы предотвратить его проскальзывание в подшипнике (внутренний диаметр подшипника составляет 4 мм, а винт М3 – 3 мм), на винт длиной 3 мм надевается небольшое уплотнение:

Теперь прикрепите поворотную шестерню к верхнему кронштейну с помощью нейлоновой гайки, затем прикрепите верхний кронштейн к сервоприводу с помощью дополнительных 2-х гаек M3:

Соберите два коротких рычага, сервомеханизм и захватные рычаги, как показано на следующем рисунке. Обратите внимание, что тут добавлены две термоусадочные трубки к захватным рычагам, чтобы немного увеличить захват (они режутся и затем нагреваются на месте).

Чтобы закончить захват, соедините верхние рычаги с нижними. Поскольку между ними есть промежуток, то можете использовать 5 или около того шайб. После этого прикрепите короткий L-образный кронштейн к задней части сборки. Теперь можете прикрепить концевой захват к робо-руке.

Программа управления и пояснения к ней

// управляются привода с помощью переменных резисторов – потенциометров.

#include

int led = 13;

Servo myservo1;

Servo myservo2;

Servo myservo3;

Servo myservo4;

Servo myservo5;

int potpin = 0; // аналоговый пин для подключения потенциометра

int potpin1 =1;

int potpin2 =2;

int potpin3 =3;

int potpin4 =4;

int val; // переменная для считывания данных с аналогового пина

void setup()

{

myservo1.attach(3);

myservo2.attach(5);

myservo3.attach(9);

myservo4.attach(10);

myservo5.attach(11);

pinMode(led, OUTPUT);

}

void loop()

{ //servo 1 analog pin 0

val = analogRead(potpin); // считывает значение потенциометра (значение между 0 и 1023)

val = map(val, 0, 1023, 0, 179); // масштабирует полученное значение для использования с сервами (получаем значение в диапазоне от 0 до 180)

myservo1.write(val); // выводит серву в позицию в соответствии с рассчитанным значением

delay(15); // ждет, пока серводвигатель выйдет в заданное положение

val = analogRead(potpin1); // серва 2 на аналоговом пине 1

val = map(val, 0, 1023, 0, 179);

myservo2.write(val);

delay(15);

val = analogRead(potpin2); // серва 3 на аналоговом пине 2

val = map(val, 0, 1023, 0, 179);

myservo3.write(val);

delay(15);

val = analogRead(potpin3); // серва 4 на аналоговом пине 3

val = map(val, 0, 1023, 0, 179);

myservo4.write(val);

delay(15);

val = analogRead(potpin4); //серва 5 на аналоговом пине 4

val = map(val, 0, 1023, 0, 179);

myservo5.write(val);

delay(15);

}

Программирование и первый запуск

Для управления использовано 5 потенциометров (вполне можно заменить это на 1 потенциометр и два джойстика). Схема подключения с потенциометрами приведена в предыдущей части. Скетч для Arduino находится здесь.

Снизу представлены несколько видео робота-манипулятора в работе. Надеюсь, вам понравится.

На видео сверху представлены последние модификации арма. Пришлось немного изменить конструкцию и заменить несколько деталей. Оказалось, что сервы futuba s3003 слабоваты. Их получилось использовать только для схвата или поворота руки. Так что виесто них были установлены mg995. Ну а mg946 вообще будут отличным вариантом.

Сборка

Отлично! Мы закупили все, что нам нужно (вероятно, дольше всего ждали доставки моторчиков, мне их везли больше месяца).

Что дальше?

1) Напечатаем детали для манипулятора на 3D принтере.

Качаем STL файлы отсюда

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

Сборка l-кронштейнов

Рука робота имеет 3 разных L-образных кронштейна для средней части руки, запястья и концевого крепления. Поскольку все эти скобки имеют разные размеры, нет необходимости создавать шаблон. Просто нарежьте алюминий по размеру (полоски 25 мм х 1000 мм х 2 мм) и наклейте чертежи САПР на полосы разреза. Сделайте точный удар по шаблону, а затем просверлите детали.

Сборка кронштейна сервопривода

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

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

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

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

Закончив сгибание кронштейна используйте шаблон и линейку, чтобы отметить линию разреза на передней части кронштейна, а затем отпилите ненужный материал: Когда скоба полностью обрезана и готова, рекомендуется напильником сгладить все острые или неровные края. Скобка должна выглядеть примерно так:

Сборка манипулятора

Так как манипулятор робота относительно тяжелый, нижний сервопривод нуждается в достаточной поддержке для плавного вращения. Для этого рычаг монтируется на поворотном столе, который поддерживается четырьмя роликами, которые снимают сервопривод с веса, размещенного в поперечном направлении через сервопривод (он без поддержки может легко скрутить сервопривод и повредить его).

Основание поворотного стола выполнено аналогично кронштейнам. Напечатанный шаблон САПР помещается поверх листа алюминия и удерживается на месте с помощью скотча. Образец резания и сверления затем точечно накернивается в материале. После удаления бумаги используйте стальную линейку, чтобы выделить линии разреза:

Полученную форму затем вырезаем из алюминия, а затем собираем в форму. Обратите внимание на прямоугольный рисунок в центре детали – это схема сверления для вырезания алюминия, чтобы можно было установить сервопривод. Эту часть просверливают, а затем вырезают с помощью Дремеля, прежде чем подать в форму, чтобы сервопривод легко помещался в посадочное место.

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

Затем основание поворотного стола прикрепляется к четырем алюминиевым пластинам, вырезанным из прутка 40 мм х 1000 мм х 2,5 мм. Опять же размеры и схема сверления включены в чертежи САПР.

Для прикрепления поворотного стола к ножке робота предусмотрены 4 алюминиевые трубки (8 мм диаметром и толщиной 1 мм), нарезанные по 30 мм. Они удерживаются на месте резьбовым стержнем M3, который обрезается по длине и затем крепится болтами с обоих концов.

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

Верхняя часть манипулятора выполнена аналогично основанию. Перед установкой верхней части поворотного стола на основание один из кронштейнов сервопривода крепится к верхней части. Обратите внимание, что двойной кронштейн с сервоприводом слегка приподнят (на 4-х гайках M3), чтобы обеспечить свободное пространство для руки робота над основанием при вращении плечевого сустава руки.

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

На следующем рисунке показана конструкция кронштейна с двумя сервоприводами и крепления. Кронштейн состоит из элемента с двумя сервоприводами, на котором в свою очередь закреплены 2 других кронштейна с серво. Обратите внимание, что передний кронштейн имеет заднюю часть, которая позволяет установить кронштейн C на задний сервопривод перед установкой переднего сервопривода:

Сборка механической части

Перед началом разработки механической части манипулятора, стоит отметить, что чертежей у меня нет. Все узлы делались “на коленке”. Но принцип очень простой. У вас есть два звена из акрила, между которыми надо установить серводвигатели. И другие два звенья.

Длина первой части около 19 см; второй – около 17.5; длина переднего звена около 5.5 см. Остальные габариты подбирайте в соответсвии с размерами вашего проекта. В принципе, размеры остальных узлов не так важны.

Механическая рука должна обеспечивать угол поворота 180 градусов в основании. Так что мы должны установить снизу серводвигатель. В данном случае он устанавливается в тот самый диско-шар. В вашем случае это может быть любой подходящий бокс. Робот устанавливается на этот серводвигатель. Можно, как это показано на рисунке, установить дополнительное металлическое кольцо-фланец. Можно обойтись и без него.

Для установки ультразвукового датчика, используется акрил толщиной 2 мм. Тут же снизу можно установить светодиод.

Детально объяснить как именно сконструировать подобный манипулятор сложно. Многое зависит от тех узлов и частей, которые есть у вас в наличии или вы приобретаете. Например, если габариты ваших сервоприводов отличаются, звенья арма из акрила тоже изменятся. Если изменятся габариты, калибровка манипулятора тоже будет отличаться.

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

После сборки механической части, мы можем перейти к “мозгам” нашего манипулятора.

Сборка руки робота

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

Нижние 5 сервоприводов (поворотный стол, плечо (x2), локоть и запястье) представляют собой сервоприводы SAVOX SC-0252MG, которые создают крутящий момент 10,5 кг / см при 6 вольтах. Сервопривод на запястье – стандартные сервоприводы Fubata S3003, которые производят около 3,5 кг / см.

После установки в кронштейны сервоприводов их затем соединяются с кронштейнами C. На одной стороне установлена крестообразная сервоголовка, поставляемой с сервоприводом. Они обрезаются по размеру, а затем привинчиваются болтами на места. С другой стороны кронштейна фланцевый подшипник крепится к 8-миллиметровому отверстию, которое затем прикручивается болтами через кронштейн с помощью винта М3 и нейлоновой гайки, чтобы предотвратить отвинчивание гайки при вращении.

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

Сборка с-кронштейна

С-образная скоба выполнена практически идентично кронштейну для сервопривода. Здесь использовались алюминиевые полоски 25 мм x 1000 мм x 2 мм как для шаблона, так и для самих кронштейнов. Так же, как кронштейн для сервопривода, сначала режете алюминий по размеру, а затем склеиваете CAD-шаблон поверху. Готовый шаблон и шаблон должны выглядеть примерно так:

После того как кронштейн просверлен, выньте деталь и заново просверлите отверстия до правильных размеров, как показано на чертежах CAD. При сгибании кронштейна соблюдайте осторожность – надо убедиться, что сгибаете всё одинаково. Нужно будет сделать как минимум три из этих скоб для руки робота:

Сборка шилда сервоуправления

На следующем рисунке показана нижняя сторона печатной платы до того, как она была просверлена и заполнена деталями:

Поскольку сервоприводы могут быть очень шумными в плане питания, на силовых шинах стоят конденсаторы 10 мкФ, чтобы помочь справиться с пиковыми нагрузками серво при запуске. Также имеется конденсатор емкостью 100 нФ на разъеме JTAG, для облегчения разъединения силовых шин.

Вот изображение готового блока, подключенного к 7-ми тестовым сервоприводам во время разработки программы:

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

Схема и дизайн печатной платы доступны для скачивания всем пользователям сайта Электрические Схемы.

Скетч с использованием ультразвукового датчика расстояния

Это, наверное, одна из самых эффектных частей проекта. На манипулятор устанавливается датчик расстояния, который реагирует на препятствия вокруг.

Основные пояснения к коду представлены ниже

Мы добавили в наш код серводвигатели, светодиод и датчик расстояния. Здесь изменять ничего не надо.

Следующий кусок кода:

Servo myservo1;

Servo myservo2;

Servo myservo3;

Servo myservo4;

Servo myservo5;

Мы присвоили всем 5-ти сигналам (для 6 приводов) названия (могут быть любыми)

Следующее:

Мы сообщаем плате Arduino к каким пинам подключены светодиоды, серводвигатели и датчик расстояния. Изменять здесь ничего не стоит.

Идем дальше:

void position1(){

digitalWrite(led, HIGH);

myservo2.writeMicroseconds(1300);

myservo3.writeMicroseconds(1300);

myservo4.writeMicroseconds(800);

myservo5.writeMicroseconds(1000);

}

Здесь кое-что можно менять. Я задал позицию и назвал ее position1. Она будет использована в дальнейшей программе. Если вы хотите обеспечить другое движение, измените значения в скобках в диапазоне от 0 до 3000.

После этого:

void position2(){

digitalWrite(led,LOW);

myservo2.writeMicroseconds(1200);

myservo3.writeMicroseconds(1300);

myservo4.writeMicroseconds(1400);

myservo5.writeMicroseconds(2200);

}

Аналогично предыдущему куску, только в данном случае это position2. По такому же принципу вы можете добавлять новые положения для перемещения.

Дальше будет следующая запись:

Теперь начинает отрабатывать основной код программы. Не стоит его изменять. Основная задача приведенных выше строк – настройка датчика расстояния.

После этого:

if (distance <= 30) {

position1();

}

else {

position2();

}

if (distance < 10) {

myservo5.writeMicroseconds(2200); //открыть схват

}

else {

myservo5.writeMicroseconds(1000); //закрыть схват

}

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

if(distance <=30){ // данная строка обеспечивает переход в position1, если расстояние меньше 30 см.

position1(); //по сути арм отработает все, что вы зададите между скобками { }

}

else{ // если расстояние больше 30 см, переход в position2

position()2 // аналогично предыдущей строке

}

Можно в коде поменять расстояние ну и творить все, что вы пожелаете.

Последние строки кода

if (distance > 30 || distance <= 0){

Serial.println(“Out of range”); //вывод в серийном монитеоре сообщения, что мы вышли за заданный диапазон

}

else {

Serial.print(distance);

Serial.println(” cm”); //расстояние в сантиметрах

}

delay(500); //задержка в 0.5 секунды

}

Конечно, можно перевести тут все в миллиметры, метры, изменить отображающееся сообщение и т.п. Можно немного поиграться с задержкой.

Вот, собственно и все. Наслаждайтесь, модернизируйте свои собственные манипуляторы, делитесь идеями и резутатами!

Схват манипулятора

Для установки схвата вам понадобится серводвигатель и несколько винтов.

Итак, что именно необходимо сделать.

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

После установки сервы, проворачиваете ее в крайнее левое положение и сжимаете губки схвата.

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

Можно подключить сервопривод к плате Arduino и проверить работоспособность схвата.

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

Электросхема

Можно использовать вместо резистора R1 потенциометр на 100 кОм для регулировки яркости вручную. В качестве сопротивлени R2 использовались резисторы на 118 Ом.

Перечень основных узлов, которые использовались:

  • R1 – резистор на 100 кОм
  • R2 – резистор на 118 Ом
  • Транзистор bc547
  • Фоторезистор
  • 7 светодиодов
  • Переключатель
  • Подключение к плате Arduino

В качестве микроконтроллера использовалась плата Arduino. В качестве питания использовался блок питания от персонального компьютера. Подключив мультиметр к красному и черному кабелям, вы увидите 5 вольт (которые используются для серводвигателей и ультразвукового датчика расстояния).

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

Кроме того, на плате питания был установлен светодиод-индикатор питания. Реализуется это несложно. Дополнительно использовался резистор на 100 Ом между 5 В и землей.

10 миллиметровый светодиод на роботе тоже подключен к Arduino. Резистор на 100 Ом идет от 13 пина к к позитивной ноге светодиода. Негативный – к земле. В программе его можно отключить.

Для 6 серводвигателей использовано 6 коннекторов, так как 2 серводвигателя снизу используют одинаковый сигнал управления. Соответствующие проводники соединяются и подключаются к одному пину.

Повторюсь, что в качестве питания используется блок питания от персонального компьютера. Либо, конечно, вы можете приобрести отдельный источник питания. Но с учетом, того, что у нас 6 приводов, каждый из которых может потреблять около 2 А, подобный мощный блок питания обойдется недешево.

Обратите внимание, что коннекторы от серв подключаются к ШИМ-выходам Arduino. Возле каждого такого пина на плате есть условное обозначение ~. Ультразвуковой датчик расттояния можно подключить к пинам 6, 7. Светодиод – к 13 пину и земле. Это все пины, которые нам понадобятся.

Теперь мы можем перейти к программированию Arduino.

Перед тем как подключить плату через usb к компьютеру, убедитесь, что вы отключили питание. Когда будете тестировать программу, также отключайте питание вашей робо-руки. Если питание не выключить, Arduino получит 5 вольт от usb и 12 вольт от блока питания. Соответственно, мощность от usb перекинется к источнику питания и он немного “просядет”.

На схеме подключения видно, что были добавлены потенциометры для управления сервами. Потенциометры не являются обязательным звеном, но приведенный код не будет работать без них. Потенциометры можно подключить к пинам 0,1,2,3 и 4.

Смотрите про коптеры:  Программы для работы с Bluetooth
Оцените статью
Радиокоптер.ру
Добавить комментарий