Плавное серво
- Войдите на сайт для отправки комментариев
Пнд, 30/01/2012 - 16:23
Добрый день!
Возможно ли заставить двигаться серву плавно?
Заранее благодарю!
Добрый день!
Возможно ли заставить двигаться серву плавно?
Заранее благодарю!
c помощью этой ( http://gigapeta.com/dl/2101947ac2469e ) библиотеки можно регулировать скорость поворота серво.
Speed=0: полная скорость
Speed=1: самая медленная скорость
Speed= 255 самая быстрая скорость как 0..
P.S. нежелательно использовать две библиотеке одновременно VarSpeedServo.h и Servo.h!
Если скетч не компилируется и выдает ошибки. Нужно открыть файл VarSpeedServo.cpp найти и заменить <WProgram.h> на <Arduino.h>
Спасибо-заработало, но по поведению сервы, библиотека немного глючная.
Вопщем нормальная библиотека, для меня пойдёт, правил фаил в ворлд паб, единственное при старте скетча серва уходит на 90гр и от туда в ноль ползёт у меня. Спасибо!!
У меня работает без проблем.
Если в дальнейшем - по кругу работает то без проблем, всё отрабатывает а при включении мк - дергается со всей дури и потом по программе идёт выполнение скетча, блин может если интересно Вам видео скинуть? Меня так немного не устраивает - у меня фотик на платформе стоит. И такие резкие манёвры ему вредны.
Так любая серва при включении совершает паразитное движение. Используйте другой привод - шаговик или dc мотор
Я попробую немного по другому - отключаю питание программно и потом подключение и выполнение программы.
И поставьте подтягивающий резистор к земле наминалом от 1кОм до 50кОм (10кОм оптимально), что бы серва не дергалась при старте МК.
И поставьте подтягивающий резистор к земле наминалом от 1кОм до 50кОм (10кОм оптимально), что бы серва не дергалась при старте МК.
Резистор на управляющий провод?
Да.
Попробовал в примере knob - всё равно градусов на 5 - 10 дёргается, зараза.
Попрбуйте к питанию подтянуть или так попробовать еще можно:
Всё равно дёргается. Для меня это не критично, но хочется чтобы всё было красивенько. Я и 20 и 43 ком ставил.
У меня сейчас вот так сделано, доволен на 100%, но надо скорость поменьше, никаких паразитных дёрганий нет
Это кусок кода от панорамной головки. Но при переключении по времени на другой угол, серва работает на полную мощъ.
Сработало на ура, но есть недостаток- если сама серва после выкл питания находиться в не 0 позиции, то она туда ломанётся со всей дури при подаче питания, а если она находится в 0 позиции то всё в ажуре.
Вот рабочий скеч на пан голову....
А как при момощи этой библиотеки заставить несколько серв двигаться одновременно?
то есть Arduino движет сервами по очереди. Почитал форумы, понимаю, что как-то с помощью функции millis() , которой надо заменить delay(). На форумах вводятся переменные Unsigned long, которые при помощи функции millis() фиксируют определеные отсечки времени с момента начала работы, сравнивая которые я получают временные промежутки, а что с полученными значениями дальше делать, чтобы сервы работали одновремено, не пойму.
А как при момощи этой библиотеки заставить несколько серв двигаться одновременно?
то есть Arduino движет сервами по очереди. Почитал форумы, понимаю, что как-то с помощью функции millis() ,
Это Вам надо смотреть "как включить сигнал PWM одновременно на нескольких пинах". Ведь "управление" сервой идет именно в виде PWM определенной скважности. http://arduino.cc/en/Reference/ServoAttach - там всего-то два пина.
Не уверен, что так.
Http://arduino.ru/Reference/Library/Servo - "Библиотека Servo позволяет одновременно управлять 12-ю сервоприводами на большинстве плат Arduino и 48-ю на Arduino Mega." - у меня Mega
Одновременное двиежение серв при помощи библиотеки servo.h достаточно подробно описан тут:
http://arduino.ru/forum/programmirovanie/dve-servy#comment-25343, но мне не удалось достичь такого плавного движения, как при помощи библиотеки VarSpeedServo.h, но как я понял в VarSpeedServo.h нельзя применить функцию servo.write.
Ведь "управление" сервой идет именно в виде PWM определенной скважности.
НЕТ !
Серву не интересует скважность. Она любит длительность импульса. Хоть раз в час, но не чаще 20 миллисекунд. И на каждый импульс она дёргается туда куда её направили.
c помощью этой ( http://gigapeta.com/dl/2101947ac2469e ) библиотеки можно регулировать скорость поворота серво.
Speed=0: полная скорость
Speed=1: самая медленная скорость
Speed= 255 самая быстрая скорость как 0..
P.S. нежелательно использовать две библиотеке одновременно VarSpeedServo.h и Servo.h!
Как можно по простому заменить delay() чем нибудь, что бы код программы не останавливался? Может в библиотеке VarSpeedServo.h предусмотрено что нибудт подобное?
P.S. Нужны паузы между паворотами влево-вправо, но без остановки программы.
Использовать millis()
http://arduino.ru/tutorials/BlinkWithoutDelay
http://robocraft.ru/blog/arduino/385.html
Использовать millis()
http://arduino.ru/tutorials/BlinkWithoutDelay
http://robocraft.ru/blog/arduino/385.html
Спасибо, то, что нужно! Чутка внёс свои изменения и работает как надо :)
Доброго времени суток.
А как сюда джойстик прописать? Что бы при небольшом отклонении серва крутилась совсем медленно, а при максимальном серва крутилась со средней скоростью.
наверное для этого вам понадобится что то похожое на ПИД-алгоритм. То есть вам нужно измерять за какое время и насколько изменился сигнал от джойстика. Исходя из этих данный генерировать и давать сигнал на серву.
Пожалуйста, помогите прописать джойстик, а то выдаёт ошибку. Вот код целиком:
Постепенно разобрался в коде, получилось залить. Но получилось, немного не то. Серво синхронизируется с джойстиком. А нужно чтобы при возврашении джойстика в первоночальное положение, серва не следовала за джойстиком а оставалась на месте.
Примерно как тут:
https://youtu.be/vwNfLNn8On8?t=7m50s
Чёт ошибку выдаёт (
myservo >> myServo
Если имелось в виду изменить все myservo, на myServo, то я изменил, но ошибка всё равно осталась. Прошу не судить строго, я только недавно приступил к изучению ардуино..
Лог ошибки:
Arduino: 1.8.1 (Windows 8.1), Плата:"Arduino Nano, ATmega328"
для связки серва-джойстик VarSpeedServo не нужна
достаточно штатной библиотеки
Я так понял, что VarSpeedServo нужна для того что бы достичь медленного и плавного поворота сервы.
попробуй в конец добавить }
Добавил }, загрузилось. Но серва реагирует только на одно положение джойстика - в лево. При нажатии на джойстике в право, серва не реагирует. То есть счас серва заняла крайнее положение, и не крутится никуда..
ну чтобы крутилось и в другую сторону - давайте 10$ или думаете сами как написать :)
Подскажите как можно регулировать скоростью серво или шагового двигателя потенциометром на ардуино. Везде описано как с помощью потенциометра можно задавать углы, а скорость задаётся постоянной. Например мне надо повернуть вал на 30 гродусав в одну сторону затем обратно и при этом возможность потенциометром изменять скорость этого перемещения
Серва не предусматривает возможности изменения скорости перемещения.
Единственное, что можно сделать - двигать ее самому маленькими шажками с нужной средней скоростью.
Нет это не подходит Нужно чтобы скорость менялась потециометром и вращение на определённые углы было автоматическое Я смотрел шаговые двигатели там тоже я не нашёл ничего подобного Также скорость можно только назначить программно один раз и менять тоже в программе Но потенциометром негде не видел. Возможно подскажете Или это реализовать можно только с двигателем постоянного тока Но здесь проблема во вращениях на определённые углы, не желатетельно устанавливать дополнительные датчики перемещения
Подходит это Вам или не подходит, но другого способа нет.
Если не подходит, выберите себе другую задачу.
У шагового двигателя, к слову, вообще нет скорости как таковой, а есть только темп шагов, который, кстати, можно произвольно менять на свое усмотрение, в том числе делать плавные ускорения и замедления. Но все равно он вращается прерывисто. То же самое можно сделать и с сервой, если ее скорость перемещения нужно замедлить.
Потенциометр - это вообще отдельное устройство. С двигателем он никак не связан. Любую связь, какая Вам нужна, следует реализовывать программно.
Так всеже возможно потенциометром менять темп шагов в шаговом двигателе и обеспечить затем автоматический ход вала двигателя на определённые углы. Меня в принципе устроит такое движение вала. Вы не подскажете как это можно реализовать или посоветуйте где такие идеи можно посмотреть
По сути у Вас три различных вопроса:
1. Считывание данных с потенциометра.
2. Управление двигателем (я так понял, с типом Вы еще не определились).
3. Функция, преобразующая показания потенциометра в управляюще воздействие на двигатель.
По первым двум вопросам Вам нужен практикум по Ардуино, по третьему - математика + программирование. Ну и все это связать между собой - тоже программирование.
Проект можно реализовать на любом типе двигателей: сервопривод, шаговый, постоянного тока, но для последнего понадибится еще энкодер, а для шагового, вероятно, концевик (если есть необходимость не просто поворачиывть на определенный угол от текущего, а существует некоторое нулевое значение угла).
Я знаю как подключать потенциометр и знаю что это другое устройство.Тип двигателя не имеет значения лишь бы выполнялись условия менялась скорость вращения двигателя или шаг шагового двигателя потенциометром плавность хода не имеет значения и были повороты на определённый угол Я смотрел пример скетч приводимый здесь но к сожалению серво работает в этом примере не так Смотрел другие варианты, но нигде примеров мне нужных не нашёл Поэтому и решил обратится сюда может мне посоветуют где найти примеры таких скетчев .Или их не существует и надо эту программу создавать Двигатель постоянного тока хочу применить в последнюю очередь так как с ним могут возникнуть проблемы с углами поворота тут с ними сложней хотя у меня пример как реализовать на нём мой проект есть