Прежде чем спросить про Сервомашинку / Servo, посмотри тут.
- Войдите на сайт для отправки комментариев
Сервомашинка
Сервомашинка (далее серво) в моделестроении играет роль двигателя который может позиционировать свой вал на заданный ему градус.
Существуют сервы, которые могут позиционироваться от 0° до 180°, так же существуют сервы которые принимают позицию вала до 360°.
Подробней о серво тут.
Так как серва изначально предназначена для вращения на конкретный градус, опишу как этого можно добиться с помощью Arduino.
Как подключить серву к Ардуине.
Рулим сервой на заданный угол:
Сначала мы рассмотрим позиционирование сервы на простом примере, который очень хорошо показывает принцип работы сервы.
#define SERVO_MIN_PULSE 544 // Минимальный импульс = 0° #define SERVO_MAX_PULSE 2300 // Максимальный импульс = 180° #define SERVO_REFRESH 30 // Количество импульсов для установки позиции // Функция для позиционирования void writeToServo(uint8_t pin, uint8_t pos){ // Отправляем определенное количество импульсов for(int i=0; i<SERVO_REFRESH; i++){ digitalWrite(pin, HIGH); delayMicroseconds(map(pos,0,180,SERVO_MIN_PULSE,SERVO_MAX_PULSE)); // Выжидаем длину импульса digitalWrite(pin, LOW); delay(20); } } uint8_t servo = 12; // Пин к которому подключена серва uint8_t pos = 0; // Позиция сервы в градусах void setup(){ pinMode(servo, OUTPUT); } void loop(){ // Устанавливаем серву "servo" на позицию "pos" writeToServo(servo, pos); // Увеличивать позицию на 10° через каждый шаг // После того как позиция превысит 180° установить её на 0° if((pos+=10)>180) pos=0; delay(1000); }
У выше указоного примера есть один минус: после того как серва установилась на заданный угол, она не удерживает свою позицию и её вал может быть легко перемещён рукой. Для удержания позиции можно воспользоваться следующим трюком.
void loop(){ // Устанавливаем серву "servo" на позицию 90° и удерживаем. writeToServo(servo, 90); }
Так как loop() это бесконечный цикл, серва будит постоянно принимать заданную позицию, в данном случае 90°. Но это всё ведёт к полной блокировки дальнейших действий в программе. Все остальные команды будут в этом случае не доступны.
Чтобы избежать этой блокировки, можно воспользоваться прерываниями или написать логику похожую на "Мигаем светодиодом без delay()"
Этим мы здесь заниматься не будим, так как для этого уже существует библеотека Servo.h
Воспользуемся этой библиотекой для изменения верхнего примера.
#include <Servo.h> // Подключаем библиотеку Servo motor; // Создоём инстанцию нашей сервомашинки uint8_t servo = 12; // Пин к которому подключена серва uint8_t pos = 0; // Позиция сервы в градусах void setup(){ motor.attach(servo); // Указываем на каком пине сидит серва } void loop(){ // Устанавливаем серву "servo" на позицию "pos" motor.write(pos); // Увеличивать позицию на 10° через каждый шаг // После того как позиция превысит 180° установить её на 0° if((pos+=10)>180) pos=0; delay(1000); }
Теперь мы можим просто написать вот такой скетч
#include <Servo.h> // Подключаем библиотеку Servo motor; // Создоём инстанцию нашей сервомашинки uint8_t servo = 12; // Пин к которому подключена серва void setup(){ motor.attach(servo); // Указываем на каком пине сидит серва motor.write(90); // Устанавливаем серву "servo" на позицию 90° } void loop(){}
И всё, теперь нашу серву просто так не сдвинешь не свернув ей "шею".
Крутим сервой как мотором не остонавливаясь:
Зачем всё это надо? Да всё просто, если серву немножко "подкавырять", можно получить довольно не плохой моторчик с редуктором, который довольно сильный для своих гоборитов и может вращаться в обе стороны.
Для начало воспользуемся вот этим туториумом: How to hack the "servo" out of "servomotor" и сделаем из нашей сервы простой моторчик с редуктаром.
Ну вот и всё, наша серва крутится как нам и хотелось. Осталось только написать для этого скетч.
А скетч довольно простой:
#include <Servo.h> // Подключаем библиотеку Servo motor; // Создоём инстанцию нашей сервомашинки uint8_t servo = 12; // Пин к которому подключена серва void setup(){ motor.attach(servo); // Указываем на каком пине сидит серва motor.write(0); // Крутим мотор вперёд delay(2000); // Ждём 2 секунды motor.write(180); // Крутим мотор назад delay(2000); // Ждём 2 секунды motor.detach(); // Отключаем мотор } void loop(){}
Вообщем для начало всё. Если есть вопросы, то прежде чем их задать пользуемся google и читаем уже давно заданные вопросы на этом форуме. И уже если Вы не нашли ответ на свой вопрос, смело задавайте его на форуме, не боясь получить упрёки в ответ на ваш вопрос.
Уже довно известно:
########### Аппаратные вопросы
- Серва не докручивает до 180 и до нуля
- Серва гудит.
- Сервопривод или редуктор?
- Дребезг при работе сервомашинки
- Какой аккумулятор использовать для питания сервомашинок и ардуино?
- Тест сервы испортил ее)
########### Программирование
- управление сервой на заданный угол
- управление сервомашинкой по заданному алгоритму
- Плавное движение двух серво
- Управление двумя сервомашинками
- Прерывание и сервы
- Запоминание позиий серво
- аналоговый сервопривод
- Нужна помощь в работе с сервой
- Плавное движение сервомоторов
- Запуск серво кнопкой/микросвитчем
- Проблема отладки с использованием сервы
- Запись данных с сонора при разных положениях сервы.
- Задержка при использовании сервы
Предлагаю для наиболие активных тем как например Servo, создать такие заголовки.
Они должны будут избавить форум от дубликатов и упростить поиск по форуму.
Конечно в таких топиках нужно запретить обсуждение, держать их просто как содержание или краткре описане.
Если модераторам это предложение не по душе, прошу удалить топик полностью.
Очень даже нравится. Отличный пост. Если будет несколько таких топиков можно создать раздел навроде FAQ и туда их переносить и закреплять
Предлагаю автору дополнить пост сервой постоянного вращения и пришпилить тему в "аппаратные вопросы"
Предлагаю автору дополнить пост сервой постоянного вращения ...
А как же "Крутим сервой как мотором не остонавливаясь:" ? Или Вы что-то другое имели в виду?
Да... что-то я невнимательно прочитал пост :( Собственно, я имел в вилу не переделанную серву, а "настоящую". Может там особенности какие есть :) Я пока не знаю. Заказал себе такую из китая - через месяц придет, попробую. Может у меня будет что дополнить по этому поводу.
Ять это хреновое серво или ошибок в программе или сборке?
http://www.youtube.com/watch?v=GVqiONLR0Dk
программа
Ять это хреновое серво или ошибок в программе или сборке?
А вы сами можете на этом видео разглять "сборку"?
Ладно, предположим что у вас кнопки подключены от пина, к земле.
Тогда вам, вместо pinMode(...,INPUT) , нужно просто сделать digitalWrite(...,HIGH);
Ну и почитать тему Работа с кнопками. В помощь новичку.
ну у меня там резисторы не на 10КОм а на 5.6... ( У меня резисторов дофига но без подписей а каждый по маркировка проверять долго). Может быть что недостаточно для хай и лоу понижают?
ну у меня там резисторы не на 10КОм а на 5.6... ( У меня резисторов дофига но без подписей а каждый по маркировка проверять долго). Может быть что недостаточно для хай и лоу понижают?
Так что, может мне приехать к вам и посмотреть какие у вас резисторы? Или все-таки освоите чтение маркировки? Если "читать никак не хочется", то можно и тупо взять тестером померять. Пусть он скажет что у вас за резисторы.
Ну или плюнуть на резисторы и использовать внутрений подтягивающий (я уже подсказал как его включить). Только не забыть, что в этом случае нажатая кнопка это LOW, а не HIGH
Достаточно/недостаточно - это вам к телепатам нужно. Что куда подключили - неведомо, схемы - нет. Так что никто кроме вас - не скажет. Натыкайте, что-ли, Serial.print-ы, и выводите в лог куда вы там пытаетесь крутить серву. Если увидите что "команды правильные идут", а серва крутится не туда - тогда уже можно на серву грешить. Но пока, из той скудной инфы что вы дали - это похоже на безобразия с кнопками. А значит - вначале либо устранить безобразия, либо убедится что их нет. А значит - читать тему про кнопки. Возможно серву пока отложить в сторону временно. Вначале досконально совоить чтение кнопок, а уж потом братся за исполнительные механизмы.
P.S. И "про кнопки" - лучше в теме про кнопки спрашивать. Пусть эта тема останется "сервовской". Хотя, думаю, если внимательно прочитаете кнопочную тему - вопросы сами отпадут.
ну на данный момент я копировал схему подключения вот отсюда
http://arduino.ru/tutorials/button
Только с тем отличием что пока среди тех что были в пачке которую купил на 10кОм я не нашёл пока (там большая пачка самых разных, поэтому я как раз по маркировки и проверяю) поэтому ставлю на 5.6кОМ (самое близкое к нужном из того что перебрал).
Два резистора 5.6K включенных последовательно, дадут 11.2K
Натыкайте
Внутри ваших If-вов. И смотрите в сериал-монитор.
Совпадает нажатие кнопок, с цифрами в логе, или в логе появляются "левые"?
Ну и, обычные тестовые скетчи, из библиотеки сервы крутили? Если хотете проверить серву, так возмите скетч который ничего не имеет кроме сервы.
ДА хотя-бы из стартового поста возмите скетч "Воспользуемся этой библиотекой для изменения верхнего примера...." - нормально крутит?
Существуют сервы, которые могут позиционироваться от 0° до 180°, так же существуют сервы которые принимают позицию вала до 360°.
Добавлю для самых любознательных что сервы бывают еще и многооборотными, например из часто встречающихся это 4 или 6 оборотов. оборудованы вместо рычажка катушкой для веревочки-фала применяются обычно на парусных моделях но могут и не только там))
Здравствуйте, уважаемые! А есть ли особенности подключения серв к Due? Сервы на 5V, а контроллер на 3.3. Как подключать?
Здравствуйте, уважаемые! А есть ли особенности подключения серв к Due? Сервы на 5V, а контроллер на 3.3. Как подключать?
Тоесть а к другим ардуино вы сеовы прям напрямую к пинам подключали?
Не подключал еще, но управляющий PWM сигнал на соответствующий вход сервы, думаю, подать не проблема, они одного вольтажа. Не силовую же часть сервы сажать на контроллер.
А в первом посте темы не напрямую подключено?
Одна пятивольтовая серва вполне себе нормально крутится.
А то если вы не разделяете вышеуказанного мнения по подключению - чего ж раньше-то молчали?
Здравствуйте, уважаемые! А есть ли особенности подключения серв к Due? Сервы на 5V, а контроллер на 3.3. Как подключать?
я подключал, легко! Особо просто к Duemilanove 2009 главное чтоб БП справился ))
собственно не вижу пролемы запитать серву от +5 и дать ШИМ 3.3в с обзей землей. Должно работать.
Во! Т.е. ШИМ на 3.3В достаточно для сервы? Этого ответа я и добивался :)
Во! Т.е. ШИМ на 3.3В достаточно для сервы? Этого ответа я и добивался :)
ШИМ это чередование логических уровне HIGH и LOW.
У 3.3 вольтого устроства LOW - совпадают. Это 0v. Тут проблем нет.
В принципе, TTL устройства (работающие с 5-ти вольтовой логикой) имеют право считать уровнем HIGH, все что выше 2v. И обязанны считать HIGH все что выше 2.7v
То есть, если ардуина вам дала на вход череду сигналов 0V-3.3v-0V-3.3V, то серва по идее должна их точно так же распознвать как LOW-HIGH-LOW-HIGH как и в случае пяти-вольтовой ардуины. Так как 3.3v больше минимальных 2v и желательных 2.7v
Но... это то что должно быть "по стандарту", а вот как конкретная серва будет понимать 3.3v - тут только пробовать. В самом худшем случае... она "просто не услышит ШИМ". Но, думаю, 95% вероятность что все будет нормально и заработает без дополнительных согласований.
Самое главное - нигде в обратную сторону "не хомутнуть". Не вкатить +5v на входы трех-вольтовой ардуины.
Ну и саму серву, питать конечно лучше отдельно. 3.3V для питания ей может уже и не хватить.
Про серву постоянного вращения надо знать наперво одно - она существует. И продавцы в магазинах не всегда знают, что продаваемая ими серва - постоянного вращения. Можно попасть на 600р и вечер попыток заставить ее занять нужный угол))
куплено 2 одинаковые сервы, но при одном и том же коде одна из них вращается в обратную сторону, т.е. пишу
а одна из них крутится на 30 градусов по часовой стрелке, другая - на 30 градусов против часовой.
Шо делать?
если все правильно собрано, в смысле изначальное положение одинаковое, значит резистор неправильно в одном впаяли. перепаять 2 провода и должно решиться
вскрывать и перепаивать лень, сделаю для одной из них макрос на вычитание из 180 ;)
9 и 10 пины - это один таймер2. Вполне возможно, что разные библиотеки настраивают его по-разному. Не хочется, а придется перебрасывать что-то и куда-то. Увы.
Зачем советуют при рывках серво ставить на жёлтый провод конденсатор 1 мкФ? Он же растянет фронты, не? Или может для сервы надо и не PWM вовсе а гладкий аналоговый сигнал нужного уровня от 0 до Vcc? Было бы зашибись.
Зачем советуют при рывках серво ставить на жёлтый провод конденсатор 1 мкФ? Он же растянет фронты, не?
Вот тут облом, ей таки нужОн PWM. но при определенном почесывании репы возможно сделать попытку адаптировать и под аналоговый сигнал. Но самый верный вариант сделать преобразователь аналог-ШИМ тогда управляться будет любая серва. как вариант раскурочить сервотестер, подать аналоговое напряжение вместо среднего отвода потенциометра иии - "ну чем я не ниндзя?!"
Две ардуино UNO и ProMini.
3 сервопривода постоянного вращения и 8 с фикс. углом поворота.
UNO - принимает сигнал с 3 потенциометров, отдает ШИМ на серво пост. вращения + 3 кнопки переключения режимов работы программы.
ProMini - принимает сигнал с 4 потенциометров, отдает ШИМ на серво с фикс. углом поворота + вывод информации на LCD.
Связь между платами по UART (на 01 и 02 пинах).
Подскажите как правильно все это запитать.. от одного источника питания
ищу тему о контроллерах ESC, но как - то не нашел разжованной до конца. Столкнулся вот с проблемой: заваял 2560 для управлением котлом, написал меню и управлением ШД а также датчиками и.т.д, задачи турбины позложил на безколекторный двигатель. Вот сейчас все лежит на столе (двиг и AE-45A ESC) но я понял что вот взять какую то переменную и оперировать с ней чтоб турбина моя вращалась с разными скоростями наверное не получится((( Затык начинается из того что подключение противоречит питанию. Мне не надо чтоб с ESC было еще 5вольт, как тогда его подключить? Убрать красный? или черный? Белый подаст сигнал на него но в купе же навеное должен с "чем то" подать... как то так.
Да и сам скетч, как крутить двиг , имея переменную какю-то для изменения оборотов?
да просто все. нужна либа для сервы и управляется как сервой, чем больше значение тем быстрее будет крутится. + подашь будет стоять. 180 максимум оборотов. чтобы не использовать с esc 5В просто не подключай красный. белый и черный обязательно
Вот то то же!! только черный! А где же это было написанно?)))
подключился вот так . Но скетч теперь пилю с просторов, пока что без успехов((
с примеров ничего не получается( пикает по казному и все
да все просто. практически все сигналы подаются относительно земли, черный это земля
ты сервой когда нибудь управлял?
подключи мотор на 9 пин и попробуй. надо задержки корректировать. возможно больше надо. по памяти писал
а вообще у тебя странное отношение. ты думаешь если что то из модулей продается то тебе должны и инструкцию дать как этим пользоваться? не всегда есть инструкция, а либы уже под железо по даташиту пишутся, соответственно нужно знать как что работает
ну сервой проще конечно, а тут еще надо настроить драйвер, хотя вроде можно и без настройки
ноль(((
пропиликал кучей коротких сигналов и все.
Сервой еще ни разу не управлял( Пробовал из темы где крутится должна без остановок, результат такой же. Стартонул движек пару раз но отследить при каких именно манипуляциях несмог, хаотично как то. Я понимаю что сам контроллер еще наверное надо программировать но ничего не могу найти((
п.с по рампсу я 4 пин использую но разницы думаю нету. он реагирует пиликаньем на прошивки
у тебя то есть не ардуина? честно сказать не хочу даже разбираться можно ли этой платой как ардуиной пользоваться
я управлял так с калибровкой: 0 пик-пик 180 пик-пик 20-30 пиииииик и мотор заводился. вот сколько он пикает по времени надо и записать в код. хотя вроде как достаточно без калибровки. 0 пик-пик и 30 например подаем он заводится
Ардуино мега конечно! только сверху шилд с 3д принтера, но не суть, он рабочий шил этот. Пиликанье уже достало чесслово((
В общим из немецкого ресурса выдергнул вот это. После прошивки и уже включенном двигателе стартует если в мониторе отослать цифры. Потом надо ресет на ардуино тыкать и опять он крутит и опять тут же тормозис со свистом. Вот что удалось стабильно отловить(
пипец..
глаза на лоб...
в общим накопал то что регулятор надо еще программировать.
Он ходит между пунктами программ(судя по даташиту и пиликанью)
А вот что дальше с этим делать, КАК ЗАСТАВИТЬ тупо принимать частоту на входе и крутить движек?!!
ты меня не понимаешь. тебе бы помогла бы такая штука
Помогла бы конечно, но нет ее под рукой!
пробовал настроить этим скетчем , типо двигаю регулятором минимум и максимум (на пиндосском форуме что-то подобное)
когда он пропиликивает пункты меню. Ничего не дает! хрень полная!!!Делал это после калибровки min и max / Убил день, попортил глаза напроч!!!
НИКТО толком не помог(( А ты говоришь что я еще чтото не понимаю?!
Мож я просто уже зациклился и мне пристрелится хочется ибо времени нет сидеть, и так молился на телефон чтоб он сц..ка не звонил в течении дня, чтоб опять на работу не выдернули!
Мля..ть элементарное, по пунктам, как настроить регулятор
ESC AE-*
для работы с ардуино! НЕТ!
не истери, все норм, просто ты не имеешь опыта, вот и нет веры
завтра пиши разберемся. но если истерика продолжится не гони если что
Нарыл полупереведенную инструкцию к нему вроди как, мыслю переменным резистором запрограммировать, нужно только помоч разобраться, сколько ему надо чтоб он понял "газ на максимум", нейтраль и "газ на минимум"
не понял как сюда пдф пихать(
https://www.dropbox.com/s/powqmx9jppshdd3/plush_rus.pdf?dl=0
есть же пример knob к библиотеке серво. играйся пока не поймешь
запустил, позже опишусь.
Припаял переменный резистор, включил сначала без питания двиг (только ардуино), накрутил на резисторе максимум, включил питание двигателя, скрутил резистор на минимум. Он попиликал что все понял- и потом уже проворачивая резистор на максимум , движок завизжал. На максималку так и не вышел, побоялся за напечатаную турбину)) Заработал с этим скетчем:
интересно на сколько медленно можно закрутить безколлекторный двигатель? иначе как вращатель напечатаной турбины он не годится(((
турбину разрывает?
да он колбасится как то, думал идет рассинхронизация и снял все с движка, он нормально разогнался. Значит дисбаланс в теле турбины, значит чертеж не годится на такие обороты, значит зря потратил время, значит зря доверился "изобретателю" этой турбины на синквиверсе((
3д принтер далеко не совершенство, сейчас ищу альтернативный чертеж вентилятора по типу "улитка", он на много эффективней при меньших оборотах. Вот вопросик и вылез, как заставить безколлектроник крутится медленей (800-2000) примерно.
бк моторы имеют параметры kv. бери с более низким
а насчет крыльчатки мог взять импеллер. все подогнано, но и стоит
ноль(((
пропиликал кучей коротких сигналов и все.
Сервой еще ни разу не управлял( Пробовал из темы где крутится должна без остановок, результат такой же. Стартонул движек пару раз но отследить при каких именно манипуляциях несмог, хаотично как то. Я понимаю что сам контроллер еще наверное надо программировать но ничего не могу найти((
п.с по рампсу я 4 пин использую но разницы думаю нету. он реагирует пиликаньем на прошивки
Если у тебя готовый спидконтроллер (ESC) то программировать ни чего не надо. включаешь к нему двигатель, подаешь на контроллер питание. Управляющий провод (средний), на него подаешь шим прямо от выхода ардуины, относительно земли(черный). и все.. используешь библиотеку Servo и программируешь ШИМ.
Значение управляющего сигнала, как и для сервы от 700 до 2400 мс 1510=среднее положение, на случай если твой контроллер понимает реверс.
Вот вопросик и вылез, как заставить безколлектроник крутится медленей (800-2000) примерно.
Как уже правильно писали, у БК моторов есть КВ(KV) Это число оборотов на вольт, например если питаешь мотор с КВ=1000 от 12Вольт, то он сможет разогнаться до 12000 оборотов. Но стартуют эти моторы не с нуля, в контроллерах обычно зашит параметр минимума с которого можно стартовать, при этом он игнорирует управляющий запрос(ШИМ) если требуются более низкие обороты он просто не вращается, но когда потребность достигнет заданного минимума, резко стартует на этих оборотах(так написаны микропрограммы в ESC).
Для случаев если БК мотор требуется использовать в качестве сервопривода, регулятор делают отдельно и софт к нему конфигурят заливают из собственных соображений.
И кстати, моторы с низким KV имеют значительно меньшие токи потребления, но значительно более высокие крутящие моменты.
И кстати, моторы с низким KV имеют значительно меньшие токи потребления, но значительно более высокие крутящие моменты.
то то мне и надо))
вот только придется теперь перезаказывать, двиг. Мой оказывается на 2700Kv. Как для самолета, по идее надо искать автомобильный...
По подключению и настройке теперь уже понятно, опыт приходит со временем)
Прога для управлением двумя сервами актуальна . Ребята ставят зеркала с сервой (настройка с торпеды) на старые машины , а что с ними делать ? В сервисе дорого , купить управление . А самому поставить пару джойстиков , и пару дешёвых ардуинок по 50 рублей , джойстика с Китая по 25 . Итого 100 рублей сам блок получиться . Скетчей в инете не мерено . Ну и руки приложить немного . Серва рулит )