Попробовал библиотеку Servo.h для Arduino, но как то она мне не понравилась, написал свою процедуру. И накидал по быстрому программку для ПК
Планирую в дальнейшем прикрутить сервопривод к камере и кликнув по изображению камера будет смотреть в эту точку
#define MIN 600 // минимальное положение сервы
#define MAX 2400 // максимальное положение сервы
#define STEP_ADD 10 //шаг сервы на 1 градус
#define SERVO_1 13 //управляющий выход для первой сервы
int step_on = (MAX-MIN)/2+MIN; //среднее положение сервы
Ты маньяк...;) Может конечно пригодится и такое устройство.
02.11.2009, 01:58
Chip
Re: Управление сервоприводом.
Еще бы с функцией распознавания разобраться , что бы камера могла сама за объектом следить :)
18.11.2009, 15:23
Rush
Re: Управление сервоприводом.
А схема подключения будет?
18.11.2009, 15:56
Chip
Re: Управление сервоприводом.
Да вроде там все просто подключается , красный +5в, черный - GND и послендий проводок управление сервой на цифровой выход Ардуино
В шапке схема.
18.11.2009, 16:05
Rush
Re: Управление сервоприводом.
т.е. серво цифровое должно быть :( ?
у меня просто есть только аналоговое серво
18.11.2009, 16:31
Chip
Re: Управление сервоприводом.
Без разницы , принцип управления у них одинаковый.
Я пробовал как на цифровых так и на аналоговых сервах
18.11.2009, 16:54
Rush
Re: Управление сервоприводом.
Заработало:) спасибо!
только в шапке картинка цифровой выход подключен на D13 а используется D2
18.11.2009, 19:45
Chip
Re: Управление сервоприводом.
Исправил ко сразу как выложил схему.
Скорее всего ты код залил раньше чем я схему выложил.
22.11.2009, 00:19
bma83
Re: Управление сервоприводом.
А в какой программе пишите программу для винды?(если не секрет) и исходник программы можно посмотреть, в образовательных целях.
22.11.2009, 15:52
Chip
Re: Управление сервоприводом.
Пишу в Delphi.
В исходнике значения с трекбара посылаю в USB и все.
23.11.2009, 10:36
bma83
Re: Управление сервоприводом.
Если честно не силен в программировании, просто хочу понять принцип программирования для USB, хочу с помощью HiAsm сделать прогу для управления сервами. Уже нашел как подключаться к Arduino и на нужный порт выходить но как им управлять не вкурю.
23.11.2009, 12:40
Chip
Re: Управление сервоприводом.
В программировании USB разбираться не стоит, тебе нужно работать с виртуальным com port.Для понимания принципа работы сервы нужно скетч смотреть. А программа тупо шлет через ком порт к Кардуидо значение от 600 до 2400
23.11.2009, 13:09
Mr.DIRTer
Вложений: 1
Re: Управление сервоприводом.
Раз уж тут такой разговор завязался, не сочтите за невежество, хочу задать маленький вопрос. Как вы подключаете библиотеку FTChipID.dll? Просто когда я пытаюсь засунуть её в проект мне выдает вот такое:
Спасибо.
23.11.2009, 13:22
Chip
Re: Управление сервоприводом.
У тебя в проекте не добавлен компонент сом порта.
23.11.2009, 13:57
Mr.DIRTer
Re: Управление сервоприводом.
Странно. У меня добавлен System.IO.Ports - который, по моему и отвечает за работу с COM, и с помощью которого я спокойно общаюсь с com портом ардуино. А с помощью dll я всего лишь хочу узнать номер порта ардуины.
Проблема решилась. Оказывается для VB используется свой dll - FTChipIDNet.dll Спасибо за помощь.
Что-то с моими руками не то, только вроде бы нашел выход, сразу новая ошибка приехала:
При загрузке стандартного примера и подключении библиотеки выдает:
Цитата:
Не удается загрузить DLL "FTChipID.dll": Не найден указанный модуль. (Исключение из HRESULT: 0x8007007E)
Порывшись в инете нашел португальца и русского которые сталкивались с той же проблемой, но русский похоже на неё забил, а португалец сказал что "проблема решена" и не сказал как... http://www.portugal-a-programar.org/...?topic=35281.0
24.11.2009, 00:55
SBorovkov
Re: Управление сервоприводом.
Цитата:
Сообщение от Mr.DIRTer
Раз уж тут такой разговор завязался, не сочтите за невежество, хочу задать маленький вопрос. Как вы подключаете библиотеку FTChipID.dll? Просто когда я пытаюсь засунуть её в проект мне выдает вот такое:
Спасибо.
Ты видимо пытаешься подключить FTChipID.dll как COM сервер. А она является обычной dll, COM не поддерживает. COM в данном случае - не порт, а технология создания объектов, вызова методов и передачи параметров. Для использования FTChipID.dll ее не надо включать в объект, надо ее использовать в коде, вызывая напрямую функции из нее, предварительно
зы. Только я не совсем уверен, что тебе надо работать с этим чипом напрямую. Чаще всего достаточно работы с COM портом, а для этого достаточно стандартных функций.
25.11.2009, 11:13
Mr.DIRTer
Re: Управление сервоприводом.
Цитата:
Сообщение от SBorovkov
Ты видимо пытаешься подключить FTChipID.dll как COM сервер. А она является обычной dll, COM не поддерживает. COM в данном случае - не порт, а технология создания объектов, вызова методов и передачи параметров. Для использования FTChipID.dll ее не надо включать в объект, надо ее использовать в коде, вызывая напрямую функции из нее, предварительно
зы. Только я не совсем уверен, что тебе надо работать с этим чипом напрямую. Чаще всего достаточно работы с COM портом, а для этого достаточно стандартных функций.
Библиотека то уже подключилась, ошибок в коде ДО компилирования нет, но при компилировании выдается ошибка, которую я написал выше. Стандартных функций разумеется для общения хватает, но не хочется делать в программе список "выберите ком порт устройства", если его можно определить из самой программы. Спасибо что ответили.
25.11.2009, 19:57
SBorovkov
Re: Управление сервоприводом.
Цитата:
Сообщение от Mr.DIRTer
Библиотека то уже подключилась, ошибок в коде ДО компилирования нет, но при компилировании выдается ошибка, которую я написал выше. Стандартных функций разумеется для общения хватает, но не хочется делать в программе список "выберите ком порт устройства", если его можно определить из самой программы. Спасибо что ответили.
Есть другой способ - можно тупо пооткрывать все доступные порты и попытаться определить - туда ли ломанулся. Если железка отвечает как-то на запрос, то по ответу можно разобраться, где нужная железка.
28.12.2009, 20:29
Wave
Re: Управление сервоприводом.
оптимальный вариант использования - это регулирования встроенным кондиционером
3 серва регулируют 3 ручки на панели приборов и крутят кондиционер в нужном направлении =)
30.12.2009, 02:15
KotKin
Re: Управление сервоприводом.
Господа.
Может быть поможете с возникшей проблемкой? Делаю моторезированный дисплей. По осям стоят 2 серво, один стоит нормально, другой перевернут вращается в другую сторону (!!!)
Пишу отдельно скетч для каждого серво все нормально работает. Как только пишу для обеих ничего не получается.
Пробовал писать по методике как в этой темке, то они начинаю дергаться и нет никакой плавности. Пробовал с библиотекой "servo.h". Там как только подключаешь второй серво позиционирование сразу же сбивается :(
Опыта явно не хватает. Писал по аналогии с разными примерами. Помогите сделать эту приблуду, 3-й день сижу уже на одном месте.
30.12.2009, 14:03
Chip
Re: Управление сервоприводом.
Нужно инвертировать сигнал step_on для второй сервы
30.12.2009, 15:22
KotKin
Re: Управление сервоприводом.
ну правильно. есть пределы допустим от 600 до 2000 микросекунд для управления от положения закрыто до открыто. Вторая серво у меня управляется с одинаковым шагом в обратную сторону. Только правда другой переменной. Chip, может я не совсем правильно тебя понял.
Сбой работы с первой серво со встроенной библиотекой наблюдается если вначале просто вписать servo2.attach(3);. Сам ничего не пойму почему так? ведь остальное остается без изменения и касается только servo1, а правильно позиционироваться она уже перестает.
08.01.2010, 20:30
KotKin
Re: Управление сервоприводом.
Никто еще из запоя не вышел чтоб помочь? а то у меня мыслей не хватает. :(
Отдал другому человек попробовать. у него тоже не получается. Говорит что тоже самое получается. Дергается-тормозит.
З.ы.: По ходу пъессы спалил каким то чудом Мегу328. под рукой была мега8. Залил бутлоадер ардуино. Разница ощутима. Загружаю скетч в контроллер и жду секунд 10 начала выполнения. Раньше раза в 3-4 меньше надо было ждать. Так должно быть?
09.01.2010, 05:30
SBorovkov
Re: Управление сервоприводом.
по поводу серв:
Если ардинка не должна ничего делать кроме движения серв, спокойно выдавай вручную импульсы на серву. Длительность импульса на серву от 0.8 мс до 2.4 (по-моему) мс. Между началами импульсов пауза порядка 20 мс. Последнее время может быть заметно больше 20мс, от этого зависит быстродействие сервы.
Посему делаешь ручную генерацию - поставил ногу в 1 - подождал микросекунды, скинул ногу. Поставил вторую - подождал - скинул. Потом тупо пауза 20мс.
2. Скорее всего мега 8 имеет не 16 МГц резонатор. По умолчанию мега8 имеет 1 мегагерц от внутреннего генератора, насколько я помню. Максимум - 8 МГц от внутреннего генератора, но там стоит по умолчанию делитель. Вообще быстродействие этих кристаллов на одной и той же частоте одинаковое. Более того, зачастую мега8 будет работать быстрее и код будет требовать меньше места из-за особенностей расположения регистров.
И еще - учти, что фьюзы надо для разных контроллеров разные задавать. Может дело в этом.
зы. Да, еще... По моему опыту спалить мегу довольно сложно. У нее можно сжечь ноги, мне даже удавалось сжечь часть еепрома (типа каждый нулевой бит в каждом 8 байте), но сжечь в ноль лично мне не удалось ни разу.
09.01.2010, 13:20
KotKin
Re: Управление сервоприводом.
Цитата:
Сообщение от SBorovkov
по поводу серв:
Если ардинка не должна ничего делать кроме движения серв, спокойно выдавай вручную импульсы на серву. Длительность импульса на серву от 0.8 мс до 2.4 (по-моему) мс. Между началами импульсов пауза порядка 20 мс. Последнее время может быть заметно больше 20мс, от этого зависит быстродействие сервы.
Серво вот такая HS-125MG. Питаю от 6В. Время реакции должна быть нормальная.
Когда отлаживал углы, управлял по одной серво отдельно. Для плавности хода изменял угол на 1 градус и делал задержку в 50мс. Все выглядело замечательно. Был уверен что когда их будет две, задержку уменьшу ну пусть даже до 10-20мс. Но не тут то было. Ставил задержку больше, чтоб посмотреть как они себя ведут в паре. И такое ощущение что они тянут в разные стороны (крышка дергается) Думал так и есть и просто не свел углы поворота. Убрал команду записи во вторую серво и первая (одна) поворачивается дерганьем. Такое ощущение что задержка между импульсами не 20мс а 200. Вот и хочу что кто нить предложил свой вариант.
Цитата:
Посему делаешь ручную генерацию - поставил ногу в 1 - подождал микросекунды, скинул ногу. Поставил вторую - подождал - скинул. Потом тупо пауза 20мс.
Так и делаю
Цитата:
2. Скорее всего мега 8 имеет не 16 МГц резонатор. По умолчанию мега8 имеет 1 мегагерц от внутреннего генератора, насколько я помню. Максимум - 8 МГц от внутреннего генератора, но там стоит по умолчанию делитель. Вообще быстродействие этих кристаллов на одной и той же частоте одинаковое. Более того, зачастую мега8 будет работать быстрее и код будет требовать меньше места из-за особенностей расположения регистров.
Дык фюзы я прописал для работы с внешним резонатором, а на ардуино он 16Мгц. Разницы в скорости работы контроллера я не ощутил. Все идентично. Но вот перед стартом большаааая пауза.
Цитата:
И еще - учти, что фьюзы надо для разных контроллеров разные задавать. Может дело в этом.
зы. Да, еще... По моему опыту спалить мегу довольно сложно. У нее можно сжечь ноги, мне даже удавалось сжечь часть еепрома (типа каждый нулевой бит в каждом 8 байте), но сжечь в ноль лично мне не удалось ни разу.
Сам не знаю как получилось. Ничего не коротил. Вечером убрал на полку, на следующий день достал и уже не работает. Начал греться как кипятильник.
09.01.2010, 14:45
SBorovkov
Re: Управление сервоприводом.
Ты пока сними сервы, добейся, чтобы они не зацепленные друг за друга физически начали работать как надо. Я так понял, что сейчас они у тебя в готовом устройстве стоят.
Хотя, если честно, я бы не рекомендовал такую работу серв. Это не мотор-редукторы, а умные механизмы. Представь, что у тебя по какой-либо причине возникло рассогласование между сервами. Пусть небольшое, порядка 2-3 градусов в какой-либо зоне. Для этого достаточно плохо работающего переменника в серве. Дальше сервы начнут борьбу друг с другом.
давай код, мож разберемся. Лучше - код всего проекта, упрощенного до упора.
Еще: 6 вольт для AVR - это перебор, у него 6 вольт - абсолютный максимум напряжения, выше которого он может банально сгореть. Серва на управляющий вывод не дает напряжение, но всякое бывает. Выводы рядом... Если есть возможность, лучше питай сервы от 5 вольт, усилие уменьшится и скорость тоже, но насколько я понимаю, в данном случае это не очень принципиально.
Еще - учти, что когда ты монитор доводишь до крайнего положения, импульсы на сервы надо либо прекращать (тем самым выключая серву), либо включать на некоторое время, а затем делать большую паузу. Дело в том, что включенная серва (на которую идут импульсы) при малейшем отклонении начинает пытаться возвращать качалку в правильное положение. При этом переменный резистор внутри сервы находится почти в одном и том же положении и относительно быстро стирает покрытие. В результате серва через некоторое время начинает "дрожжать", контакт пропадает и серва пытается найти нужное положение. Этим она стирает остатки покрытия.
09.01.2010, 15:41
KotKin
Re: Управление сервоприводом.
Цитата:
Сообщение от SBorovkov
Ты пока сними сервы, добейся, чтобы они не зацепленные друг за друга физически начали работать как надо. Я так понял, что сейчас они у тебя в готовом устройстве стоят.
Мощности серво хватает тянуть рамку без монитора и отключенную серво. Но когда ставишь монитор вес существенно увеличивается. Для запаса мощности я и воткнул вторую (в холодное время одной тем более хватать не будет).
Нормальной работы каждой серво я добился в собранном девайсе без монитора подключая их по одной и даже померил углы.
Цитата:
Хотя, если честно, я бы не рекомендовал такую работу серв. Это не мотор-редукторы, а умные механизмы. Представь, что у тебя по какой-либо причине возникло рассогласование между сервами. Пусть небольшое, порядка 2-3 градусов в какой-либо зоне. Для этого достаточно плохо работающего переменника в серве. Дальше сервы начнут борьбу друг с другом.
это самое страшное. но они часто так работать не будут, думаю что должно хватить на долго.
Цитата:
давай код, мож разберемся. Лучше - код всего проекта, упрощенного до упора.
Еще: 6 вольт для AVR - это перебор, у него 6 вольт - абсолютный максимум напряжения, выше которого он может банально сгореть. Серва на управляющий вывод не дает напряжение, но всякое бывает. Выводы рядом... Если есть возможность, лучше питай сервы от 5 вольт, усилие уменьшится и скорость тоже, но насколько я понимаю, в данном случае это не очень принципиально.
AVR питаю строго от 5В. а сервы от 6В для максимального усилия!!!
Еще - учти, что когда ты монитор доводишь до крайнего положения, импульсы на сервы надо либо прекращать (тем самым выключая серву), либо включать на некоторое время, а затем делать большую паузу. Дело в том, что включенная серва (на которую идут импульсы) при малейшем отклонении начинает пытаться возвращать качалку в правильное положение. При этом переменный резистор внутри сервы находится почти в одном и том же положении и относительно быстро стирает покрытие. В результате серва через некоторое время начинает "дрожжать", контакт пропадает и серва пытается найти нужное положение. Этим она стирает остатки покрытия.
Держать на серво моник постоянно это не реально конечно. Они используются для открытия моника (время работы секунды 2-3). Дальше включается 3-я серво которая подставляет палец под упор. (это где то еще 1 секунда). Все дальше все серво отключаются.
Для того чтоб моник убрать все происходит в обратном порядке.
09.01.2010, 15:43
KotKin
Re: Управление сервоприводом.
Попробую все таки вытащить серво из механизма чтоб исключить механическую нагрузку.
09.01.2010, 18:24
SBorovkov
Re: Управление сервоприводом.
круто ты к вопросу подошел, уважаю.
Я помню отлаживал библиотеку серв на с++, без среды ардуины. Замучался - мини серва работает, а полнормазмерную серву колбасит, потребление у них огромное, КРЕН в перегрев через 2-3 секунды уходил. На те же контакты подключаю мелкую - все в шоколаде, крутится туда-сюда. Осциллографа, естественно, нет. Сидел в дебаггере, часа три убил на это дело. А оказалось все просто - два канала серв на одну ногу слали сигналы. Импульсы шли то короткие, то длинные (сервы должны были быть в разных положениях). И минисерва это дело фильтровала как-то, а полноразмерная - нет. Вот и на каждом импульсе (под 100 раз в секунду) она то в одну сторону мотор двинет на полную, то в другую.
А время 3-5 секунд (с запасом) на каждое открытие монитора - это вечная конструкция получится. Серв (если они нормальные, а у тебя хорошие сервы) хватает как минимум на год постоянных полетов. А в полете импульсы на каждую серву идут постоянно.
12.01.2010, 19:54
KotKin
Re: Управление сервоприводом.
Вроде бы все получилось. крышка открывается и закрывается. осталось отладить чтоб срабатывала от ACC.
12.01.2010, 20:26
Chip
Re: Управление сервоприводом.
Вот и отлично, мне меньше заморочек :)
12.11.2011, 04:59
Mastar
Re: Управление сервоприводом.
У меня Ардуино Мега.
1. Подскажите, а есть ли простой механизм в ардуино для передачи приходящего сигнала на цифровые 8 входов, мог в точности выдавать на 8 цифровых выходов исходные сигналы? Простой, т.к. ардуина будет под завязку загружена работой с GPS и OSD.
2. Аналогично первому вопросу, но при пропадании сигнала на входе любого из восьми или перехода в аварийный режим, нужно управлять положением серв, но уже в автоматическом режиме самой ардуиной.
Что-то вроде Fail-safe, но там возврат в запрограммированную точку и мне не подходит.
Если уже было подобное, направьте.
12.11.2011, 19:17
Chip
Re: Управление сервоприводом.
А как это связано с сервой?
12.11.2011, 20:26
Mastar
Re: Управление сервоприводом.
Цитата:
Сообщение от Chip
А как это связано с сервой?
С выхода передатчика приходят 8 сигналов управления сервами, но не сразу на сервы, а через ардуину. Типа повторителя, а при аварии ардуина берет на себя управление.
12.11.2011, 20:28
Mastar
Re: Управление сервоприводом.
Меня повторитель интересует.
12.11.2011, 21:09
Chip
Re: Управление сервоприводом.
Например вот так я делаю мост для 6 бит на Carduino Nano
Думаю что смысл понятен, на меге портов очень много и по примеру написать сам сможешь
PHP код:
//http://www.compcar.ru/
unsigned char Byte_Port;
void setup()
{
for (int i=8; i < 14; i++) pinMode(i, INPUT);
for (int i=14; i < 20; i++) pinMode(i, OUTPUT);
}
void loop()
{
PORTC = PINB;
}
14.11.2011, 19:40
Mastar
Re: Управление сервоприводом.
Спасибо, не знал такой комбинации.
Так если оставить только это, возможно все красиво заработает, а если там будет основная программа с задержками, прерываниями и общение по сериал, то я сомневаюсь.
Однако вечером проверю.
14.11.2011, 20:10
Chip
Re: Управление сервоприводом.
Можно реализовать копирование порта по прерыванию или поставить копирование после каждой функции. При копировании порта съедается всего 4 такта, что не должно повлиять на производительность твоего скетча
14.11.2011, 20:20
Mastar
Re: Управление сервоприводом.
Цитата:
Сообщение от Chip
Можно реализовать копирование порта по прерыванию или поставить копирование после каждой функции
Я тоже про это подумал, но не могу принять решение, что поставить в условие прерыванию.
Тактировать с частотой ниже 10 кГц не получится, ведь там по входу 0,6 мс - 2,4 мс и погрешность сразу полезет.
Все таки наверно, я вернусь к старому проверенному, правда не совсем точному pulseIn(pin, value)