"Вы читаете о роботах и программировании и думаете: «Было бы здорово сделать что-то подобное самому!» Теми, кем эта идея овладевает чуть больше просто мыслей смотрят кто и как делал своего робота. Читают статьи, смотрят видео. На картинках все понятно. В видеороликах тоже обычно показываются уже готовые продукты, а также сжато показываются технологии их изготовления. И вроде бы то же всё понятно: отпилил, прикрутил, припаял, соединил, запрограммировал вон на той программе вот этим кодом."
суббота, 25 ноября 2017 г.
пятница, 24 ноября 2017 г.
Что такое сервопривод?
Определение понятия сервопривод
Сервопривод (следящий привод) — привод с управлением через отрицательную обратную связь, позволяющую точно управлять параметрами движения.
Сервоприводом является любой тип механического привода (устройства, рабочего органа), имеющий в составе датчик (положения, скорости, усилия и т. п.) и блок управления приводом (электронную схему или механическую систему тяг), автоматически поддерживающий необходимые параметры на датчике (и, соответственно, на устройстве) согласно заданному внешнему значению (положению ручки управления или численному значению от других систем).
Проще говоря, сервопривод является «автоматическим точным исполнителем» — получая на вход значение управляющего параметра (в режиме реального времени), он «своими силами» (основываясь на показаниях датчика) стремится создать и поддерживать это значение на выходе исполнительного элемента.
Разобравшись с определением перейдем к непосредственному разбору принципа работы сервопривода.
Для большей наглядности сразу приведу схематичную картинку внутренностей сервопривода.
Приступим к разбору.
Для подключения к контроллеру от сервопривода тянется 3 провода обжатых чаще всего стандартным 3 пиновым разъемом с шагом 2.54мм (1). Цвета проводов могут варьироваться. Коричневый или черный - земля (минус), красный - плюс источника питания, оранжевый или белый - управляющий сигнал. Об управляющих сигналах расскажу чуть позже.
Итак, сигнал приходит на плату которая и будет данный сигнал преобразовывать в импульсы посылаемые непосредственно на двигатель (2). К ней мы вернемся чуть позже.
Наконец-то мы дошли до той детали, благодаря которой мы и можем считывать и задавать угол поворота сервопривода (3). В интернете нашел отличную GIFку демонстрирующую принцип работы потенциометра.
Принцип работы потенциометра прост. Потенциометр имеет 3 вывода. На крайние выводы подается плюс и минус питания (полярность не имеет значения), между выводами имеется резистивное вещество, по которому и движется ползунок соединенный со средним выводом. В нашем случае договоримся что на крайнем левом у нас плюс, на крайнем правом минус. Вращая крутилку из левого крайнего положения в крайнее правое положение мы увеличиваем сопротивление, а вместе с тем и уменьшаем напряжение от входного до условно минимального, которое будем снимать со среднего вывода. Значение минимального напряжения будет зависеть от величины максимального сопротивления у конкретно взятого потенциометра. В рассматриваемых нами сервоприводах чаще всего устанавливают потенциометры на 5 килоОм.
С устройством мы разобрались, теперь вернемся к сервоприводу. Крутилка сервопривода у нас состыкована с выходным валом сервопривода, следовательно при повороте выходного вала мы меняем значение на потенциометре. Условно примем входное напряжение (ручка потенциометра в крайнем правом положении) равное пяти вольтам, пускай при крайнем левом положении потенциометр погасит все напряжение и минимальное напряжение будет равным нулю, а в средней точке тогда у нас будет два с половиной вольта. Из данных условий у нас получается что при угле в 180° на выходе потенциометра у нас 5 вольт, при 90° 2,5 вольта, а при 0° 0 вольт. Для чего я это так подробно рассказываю? Возвращаемся снова к управляющей плате.
Сервопривод находится в положении 0°. На вход платы управления мы подаем управляющий сигнал который несет в себе информацию о повороте сервопривода на 90°. Электронная начинка платы считывает показания потенциометра, на потенциометре видит 0 вольт, а в программе забито что должно быть 2,5. Вот и весь смысл. Плата анализирует разницу, затем выбирает направление вращения мотора и будет вращать его до тех пор пока напряжение на выходе потенциометра не станет равным двум с половиной вольтам.
Едем дальше. Чтоб не листать страницу снова вверх, в поисках картинки, приведу её ещё раз.
Микромоторчик (4) не в состоянии развить мощное усилие на валу (момент), однако обладает высокой скоростью вращения. Для преобразования высокой угловой скорости с малым моментом в низкую с высоким, которая нам как раз и нужна, следует использовать редуктор. Редуктор представлен шестернями соединяющими вал моторчика и выходной вал (5). Шестерня с меньшим количеством зубцов ведет шестерню с большим. от этого снижается скорость но повышается момент, Более наглядно понять принцип работы редуктора можно взяв в руки сервопривод и попытаться повернуть качалку сервопривода. Сложно? Конечно, ведь с обратной стороны редуктор превращается в мультипликатор, механическое устройство которое наоборот преобразует низкооборотный мощный момент в высокооборотный слабый.
Основные характеристики сервоприводов:
• Усилие на валу
Усилие на валу, он же момент это один из самых важных показателей сервопривода и измеряется в кг/см. В характеристиках обычно указывается для двух вариантов напряжения питания, чаще всего для 4.8В и 6.0В.
Момент в 15 кг/см означает что сервопривод способен удержать неподвижно в горизонтальном положении качалку с плечом в 1 см и подвешенным к ней грузом массой 15 кг либо же удержать груз в 1 кг на качалке с плечом в 15 см.
Длина плеча качалки обратно пропорциональна массе удерживаемого груза. Для данного привода при длине в 2 см мы получим 7.5 кг, а уменьшив длину рычага до 0,5 см получим уже целых 30кг
• Скорость поворота
Скорость поворота также является одной из самых важных характеристик. Ее принято указывать во временном эквиваленте требуемом для изменения положения выводного вала сервопривода на 60°. Данную характеристику также чаще всего указывают для 4.8В и 6.0В.
Например характеристика 0.13сек/60° означает что поворот данной сервы на 60° может быть совершен минимум за 0.13 секунды.
• Тип сервоприводов
Цифровые либо аналоговые
• Напряжение питания
Для большинства сервоприводов колеблется в диапазоне от 4.8 до 7.2В
• Угол поворота
Это максимальный угол на который может повернуть выходной вал. Сервоприводы по углам поворота в основном бывают на 180° и 360°.
• Сервопривод постоянного вращения
Выпускаются сервоприводы и постоянного вращения. Если нет возможности приобрести такой, но очень нужно, то можно переделать обычный сервопривод.
• Тип редуктора
Редукторы сервопривода выполняют из металла, карбона, пластика либо компонуют из металлических и пластиковых шестерней.
Пластиковые шестерни слабо выдерживают нагрузки и удары, зато обладают очень малым износом. Карбоновые прочнее пластиковых, но намного дороже. Металлические выдерживают большие нагрузки, удары, падения, однако износ у этого типа шестерней самый большой.
Также хочется отметить что и выходной вал на различных сервоприводах устанавливается по разному. На большинстве вал скользит на втулках скольжения, на более мощных сервоприводах уже используются шариковые подшипники.
Также хочется отметить что и выходной вал на различных сервоприводах устанавливается по разному. На большинстве вал скользит на втулках скольжения, на более мощных сервоприводах уже используются шариковые подшипники.
Типоразмеры сервоприводов:
Сервоприводы делятся на 4 основных типоразмера. Далее приводятся типы сервоприводов с указанием веса и размеров. Размеры различных сервоприводов могут незначительно откланяться от приведенных ниже.
• Микро: 24мм x 12мм x 24мм, вес: 8-10 г.
• Мини: 30мм x 15мм x 35мм, вес 23-25 г.
• Стандарт: 40мм x 20мм x 37мм, вес: 50-80 г.
• Гигант: 49x25x40 мм, вес 50-90 г.
по материалам http://zelectro.cc/what_is_servo
Управление сервоприводами в RoboPlus Task
Для работы сервопривода не в режиме простого мотора, его необходимо инициализировать, т.е задать определенные параметры, такие как порт подключения, как будет воспринято устройство, как просто мотор (DRIVE MODE - false) или как сервомотор (DRIVE MODE - true), мощность привода и угол поворота.
Подключение сервоприводов к Arduino
Сервопривод это точный исполнитель который получая на вход значение управляющего параметра стремится создать и поддерживать значение на выходе исполнительного элемента. Управляющий сигнал представляет из себя импульсы с нужной нам шириной, которые посылаются с определенной частотой. Для рассматриваемых нами сервоприводов частота посылания импульса почти всегда будет около 50 Гц (это примерно 1 раз в 20мс), а ширина импульса будет лежать в пределе от 544мкс до 2400мкс.
Как видно из картинке, импульс шириной в 544мкс выставит выводной вал в положение 0°, 1520мск соответствует углу в 90°, а 2400мкс соответствует 180°.
Изменяя ширину импульсов в данных пределах мы сможем точно задавать угол поворота выводного вала, но об этом чуть позже.
Для подключения к контроллеру от сервопривода тянется 3 провода обжатых стандартным 3 пиновым разъемом с шагом 2.54мм . Цвета проводов могут варьироваться. Коричневый или черный - земля (GND), красный - плюс источника питания (VTG), оранжевый или белый - управляющий сигнал (SIG).
Подключение сервоприводов к Arduino
У старых Ардуин, укомплектованных мегой 8, имеется всего три ШИМ вывода (digital 9,10,11), у Ардуин укомплектованных мегой 168 или 328 их 6 (digital 3,5,6,9,10,11). Семейство Arduino MEGA имеет на своем борту целых 14 ШИМ выводов.
Один 9G сервопривод, потребляющий слабый ток, еще можно подключить напрямую к Arduino.
GND на любой из GND пинов ардуино
VTG на + 5 вольт на ардуино
SIG на ШИМ (PWM) вывод ардуино
Подключение пары сервоприводов 9G либо одного мощного сервоприводов, к примеру MG995, может вызвать большую просадку напряжения и контроллеру не хватит питания, мега8 очень привередлива и из-за этого контроллеру не хватит напряжения и он отключится. Так же на плате Arduino установлен маломощный стабилизатор не рассчитанный на потребление большого тока и чрезмерное потребление может перегреть его и повредить плату. Во избежание этого, при использовании мощных серв, либо больше одной слабой, рекомендуем подавать питание на сервопривод отдельно.
• Вариант 1
Можно приобрести блок питания на 5 или 6 вольт, в зависимости от напряжения питания вашего сервопривода и питать сервопривод от него.
• Вариант 2
В случае, если под рукой нет стабилизированного источника питания на 5Вольт, но имеется любой другой источник питания (блок, аккумулятор, сборка из батареек) с напряжением 6-12В, то из него можно легко получить требуемое напряжение для сервопривода. Поможет нам в этом стабилизатор. Рассмотрим самый простой L7805/L7806, требующий минимум деталей внешней обвязки.
Стабилизатор имеет 3 ноги:
1 - Вход. На него подается напряжение от 6 или 7(в зависимости от модели) до 12Вольт
2 - Общий минус
3 - Выход 5 или 6 вольт (в зависимости от модели)
7805 отечественный аналог КР142ЕН5А - выходное напряжение 5Вольт.
7806 отечественный аналог КР142ЕН5Б - выходное напряжение 6Вольт.
Как видно из рисунка необходима установка конденсаторов, можно и без них, но выходное напряжение будет не стабильным. Рекомендуемые номиналы конденсаторов: на входе 0.33 мкФ, на выходе 0.1 мкФ. Я всегда ставлю два электорлита по 100мкФ. Чем больше - тем лучше.
P.S. Не забудьте соединить земли источников питания
Программный код управления
Для управления углом поворота сервопривода, в программном коде можно либо вбивать ширину имлульсов вручную и подбирать точный угол, либо задавать угол в виде градусов при помощи команды библиотеки.
• Вариант 1
В данном скетче зададим 3 угла поворота выходного вала сервопривода используя управление изменением непосредственно значения ширины импульса. Данный метод самый точный, однако для каждого угла ширину импульсов придется подбирать индивидуально.
пример программного кода:
//Тестировалось на Arduino IDE 1.0.1 // добавляем библиотеку для работы с сервоприводами #include <Servo.h> // для дальнейшей работы назовем 9 пин как servoPin #define servoPin 9 // 544 это эталонная длина импульса при котором сервопривод должен принять положение 0° #define servoMinImp 544 // 2400 это эталонная длина импульса при котором сервопривод должен принять положение 180° #define servoMaxImp 2400 Servo myServo; void setup() { myServo.attach(servoPin, servoMinImp, servoMaxImp); // устанавливаем пин как вывод управления сервоприводом, // а также для работы сервопривода непосредственно в диапазоне углов от 0 до 180° задаем мин и макс значения импульсов. // импульсы с большей или меньшей длиной восприниматься не будут. // для сервоприводов даже одной партии значения длин импульсов могут отличаться, может быть даже и 584-2440. // поэкспериментируйте и найдите идеальные длины импульсов конкретно для вашего сервопривода. } void loop() { // устанавливаем качалку сервопривода в положение 0°(т.к.импульс равен 544мкс) myServo.writeMicroseconds(servoMinImp); delay(2000); // в данной функции можно задавать длины импульсов непосредственно числами. // 90°(т.к.vимпульс равен 1520мкс) myServo.writeMicroseconds(1520); delay(2000); // 180°(т.к. импульс равен 2400мкс) myServo.writeMicroseconds(servoMaxImp); delay(2000); }
КАК ЭТО ВЫГЛЯДИТ В ДРАКОНЕ
Третий квадрат модуль
Третий квадрат SetupТретий квадрат Loop
Листинг
• Вариант 2
В этом же скетче зададим теже 3 угла поворота выходного вала сервопривода используя команду myservo.write. В данной команде мы уже не задаем ширину импульсов, а просто пишем нужный нам угол. Данный вариант намного удобнее, однако настройка не такая точная как при первом.
пример программного кода:
//Тестировалось на Arduino IDE 1.0.1 #include <Servo.h> Servo myservo; void setup() { // устанавливаем пин как вывод управления сервой myservo.attach(9); } void loop() { // устанавливаем угол 0° myservo.write(0); delay(2000); // устанавливаем угол 90° myservo.write(90); delay(2000); // устанавливаем угол 180° myservo.write(180); delay(2000); }
Также вам могут понадобиться следующие команды:
myservo.read();
Считывает текущий угол поворота сервопривода, возвращает значение типа int — угол от 0 до 180 градусов.
myservo.attached();
Проверяем, привязан ли сервопривод. Возвращает логическое значение bool.
myservo.detach();
Отключает сервопривод от пина.
Цикл статей о сервоприводах:
по материалам http://zelectro.cc/servoAndArduino
четверг, 23 ноября 2017 г.
Использование ИС ДРАКОН для программирования роботов на Arduino
Создание программ для роботов собираемых на кружках робототехники отлично укладывается в технологию создание программ на языке ДРАКОН. Структура программы на ARDUINO минимально состоит из двух блоков - void loop(), void setup(). На схемах ДРАКОНа мы видим возможность создания такой структуры (рис 1)
рис 1
При заполнении блока "модуль" указывается путь формирования скетча и ссылки на входящие в него блоки, а в программной части могут объявляться переменные (рис 2)
рис 2
Блок void setup(): в программной части блока описывается состояние портов контроллера (рис 3)
рис 3
Блок void Loop(): содержит логическую схему разработанного алгоритма, где в каждый блок, непосредственно в его программную часть записывается конкретные команды или команда, которая впоследствии будет автоматически вставлена в скетч. В программную часть блока можно записать начальные параметры работы программы (рис 4).
рис 4
Как пример ниже приведена схема простейшего робота "Вперед - стоп", где в модуле прописаны переменные номеров портов, что позволяет легко адаптировать скетч под уже собранное устройство, достаточно лишь изменить номера портов согласно реальному подключению микросхемы управления моторами.
Подписаться на:
Сообщения (Atom)




















































