Цель: создание механической руки, способной выполнять различные действия с предметами, а именно: перемещать по горизонтали и по вертикали.
Задачи:
• Ознакомиться с системами управления роботов.
• Самостоятельное изготовление частей механической руки (детали механизма, электрической схемы).
• Найти подходящий материал и опциональные детали для создания робота.
• Обучится программировать на языке С++
• Написать программу для пропорционального управления.
• Написать программу для автономного выполнения работы, без участия человека.
• Обучиться технологии создания схем и пайке
Перед тем, как начать делать своего робота, я озадачился вопросом: а какого именно робота я хочу сделать? Я начал анализировать типы роботов: робота-андройда я не мог создать по нескольким причинам: у этого робота много подвижных деталей, сложно сделать каркас и трудно повторить внешний вид человека. Так же андроид сложен в управлении и потребляет много энергии.
Медицинский робот сложен в создании и очень чувствителен в управлении, тем более, самодельный робот вряд ли сможет кому-нибудь помочь, а может даже наоборот.
Бытового робота я не стал создавать по простой причине: а что он будет делать? Смысл его создания? Для того, чтобы бытовой робот был полезен, ему нужно множество опциональных деталей, которых я не имею.
Боевого робота и робота для обеспечения безопасности я не стал создавать из-за сложности создания, безнадобности, опасности и отсутствием опциональных деталей.
Идеальным вариантом стал промышленный робот: легок в управлении, легко создать каркас и подобрать опциональные детали, но промышленные роботы обычно крупногабаритные, поэтому я решил сделать уменьшенную копию промышленной роборуки.
Подходящим материалом для создания роборуки был обычный металлический конструктор, который лежал в шкафу многие годы. Плюсы конструктора: легкость, возможность построить практически любую фигуру и деталь. Минусы: конструктор легко гнётся.
В качестве приводов я использовал сервоприводы, которые заказал по интернету.
Сложнее всего было придумать, как же все-таки будет управлятся робот. Я решил пойти по сложному пути и заказал электронную плату arduino uno, которая программируется на языке С++. Встал новый вопрос: а как программировать на языке C++?
Так как плата Ардуино к моменту создания первой модели не успела прийти по почте, я стал искать альтенативные способы управления. Выбор пал на самолетное радиоуправление. Друг, который увлекается авиамоделизмом, одолжил мне приемник и передатчик от своего самолета, и я подсоединил все сервоприводы к приемнику и запитал его своим автомодельным аккомулятором.
Для закрепленя винтов и гаек, установки сервоприводов использовался набор отверток.
Сначала необходимо было сделать основание. Оно должно было быть устойчивым:
Следом, я закончил сборку подвижного основания, с помощью которого рука сможет вращаться вокруг своей оси:
Затем, я начал делать большое плечо.
Потом, настала очередь среднее плечо. Конечный вид большого и среднего плеч:
Затем, я собрал кисть робота и объединил с большим и средними плечами:
После этого я установил сервоприводы:
Однако возникла новая проблема: так как я обеспечил питание от автомодельного аккумулятора, который был более мощным, чем нужно сервоприводам, из-за этого регулятор, рассчитанный на небольшое количество маленьких сервоприводов, не справлялся и сильно грелся, а сервоприводы работали некорректно. Тогда было принято решение избавиться от одного плеча.
После этого я занялся сборкой финальной части – захвата. Сервоприводы способны поднять строго ограниченный вес, которые они способны поднять, поэтому необходимо было установить сервоприводы в строго определенных местах. После объединения всех деталей, за исключением большого плеча, и установки сервоприводов, модель приобрела законченный вид:
В качестве управления использовался авиамодельный пульт управления, который я позаимствовал на время у друга.
В качестве источника питания выступал автомодельный аккумулятор Turnigy nano-tech. Так же в данной модели аккумулятор служил противовесом.
Но сервоприводы способны поднять строго ограниченный вес, которые они способны поднять, поэтому необходимо было установить сервоприводы в строго определенных местах. Подключение сервоприводов к приёмнику не составило особого труда.
Первая модель оказалась не совсем удачной: она была неустойчивой, управление было неудобным, и потенциал сервоприводов был значительно снижен из-за самолетного регулятора напряжения, который был рассчитан только на маленькие сервоприводы, вследствие этого рука могла поднять только небольшой вес.
Рука в действии:
СОЗДАНИЕ ВТОРОЙ МОДЕЛИ РОБОРУКИ.
• Механическая часть
На создание второй модели механической руки времени было предоставлено крайне мало: чуть больше месяца. Однако роборука была готова в срок.
Сначала я приступил к созданию эскиза:
В качестве основания я решил использовать основу от игрушечного крана, так как оно обладало высокой устойчивостью.
Детали было решено изготовить П-оразной формы. Такого типа детали имели ряд преимуществ: они имели большой запас прочности, на такие детали легко крепить сервоприводы, при сцеплении можно сделать дополнительную ось вращения, что снизит нагрузку на сервопривод и сделает конструкцию более надежной.
Самым сложным этапом при создании роборуки было разработка и изготовление захвата руки. Самым оптимальным вариантом оказалось использование шестеренок в механизме захвата.
Материалом для создания послужила листовая сталь 0.8мм, так как этот материал был легким и легко поддавался обработке. «Клешни» решено было сделать из дюралюминия, так как листовая сталь была слишком тонкой.
Но прежде, чем приступить к работе с металлом, необходимо было сделать точную копию деталей механической руки из картона. На картонных деталях соблюдались все размеры в натуральную величину, были размечены места отверстий для оси вращения в местах сцепления, и отверстия для крепления сервоприводов. Это позволило сделать детали максимально точно и уменьшило шанс совершения ошибок.
Для разрезания металла использовались ножницы по металлу, а для изготовления отверствий использовался сверлильный станок. Для изгиба деталей была применена киянка и тиски, так как железный молоток имеет меньшую площадь контакта и продавливает детали, дела вмятины и сколы.
«Клешни» вырезались с помощью ножовки по металлу и обрабатывались напильником. В них были сделаны отверстия разного диаметра, что облегчило их и сделало более красивыми.
Затем необходимо было сделать механизм захвата. Он представлял собой две шестеренки, надетые на неподвижные оси, на которые крепились «клешни», к одной шестеренке подводилась еще одна, которая связывалась с сервоприводом.
Чтобы соединить шестеренки с «клешнями» было использовано свойство металлов: расширяться при нагревании. Нагревание «клешней» осуществлялось строительным феном. После нагрева, на шестеренки, с помощью молотка, были насажены «клешни», а после охлаждения, конструкция стала монолитной.
Когда все детали были готовы, их необходимо было отшлифовать, убрать с помощью надфиля заусеницы и обработать ацетоном, чтобы избавиться от жира.
Наконец, наступила очередь окраски.
После окраски детали приняли законченный вид.
Затем, из основания бывшего игрушечного крана был удален механизм вращения и установлен новый, который присоединялся к сервоприводу. Так как сервопривод был длиннее, чем доступное место в основании, то в нижней крышке, с помощью сверлильного станка и ножовки, было вырезано место под сервопривод.
Настало время сборки второй модели механической руки. На специальные места были установлены сервоприводы и закреплены с помощью винтов, шайб и гаек. «Плечо», «локоть» и «кисть» крепились к сервоприводам с помощью саморезов, а осями вращения стали винты. Провода сервоприводов и сами сервоприводы крепились к плечам руки с помощью пластиковых хамутиков.
Законченный вид руки:
• Программная часть
Было решено управлять роборукой с помощью платы Arduino Uno. Программирование осуществлялось на достаточно сложном языке С++. Сама программа писалась на компьютере в специальной программе, которую надо было скачать с официального сайта Arduino. Там же находилось драйвера для связи платы Arduino Uno с компьютером.
После изучения принципа программирования и основных команд, я написал первую программу: мигание светодиода. Специальной схемы для этого составлять не надо было, так как на плате уже установлен один светодиод.
Сам код выглядел следующим образом:
Таким образом, светодиод загорается на 5 секунд, а затем гаснет на 5 секунд, и эти действия продолжаются, пока есть питание.
Итак, я убедился, в том, что правильно написал программу и теперь могу приступить к работе с сервоприводами. Для них в программе установлена специальная библиотека для связи сервоприводов с платой. Так же там есть другие библиотеки: чтение и запись в последовательный порт, для работы с шаговыми электродвигателями, для подключения к интернету и много других, но они нам не понадобятся.
Готовая программа выглядела следующим образом:
Выполняя эту программу, сервопривод поворачивается на 20 градусов каждую секунду, пока не сделает оборот в 180 градусов, затем возвращается в исходное положение.
Но прежде, чем приступить к написанию программы для пропорционального управления, нужно было написать программу для мониторинга сопротивления от резистора, которым будет управляться сервопривод. С помощью этого кода можно узнать максимальное и минимальное значение резистора, которые будут применены в конечной программе.
В итоге, изменяя сопротивление резистора, я узнал, что его максимальное значение это 537, а минимальное 0.
Наконец, я приступил к созданию электронной схемы. Сначала я сделал основание 18х8см и крепление переменных резисторов на 10Ком из стеклотекстолита. Затем на основу я установил плату Arduino Uno, схему стабилизатора напряжения, монтажную плату для выхода на сервоприводы, монтажную плату входного делителя напряжения и кронштейны с установленными переменными резисторами.
Конечный вид схемы:
В качестве питания сервоприводов использовался блок питания на 9V, но во дальнейшем было принято решение использовать аккумулятор на 7.4V.
После этого я написал программу для пропорционального управления механической руки.
В итоге, изменяя сопротивление на резисторе, мы изменяем угол поворота сервопривода, и механическая рука совершает действия, которые ей зададут.
Следом, я приступил к написанию кода, при котором роборука будет совершать одни и те же действия бесконечно долго, пока к ней подведено напряжение.
В дальнейшем, 3 резисторы будут заменены на тензодатчики- датчики изгиба, и механическая рука будет управляться с помощью перчатки, повторяя движения моей биологической руки.
Моя рука стала победителем среди проектов по физике на конференции "Шаг в будущее"!!! Ура!!!
Не могли бы Вы поделиться программой для управления рукой с помощью тензодатчиков или на крайняк потенциометрами? Заранее благодарен! Мой адрес vlarus72@yandex.ru
http://www.ebay.com/itm/NEW-UNO-R3-ATmega328P-ATmega16U2-Compatible-Version-Board-Arduino-Cable-Freeship-/310904280671?pt=LH_DefaultDomain_0&hash=item486356d65f
маленькие сервы не нашел
Это очень сильная программма...дааа...
Ну так на С++ научился писать?
Предъяви навыки...
Я тоже начинал с "Hello World" на паскале. И страшно этим гордился. Правда, это было очень давно. А сейчас управляюсь с базами данных в -ндцать террабайт и на 3к пользователей.
А автор только в начале пути...
Теперь самое время замерить время на одну итерацию цикла loop. Только не падайте в обморок от результата. :) Лучше берите даташит на атмегу и читайте про регистры АЦП и таймеры. analogRead и Servo.h пойдут в топку через пару минут после прочтения.
Пока analogRead считывает показания с АЦП вся прога ее ждет и ничего не делает. Но АЦП может работать и сам по себе, не занимая время у центрального ядра. Смотрите в сторону прерываний.
http://www.parkflyer.ru/57287/blogs/view_entry/4743/#commentssorting=
Скачайте прошивки и распотрошите. В пульте найдете работу с АЦП на прерываниях, а в приемнике - работа с сервами на таймерах и все тех же прерываниях.
Тут (http://rc-master.ucoz.ru) есть обратная связь со мной. Если что-то будет непонятно - спрашивайте - постараюсь объяснить и помогу чем смогу.